{"id":13485168,"url":"https://github.com/denosaurs/denon","last_synced_at":"2025-05-15T23:05:09.246Z","repository":{"id":40335727,"uuid":"233159045","full_name":"denosaurs/denon","owner":"denosaurs","description":"👀 Monitor any changes in your Deno application and automatically restart.","archived":false,"fork":false,"pushed_at":"2024-03-21T13:29:34.000Z","size":497,"stargazers_count":1106,"open_issues_count":27,"forks_count":45,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-05-06T10:32:47.422Z","etag":null,"topics":["daemon","deno","denon","hacktoberfest","restart","runner","scripts","typescript","watch","watcher"],"latest_commit_sha":null,"homepage":"https://deno.land/x/denon","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denosaurs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"open_collective":"denosaurs","github":"denosaurs"}},"created_at":"2020-01-11T01:32:24.000Z","updated_at":"2025-04-23T06:54:14.000Z","dependencies_parsed_at":"2024-04-13T14:38:50.725Z","dependency_job_id":null,"html_url":"https://github.com/denosaurs/denon","commit_stats":{"total_commits":334,"total_committers":28,"mean_commits":"11.928571428571429","dds":0.5898203592814371,"last_synced_commit":"c259f37bf2b00978a4074e12e6516259883ba155"},"previous_names":["eliassjogreen/denon"],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denosaurs%2Fdenon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denosaurs%2Fdenon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denosaurs%2Fdenon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denosaurs%2Fdenon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denosaurs","download_url":"https://codeload.github.com/denosaurs/denon/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254084412,"owners_count":22011905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daemon","deno","denon","hacktoberfest","restart","runner","scripts","typescript","watch","watcher"],"created_at":"2024-07-31T17:01:48.663Z","updated_at":"2025-05-15T23:05:09.218Z","avatar_url":"https://github.com/denosaurs.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n\t\u003cbr\u003e\n    \u003cimg src=\"assets/denon-horizontal.svg\"\u003e\n\t\u003cbr\u003e\n \u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/denosaurs/denon/stargazers\"\u003e\n    \u003cimg alt=\"Denon Stars\" src=\"https://img.shields.io/github/stars/denosaurs/denon?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAEFCu8CAAAABGdBTUEAALGPC/xhBQAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAHKADAAQAAAABAAAAHAAAAABHddaYAAABxElEQVRIDe2Wv04CQRDGAQuoTKQ2ITyADZWVJZWV+gJYWBNqKh/C16CRBlprWxsTE2NJfABNOH9z7Gzm2Nv7A8TCOMnHzs1838ze3e4ejUbMkiRZS64lP1x8MjTFr2DQE6Gl2nI+7POARXAmdbas44ku8eLGhU9UckRliX6qxM9sQvz0vrcVaaKJKdsSNO7LOtK1kvcbaXVRu4LMz9kgKoYwBq/KLBi/yC2DQgSnBaLMQ88Tx7Q3AVkDKHpgBdoak5HrCSjuaAW/6zOz+u/Q3ZfcVrhliuaPYCAqsSJekIO/TlWbn2BveAH5JZBVUWayusZW2ClTuPzMi6xTIp5abuBHxHLcZSyzkxHF1uNJRrV9gXBhOl7h6wFW/FqcaGILEmsDWfg9G//3858Az0lWaHhm5dP3i9JoDtTm+1UrUdMl72OZv10itfx3zOYpLAv/FPQNLvFj35Bnco/gzeCD72H6b4JYaDTpgidwaJOa3bCji5BsgYcDdJUamSMi2lQTCEbgu0Zz4Y5UX3tE3K/RTKny3qNWdst3UWU8sYtmU40py2Go9o5zC460l/guJjm1leZrjaiH4B4cVxUK12mGVTV/j/cDqcFClUX01ZEAAAAASUVORK5CYII=\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/denosaurs/denon/actions\"\u003e\n    \u003cimg alt=\"Denon Workflows\" src=\"https://img.shields.io/github/workflow/status/denosaurs/denon/check?logo=github\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/denosaurs/depsbot\"\u003e\n    \u003cimg alt=\"Denon Dependencies\" src=\"https://img.shields.io/github/workflow/status/denosaurs/denon/depsbot?logo=dependabot\u0026logoColor=white\u0026label=dependencies\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/denosaurs/denon/releases/latest/\"\u003e\n    \u003cimg alt=\"Denon Releases\" src=\"https://img.shields.io/github/v/release/denosaurs/denon?logo=github\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/denoland/deno\"\u003e\n    \u003cimg alt=\"Denon Supported Version\" src=\"https://img.shields.io/badge/deno-^1.6.0-informational?logo=deno\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.gg/shHG8vg\"\u003e\n    \u003cimg alt=\"Denon Chat\" src=\"https://img.shields.io/discord/713043818806509608?logo=discord\u0026logoColor=white\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/denosaurs/denon/blob/master/LICENSE\"\u003e\n    \u003cimg alt=\"Denon License\" src=\"https://img.shields.io/github/license/denosaurs/denon?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAEFCu8CAAAABGdBTUEAALGPC/xhBQAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAHKADAAQAAAABAAAAHAAAAABHddaYAAAC5UlEQVRIDd2WPWtVQRCGby5pVASLiGghQSxyG8Ui2KWwCfkH9olY2JneQkiR0oCIxH/gB+qVFDYBIWBAbAIRSbCRpLXwIxLiPT7vnNm9e87ZxJtUwYH3zO47Mzv7Mbv3tlo5KYriGtgAJ81OY1ENdG/YI4boFEOI911BXgY/pdtwGuAtXpvmB1tAXHDnUolE5urkPOQo6MqA3pXWmJJL4Bb4rQ7yEYfxsjnIF29NJIoNC6e5fxOL/qN+9KCz7AaLpN8zI415N2i2EptpGrkRIjGeAuvR6IY1hSFLFUOug9Ms2M7ZxIUNytm1mnME186sdI2BOCwAyQMg54ugzSmKmwbPwSbolKH+hbAtQdsOoF+BsF3anUVwBdiOWRidFZDKTTrKEAJTm3GVrGkHzw/uPZbyx7DNNLfB7KGmRsCcr+/gjaiPSpAOTyX9qG4L/XBDdWXDDf1M+wtQ5fwCOtcb4Dto6VpLmzByB6gqdHbTItGSJdAGqibJQhmRfCF7IN4beSF2G9CqnGXQrxofXU+EykllNeoczRgYytDKMubDIRK0g5MF8rE69cGu0u9nlUcqaUZ41W0qK2nGcSzr4D2wV9U9wxp1rnpxn8agXAOHMQ9cy9kbHM7ngY4gFb03TxrO/yfBUifTtXt78jCrjY/jgEFnMn45LuNWUtknuu7NSm7D3QEn3HbatV1Q2jvgIRf1sfODKQaeymxZoMLlTqsq1LF+HvaTqQOzEzUCfni0/eNIA+DfuE3KEtbsegckGmMktTXacnBHPVe687ugkpT+axCkkhBSyRSjWI2xf1KMMVmYiQdWksK9BEFiQoiYLIlvJA3/zeTzCejP0RbB6YPbhZuB+0pR3KcdX0LaJtju0ZgBL8Bd+sbz2QIaU2OfBX3BaQLsgZysQtrk0M8Sh1A0w3DyyYnGnAiZ4gqZ/TvI2A8OGd1YIbF7+F3P+B6dYpYdsJNZgrjO0UdOIhmom0nwL0pnfnzkL1803jAoKhvyAAAAAElFTkSuQmCC\" /\u003e\n  \u003c/a\u003e\n \u003c/p\u003e\n  \u003chr\u003e\n\u003c/p\u003e\n\ndenon is the [deno](https://deno.land/) replacement for\n[nodemon](https://nodemon.io/) providing a feature packed, highly configurable\nand easy to use experience.\n\ndenon does **not** require _any_ additional changes to your code or method of\ndevelopment. `denon` is a replacement wrapper for `deno`. To use `denon`,replace\nthe word `deno` on the command line when executing your script.\n\n\u003cp align=\"center\"\u003e\n\t\u003cbr\u003e\n\t\u003cimg src=\"assets/example.svg\" width=\"500\"\u003e\n\t\u003cbr\u003e\n\u003c/p\u003e\n\n## Features\n\nDenon provides most of the features you would expect of a file watcher and more.\n\n- Automatically restart your deno projects\n- Drop-in replacement for `deno` executable\n- Extensive configuration options with script support\n- Configurable file watcher with support for filesystem events and directory\n  walking\n- Ignoring specific files or directories with\n  [glob](https://en.wikipedia.org/wiki/Glob_(programming)) patterns\n- Not limited to deno projects with a powerful script configuration\n\n## Install\n\nTo install denon simply enter the following into a terminal:\n\n### deno.land\n\n```bash\ndeno install -qAf --unstable https://deno.land/x/denon/denon.ts\n```\n\n### nest.land\n\n```bash\ndeno install -qAf --unstable https://x.nest.land/denon/denon.ts\n```\n\n\u003e ⚠️ Make sure you are using `deno` version `^1.6.0` to install this executable.\n\u003e You can upgrade running `deno upgrade`.\n\n## Usage\n\ndenon wraps your application, so you can pass all the arguments you would\nnormally pass to your app:\n\n```bash\ndenon run app.ts\n```\n\nyou can pass arguments to deno:\n\n```bash\ndenon run --allow-env app.ts\n```\n\nand even to your application:\n\n```bash\ndenon run --allow-env app.ts --arg-for-my-app\n```\n\nyou can run scripts declared in config:\n\n```bash\ndenon [script name]\n```\n\nand you can see which scripts are available in your config:\n\n```bash\ndenon\n```\n\nto see what else you can do with deno CLI use the help flag:\n\n```bash\ndenon --help\n```\n\n## Configuration\n\ndenon is designed to be simple but also extremely configurable to fit your\nproject needs. It supports both json and yaml for the configuration file. The\nconfiguration options in yaml is the same as json making it compatible.\n\nto create a basic configuration in the root directory of your project file you\ncan run:\n\n```bash\ndenon --init\n```\n\nthis will create a basic `scripts.json` file:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": \"app.js\"\n  }\n}\n```\n\nyou can also initialize from a custom template (see\n[src/templates.ts](https://github.com/denosaurs/denon/tree/master/src/templates.ts)\nfile for all the available templates)\n\n```bash\ndenon --init typescript\n```\n\n### JSON config (`scripts.json` template)\n\nDenon configuration can be provided as a JSON file:\n\n```jsonc\n{\n  // optional but highly recommended\n  \"$schema\": \"https://deno.land/x/denon/schema.json\",\n\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"run my app.ts file\"\n    }\n  }\n}\n```\n\n#### JSON Schema\n\nYou can use a JSON schema to have type checking on your configuration. Simply\nadd:\n\n```jsonc\n{\n  \"$schema\": \"https://deno.land/x/denon/schema.json\",\n  \"scripts\": {\n    /* */\n  }\n}\n```\n\n### YAML Configuration (`scripts.yml` template)\n\nDenon configuration can be provided as a YAML file:\n\n```yaml\nscripts:\n  start:\n    cmd: \"deno run app.ts\"\n    desc: \"run my app.ts file\"\n```\n\n### Typescript config (`scripts.config.ts` template)\n\nDenon configuration can be provided as a `.config.ts` file:\n\n```typescript\nimport type { DenonConfig } from \"https://deno.land/x/denon/mod.ts\";\n\nconst config: DenonConfig = {\n  scripts: {\n    start: {\n      cmd: \"deno run app.ts\",\n      desc: \"run my app.ts file\",\n    },\n  },\n};\n\nexport default config;\n```\n\nYou can use a typescript configuration file to have programmable configuration\nbased on your environment (for example loading a `.env` file):\n\n```typescript\nimport { DenonConfig } from \"https://deno.land/x/denon/mod.ts\";\nimport { config as env } from \"https://deno.land/x/dotenv/mod.ts\";\n\nconst config: DenonConfig = {\n  scripts: {\n    // same as json configuration\n    start: {\n      cmd: \"app.js\",\n      desc: \"Run my webserver\",\n      env: env(),\n    },\n  },\n};\n\nexport default config;\n```\n\n### Available options\n\ndenon takes inspiration from the awesome\n[velociraptor](https://github.com/umbopepato/velociraptor) module in the way it\nhandles scripts.\n\n#### Scripts\n\nScripts are declared inside the `scripts` object and are identified by a name:\n\n```jsonc\n{\n  \"scripts\": {\n    // they all resolve to `deno run app.ts` when you run `denon start`\n    \"start\": \"app.ts\",\n    // OR\n    \"start\": \"run app.ts\",\n    // OR\n    \"start\": \"deno run app.ts\"\n  }\n}\n```\n\nScripts can also be defined by a complex object:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      // with an optional description that\n      // is shown when you run `denon` to list\n      // all the scripts\n      \"desc\": \"Run the main server.\",\n\n      // available options...\n      // they are described in the next paragraph\n      \"allow\": [\"env\", \"write\"],\n      \"unstable\": true\n      // running `denon start` will resolve in\n      // deno run --allow-env --allow-write --unstable app.ts\n    }\n  }\n}\n```\n\n### Script Options\n\nOptions can be script specific or be declared as global in the root of the\nconfig file.\n\n#### Environment variables\n\nEnvironment variables can be provided as an object and are passed directly to\nthe child process.\n\n```jsonc\n{\n  // globally applied to all scripts\n  \"env\": {\n    \"TOKEN\": \"SUPER SECRET TOKEN\"\n  },\n\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"env\": {\n        \"PORT\": 3000\n      }\n    }\n  }\n}\n```\n\n#### Permissions\n\nPermission can be granted to child processes. You can provide specific\npermissions for each script, but you can also declare permissions globally,\nfollowing the same format.\n\n```jsonc\n{\n  // globally applied to all scripts\n  // as object ...\n  \"allow\": {\n    \"read\": \"/etc,/tmp\", // --allow-read=/etc,/tmp\n    \"env\": true // --allow-env\n  },\n  // ... or as array\n  \"allow\": [\n    \"run\", // --allow-run\n    \"net\" // --allow-net\n  ],\n\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      // specific for a single script\n      // as object ...\n      \"allow\": {\n        \"read\": \"/etc,/tmp\", // --allow-read=/etc,/tmp\n        \"env\": true // --allow-env\n      },\n      // ... or as array\n      \"allow\": [\n        \"run\", // --allow-run\n        \"net\" // --allow-net\n      ]\n    }\n  }\n}\n```\n\n#### File watching\n\nWhile file watching is a core feature of `denon` you always have the option of\ndisabling file watching and run a script only once:\n\n```jsonc\n{\n  // globally applied to all scripts\n  // now denon will essentialy be a script runner\n  \"watch\": false,\n\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      // you can still enable watch on a script-by-script basis\n      \"watch\": true\n    }\n  }\n}\n```\n\n#### Import Map\n\nLoad import map file. Take a look a at the\n[official docs](https://deno.land/manual/linking_to_external_code/import_maps)\nfor additional info.\n\n\u003e ⚠️ This feature in unstable in the current version of the deno executable.\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"importMap\": \"importmap.json\"\n    }\n  }\n}\n```\n\n#### TS config\n\nLoad tsconfig.json configuration file:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"tsconfig\": \"tsconfig.json\"\n    }\n  }\n}\n```\n\n#### Unstable\n\nEnable if the script is using unstable features of deno stdlib:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"unstable\": true\n    }\n  }\n}\n```\n\n#### Inspect and InspectBrk\n\nActivate inspector on `host:port`. If `inspectBrk` is used the executions breaks\nat the start of the user script:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"inspect\": \"127.0.0.1:9229\",\n      // OR\n      \"inspectBrk\": \"127.0.0.1:9229\"\n    }\n  }\n}\n```\n\n#### Lockfile\n\nCheck the specified lock file:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"lock\": \"lock.json\"\n    }\n  }\n}\n```\n\n#### Cert\n\nLoad certificate authority from PEM encoded file:\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"cert\": \"cert.pem\"\n    }\n  }\n}\n```\n\n#### Log\n\nSet log level: (possible values: `debug`, `info`)\n\n```jsonc\n{\n  \"scripts\": {\n    \"start\": {\n      \"cmd\": \"deno run app.ts\",\n      \"desc\": \"Run the main server.\",\n\n      \"log\": \"debug\" // or \"info\"\n    }\n  }\n}\n```\n\n### Watcher\n\nFile watcher options:\n\n```jsonc\n{\n  \"scripts\": {\n    /* */\n  },\n\n  \"watcher\": {\n    // The number of milliseconds after the last change.\n    \"interval\": 350,\n    // The file extensions that it will scan for.\n    \"exts\": [\"js\", \"jsx\", \"ts\", \"tsx\", \"json\"],\n    // The globs that it will scan for.\n    \"match\": [\"**/*.*\"],\n    // The globs that it will not scan for.\n    \"skip\": [\"*/.git/*\"],\n    // Use the legacy file monitoring algorithm. (walking)\n    \"legacy\": false\n  }\n}\n```\n\n### Logger\n\nInternal logger options:\n\n```jsonc\n{\n  \"scripts\": {\n    /* */\n  },\n\n  \"logger\": {\n    // Clear screen after every restart.\n    \"fullscreen\": false,\n    // Output only errors\n    \"quiet\": false,\n    // Output debug messages\n    \"debug\": true\n  }\n}\n```\n\n## Supporters\n\nHuge thanks to all our amazing supporters :heart:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://lcas.dev\"\u003e\n        \u003cimg src=\"https://avatars0.githubusercontent.com/u/7829205?s=200\u0026u=5a9294123bdf7301054aacbc88fda275f72ad4cb\u0026v=4\" width=\"100px;\" alt=\"\"/\u003e\n        \u003cbr/\u003e\n        \u003csub\u003e\u003cb\u003eLuca Casonato\u003c/b\u003e\u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://github.com/denoland\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/u/42048915?s=200\u0026v=4\" width=\"100px;\" alt=\"\"/\u003e\n        \u003cbr/\u003e\n        \u003csub\u003e\u003cb\u003eDenoland\u003c/b\u003e\u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Other\n\n### FAQ / Troubleshooting\n\n- `Command not found error`\n\n  This probably means that the executable path of your os does not include the\n  `.deno/bin` directory, where denon will be installed.\n\n  To fix this you must update your `$PATH`:\n\n  ```bash\n  echo 'export PATH=\"$HOME/.deno/bin:$PATH\"' \u003e\u003e ~/.bashrc\n  ```\n\n  as mentioned in the\n  [deno manual](https://deno.land/manual/tools/script_installer).\n\n### Contribution\n\nPull request, issues and feedback are very welcome. Code style is formatted with\n`deno fmt` and commit messages are done following\n[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec.\n\n### Licence\n\nCopyright 2020-2021, the denosaurs team. All rights reserved. MIT license.\n","funding_links":["https://opencollective.com/denosaurs","https://github.com/sponsors/denosaurs"],"categories":["TypeScript","Tools","核心模块与框架（按需求挑）"],"sub_categories":["Online Playgrounds","XML","Assistants","开发工具（提升效率用）"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenosaurs%2Fdenon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenosaurs%2Fdenon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenosaurs%2Fdenon/lists"}