From 40e8fc39633afeb56723cfadccbe01c97ed3aee7 Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Tue, 6 Nov 2018 13:46:58 +0800 Subject: [PATCH] chore: update readme (#1084) * chore: update readme * chore: update readme * chore: add links to badges * chore: add docker examples link * chore: update links * chore: update readme --- README.md | 195 +++++++++++++++--------------- assets/sponsor/crowdin/logo.png | Bin 0 -> 10241 bytes assets/sponsor/jetbrains/logo.png | Bin 0 -> 5880 bytes 3 files changed, 96 insertions(+), 99 deletions(-) create mode 100644 assets/sponsor/crowdin/logo.png create mode 100644 assets/sponsor/jetbrains/logo.png diff --git a/README.md b/README.md index 17d8ca406..a361dea8d 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,37 @@ -
- - - -
-
-

Version 3 Released 🎉

-
- - All the new features you need to know - -
-
+![verdaccio logo](https://github.com/verdaccio/verdaccio/raw/master/assets/bitmap/verdaccio%402x.png) + +![verdaccio gif](https://github.com/verdaccio/verdaccio/blob/master/assets/gif/verdaccio_big_30.gif?raw=true) + +# Version 4 + +[Verdaccio](https://verdaccio.org/) is a simple, **zero-config-required local private npm registry**. +No need for an entire database just to get started! Verdaccio comes out of the box with +**its own tiny database**, and the ability to proxy other registries (eg. npmjs.org), +caching the downloaded modules along the way. +For those looking to extend their storage capabilities, Verdaccio +**supports various community-made plugins to hook into services such as Amazon's s3, +Google Cloud Storage** or create your own plugin. -
-

- A lightweight private npm proxy registry -

- npm version - CircleCI Status - Coverage Status - npm Downloads - npm Downloads - - discord - -
-
-

+[![verdaccio (latest)](https://img.shields.io/npm/v/verdaccio/latest.svg)](https://www.npmjs.com/package/verdaccio) +[![verdaccio (next)](https://img.shields.io/npm/v/verdaccio/next.svg)](https://www.npmjs.com/package/verdaccio) +[![verdaccio (next)](http://img.shields.io/npm/dy/verdaccio.svg)](https://www.npmjs.com/package/verdaccio) +[![docker pulls](https://img.shields.io/docker/pulls/verdaccio/verdaccio.svg?maxAge=43200)](https://verdaccio.org/docs/en/docker.html) +[![backers](https://opencollective.com/verdaccio/tiers/backer/badge.svg?label=Backer&color=brightgreen)](https://opencollective.com/verdaccio) -
+![circle ci status](https://circleci.com/gh/verdaccio/verdaccio.svg?style=shield&circle-token=:circle-token) +[![codecov](https://img.shields.io/codecov/c/github/verdaccio/verdaccio/master.svg)](https://codecov.io/gh/verdaccio/verdaccio) +[![discord](https://img.shields.io/discord/388674437219745793.svg)](http://chat.verdaccio.org/) +[![node](https://img.shields.io/node/v/verdaccio/latest.svg)](https://www.npmjs.com/package/verdaccio) +![MIT](https://img.shields.io/github/license/mashape/apistatus.svg) +[![Crowdin](https://d322cqt584bo4o.cloudfront.net/verdaccio/localized.svg)](https://crowdin.com/project/verdaccio) -

Install

+ +[![Twitter followers](https://img.shields.io/twitter/follow/verdaccio_npm.svg?style=social&label=Follow)](https://twitter.com/verdaccio_npm) +[![Github](https://img.shields.io/github/stars/verdaccio/verdaccio.svg?style=social&label=Stars)](https://github.com/verdaccio/verdaccio/stargazers) + + +## Install Install with npm: @@ -40,26 +39,11 @@ Install with npm: npm install --global verdaccio ``` -Install with yarn: - -```bash -yarn global add verdaccio -``` - -Install with pnpm: - -```bash -pnpm i -g verdaccio -``` - - -

Introduction

- -Verdaccio is a simple, **zero-config-required local private npm registry**. No need for an entire database just to get started! Verdaccio comes out of the box with **its own tiny database**, and the ability to proxy other registries (eg. npmjs.org), caching the downloaded modules along the way. For those looking to extend their storage capabilities, Verdaccio **supports various community-made plugins to hook into services such as Amazon's s3 and Google Cloud Storage**. +## What does Verdaccio do for me? ### Use private packages - If you want to use all benefits of npm package system in your company without sending all code to the public, and use your private packages just as easy as public ones. +If you want to use all benefits of npm package system in your company without sending all code to the public, and use your private packages just as easy as public ones. ### Cache npmjs.org registry @@ -73,69 +57,69 @@ If you use multiples registries in your organization and need to fetch packages ### Override public packages - If you want to use a modified version of some 3rd-party package (for example, you found a bug, but maintainer didn't accept pull request yet), you can publish your version locally under the same name. +If you want to use a modified version of some 3rd-party package (for example, you found a bug, but maintainer didn't accept pull request yet), you can publish your version locally under the same name. See in detail each of these [use cases](https://github.com/verdaccio/verdaccio/tree/master/docs/use-cases.md). -See in detail each of these [use cases](https://github.com/verdaccio/verdaccio/tree/master/docs/use-cases.md). +### E2E Testing -

Get Started

+Verdaccio has proved to be a lightweight registry that can be +booted in a couple of seconds, fast enough for any CI. Many open source projects use verdaccio for end to end testing, to mention some examples, **create-react-app**, **mozilla neutrino**, **pnpm**, **storybook**, **alfresco** or **eclipse theia**. You can read more in dedicated article to E2E in our blog. + + +## Get Started Run in your terminal ```bash -$ verdaccio +verdaccio ``` You would need set some npm configuration, this is optional. ```bash $ npm set registry http://localhost:4873/ -# if you use HTTPS, add an appropriate CA information -# ("null" means get CA list from OS) -$ npm set ca null ``` Now you can navigate to [http://localhost:4873/](http://localhost:4873/) where your local packages will be listed and can be searched. > Warning: Verdaccio does not currently support PM2's cluster mode, running it with cluster mode may cause unknown behavior. -

Publishing Private Packages

+## Publishing -#### Create an user and log in +#### 1. create an user and log in ```bash -$ npm adduser --registry http://localhost:4873 +npm adduser --registry http://localhost:4873 ``` -For scoped packages, you can log in for a specific scope: +> if you use HTTPS, add an appropriate CA information ("null" means get CA list from OS) -```bash -$ npm adduser --registry http://localhost:4873 --scope=@mycompany +```bash +$ npm set ca null ``` -#### Publish your package +#### 2. publish your package ```bash -$ npm publish --registry http://localhost:4873 +npm publish --registry http://localhost:4873 ``` This will prompt you for user credentials which will be saved on the `verdaccio` server. -If you are publishing a scoped package, the registry argument is optional -

Docker

+## Docker Below are the most commonly needed informations, every aspect of Docker and verdaccio is [documented separately](https://www.verdaccio.org/docs/en/docker.html) -```bash -$ docker pull verdaccio/verdaccio +``` +docker pull verdaccio/verdaccio ``` Available as [tags](https://hub.docker.com/r/verdaccio/verdaccio/tags/). -```bash -$ docker pull verdaccio/verdaccio:3.0.0 +``` +docker pull verdaccio/verdaccio:4.0.0 ``` ### Running verdaccio using Docker @@ -143,12 +127,12 @@ $ docker pull verdaccio/verdaccio:3.0.0 To run the docker container: ```bash -$ docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio +docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio ``` Docker examples are available [in this repository](https://github.com/verdaccio/docker-examples). -

Compatibility

+## Compatibility Verdaccio aims to support all features of a standard npm client that make sense to support in private repository. Unfortunately, it isn't always possible. @@ -166,6 +150,7 @@ Verdaccio aims to support all features of a standard npm client that make sense ### User management - Registering new users (npm adduser {newuser}) - **supported** +- Change password (npm profile set password) - **supported** - Transferring ownership (npm owner add {user} {pkg}) - not supported, *PR-welcome* ### Miscellany @@ -178,48 +163,60 @@ Verdaccio aims to support all features of a standard npm client that make sense - npm audit - **supported** -

Contributors

-This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. - +## Sponsors +#### Open Source License -### Backers +Thanks to the following sponsors to help to achieve our goals providing us free open source licenses. -Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/verdaccio#backer)] +[![jetbrain](assets/sponsor/jetbrains/logo.png)](https://www.jetbrains.com/) +[![crowdin](assets/sponsor/crowdin/logo.png)](https://crowdin.com/) - - - -### Sponsors +#### Open Collective Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/verdaccio#sponsor)] - - - - - - - - - - +[![sponsor](https://opencollective.com/verdaccio/sponsor/0/avatar.svg)](https://opencollective.com/verdaccio/sponsor/0/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/1/avatar.svg)](https://opencollective.com/verdaccio/sponsor/1/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/2/avatar.svg)](https://opencollective.com/verdaccio/sponsor/2/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/3/avatar.svg)](https://opencollective.com/verdaccio/sponsor/3/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/4/avatar.svg)](https://opencollective.com/verdaccio/sponsor/4/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/5/avatar.svg)](https://opencollective.com/verdaccio/sponsor/5/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/6/avatar.svg)](https://opencollective.com/verdaccio/sponsor/6/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/7/avatar.svg)](https://opencollective.com/verdaccio/sponsor/7/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/8/avatar.svg)](https://opencollective.com/verdaccio/sponsor/8/website) +[![sponsor](https://opencollective.com/verdaccio/sponsor/9/avatar.svg)](https://opencollective.com/verdaccio/sponsor/9/website) -

FAQ / Contact / Troubleshoot

+## Backers + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/verdaccio#backer)] + +[![backers](https://opencollective.com/verdaccio/backers.svg?width=890)](https://opencollective.com/verdaccio#backers) + +## Contributors + +This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. + +[![contrubitors](https://opencollective.com/verdaccio/contributors.svg?width=890&button=true)](../../graphs/contributors) + +### FAQ / Contact / Troubleshoot If you have any issue you can try the following options, do no desist to ask or check our issues database, perhaps someone has asked already what you are looking for. -* [Roadmap](https://github.com/verdaccio/verdaccio/wiki) -* [Most common questions](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20) -* [Reporting a bug](https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#reporting-a-bug) +* [Blog](https://medium.com/verdaccio) +* [Donations](https://opencollective.com/verdaccio) +* [Roadmaps](https://github.com/verdaccio/verdaccio/projects) +* [Reporting an issue](https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#reporting-a-bug) * [Running discussions](https://github.com/verdaccio/verdaccio/issues?q=is%3Aissue+is%3Aopen+label%3Adiscuss) -* [Chat Room](http://chat.verdaccio.org/) -* [Logos](https://github.com/verdaccio/verdaccio/tree/master/assets) +* [Chat](http://chat.verdaccio.org/) +* [Logos](https://verdaccio.org/docs/en/logo) +* [FAQ](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20) +* [Docker Examples](https://github.com/verdaccio/docker-examples) - -

License

+### License Verdaccio is [MIT licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE) -The Verdaccio documentation and logos (e.g., .md, .png, .sketch) files in the /docs and /assets folder) is [Creative Commons licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE-docs). +The Verdaccio documentation and logos (e.g., .md, .png, .sketch) files in the /docs and /assets folder) is + [Creative Commons licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE-docs). diff --git a/assets/sponsor/crowdin/logo.png b/assets/sponsor/crowdin/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad3b2dc22294aa3cdca1747a677d4375fc28b5e GIT binary patch literal 10241 zcmZ{KWl&sA6Yk;*K^7-Civ)Lr740sp;x@y8D^={#jWL3xgB`003agLm_H!^6sti08!uGtuOsPZvxp$Qb`g3 zsEK{|WPG8MQvv|I=mCI$U;yC$^-UfC0Ir+>z@ae!APffph@BFQ`eon7qM9nm zK>)A+dvZF865o2zzd&`I0RZg2|22eU7HqP&PBa&JB^k6G3_=h!#_WH;-ezMsmxoAd zc&wacdS>WrCJ%Pq&Kq{*i@cK`lEQ-m(L(?TJz#2tcn}CAsYBk4ATwa0FP9lFDMP*n zmn4{zR0UCd4u(;Sn0%mlr!zDoFYN7JbbDHQSn74Qe!si6c-{Krv{D(d`1#T2VRrrc zaNT>eG&k&e`CVe^T`Br*8oTJ6pJ1v42(jH0mLBe17^pq_$20h z{zy>2GY924%E0_Te8#co5?>8u2oY*7ASGqEGkNMTnL;)UsSfTo>9*-c-1^TL5hSvO zL^)RMdR9dMo_9w`58&&zHKwg5`-?iI>uBSstYOD&TeZBNVAYO!of50wrPcTsg+KXV(Z{LtiSh}~u$ov#dAJPF8~F>uIoB2hav7OWWc1Pp5B{9loF4zMthkwT`WA&imH$S+ju zw_~mtiJ#ZfbSOxpj4dt6%~^3d{l5J{dw#jBFbe1Ix2&%uy&g?D0o|7{Z{G8&ZY+tD z&mtEZR;#%4?njj2<82OZd~Ggt`rJCSp_->{60%IX1jkY}@0X$k$K0r~>$F0q5@Cts zGPw$|-M866pFiWGvoM=Q^fDmd{}tkjfeWG+7;4N%G9yyyk;KaMjHJ1J0l354!!HCP zK8lFPHshdmqOq=|V6&nO*IT~*P@rkaetCB)^~=|cj1K!aNpcgr0E=$sKHPB-6HU6?AVbn4M_ z$40PB74jtQ>CeD6Ts?1SHNllR?@^OTd*{dAM%i!|{tvlq?*e$M5&lCIMJk8DM3Mew z_I^Os`JxX;H$(jG{jaj>@V53uf-$ZRAX;@F(SCMM^dabu^2SES=cGRXWa>BvzlSC- zhfzu9tVB&Nr*OT{()hEFQa9rcrCnpr72+huwZ~x_vq^*Wf9IrF`XGNqY9@wvabP() zee>|M2*VPw=WYbG<6w2GcT)vu%WCRjQJ|;1nNY_?Ekt$xhf%Fuz$ZGc!UaX!_vzKxT{qMM_M9nCWBHhAmIwz)oQqX(Zc1 z0kr&e|C#qSTf&Fb9nlCS3)zs(`8jAW!OIe$jno9zo#aHtaeBr4v9;6f9%zJ6bv?_l z2S3s2j)s~p7;ZfRoj0wLOg~Bfm0qJA&k2XDeUe-VTihHuUn|8tS=SX^6*67Ne!{-P zs%F4byGb1k5xO7Z+y+@I5q{xJpmP?ieFH9Z9$MU>7%;?Pn+dt_`6Jgi+|kOiXL$$%b3TQs8CyjksnqcO<%o90y$IoA3lwJ;#r^* zl8U5JWQydZ7_4tXmhZe5tHz4&CfuhKsKVlS(n%k8)<62a zG^rpE9(otVIcZ=vu;{SA>pRr>9GTjr0>AD|(Vv-zI{TB=+DTi!v>uR^d`iE+*e@R$ zbLheZ!;8}V@dUGJB$%KDd@7ys+w-pPk2}@cD4MC7S&pjrVZ#XQB0RDd8aki25a308 zMTnOH(zt&N^EJdNY1-J$DWF!o!}SdD37mR)axW@Y^~tV7%`wV0Iyu+{8giTxVDi2g zSq)9ra_q=3O$WxIkn-_Q3N^JKenu9w$d03W3`CuvZh6#^qz5{sMmrOJDb)FU4Wrt% z-wL*@BS&6C5)H~fsgzO7I||@HqLRuZ#4!0HE(PDY21)}{LtpTEfR$XEZG?i8_I=T? zvps3ca`tnFKJo|Qb5u@zu3v@-jx>WgdHW(|fy+?DSur42JJm43Q~Pq%VyX}@{U}?G z|30+)n|W|7+6&S}8LI?|+T2)gZ#M<-t1p2GgIPdVnx`JXr%zOxJl-R^`%eI|;$wql zj53Nc|K$U1$lXVi0d*`2{?5ytzkJ(uxQh4KoH^X=e^<5*tN7JjuMY^6Y^c|ff+6sbJnusXJ<`2W;?o1 z_th;*-DE`1nM`&#$YZ&%lKbYytg68Cxq_A5H^Zt5u=zRSLy-zlI3=5qo>Yr=EW{8- zH>#MMeV#tZSc~mKZ=fs87hQoJ?Z94PkTwybz+B-yqoZptclJ%cv6WqqLfgqz-%W^J zNk^}#u+F8)y{%+Ut1bN62JK73OZ^WaB-at$>jM^MS7ue-bk};Fb|p)mEaWxw0bk)F=P+wKR)#UrE5Gv@1+ake};9- zb&CaPCH{UIc^{C?VEaBevJDrSlA+jq6=@K+Vad_cX@ZM~%q#J@}RY_#3t z4!P?Jg(kl8o2A*E8abY}Aej)zhXk&pv&xXDAx|%KTCVt^bNQR@Urwe!ZX){`-;9yg zO{dU=c;cL^>^lvPxnuQc{GblG{<@_ z6Am~8TMj4$^qCbsb02@mcHF<8`^tX$E#s%Xv5G2}KppoWKO$@>j22_LlDFM@40IMaY$jFP|)7wSYH@!iCQ2XqL}%>?lu?#7K`SD z0jsf>yA8?xf7pz2rJo^gF@}gVrN49r+n;*wi+F>2Jn?J(U`xTAJ6inTo6ZJ9ubA_< zK1AB@VHH+nUTL-z!C%j0;VQ^?_~(pysk}5%2lf!s&QQ)D{LUxP*)yl{2VvO3*WCBB zy_OTDaSeJQoVnp+AIteC>j7V7GaYUekv+)c3l##5Xh}b#-U&$=6H~9u#RGdCPobDlDsC??SS!OcQa@FkM^A@v+-Bdo?n{^;xj9WPYwp`Z&A6tqG`EdktTk@I)$B} zj8L?UK!G)qPa;umDOt7uP8GpY8Jp8gEpD2Y6*Z`=zr46a!`$H_PdxsXB0JcjFjX-W zq}Flo!(7YcPE-0{=GhHNUXYmO%WeLX8)U?RD_cdHpA`lXBaWB2F5DCZKTGoa{ahwc z_i<2>o!dt>m-e1$nEWko~Zw<2F7?YO7s7jbN5U z-Dud5-Bqfs)t>i3_r;uh2w@SoLOeRpjf)!HUz*6O-@MY#^=RmRT zyV0OCao(8HX4ALiO;21aF3l@{neGIL)P`8|n_VEWbAt6B{ZL^R43r(cH1HFY-rUc+ z$J&=g6{Xj`}0> z4Z9P4e?=8`==0vxv~TRvd*;rXuIC$XPx)ecqa3*JvGD#aVpLe#YlD%!u+9T)ni9x= zrphaimPx@LXg2Ev;+-jpWTtq%P^AM97wj9BYZfm==KN56{$%XZrrwUBFH+xZx?ZU- zxP zF{+1bfm%NQeCxvkmpGyHL%P1^-yQqx9W zYUNfYXzEoRaN0q@`G!2N!Ic`b-z*~?*J$8z%z4w|EnqB6MNT)S-;aWkU!rupL6)Z# z?()ThDM}f(q}h_Ge}}D4pY0;X+q}_zP`+G5egE}fM>JsiDMM6XCU#eu=^{wHi@7(l ztS*aT%9iMF ze+t)w4MyEbUrI!TwUviy1+l@Jd2OLqMD zC_~sYCmOw_8)EbPl1T~wC4f6{G4E^trwn%05r~wuG-E{WgORt9gre{(ODkoatx|5y zW((~X;ChiYD%ZTGvPgVKmU-xug8vUon=;wA%pl_xbxnx%TI9KId*G7R!-kZ!5}aA zVa?hv^}7!Eax2Wb3Afl)4sUdH_g>hyS^WLA z;#y6+u1(mnfXD5%o;#!JdBQjc>qWUzp`<36boPaM0qMG3vX7-1QI*D)l|H2Mz#AS! zg`paH$6+quqXaeIXRO$_g{oVH*rJZOFC6qpLxT2V6kJzXN;T1 zHqj?j95QzyG3(Phf=%h~v;C8?8x>?0B)%7p`bEE@hUM01`h*0Czs5{JdXhM3Etz3x z&jilCM0f_pQrId&TgayXwxgz1Hlwa0@7el`z_$|pFzyhezt}dCi;u|6j#YN?zd0@4 zzMm0LXucD3g&5){z+S}6k%W$Ysp?7#V@25D&`l)kstfmx`(X0)Vqtpd{-woAO52hK(*U!BKXNW#}+dJK(h&GaqB)kgZRnxOv;*kbxU@68DH z%`Oc3Nv5<3BXUXwD0sCZ9ZSBW0v5~Fy^U=B6|l`50SKq!TCYdjR^kRi{tfk}{Ijr- z)iye`c_x;f?j zG=CiD+O5_Ou+J78C@bH^{D+|=n(lv1L^k;QAfP{%>&+FGdOgs-(uM99N5VTQfJn{2 z3ujL>c)5)IWy(ej!i`qq^Qual#BmU`gyTdc#FCeOw_2bvb&B3; za?+{IS1!ud-vKYj^k416L8e`M@W`5bJrRR65q&u(KQo5o0MPB~`&&PeUV5j&y6&w% z9R4R8F^|~Y`bM%QsDFj&=ui^`uinw|)F2EiV#c|X3KZUzo+@(Ff@?V_0jCh zU+NU~cVC<=6rZLxLm3D%eZv9W_h0x|5$#HzC@z=zN67U2qqHgyDMJU4bFJB^~I(?B|DB z;Or`lbM@)lVk&fg?nQWGMV7m9fqL0W_)I6y@}+&wJo>m{5hSmLL1dbx#Ah}Sl(d)A z*m$XJjFI4;U^UWXqSIfE7wDu;2ot7It&*08-+rRg6rk#&O`)QcK;AHi@Q7jPq&v|b z@evNUY*Kx;^wW)3?5qelN^Y%ae|fr#VDoOZ)e~7ajzm)A| zMKZ4XgG;4iOfdfQ$gQE|L7?RRLoRT;AL-J& z*^&9lvNsJhRQ8wUlhp6p2i)0$^4SeraZaq_OKU&Gjqq?}^1ul0^*gfvFb3}xZ-$5P ztoknQr{9-d_$~x$BoTJY`KZT#sygsAy60|@N;bU>jraNP6XZ=G|K|!MH=`{c;?XcT zt0J=t`W!2`CV@BP7qFKXOXDuls|5VYl23j!@Vq1rJ6{SGym!Pwe8o0jZCejJBJNMH zJ38q;wM;2=OSy4O(a@csUi1t(qlxCh|s5{`TF(sqik~+Z);Qy0~vMnq?7K zrAX$Q57#407ym^)$;v|9IgTes{=si&0jRBPV-8I*zPH5$s%v);Sc=a86E7ByfjkSB2MTj1P(ybitEK)pK{vnQ9aBgoqUt8c zNLwc%6B5ew68liwDfme3%YdHvc`2D(>MJeK`Ci*t7DNMwFDR1gIDB2n;EZ8WZkWiw zu{Y8cHdtxhqenhjXaAmM7|rlHls(0>Np__8`u9{(G>^MOI)|fz40U_TJrRW{i^TIR zpDU0y+aR?Dk4cH4tj1tyg>?16muWk&j|nDxG^ku>oX)5}_wxDO(}&Q6-z0TFw!#h; zCea@c@^tPk;WMSzlCb&-_p33UlO`HWi(}BrM7UJ`^!gq>70uxvhr$janSn&92sy8u zs+-?t<-245U0!%AwpycCj7u>;%I^Di5|}WZ{jJ^NLl5{^q=hux>GlTn@x)N{i z4fDs;X%#!*51nvwq-KJWg-f%{ma6an7A#1=0f%Zl7bnocbORWws=EjWx8E05h(*EuwP&EM5_serJB|*eIw~Kce1ET?}>Y1XuOBEVb zg*E5)y;A~q0Bavb&zD`6;jaG(cVCyqu49Dx+^tXqaxO@0bi{&%h@Q8(AqF>QY&}Vm z^^rc;&-8mCDTX`jyZVpU^d?@;;lTR$dT>V4?GWA-Ys{B{W}K0(0Ve$^PLKcqFXRApADXOQlkIUpS4@>RJeSIFJpN}A^Xymi1)c-n<5>h#h{g1>)dLf;aM{b^ef zL*<`?fSK#R!9%jyB=9AgkcwN#nn?_$J@c57Fc)a)!L$>V7 zSl{BkNdX*PbZ3@8i<)w)Wdp4;tcH*1&F2G^+AoZkdP4L3q`;A5c2 z5;=Gn6?=s!LP$DTE-xE75~-d?N?2p&tmzb!W~CYdmUx#iiODE9j* z-|S!I48~J)Noz{% z^s{=Dh`pwPfFCaKdNRW!SPM3Tc0A`Uw_|@|heSDTJQe3Qr`-Ye>yv3X%M=(jZnfjy z84=cr2vBdQy>L>+d->&q@(w1M1W-+~?i0>q3pY(C1eDOjcz_<$fluWGuiHQRNhC<8 zNz|YkznK|__%2q@ew!jBU>^;#D?Ye`wyn`IC=_IJ`84_o--?68dB%PcIvZm-x_qdW zD^Us7t8ocG0jGmcoHe7uz`|v`S-95I-Zq_p4>fk4X;!St{4{Ay8j-1YBEF}C!3~*% zfp8_kYZ<{f^*gHSoYo%Gk!C>GohLC>dpkJp?=*cTW9K+`d=H5Wkt%Lmj!zH?ep z`7(hphX7daGnNH*41>F62HIqXt&H^nGi2%hLRct!@PNQ})bFuF|G?mrnFq3SeWJw+ zNqHXtOOvY~hB3+$U&ck|s$$2%CMGRzs9RyuLlTK@#;QLqNatqfVCS+_-HVE@;QPIk zsX9dZ`~@G(D#)(SQ@hgIuO@0L;v<$hO?+j3CExvI9Dwqj()T44hGK3t zhC_lJ>Q@dCJo1yqEmHGi>o$#|&|;S!*1IxgK0CYoQ-_%m3yPv58={XVs1tDquR#47 ziQd>AWQzOCE$@L+yvsi+Ayl#?iBuh!MPowOE2FX4<+Ojs(xqvT&L2g4EXVFc|NGzK zG8DHxBeK+&P-xB#uEYl0jI7@pwfQgBU5}E*r||3Q+|{6COs!nk#k9XtZ$3Ppv+-EQ8LJwS z4%vJaY4Kan1Wxh(xwD~Gc#ky1Xn@#^-5Hy`@H{HmVQ)sQNFCmQ+N0sl(`=scjVq-G zv!AYKZ-yGPSN&_2^jwo z!7hK`DFYwuQpD@pmLaYBq&BQae)@R-bC{uG`z|&2=8b-$Y~M=yEB#hZl@a!_DWFJ8 za?>)G_g%>cnzL3<8Px8ZxbX@--Nmy{2ns8%JBC*oYzV>!g@{ADQ{ddHo+j8{=b!=AN+sw6D{6SZuq8&4tU&)+%sd{`L7J%})2u%UU!@F(vIdfGJ4m<38d1)v+Z9*T!ujZj5;QxM*UHAFtJK1yOILOhW`By_%ZAPC9S6_8_f1#xLH;jlC$xa9R?pBV`=tGM zCuDNJAr+ZlY#KdqX>9n{3i{6qX_j3r$VGSK`uN1c7wADz=c?8OB+$NC=?Y6bG;Sx< zj){Y#nZQv7xTIe8uRq-A;rN|Cq(dyWQ_&7F4})LTa9=A<3adOeI=p!92qb?xm<*(G zOR;Vvp(PC^Pg$oz(3b?`e!nLoCsU@j zlCp{??k3c*vcaM)V`KMHNun)UDK8yGb>nThY*qKlI{C}4J!`GQ8(proj+RYn0SP56 zDbZl2RBa1F$a2=t8eX!`7XFxX_H44;hn3f85N__93A4`$(3wL}38g?j9A1X>i`IxG z*@R;SJdWQvNk}EDeydue(8xCjh#q)Tf+k-FaksxPC#X~L`cmp!u5KuxjRpp*;DMD# z&_H=*d7r(>lNMb8qSzf4qmhg*68v$OMT!L;x`$_+H;NRI4_8oZLr+E_;v>XY}9bfM6phlj@JPTvj$c$|RUE=MZE_@E)o}Ilz9mG#35~LSKcf=pV zK$*9;8_!}tQsUC=Lg$<(0sbbuSWrI+qWCqdX@QWx_Z@E1%LkJPbeO_IRg+C)%@6fO z03XOl3|0C~aoEcqV?mVVMWl_E{fO5=8Gl~dCMK^dJ)gU8C8-=it2~tQ6l{JOEtTKu zk5I3cPw4W~8o-~YQ@A~!)4zf;cx?Z0Z?-!uTy2q}dA-^t)b9e0k2va**SJ6B!?51`>}qk;P*S6VHY@&rpVYk zzn_`%9I@75p6`Dpj?S=dCefSic1#qb$X7SxTof}TC5%+xQsP_wlSJsrC6_y&`1{pB z$+@V|u}Dd}jQr!>#TeK5uFeh( z$^U6P;o#qKhN+@rWZ-y0{1|sox}p#!gwGs4OIoSbnY4|!dZoYd_3KQ|$M^vZ1@vRp zXy~i;h~JF?ABePaOPeD!`!zX9wY=H-56j2PD9{bG)l0aK8nOQGq}UN&#FsG9pb$4l zi5Vm`(fkP!u#lOwcT@4w_zC;TdYZXzVnag-OSm-@HK~S>cjFE>TSpQ zD|C>&Qq^o_Sj+kS_w-IEvb*XL2j}V3(xA|b>$0#@da41=mv}B?pK4&P9t_QgJwZYo z4ZSs1vVB|in-%YectIx?JhHVN+e3o(nAOPj5V*|LmRr$fi;Uz)bqz+jTg47n%QD%uQS@gw4KLya@m|Czl`_7bhDx zmj)NVFb}sd7bgoRr!XgHwc+T(|D)jGWNu^W`Ttk=h2(7erT~zaQHE4X83+9zi*b`0 literal 0 HcmV?d00001 diff --git a/assets/sponsor/jetbrains/logo.png b/assets/sponsor/jetbrains/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1ced6f3ab5ea809798b354b66fcbb80aa2c3f356 GIT binary patch literal 5880 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