From 90de8a8d76c68d92c790088a211da4e4c27a0714 Mon Sep 17 00:00:00 2001 From: Elio Di Nino <52972357+ElioDiNino@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:20:19 -0400 Subject: [PATCH] docs(free-apis): refactor and add documentation on Anthropic usage (#78) * docs(free-apis): refactor and add documentation on Anthropic usage * chore(npm): add missing packages and updates * feat(header): make header bar nicer * fix(manim): resolve mdx compilation errors --- docs/labs/free-apis.md | 39 +++++++++---- docs/labs/misc/manim.md | 121 ++++++++++++++++++++++------------------ docusaurus.config.js | 10 +--- package.json | 13 +++-- yarn.lock | 73 ++++++++++++++++++++---- 5 files changed, 171 insertions(+), 85 deletions(-) diff --git a/docs/labs/free-apis.md b/docs/labs/free-apis.md index 35203ef..ef81e3a 100644 --- a/docs/labs/free-apis.md +++ b/docs/labs/free-apis.md @@ -1,6 +1,6 @@ # Free APIs Available in Skills Network Labs -While taking labs within Skills Network Labs, your learners will have free access to some APIs. +While taking labs within Skills Network Labs, your learners will have free access to some APIs. This helps learners get started with the interesting stuff right away, without immediately worrying about registration. ## Learner Quotas @@ -15,12 +15,12 @@ RateLimitError: Error code: 429 - {'error': 'You have exceeded your usage quota ## Limitations -These free Skills Network-provided APIs are available for learning and experimentation. They are not suitable when it comes to deploying an application. +These free Skills Network-provided APIs are available for learning and experimentation. They are not suitable when it comes to deploying an application. Learners will have access to these APIs within their: - Cloud IDE (from their terminal/shell, or when running an application from within Cloud IDE) - JupyterLab IDE (from their notebook, or from the JupyterLab terminal/shell) -- Rstudio IDE +- RStudio IDE Learners will _not_ have free access to these APIs within their: - Code Engine projects @@ -31,11 +31,9 @@ Learners will _not_ have free access to these APIs within their: ## Free APIs -### watsonx.ai +### Versioning -#### Versioning - -It is recommended that authors follow the instructions below using the default `ibm-watsonx-ai` version installed with pip. However, after doing so, please pin the version you used for your learners. If you encounter an error with the latest package version and the following instructions, please let us know! +It is recommended that authors follow the instructions below using the default package version installed with pip. However, after doing so, please pin the version you used for your learners. If you encounter an error with the latest package version and the following instructions, please let us know! For example: ```shell @@ -54,6 +52,8 @@ pip install ibm-watsonx-ai==0.2.0 #### Usage +#### watsonx.ai + To use the free Skills Network-provided watsonx.ai project, specify the `"url"` and `project_id = "skills-network"` (make sure to **leave out** `"token"` and `"apikey"`). For example, you can modify [the example from the official documentation for the ibm_watsonx_ai library](https://www.ibm.com/docs/en/watsonx/saas?topic=library-inferencing-foundation-model) as follows: ```python @@ -89,9 +89,9 @@ generated_response = model.generate(prompt=prompt_txt, params=gen_parms_override print(json.dumps(generated_response, indent=2)) ``` -### OpenAI +#### OpenAI -To use the free Skills Network-provided OpenAI APIs, no additional configuration is necessary. You can use [the examples from the official documentation](https://platform.openai.com/docs/api-reference/chat/create) without modification. +To use the free Skills Network-provided OpenAI API, no additional configuration is necessary. You can use [the examples from the official documentation](https://platform.openai.com/docs/api-reference/chat/create?lang=python) without modification. For example: ```python @@ -99,7 +99,7 @@ from openai import OpenAI client = OpenAI() completion = client.chat.completions.create( - model="gpt-3.5-turbo", + model="gpt-4.0", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Hello!"} @@ -108,3 +108,22 @@ completion = client.chat.completions.create( print(completion.choices[0].message) ``` + +#### Anthropic + +To use the free Skills Network-provided Anthropic API, make sure to **leave out** the `"apikey"` parameter in the Anthropic client. You can use [the example from the official documentation](https://docs.anthropic.com/en/api/client-sdks#python) as follows: + +```python +import anthropic + +client = anthropic.Anthropic() + +message = client.messages.create( + model="claude-3-5-sonnet-20240620", + max_tokens=1024, + messages=[ + {"role": "user", "content": "Hello, Claude"} + ] +) +print(message.content) +``` diff --git a/docs/labs/misc/manim.md b/docs/labs/misc/manim.md index 9642a14..3015aa9 100644 --- a/docs/labs/misc/manim.md +++ b/docs/labs/misc/manim.md @@ -11,39 +11,45 @@ Manim can be difficult to install so this tutorial will teach you how to run it ## Setup
    -
  1. The first thing you're going to need is Docker. If you don't already have docker, you can download it here.

  2. -
  3. Pull the docker image for manim:

    - -```bash -docker pull manimcommunity/manim -``` +
  4. +

    The first thing you're going to need is Docker. If you don't already have docker, you can download it here.

    +
  5. +
  6. +

    Pull the docker image for manim:

    -

    For more information, check out mainimcommunity/manim

    + ```bash + docker pull manimcommunity/manim + ``` +

    For more information, check out mainimcommunity/manim

    +
  7. +
  8. +

    There are several ways to interact with Manim. We're going to work with Jupyter Lab. For different methods check out this link.

  9. -
  10. There are several ways to interact with Manim. We're going to work with Jupyter Lab. For different methods check out this link.

  11. -
  12. First, make sure nothing is running on port 8888, then open a terminal window and run the following command to start up the manim docker container:

    +
  13. +

    First, make sure nothing is running on port 8888, then open a terminal window and run the following command to start up the manim docker container:

    -```bash -docker run -it -p 8888:8888 manimcommunity/manim jupyter lab --ip=0.0.0.0 -``` + ```bash + docker run -it -p 8888:8888 manimcommunity/manim jupyter lab --ip=0.0.0.0 + ```
  14. -
  15. You should see the following output:

    +
  16. +

    You should see the following output:

    -``` - file:///manim/.local/share/jupyter/runtime/jpserver-1-open.html + ``` + file:///manim/.local/share/jupyter/runtime/jpserver-1-open.html -Or copy and paste one of these URLs: + Or copy and paste one of these URLs: - http://1a7fb2e74b32:8888/lab?token=542f72b2a4f0f8eb58089e3ab795f43c1ad3730b0500af58 + http://1a7fb2e74b32:8888/lab?token=542f72b2a4f0f8eb58089e3ab795f43c1ad3730b0500af58 - or http://127.0.0.1:8888/lab?token=542f72b2a4f0f8eb58089e3ab795f43c1ad3730b0500af58 -``` + or http://127.0.0.1:8888/lab?token=542f72b2a4f0f8eb58089e3ab795f43c1ad3730b0500af58 + ``` -

    Cut and Paste one of the above links in your browser. You should see the following:

    +

    Cut and Paste one of the above links in your browser. You should see the following:

    - +
  17. Congratulations! You're now ready to use manim!
  18. @@ -54,17 +60,19 @@ Or copy and paste one of these URLs: Let's start with a simple example:
      -
    1. Open a new JupyterLab notebook and import all the contents of the manim library in a cell:

      +
    2. +

      Open a new JupyterLab notebook and import all the contents of the manim library in a cell:

      -```python -from manim import * + ```python + from manim import * -# To download image used in this example: -!wget https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/assets/logos/SN_favicon.png -``` + # To download image used in this example: + !wget https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/assets/logos/SN_favicon.png + ```
    3. -
    4. Objects in manim are generally divided into three categories:

      +
    5. +

      Objects in manim are generally divided into three categories:

      • Scene

      • Mobject

      • @@ -88,20 +96,22 @@ class SN(Scene): ``` -
      • To run the scene, execute the following in the next code cell:

        +
      • +

        To run the scene, execute the following in the next code cell:

        -```python -%manim SN -``` + ```python + %manim SN + ``` -

        More generally, %manim [name of class] - where [name of class] is the name of the scene class you defined.

        +

        More generally, %manim [name of class] - where [name of class] is the name of the scene class you defined.

      • -
      • You should see a scene resembling the following:

        +
      • +

        You should see a scene resembling the following:

        - + -

        For more information, check out the Manim docs.

        +

        For more information, check out the Manim docs.

    @@ -112,34 +122,39 @@ __If you shut down your Docker Container you will lose your work.__ So you're going to need to download the video and JupyterLab. The lab is straightforward; let's see how to download the video:
      -
    1. Go to the directory ./media/Jupiter/

    2. -
    3. Download the video, which is the name of the class followed by an @ and the date:

      +
    4. +

      Go to the directory ./media/Jupiter/

      +
    5. +
    6. +

      Download the video, which is the name of the class followed by an @ and the date:

      -

      For example, SN@2022-05-02@02-43-50.mp4 more generally [name of class]@[date].mp4 as seen in the image below:

      +

      For example, SN@2022-05-02@02-43-50.mp4 more generally [name of class]@[date].mp4 as seen in the image below:

      - +
    7. -
    8. Finally, when you close your application you must make sure the container is closed, open a terminal window and type:

      +
    9. +

      Finally, when you close your application you must make sure the container is closed, open a terminal window and type:

      -```bash -docker ps -``` + ```bash + docker ps + ``` -

      You should see a list of your running containers, for example:

      +

      You should see a list of your running containers, for example:

      -``` -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + ``` + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -1a7fb2e74b32 manimcommunity/manim "jupyter lab --ip=0.…" 3 days ago Up 3 days 0.0.0.0:8888->8888/tcp peaceful_kowalevski -``` + 1a7fb2e74b32 manimcommunity/manim "jupyter lab --ip=0.…" 3 days ago Up 3 days 0.0.0.0:8888->8888/tcp peaceful_kowalevski + ```
    10. -
    11. stop the container by typing docker stop [name of container] for this case it would be

      +
    12. +

      stop the container by typing docker stop [name of container] for this case it would be

      -```bash -docker stop peaceful_kowalevski -``` + ```bash + docker stop peaceful_kowalevski + ```
    13. diff --git a/docusaurus.config.js b/docusaurus.config.js index aee3d37..8d3c218 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -7,7 +7,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ const config = { title: 'Author Workbench Knowledge Base', - tagline: 'TODO', + tagline: 'Author Workbench Knowledge Base', url: 'https://author.skills.network', baseUrl: '/docs/', onBrokenLinks: 'throw', @@ -39,18 +39,12 @@ const config = { /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ navbar: { - title: 'Home', + title: 'Author Workbench Knowledge Base', logo: { alt: 'Skills Network Logo', src: 'img/logo.svg', }, items: [ - { - type: 'doc', - docId: 'getting-started', - position: 'left', - label: 'Author Workbench Knowledge Base', - }, { href: 'https://author.skills.network', label: 'Author Workbench', diff --git a/package.json b/package.json index 09b510f..3d16e14 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,18 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^3.0.0", - "@docusaurus/preset-classic": "^3.0.0", - "@mdx-js/react": "^1.6", + "@algolia/client-search": "^4.24.0", + "@docusaurus/core": "^3.4.0", + "@docusaurus/preset-classic": "^3.4.0", + "@mdx-js/react": "^3.0", + "@types/react": "^18.3.3", "clsx": "^1.1.1", "prism-react-renderer": "^1.3", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "react-loadable": "^5.5.0", + "search-insights": "^2.15.0", + "typescript": "^5.5.3" }, "browserslist": { "production": [ diff --git a/yarn.lock b/yarn.lock index 445054e..3cfb082 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,6 +41,11 @@ resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.23.3.tgz#3bec79092d512a96c9bfbdeec7cff4ad36367166" integrity sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A== +"@algolia/cache-common@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.24.0.tgz#81a8d3a82ceb75302abb9b150a52eba9960c9744" + integrity sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g== + "@algolia/cache-in-memory@4.23.3": version "4.23.3" resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz#3945f87cd21ffa2bec23890c85305b6b11192423" @@ -75,6 +80,14 @@ "@algolia/requester-common" "4.23.3" "@algolia/transporter" "4.23.3" +"@algolia/client-common@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.24.0.tgz#77c46eee42b9444a1d1c1583a83f7df4398a649d" + integrity sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA== + dependencies: + "@algolia/requester-common" "4.24.0" + "@algolia/transporter" "4.24.0" + "@algolia/client-personalization@4.23.3": version "4.23.3" resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.23.3.tgz#35fa8e5699b0295fbc400a8eb211dc711e5909db" @@ -93,6 +106,15 @@ "@algolia/requester-common" "4.23.3" "@algolia/transporter" "4.23.3" +"@algolia/client-search@^4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.24.0.tgz#75e6c02d33ef3e0f34afd9962c085b856fc4a55f" + integrity sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA== + dependencies: + "@algolia/client-common" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@algolia/transporter" "4.24.0" + "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" @@ -103,6 +125,11 @@ resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.23.3.tgz#35c6d833cbf41e853a4f36ba37c6e5864920bfe9" integrity sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g== +"@algolia/logger-common@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.24.0.tgz#28d439976019ec0a46ba7a1a739ef493d4ef8123" + integrity sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA== + "@algolia/logger-console@4.23.3": version "4.23.3" resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.23.3.tgz#30f916781826c4db5f51fcd9a8a264a06e136985" @@ -139,6 +166,11 @@ resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.23.3.tgz#7dbae896e41adfaaf1d1fa5f317f83a99afb04b3" integrity sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw== +"@algolia/requester-common@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.24.0.tgz#1c60c198031f48fcdb9e34c4057a3ea987b9a436" + integrity sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA== + "@algolia/requester-node-http@4.23.3": version "4.23.3" resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz#c9f94a5cb96a15f48cea338ab6ef16bbd0ff989f" @@ -155,6 +187,15 @@ "@algolia/logger-common" "4.23.3" "@algolia/requester-common" "4.23.3" +"@algolia/transporter@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.24.0.tgz#226bb1f8af62430374c1972b2e5c8580ab275102" + integrity sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA== + dependencies: + "@algolia/cache-common" "4.24.0" + "@algolia/logger-common" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -1235,7 +1276,7 @@ "@docsearch/css" "3.6.0" algoliasearch "^4.19.1" -"@docusaurus/core@3.4.0", "@docusaurus/core@^3.0.0": +"@docusaurus/core@3.4.0", "@docusaurus/core@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.4.0.tgz#bdbf1af4b2f25d1bf4a5b62ec6137d84c821cb3c" integrity sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w== @@ -1487,7 +1528,7 @@ sitemap "^7.1.1" tslib "^2.6.0" -"@docusaurus/preset-classic@^3.0.0": +"@docusaurus/preset-classic@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz#6082a32fbb465b0cb2c2a50ebfc277cff2c0f139" integrity sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg== @@ -1755,12 +1796,7 @@ unist-util-visit "^5.0.0" vfile "^6.0.0" -"@mdx-js/react@^1.6": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" - integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== - -"@mdx-js/react@^3.0.0": +"@mdx-js/react@^3.0", "@mdx-js/react@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.0.1.tgz#997a19b3a5b783d936c75ae7c47cfe62f967f746" integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A== @@ -2220,7 +2256,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@^18.3.3": version "18.3.3" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== @@ -6728,7 +6764,7 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -6918,6 +6954,13 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +react-loadable@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" + integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg== + dependencies: + prop-types "^15.5.0" + "react-loadable@npm:@docusaurus/react-loadable@6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" @@ -7318,6 +7361,11 @@ schema-utils@^4.0.0, schema-utils@^4.0.1: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +search-insights@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.15.0.tgz#61c7db9d13218ee966937ad2462385b05c0df624" + integrity sha512-ch2sPCUDD4sbPQdknVl9ALSi9H7VyoeVbsxznYz6QV55jJ8CI3EtwpO1i84keN4+hF5IeHWIeGvc08530JkVXQ== + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -7895,6 +7943,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== + undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"