From 1a64deeb894dc95e2645a75771732c6cc53a79ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 4 Oct 2023 01:35:06 +0200 Subject: Squash changes containing private information There were a lot of changes since the previous commit, but a lot of them contained personnal information about users. All thos changes got stashed into a single commit (history is kept in a different place) and private information was moved in a separate private repository --- systems/eldiron/base.nix | 371 + systems/eldiron/buildbot/default.nix | 310 + systems/eldiron/coturn.nix | 73 + systems/eldiron/databases/default.nix | 56 + systems/eldiron/databases/mariadb.nix | 188 + systems/eldiron/databases/openldap/default.nix | 304 + systems/eldiron/databases/postgresql.nix | 236 + systems/eldiron/databases/redis.nix | 138 + systems/eldiron/dns.nix | 290 + systems/eldiron/duply_backup.nix | 151 + systems/eldiron/ejabberd/default.nix | 141 + systems/eldiron/ejabberd/ejabberd.yml | 231 + systems/eldiron/ejabberd/warn_xmpp_email.py | 112 + systems/eldiron/flake.lock | 2758 ++++++ systems/eldiron/flake.nix | 90 + systems/eldiron/ftp.nix | 339 + systems/eldiron/ftp_sync.sh | 47 + systems/eldiron/gemini/default.nix | 50 + systems/eldiron/gemini/public/index.gmi | 70 + systems/eldiron/gitolite/default.nix | 127 + systems/eldiron/gitolite/gitolite_ldap_groups.sh | 15 + systems/eldiron/gitolite/ldap_gitolite.sh | 28 + systems/eldiron/irc.nix | 80 + systems/eldiron/mail/default.nix | 44 + systems/eldiron/mail/dovecot.nix | 348 + systems/eldiron/mail/postfix.nix | 497 ++ systems/eldiron/mail/rspamd.nix | 88 + systems/eldiron/mail/scan_reported_mails | 21 + systems/eldiron/mail/sieve_bin/imapsieve_copy | 8 + systems/eldiron/mail/sieve_scripts/backup.sieve | 7 + .../eldiron/mail/sieve_scripts/report_ham.sieve | 11 + .../eldiron/mail/sieve_scripts/report_spam.sieve | 3 + systems/eldiron/mail/sympa.nix | 232 + systems/eldiron/monitoring.nix | 51 + systems/eldiron/mpd.nix | 60 + systems/eldiron/pub/default.nix | 100 + systems/eldiron/pub/ldap_pub.sh | 38 + systems/eldiron/pub/restrict | 71 + systems/eldiron/pub/tmux.restrict.conf | 43 + systems/eldiron/tasks/default.nix | 384 + systems/eldiron/tasks/www/index.php | 168 + systems/eldiron/vpn/default.nix | 92 + systems/eldiron/vpn/tinc/host-down | 7 + systems/eldiron/vpn/tinc/host-up | 11 + systems/eldiron/vpn/tinc/tinc-down | 12 + systems/eldiron/vpn/tinc/tinc-up | 14 + systems/eldiron/vpn/tinc/tinc.conf | 11 + .../websites/_www/googleb6d69446ff4ca3e5.html | 1 + systems/eldiron/websites/_www/index.htm | 9 + .../eldiron/websites/_www/maintenance_immae.html | 58 + systems/eldiron/websites/_www/nossl.html | 11 + systems/eldiron/websites/assets/default.nix | 98 + systems/eldiron/websites/assets/static/favicon.png | Bin 0 -> 1734 bytes systems/eldiron/websites/assets/static/logger.png | Bin 0 -> 3340 bytes systems/eldiron/websites/assets/static/logger.txt | 3 + systems/eldiron/websites/assets/static/logo.jpg | Bin 0 -> 6931 bytes systems/eldiron/websites/assets/static/logo.txt | 7 + .../eldiron/websites/assets/static/logo_big.jpg | Bin 0 -> 16390 bytes .../eldiron/websites/assets/static/logo_big.txt | 7 + .../eldiron/websites/assets/static/logo_center.jpg | Bin 0 -> 29509 bytes .../eldiron/websites/assets/static/logo_center.txt | 8 + .../eldiron/websites/assets/static/monitoring.png | Bin 0 -> 57395 bytes .../eldiron/websites/assets/static/monitoring.txt | 3 + .../eldiron/websites/assets/static/photos/ct.jpg | Bin 0 -> 55914 bytes .../websites/assets/static/photos/fretlink.jpg | Bin 0 -> 1520106 bytes .../websites/assets/static/photos/raton.jpg | Bin 0 -> 17614 bytes systems/eldiron/websites/cloud/add-htaccess.php | 70 + systems/eldiron/websites/cloud/default.nix | 151 + systems/eldiron/websites/cloud/farm.nix | 221 + systems/eldiron/websites/commento/default.nix | 84 + systems/eldiron/websites/cryptpad/default.nix | 89 + systems/eldiron/websites/cryptpad/farm.nix | 186 + systems/eldiron/websites/dav/davical.nix | 128 + systems/eldiron/websites/dav/default.nix | 140 + systems/eldiron/websites/dav/www/index.html | 42 + systems/eldiron/websites/db/default.nix | 32 + systems/eldiron/websites/default.nix | 319 + systems/eldiron/websites/diaspora/default.nix | 224 + systems/eldiron/websites/ether/default.nix | 251 + .../websites/games/codenames/codenames.patch | 8306 +++++++++++++++++ .../eldiron/websites/games/codenames/default.nix | 76 + systems/eldiron/websites/games/codenames/deps.nix | 11 + .../eldiron/websites/games/codenames/elm-srcs.nix | 77 + .../eldiron/websites/games/codenames/frontend.nix | 22 + .../eldiron/websites/games/codenames/greenapid.nix | 18 + .../websites/games/codenames/greenapid.patch | 39 + .../websites/games/codenames/immae-assets.patch | 15 + .../websites/games/codenames/node-packages.nix | 7622 ++++++++++++++++ .../eldiron/websites/games/codenames/registry.dat | Bin 0 -> 105421 bytes systems/eldiron/websites/games/codenames/shell.nix | 50 + .../websites/games/codenames/wordlists/french.txt | 694 ++ .../websites/games/terraforming-mars/default.nix | 75 + .../games/terraforming-mars/immae-assets.patch | 13 + .../games/terraforming-mars/node-packages.nix | 4353 +++++++++ .../games/terraforming-mars/terraforming-mars.nix | 39 + systems/eldiron/websites/git/cgit_js.html | 16 + systems/eldiron/websites/git/default.nix | 98 + systems/eldiron/websites/git/gitweb.nix | 124 + systems/eldiron/websites/git/mantisbt.nix | 86 + systems/eldiron/websites/im/default.nix | 118 + systems/eldiron/websites/im/www/converse.html | 57 + systems/eldiron/websites/im/www/index.html | 47 + systems/eldiron/websites/immae/matrix/client | 11 + systems/eldiron/websites/immae/matrix/server | 3 + systems/eldiron/websites/immae/production.nix | 107 + systems/eldiron/websites/immae/release.nix | 40 + .../immae/sarl/certificates/2021-certificate.crt | 23 + systems/eldiron/websites/kanboard/farm.nix | 183 + systems/eldiron/websites/mail/default.nix | 141 + systems/eldiron/websites/mail/mta-sts.nix | 42 + systems/eldiron/websites/mail/rainloop.nix | 54 + systems/eldiron/websites/mail/roundcubemail.nix | 119 + systems/eldiron/websites/mail/www/index.html | 74 + systems/eldiron/websites/mastodon/default.nix | 174 + systems/eldiron/websites/mgoblin/default.nix | 173 + systems/eldiron/websites/moomin.txt | 16 + systems/eldiron/websites/nossl/index.html | 11 + systems/eldiron/websites/peertube/default.nix | 147 + systems/eldiron/websites/performance/default.nix | 93 + systems/eldiron/websites/stats/default.nix | 51 + systems/eldiron/websites/tools/adminer.nix | 83 + systems/eldiron/websites/tools/default.nix | 547 ++ systems/eldiron/websites/tools/dmarc_reports.nix | 61 + .../eldiron/websites/tools/dmarc_reports/api.php | 122 + .../eldiron/websites/tools/dmarc_reports/app.js | 103 + .../websites/tools/dmarc_reports/default.css | 130 + .../websites/tools/dmarc_reports/index.html | 128 + systems/eldiron/websites/tools/dokuwiki.nix | 106 + systems/eldiron/websites/tools/grocy.nix | 48 + systems/eldiron/websites/tools/kanboard.nix | 81 + systems/eldiron/websites/tools/landing.nix | 38 + .../websites/tools/landing/ldap_password.php | 170 + .../websites/tools/landing/ldap_ssh_keys.php | 343 + systems/eldiron/websites/tools/landing/myip.php | 1 + .../websites/tools/landing/node-packages.nix | 130 + .../websites/tools/landing/yarn-packages.nix | 9357 ++++++++++++++++++++ systems/eldiron/websites/tools/ldap.nix | 77 + systems/eldiron/websites/tools/phpbb.nix | 69 + systems/eldiron/websites/tools/rompr.nix | 86 + systems/eldiron/websites/tools/shaarli.nix | 102 + systems/eldiron/websites/tools/ttrss.nix | 167 + systems/eldiron/websites/tools/wallabag.nix | 180 + systems/eldiron/websites/tools/webhooks.nix | 25 + systems/eldiron/websites/tools/ympd.nix | 54 + systems/eldiron/websites/tools/yourls.nix | 118 + systems/eldiron/websites/visio/default.nix | 63 + systems/eldiron/websites/vpn/default.nix | 13 + systems/eldiron/websites/vpn/www/index.html | 91 + systems/eldiron/websites/vpn/www/style.css | 61 + systems/eldiron/webstats/default.nix | 80 + systems/eldiron/webstats/goaccess.conf | 100 + 151 files changed, 46820 insertions(+) create mode 100644 systems/eldiron/base.nix create mode 100644 systems/eldiron/buildbot/default.nix create mode 100644 systems/eldiron/coturn.nix create mode 100644 systems/eldiron/databases/default.nix create mode 100644 systems/eldiron/databases/mariadb.nix create mode 100644 systems/eldiron/databases/openldap/default.nix create mode 100644 systems/eldiron/databases/postgresql.nix create mode 100644 systems/eldiron/databases/redis.nix create mode 100644 systems/eldiron/dns.nix create mode 100644 systems/eldiron/duply_backup.nix create mode 100644 systems/eldiron/ejabberd/default.nix create mode 100644 systems/eldiron/ejabberd/ejabberd.yml create mode 100755 systems/eldiron/ejabberd/warn_xmpp_email.py create mode 100644 systems/eldiron/flake.lock create mode 100644 systems/eldiron/flake.nix create mode 100644 systems/eldiron/ftp.nix create mode 100755 systems/eldiron/ftp_sync.sh create mode 100644 systems/eldiron/gemini/default.nix create mode 100644 systems/eldiron/gemini/public/index.gmi create mode 100644 systems/eldiron/gitolite/default.nix create mode 100755 systems/eldiron/gitolite/gitolite_ldap_groups.sh create mode 100644 systems/eldiron/gitolite/ldap_gitolite.sh create mode 100644 systems/eldiron/irc.nix create mode 100644 systems/eldiron/mail/default.nix create mode 100644 systems/eldiron/mail/dovecot.nix create mode 100644 systems/eldiron/mail/postfix.nix create mode 100644 systems/eldiron/mail/rspamd.nix create mode 100755 systems/eldiron/mail/scan_reported_mails create mode 100755 systems/eldiron/mail/sieve_bin/imapsieve_copy create mode 100644 systems/eldiron/mail/sieve_scripts/backup.sieve create mode 100644 systems/eldiron/mail/sieve_scripts/report_ham.sieve create mode 100644 systems/eldiron/mail/sieve_scripts/report_spam.sieve create mode 100644 systems/eldiron/mail/sympa.nix create mode 100644 systems/eldiron/monitoring.nix create mode 100644 systems/eldiron/mpd.nix create mode 100644 systems/eldiron/pub/default.nix create mode 100644 systems/eldiron/pub/ldap_pub.sh create mode 100644 systems/eldiron/pub/restrict create mode 100644 systems/eldiron/pub/tmux.restrict.conf create mode 100644 systems/eldiron/tasks/default.nix create mode 100644 systems/eldiron/tasks/www/index.php create mode 100644 systems/eldiron/vpn/default.nix create mode 100755 systems/eldiron/vpn/tinc/host-down create mode 100755 systems/eldiron/vpn/tinc/host-up create mode 100755 systems/eldiron/vpn/tinc/tinc-down create mode 100755 systems/eldiron/vpn/tinc/tinc-up create mode 100644 systems/eldiron/vpn/tinc/tinc.conf create mode 100644 systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html create mode 100644 systems/eldiron/websites/_www/index.htm create mode 100644 systems/eldiron/websites/_www/maintenance_immae.html create mode 100644 systems/eldiron/websites/_www/nossl.html create mode 100644 systems/eldiron/websites/assets/default.nix create mode 100644 systems/eldiron/websites/assets/static/favicon.png create mode 100644 systems/eldiron/websites/assets/static/logger.png create mode 100644 systems/eldiron/websites/assets/static/logger.txt create mode 100644 systems/eldiron/websites/assets/static/logo.jpg create mode 100644 systems/eldiron/websites/assets/static/logo.txt create mode 100644 systems/eldiron/websites/assets/static/logo_big.jpg create mode 100644 systems/eldiron/websites/assets/static/logo_big.txt create mode 100644 systems/eldiron/websites/assets/static/logo_center.jpg create mode 100644 systems/eldiron/websites/assets/static/logo_center.txt create mode 100644 systems/eldiron/websites/assets/static/monitoring.png create mode 100644 systems/eldiron/websites/assets/static/monitoring.txt create mode 100644 systems/eldiron/websites/assets/static/photos/ct.jpg create mode 100644 systems/eldiron/websites/assets/static/photos/fretlink.jpg create mode 100644 systems/eldiron/websites/assets/static/photos/raton.jpg create mode 100644 systems/eldiron/websites/cloud/add-htaccess.php create mode 100644 systems/eldiron/websites/cloud/default.nix create mode 100644 systems/eldiron/websites/cloud/farm.nix create mode 100644 systems/eldiron/websites/commento/default.nix create mode 100644 systems/eldiron/websites/cryptpad/default.nix create mode 100644 systems/eldiron/websites/cryptpad/farm.nix create mode 100644 systems/eldiron/websites/dav/davical.nix create mode 100644 systems/eldiron/websites/dav/default.nix create mode 100644 systems/eldiron/websites/dav/www/index.html create mode 100644 systems/eldiron/websites/db/default.nix create mode 100644 systems/eldiron/websites/default.nix create mode 100644 systems/eldiron/websites/diaspora/default.nix create mode 100644 systems/eldiron/websites/ether/default.nix create mode 100644 systems/eldiron/websites/games/codenames/codenames.patch create mode 100644 systems/eldiron/websites/games/codenames/default.nix create mode 100644 systems/eldiron/websites/games/codenames/deps.nix create mode 100644 systems/eldiron/websites/games/codenames/elm-srcs.nix create mode 100644 systems/eldiron/websites/games/codenames/frontend.nix create mode 100644 systems/eldiron/websites/games/codenames/greenapid.nix create mode 100644 systems/eldiron/websites/games/codenames/greenapid.patch create mode 100644 systems/eldiron/websites/games/codenames/immae-assets.patch create mode 100644 systems/eldiron/websites/games/codenames/node-packages.nix create mode 100644 systems/eldiron/websites/games/codenames/registry.dat create mode 100644 systems/eldiron/websites/games/codenames/shell.nix create mode 100644 systems/eldiron/websites/games/codenames/wordlists/french.txt create mode 100644 systems/eldiron/websites/games/terraforming-mars/default.nix create mode 100644 systems/eldiron/websites/games/terraforming-mars/immae-assets.patch create mode 100644 systems/eldiron/websites/games/terraforming-mars/node-packages.nix create mode 100644 systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix create mode 100644 systems/eldiron/websites/git/cgit_js.html create mode 100644 systems/eldiron/websites/git/default.nix create mode 100644 systems/eldiron/websites/git/gitweb.nix create mode 100644 systems/eldiron/websites/git/mantisbt.nix create mode 100644 systems/eldiron/websites/im/default.nix create mode 100644 systems/eldiron/websites/im/www/converse.html create mode 100644 systems/eldiron/websites/im/www/index.html create mode 100644 systems/eldiron/websites/immae/matrix/client create mode 100644 systems/eldiron/websites/immae/matrix/server create mode 100644 systems/eldiron/websites/immae/production.nix create mode 100644 systems/eldiron/websites/immae/release.nix create mode 100644 systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt create mode 100644 systems/eldiron/websites/kanboard/farm.nix create mode 100644 systems/eldiron/websites/mail/default.nix create mode 100644 systems/eldiron/websites/mail/mta-sts.nix create mode 100644 systems/eldiron/websites/mail/rainloop.nix create mode 100644 systems/eldiron/websites/mail/roundcubemail.nix create mode 100644 systems/eldiron/websites/mail/www/index.html create mode 100644 systems/eldiron/websites/mastodon/default.nix create mode 100644 systems/eldiron/websites/mgoblin/default.nix create mode 100644 systems/eldiron/websites/moomin.txt create mode 100644 systems/eldiron/websites/nossl/index.html create mode 100644 systems/eldiron/websites/peertube/default.nix create mode 100644 systems/eldiron/websites/performance/default.nix create mode 100644 systems/eldiron/websites/stats/default.nix create mode 100644 systems/eldiron/websites/tools/adminer.nix create mode 100644 systems/eldiron/websites/tools/default.nix create mode 100644 systems/eldiron/websites/tools/dmarc_reports.nix create mode 100644 systems/eldiron/websites/tools/dmarc_reports/api.php create mode 100644 systems/eldiron/websites/tools/dmarc_reports/app.js create mode 100644 systems/eldiron/websites/tools/dmarc_reports/default.css create mode 100644 systems/eldiron/websites/tools/dmarc_reports/index.html create mode 100644 systems/eldiron/websites/tools/dokuwiki.nix create mode 100644 systems/eldiron/websites/tools/grocy.nix create mode 100644 systems/eldiron/websites/tools/kanboard.nix create mode 100644 systems/eldiron/websites/tools/landing.nix create mode 100644 systems/eldiron/websites/tools/landing/ldap_password.php create mode 100644 systems/eldiron/websites/tools/landing/ldap_ssh_keys.php create mode 100644 systems/eldiron/websites/tools/landing/myip.php create mode 100644 systems/eldiron/websites/tools/landing/node-packages.nix create mode 100644 systems/eldiron/websites/tools/landing/yarn-packages.nix create mode 100644 systems/eldiron/websites/tools/ldap.nix create mode 100644 systems/eldiron/websites/tools/phpbb.nix create mode 100644 systems/eldiron/websites/tools/rompr.nix create mode 100644 systems/eldiron/websites/tools/shaarli.nix create mode 100644 systems/eldiron/websites/tools/ttrss.nix create mode 100644 systems/eldiron/websites/tools/wallabag.nix create mode 100644 systems/eldiron/websites/tools/webhooks.nix create mode 100644 systems/eldiron/websites/tools/ympd.nix create mode 100644 systems/eldiron/websites/tools/yourls.nix create mode 100644 systems/eldiron/websites/visio/default.nix create mode 100644 systems/eldiron/websites/vpn/default.nix create mode 100644 systems/eldiron/websites/vpn/www/index.html create mode 100644 systems/eldiron/websites/vpn/www/style.css create mode 100644 systems/eldiron/webstats/default.nix create mode 100644 systems/eldiron/webstats/goaccess.conf (limited to 'systems/eldiron') diff --git a/systems/eldiron/base.nix b/systems/eldiron/base.nix new file mode 100644 index 0000000..cda518e --- /dev/null +++ b/systems/eldiron/base.nix @@ -0,0 +1,371 @@ +{ config, pkgs, lib, php, name, secrets, ... }: +{ + # ssh-keyscan eldiron | nix-shell -p ssh-to-age --run ssh-to-age + secrets.ageKeys = [ "age1dxr5lhvtnjssfaqpnf6qx80h8gfwkxg3tdf35m6n9wljmk7wadfs3kmahj" ]; + boot = { + kernelModules = [ "kvm-intel" ]; + blacklistedKernelModules = [ "nvidiafb" ]; + loader.timeout = 1; + loader.grub.devices = [ "/dev/sda" "/dev/sdc" ]; + kernel.sysctl = { + # https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md + "net.ipv4.tcp_sack" = 0; + }; + supportedFilesystems = [ "zfs" ]; + kernelParams = ["zfs.zfs_arc_max=6442450944"]; + kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; + initrd.availableKernelModules = [ "ahci" "sd_mod" ]; + initrd.secrets = { + "/boot/pass.key" = "/boot/pass.key"; + }; + }; + services.udev.extraRules = '' + ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="c8:60:00:56:a0:88", NAME="eth0" + ''; + nix.settings.max-jobs = 8; + nixpkgs.config.permittedInsecurePackages = [ + "python-2.7.18.6" # for nagios-cli + "nodejs-16.20.2" # for landing page building + ]; + + nixpkgs.overlays = [ + php.overlays.php + ]; + powerManagement.cpuFreqGovernor = "powersave"; + + security.acme.certs."${name}".postRun = builtins.concatStringsSep "\n" [ + (lib.optionalString config.services.websites.env.production.enable "/run/current-system/sw/bin/machinectl shell httpd-production /usr/bin/env systemctl reload httpd.service") + (lib.optionalString config.services.websites.env.integration.enable "/run/current-system/sw/bin/machinectl shell httpd-integration /usr/bin/env systemctl reload httpd.service") + ]; + + fileSystems = { + # pools: + # zpool: ashift=12 + # zfast: ashift=12 + # zfs: + # zpool/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy + # zpool/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key + # zpool/root/var: atime=on + # zfast/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy + # zfast/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key + # zfast/root/etc: ø + # zfast/root/nix: ø + # zfast/root/tmp: async=disabled + # zfast/root/var: atime=on + # zfast/root/var/lib: ø + # zfast/root/var/lib/mysql: logbias=throughput ; atime=off ; primarycache=metadata + # zfast/root/var/lib/postgresql: recordsize=8K ; atime=off ; logbias=throughput + # zfast/root/var/lib/postgresql/11.0: ø + # zfast/root/var/lib/postgresql/11.0/pg_wal: ø + "/" = { fsType = "zfs"; device = "zpool/root"; }; + "/boot" = { fsType = "ext4"; device = "/dev/disk/by-uuid/e6bb18fb-ff56-4b5f-ae9f-e60d40dc0622"; }; + "/etc" = { fsType = "zfs"; device = "zpool/root/etc"; }; + "/nix" = { fsType = "zfs"; device = "zfast/root/nix"; }; + "/tmp" = { fsType = "zfs"; device = "zfast/root/tmp"; }; + "/var" = { fsType = "zfs"; device = "zpool/root/var"; }; + "/var/lib/mysql" = { fsType = "zfs"; device = "zfast/root/var/lib/mysql"; }; + "/var/lib/postgresql" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql"; }; + "/var/lib/postgresql/11.0" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0"; }; + "/var/lib/postgresql/11.0/pg_wal" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0/pg_wal"; }; + }; + swapDevices = [ { label = "swap1"; } { label = "swap2"; } ]; + hardware.enableRedistributableFirmware = true; + + services.zfs = { + autoScrub = { + enable = false; + }; + }; + networking = { + hostId = "8262ca33"; # generated with head -c4 /dev/urandom | od -A none -t x4 + firewall.enable = true; + firewall.allowedTCPPorts = [ config.myEnv.ports.zrepl_flony ]; + # FIXME: on next reboot, remove the /27 and the localCommands + interfaces."eth0".ipv4.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = 32; }) (ips.ip4 or [])) + (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips)) + ++ [ { address = lib.head config.hostEnv.ips.main.ip4; prefixLength = 27; } ]; + interfaces."eth0".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or [])) + config.hostEnv.ips); + defaultGateway = "176.9.151.65"; + localCommands = '' + # FIXME: Those commands were added by nixops and may not be + # actually needed + ip -6 addr add '2a01:4f8:160:3445::/64' dev 'eth0' || true + ip -4 route change '176.9.151.64/27' via '176.9.151.65' dev 'eth0' || true + ip -6 route add default via 'fe80::1' dev eth0 || true + ''; + nameservers = [ + "213.133.98.98" + "213.133.99.99" + "213.133.100.100" + "2a01:4f8:0:a0a1::add:1010" + "2a01:4f8:0:a102::add:9999" + "2a01:4f8:0:a111::add:9898" + ]; + }; + + imports = [ + secrets.nixosModules.users-config-eldiron + ./databases + ./databases/mariadb.nix + ./databases/openldap + ./databases/postgresql.nix + ./databases/redis.nix + + + ./monitoring.nix + ./ejabberd + ./buildbot + ./coturn.nix + ./dns.nix + ./duply_backup.nix + ./gemini + ./gitolite + ./mail + ./websites + ./webstats + ./irc.nix + ./pub + ./tasks + ./ftp.nix + ./mpd.nix + ./vpn + ]; + + myServices.buildbot.enable = true; + myServices.databases.enable = true; + myServices.gitolite.enable = true; + myServices.monitoring.enable = true; + myServices.irc.enable = true; + myServices.pub.enable = true; + myServices.tasks.enable = true; + myServices.mpd.enable = true; + myServices.dns.enable = true; + myServices.websites.enable = true; + myServices.gemini.enable = true; + myServices.mail.enable = true; + myServices.ejabberd.enable = true; + myServices.vpn.enable = true; + myServices.ftp.enable = true; + + myServices.chatonsProperties.hostings.infogerance = { + file.datetime = "2022-08-27T18:50:00"; + hosting = { + name = "Infogérance"; + description = "Administration de serveurs"; + website = "https://www.immae.eu/"; + logo = "https://assets.immae.eu/logo.jpg"; + type = "HOSTEDSERVER"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + + services.netdata.enable = true; + services.netdata.config.global."memory mode" = "none"; + services.netdata.config.health."enabled" = "no"; + services.netdata.config.web.mode = "none"; + users.users."${config.services.netdata.user}".extraGroups = [ "keys" ]; + services.netdata.configDir."stream.conf" = config.secrets.fullPaths."netdata-stream.conf"; + secrets.keys = { + "ldap/pam_pgsql" = { + user = "root"; + group = "root"; + permissions = "0400"; + text = '' + database = immae + user = immae_auth_read + password = {{ .postgresql.immae_auth_read }} + table = ldap_users + user_column = login + pw_type = function + auth_query = SELECT (mechanism = 'SSHA' AND password = encode(digest( %p || salt, 'sha1'), 'hex')) FROM ldap_users WHERE login = %u OR login || '@' || realm = %u + #pwd_query = WITH newsalt as (select gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( %p || (SELECT * FROM newsalt), 'sha1'), 'hex'), salt = (SELECT * FROM newsalt), mechanism = 'SSHA' WHERE login = %u OR login || '@' || realm = %u + ''; + }; + + "netdata-stream.conf" = { + user = config.services.netdata.user; + group = config.services.netdata.group; + permissions = "0400"; + text = '' + [stream] + enabled = yes + destination = ${config.myEnv.monitoring.netdata_aggregator} + api key = ${config.myEnv.monitoring.netdata_keys.eldiron} + ''; + }; + "zrepl_backup/identity" = { + user = "root"; + group = "root"; + permissions = "0400"; + text = config.myEnv.zrepl_backup.ssh_key.private; + }; + "zrepl/${name}.key" = { + permissions = "0400"; + text = config.myEnv.zrepl_backup.certs."${name}".key; + user = "root"; + group = "root"; + }; + } // builtins.listToAttrs (map (x: lib.attrsets.nameValuePair "zrepl/certificates/${x}.crt" { + permissions = "0400"; + text = config.myEnv.zrepl_backup.certs."${x}".certificate; + user = "root"; + group = "root"; + }) (builtins.attrNames config.myEnv.zrepl_backup.certs)); + + programs.ssh.knownHosts.dilion = { + extraHostNames = ["dilion.immae.eu"]; + publicKey = config.myEnv.servers.dilion.hostKey; + }; + + services.cron = { + enable = true; + mailto = "cron@immae.eu"; + systemCronJobs = [ + '' + 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "immae.eu.*Recipient address rejected" + # Need a way to blacklist properly + # 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "NOQUEUE:" + 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtp -g "status=bounced" + '' + ]; + }; + + environment.systemPackages = [ pkgs.bindfs ]; + + environment.etc."mdadm.conf" = { + enable = true; + mode = "0644"; + user = "root"; + text = "MAILADDR ${config.myEnv.monitoring.email}"; + }; + + systemd.services.zrepl.path = [ pkgs.openssh ]; + services.zrepl = { + enable = true; + settings = { + jobs = [ + { + type = "push"; + # must not change + name = "backup-to-dilion"; + filesystems."zpool/root" = true; + filesystems."zpool/root/etc" = true; + filesystems."zpool/root/var<" = true; + connect = { + address = "dilion.immae.eu:19000"; + type = "tls"; + server_cn = "dilion"; + ca = config.secrets.fullPaths."zrepl/certificates/dilion.crt"; + cert = config.secrets.fullPaths."zrepl/certificates/eldiron.crt"; + key = config.secrets.fullPaths."zrepl/eldiron.key"; + }; + snapshotting = { + type = "periodic"; + prefix = "zrepl_"; + interval = "1h"; + # hooks = [ + # { + # type = "mysql-lock-tables"; + # dsn = "${config.myEnv.zrepl_backup.mysql.user}:${config.myEnv.zrepl_backup.mysql.password}@tcp(localhost)/"; + # filesystems."zpool/root/var" = true; + # } + # { + # type = "command"; + # path = pkgs.writeScript "redis-dump" '' + # #!${pkgs.stdenv.shell} + # ${pkgs.redis}/bin/redis-cli bgsave + # ''; + # err_is_fatal = false; + # filesystems."zpool/root/var" = true; + # } + # ]; + }; + send.encrypted = true; + pruning.keep_sender = [ + { type = "regex"; regex = "^manual_.*"; } + { type = "grid"; grid = "24x1h | 7x1d | 4x7d | 6x30d"; regex = "^zrepl_.*"; } + ]; + pruning.keep_receiver = [ + { type = "regex"; regex = "^manual_.*"; } + { type = "grid"; grid = "6x4h | 7x1d | 4x7d | 6x30d"; regex = "^zrepl_.*"; } + ]; + } + { + type = "source"; + # must not change + name = "backup-to-wd-zpool"; + serve.type = "tls"; + serve.listen = ":${builtins.toString config.myEnv.ports.zrepl_flony}"; + serve.ca = config.secrets.fullPaths."zrepl/certificates/flony.crt"; + serve.cert = config.secrets.fullPaths."zrepl/certificates/eldiron.crt"; + serve.key = config.secrets.fullPaths."zrepl/eldiron.key"; + serve.client_cns = [ "flony" ]; + filesystems."zpool/root" = true; + filesystems."zpool/root/etc" = true; + filesystems."zpool/root/var<" = true; + filesystems."zfast/root/var<" = true; + send.encrypted = true; + snapshotting.type = "manual"; + } + ]; + }; + }; + + environment.etc."fail2ban/filter.d/postgresql.conf".text = '' + [Definition] + failregex = \S+ FATAL: password authentication failed for user .+$ + \S+ FATAL: PAM authentication failed for user.+$ + \S+ FATAL: no pg_hba.conf entry for host.+$ + ''; + environment.etc."fail2ban/filter.d/mysqld-auth.local".text = '' + [Definition] + _daemon = mysql[-\w]* + ''; + services.fail2ban.jails.dovecot = '' + enabled = true + ''; + services.fail2ban.jails.postfix-sasl = '' + enabled = true + ''; + services.fail2ban.jails.proftpd = '' + enabled = true + ''; + services.fail2ban.jails.postgresql = '' + enabled = true + port = 5432 + logpath = %(syslog_daemon)s + backend = %(default_backend)s + journalmatch = _SYSTEMD_UNIT=postgresql.service + _COMM=postgres + ''; + services.fail2ban.jails.mysqld-auth = '' + enabled = true + journalmatch = _SYSTEMD_UNIT=mysql.service + _COMM=mysqld + ''; + # This value determines the NixOS release with which your system is + # to be compatible, in order to avoid breaking some software such as + # database servers. You should change this only after NixOS release + # notes say you should. + # https://nixos.org/nixos/manual/release-notes.html + system.stateVersion = "23.05"; # Did you read the comment? + + security.pam.services.ldap.text = '' + # Authentication from ldap for pgsql + auth required ${pkgs.pam_pgsql}/lib/security/pam_pgsql.so config_file=/var/secrets/ldap/pam_pgsql + account required ${pkgs.pam_pgsql}/lib/security/pam_pgsql.so config_file=/var/secrets/ldap/pam_pgsql + ''; + services.saslauthd = { + enable = true; + mechanism = "pam"; + }; + environment.etc."sasl2/slapd.conf".text = '' + mech_list: plain + pwcheck_method: saslauthd + saslauthd_path: /run/saslauthd/mux + ''; +} diff --git a/systems/eldiron/buildbot/default.nix b/systems/eldiron/buildbot/default.nix new file mode 100644 index 0000000..e86b081 --- /dev/null +++ b/systems/eldiron/buildbot/default.nix @@ -0,0 +1,310 @@ +{ lib, pkgs, config, buildbot, ... }: +let + varDir = "/var/lib/buildbot"; + bb-python = buildbot.pythonModule; +in +{ + options = { + myServices.buildbot.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable buildbot. + ''; + }; + }; + + config = lib.mkIf config.myServices.buildbot.enable { + myEnv.buildbot.projects.test = { + name = "test"; + workerPort = config.myEnv.ports.buildbot_test; + packages = [ pkgs.git pkgs.gzip pkgs.openssh ]; + pythonPathHome = false; + secrets = { + apprise_webhooks = builtins.concatStringsSep "\n" [ + "{{ .apprise_webhooks.matrix_immae_eu_alert }}" + ]; + notify_xmpp_password = "{{ .xmpp.notify_bot }}"; + }; + activationScript = '' + install -m 0755 -o buildbot -g buildbot -d /var/lib/ftp/release.immae.eu/test + ''; + webhookTokens = [ + "{{ .buildbot.webhookTokens.Immae }}" + "{{ .buildbot.webhookTokens.Immae }}" + ]; + }; + + myServices.chatonsProperties.hostings.buildbot = { + file.datetime = "2022-08-21T10:37:00"; + hosting = { + name = "Buildbot"; + description = "Python-based continuous integration testing framework"; + type = "INSTANCE"; + website = "https://git.immae.eu"; + logo = "https://www.buildbot.net/img/icon.png"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/forge-logicielle.html"; + }; + software = { + name = "Buildbot"; + website = "https://www.buildbot.net/"; + license.url = "https://github.com/buildbot/buildbot/blob/master/LICENSE"; + license.name = "GNU General Public License v2.0"; + version = pkgs.buildbot.version; + source.url = "https://github.com/buildbot/buildbot"; + }; + }; + nixpkgs.overlays = [ + (self: super: { + follow-systemd-unit = self.writeScriptBin "follow-systemd-unit" '' + #!${self.stdenv.shell} + + set -euo pipefail + + service=$1 + before_invocation_id=$2 + + get_id() { + systemctl show -p InvocationID --value "$service" + } + + while [ "$(get_id)" = "$before_invocation_id" ]; do sleep 1; done + + invocation_id="$(get_id)" + cursor="$(mktemp)" + trap "rm -f $cursor" EXIT + + get_logs() { + journalctl --quiet --cursor-file=$cursor INVOCATION_ID=$invocation_id + _SYSTEMD_INVOCATION_ID=$invocation_id + } + + while [ -n "$(systemctl show -p Job --value "$service")" ]; do + get_logs + done + get_logs + ''; + }) + ]; + ids.uids.buildbot = config.myEnv.buildbot.user.uid; + ids.gids.buildbot = config.myEnv.buildbot.user.gid; + + users.groups.buildbot.gid = config.ids.gids.buildbot; + users.users.buildbot = { + name = "buildbot"; + uid = config.ids.uids.buildbot; + group = "buildbot"; + description = "Buildbot user"; + home = varDir; + extraGroups = [ "keys" "systemd-journal" ]; + useDefaultShell = true; + openssh.authorizedKeys.keys = [ config.myEnv.buildbot.ssh_key.public ]; + }; + + services.websites.env.tools.watchPaths = lib.attrsets.mapAttrsToList + (k: project: config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include") + config.myEnv.buildbot.projects; + + services.websites.env.tools.vhostConfs.git.extraConfig = lib.attrsets.mapAttrsToList (k: project: '' + RedirectMatch permanent "^/buildbot/${project.name}$" "/buildbot/${project.name}/" + RewriteEngine On + RewriteRule ^/buildbot/${project.name}/ws(.*)$ unix:///run/buildbot/${project.name}.sock|ws://git.immae.eu/ws$1 [P,NE,QSA,L] + ProxyPass /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/ + ProxyPassReverse /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/ + + Use LDAPConnect + Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu + + SetEnvIf X-Url-Scheme https HTTPS=1 + ProxyPreserveHost On + + + + Require local + Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu + Include ${config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include"} + + + '') config.myEnv.buildbot.projects; + + system.activationScripts = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { + deps = [ "users" "wrappers" ]; + text = '' + install -m 755 -o buildbot -g buildbot -d ${varDir}/${project.name} + + ${project.activationScript} + ''; + }) config.myEnv.buildbot.projects; + + secrets.keys = lib.listToAttrs ( + lib.lists.flatten ( + lib.attrsets.mapAttrsToList (k: project: + lib.attrsets.mapAttrsToList (k: v: + (lib.nameValuePair "buildbot/${project.name}/${k}" { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = v; + }) + ) project.secrets + ++ [ + (lib.nameValuePair "buildbot/${project.name}/webhook-httpd-include" { + permissions = "0600"; + user = "wwwrun"; + group = "wwwrun"; + text = lib.optionalString (project.webhookTokens != null) '' + Require expr "req('Access-Key') in { ${builtins.concatStringsSep ", " (map (x: "'${x}'") project.webhookTokens)} }" + ''; + }) + (lib.nameValuePair "buildbot/${project.name}/environment_file" { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + keyDependencies = [ (buildbot.buildbot_config project).src ] ++ project.secretsDeps; + text = let + project_env = with lib.attrsets; + mapAttrs' (k: v: nameValuePair "BUILDBOT_${k}" v) project.environment // + { + BUILDBOT_PROJECT_DIR = (buildbot.buildbot_config project).src; + BUILDBOT_WORKER_PORT = builtins.toString project.workerPort; + BUILDBOT_HOST = config.hostEnv.fqdn; + BUILDBOT_VIRT_URL = "qemu+ssh://libvirt@dilion.immae.eu/system"; + }; + in builtins.concatStringsSep "\n" + (lib.mapAttrsToList (envK: envV: "${envK}=${envV}") project_env); + }) + ] + ) config.myEnv.buildbot.projects + ) + ) // { + "buildbot/ldap" = { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = config.myEnv.buildbot.ldap.password; + }; + "buildbot/worker_password" = { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = config.myEnv.buildbot.workerPassword; + }; + "buildbot/ssh_key" = { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = config.myEnv.buildbot.ssh_key.private; + }; + "buildbot/ssh_known_hosts" = { + permissions = "0644"; + user = "buildbot"; + group = "buildbot"; + text = '' + git.immae.eu ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF + eldiron ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF + phare.normalesup.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN2GomItXICXpCtCFRMT2xuerqx2nLMO/3mNUuWyzFr1 + ''; + }; + }; + + services.filesWatcher = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { + restart = true; + paths = [ + config.secrets.fullPaths."buildbot/ldap" + config.secrets.fullPaths."buildbot/worker_password" + config.secrets.fullPaths."buildbot/ssh_key" + config.secrets.fullPaths."buildbot/${project.name}/environment_file" + ] ++ lib.attrsets.mapAttrsToList (k: v: config.secrets.fullPaths."buildbot/${project.name}/${k}") project.secrets; + }) config.myEnv.buildbot.projects; + + systemd.slices.buildbot = { + description = "buildbot slice"; + }; + + networking.firewall.allowedTCPPorts = lib.attrsets.mapAttrsToList (k: v: v.workerPort) config.myEnv.buildbot.projects; + systemd.services = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { + description = "Buildbot Continuous Integration Server ${project.name}."; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + path = project.packages; + preStart = let + master-cfg = "${buildbot.buildbot_common}/${bb-python.pythonForBuild.sitePackages}/buildbot_common/master.cfg"; + tac_file = pkgs.writeText "buildbot.tac" '' + import os + + from twisted.application import service + from buildbot.master import BuildMaster + + basedir = '${varDir}/${project.name}' + rotateLength = 10000000 + maxRotatedFiles = 10 + configfile = '${master-cfg}' + + # Default umask for server + umask = None + + # if this is a relocatable tac file, get the directory containing the TAC + if basedir == '.': + import os + basedir = os.path.abspath(os.path.dirname(__file__)) + + # note: this line is matched against to check that this is a buildmaster + # directory; do not edit it. + application = service.Application('buildmaster') + from twisted.python.logfile import LogFile + from twisted.python.log import ILogObserver, FileLogObserver + logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength, + maxRotatedFiles=maxRotatedFiles) + application.setComponent(ILogObserver, FileLogObserver(logfile).emit) + + m = BuildMaster(basedir, configfile, umask) + m.setServiceParent(application) + m.log_rotation.rotateLength = rotateLength + m.log_rotation.maxRotatedFiles = maxRotatedFiles + ''; + in '' + if [ ! -f ${varDir}/${project.name}/buildbot.tac ]; then + ${buildbot}/bin/buildbot create-master -c "${master-cfg}" "${varDir}/${project.name}" + rm -f ${varDir}/${project.name}/master.cfg.sample + rm -f ${varDir}/${project.name}/buildbot.tac + fi + ln -sf ${tac_file} ${varDir}/${project.name}/buildbot.tac + # different buildbots may be trying that simultaneously, add the || true to avoid complaining in case of race + install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_key"} ${varDir}/buildbot_key || true + install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_known_hosts"} ${varDir}/buildbot_hosts || true + buildbot_secrets=${varDir}/${project.name}/secrets + install -m 0700 -o buildbot -g buildbot -d $buildbot_secrets + install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ldap"} $buildbot_secrets/ldap + install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/worker_password"} $buildbot_secrets/worker_password + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList + (k: v: "install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/${project.name}/${k}"} $buildbot_secrets/${k}") project.secrets + )} + ${buildbot}/bin/buildbot upgrade-master ${varDir}/${project.name} + ''; + environment = let + HOME = "${varDir}/${project.name}"; + PYTHONPATH = "${bb-python.withPackages (self: + buildbot.common_packages self ++ + [ (buildbot.buildbot_config project) ] + )}/${bb-python.sitePackages}${if project.pythonPathHome then ":${varDir}/${project.name}/.local/${bb-python.sitePackages}" else ""}"; + in { inherit PYTHONPATH HOME; }; + + serviceConfig = { + Slice = "buildbot.slice"; + Type = "forking"; + User = "buildbot"; + Group = "buildbot"; + RuntimeDirectory = "buildbot"; + RuntimeDirectoryPreserve = "yes"; + StateDirectory = "buildbot"; + SupplementaryGroups = "keys"; + WorkingDirectory = "${varDir}/${project.name}"; + ExecStart = "${buildbot}/bin/buildbot start"; + EnvironmentFile = config.secrets.fullPaths."buildbot/${project.name}/environment_file"; + }; + }) config.myEnv.buildbot.projects; + }; +} diff --git a/systems/eldiron/coturn.nix b/systems/eldiron/coturn.nix new file mode 100644 index 0000000..d8b02c5 --- /dev/null +++ b/systems/eldiron/coturn.nix @@ -0,0 +1,73 @@ +{ config, name, lib, pkgs, ... }: +{ + config = lib.mkIf (name == "eldiron") { + myServices.chatonsProperties.services.coturn = { + file.datetime = "2022-08-27T19:00:00"; + service = { + name = "Coturn"; + description = "coturn TURN server"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "FULL"; + install.type = "PACKAGE"; + }; + software = { + name = "coturn"; + website = "https://github.com/coturn/coturn"; + license.url = "https://github.com/coturn/coturn/blob/master/LICENSE"; + license.name = "3-Clause BSD License"; + version = pkgs.coturn.version; + source.url = "https://github.com/coturn/coturn"; + }; + }; + networking.firewall.allowedTCPPorts = [ + config.services.coturn.alt-listening-port + config.services.coturn.alt-tls-listening-port + config.services.coturn.listening-port + config.services.coturn.tls-listening-port + ]; + networking.firewall.allowedTCPPortRanges = [ + { from = config.services.coturn.min-port; to = config.services.coturn.max-port; } + ]; + networking.firewall.allowedUDPPortRanges = [ + { from = config.services.coturn.min-port; to = config.services.coturn.max-port; } + ]; + networking.firewall.allowedUDPPorts = [ + config.services.coturn.alt-listening-port + config.services.coturn.alt-tls-listening-port + config.services.coturn.listening-port + config.services.coturn.tls-listening-port + ]; + #users.users.turnserver.extraGroups = [ "keys" ]; + services.coturn = { + enable = true; + no-cli = true; + no-tls = true; + no-dtls = true; + use-auth-secret = true; + lt-cred-mech = true; + realm = "eldiron.immae.eu"; + extraConfig = '' + fingerprint + total-quota=0 + bps-capacity=0 + stale-nonce + no-multicast-peers + ''; + static-auth-secret = config.myEnv.coturn.auth_access_key; + #cert = "/var/lib/acme/eldiron/fullchain.pem"; + #pkey = "/var/lib/acme/eldiron/key.pem"; + listening-ips = [ + "127.0.0.1" + "::1" + ] ++ config.myEnv.servers.eldiron.ips.main.ip4 + ++ config.myEnv.servers.eldiron.ips.main.ip6; + relay-ips = [ + "127.0.0.1" + "::1" + ] ++ config.myEnv.servers.eldiron.ips.main.ip4 + ++ config.myEnv.servers.eldiron.ips.main.ip6; + }; + }; +} diff --git a/systems/eldiron/databases/default.nix b/systems/eldiron/databases/default.nix new file mode 100644 index 0000000..d8d3048 --- /dev/null +++ b/systems/eldiron/databases/default.nix @@ -0,0 +1,56 @@ +{ lib, config, secrets, ... }: +let + cfg = config.myServices.databases; +in +{ + options.myServices = { + databases.enable = lib.mkEnableOption "my databases service"; + }; + + config.myServices.dns.zones."immae.eu".subdomains.db-1 = lib.mkIf cfg.enable (with config.myServices.dns.helpers; ips servers.eldiron.ips.main); + config.myServices.databases = lib.mkIf cfg.enable { + + mariadb = { + enable = true; + ldapConfig = { + inherit (config.myEnv.ldap) host base; + inherit (config.myEnv.databases.mysql.pam) dn filter password; + }; + replicationLdapConfig = { + inherit (config.myEnv.ldap) host base; + inherit (config.myEnv.servers.eldiron.ldap) dn password; + }; + credentials.root = config.myEnv.databases.mysql.systemUsers.root; + }; + + openldap = { + accessFile = secrets.ldap-conf; + baseDn = config.myEnv.ldap.base; + rootDn = config.myEnv.ldap.root_dn; + rootPw = config.myEnv.ldap.root_pw; + enable = true; + }; + + postgresql = { + ldapConfig = { + inherit (config.myEnv.ldap) host base; + inherit (config.myEnv.databases.postgresql.pam) dn filter password; + }; + replicationLdapConfig = { + inherit (config.myEnv.ldap) host base; + inherit (config.myEnv.servers.eldiron.ldap) dn password; + }; + authorizedHosts = { + }; + replicationHosts = { + backup-2 = { + ip4 = config.myEnv.servers.backup-2.ips.main.ip4; + ip6 = config.myEnv.servers.backup-2.ips.main.ip6; + }; + }; + enable = true; + }; + + redis.enable = true; + }; +} diff --git a/systems/eldiron/databases/mariadb.nix b/systems/eldiron/databases/mariadb.nix new file mode 100644 index 0000000..b4a6917 --- /dev/null +++ b/systems/eldiron/databases/mariadb.nix @@ -0,0 +1,188 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.databases.mariadb; +in { + options.myServices.databases = { + mariadb = { + enable = lib.mkOption { + default = false; + example = true; + description = "Whether to enable mariadb database"; + type = lib.types.bool; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.mariadb; + description = '' + Mariadb package to use. + ''; + }; + credentials = lib.mkOption { + default = {}; + description = "Credentials"; + type = lib.types.attrsOf lib.types.str; + }; + ldapConfig = lib.mkOption { + description = "LDAP configuration to allow PAM identification via LDAP"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + filter = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + replicationLdapConfig = lib.mkOption { + description = "LDAP configuration to allow replication"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/mysql"; + description = '' + The directory where Mariadb stores its data. + ''; + }; + # Output variables + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/mysqld"; + description = '' + The directory where Mariadb puts sockets. + ''; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + mysqld = "${cfg.socketsDir}/mysqld.sock"; + }; + readOnly = true; + description = '' + Mariadb sockets + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + networking.firewall.allowedTCPPorts = [ config.myEnv.databases.mysql.port ]; + + # for adminer, ssl is implemented with mysqli only, which is + # currently disabled because it’s not compatible with pam. + # Thus we need to generate two users for each 'remote': one remote + # with SSL, and one localhost without SSL. + # User identified by LDAP: + # CREATE USER foo@% IDENTIFIED VIA pam USING 'mysql' REQUIRE SSL; + # CREATE USER foo@localhost IDENTIFIED VIA pam USING 'mysql'; + + # To create a user (host) for replication: + # CREATE USER 'host'@'%' IDENTIFIED VIA pam USING 'mysql_replication' REQUIRE SSL; + # GRANT REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, LOCK TABLES, SELECT, SHOW VIEW ON *.* TO 'host'@'%'; + # (the lock/select grant permits to let the replication host handle + # the initial fetch of the database) + # % should be valid for both localhost (for cron dumps) and the origin host. + services.mysql = { + enable = true; + package = cfg.package; + dataDir = cfg.dataDir; + settings = { + mysqld = { + port = config.myEnv.databases.mysql.port; + ssl_ca = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; + ssl_key = "${config.security.acme.certs.mysql.directory}/key.pem"; + ssl_cert = "${config.security.acme.certs.mysql.directory}/fullchain.pem"; + + # for replication + log-bin = "mariadb-bin"; + server-id = "1"; + + # this introduces a small delay before storing on disk, but + # makes it order of magnitudes quicker + innodb_flush_log_at_trx_commit = "0"; + + # This is necessary since the default ("dialog") is not + # supported by php's mysqlnd plugin (in mysqli). But with that + # change only regular login+password schemes can work (no + # "fancy" authentication methods like fprintd or keys) + pam_use_cleartext_plugin = true; + }; + }; + }; + + users.users.mysql.extraGroups = [ "keys" ]; + security.acme.certs."mysql" = { + group = "mysql"; + domain = "db-1.immae.eu"; + postRun = '' + systemctl restart mysql.service + ''; + }; + + secrets.keys = { + "mysql/mysqldump" = { + permissions = "0400"; + user = "root"; + group = "root"; + text = '' + [mysqldump] + user = root + password = ${cfg.credentials.root} + ''; + }; + "mysql/pam" = { + permissions = "0400"; + user = "mysql"; + group = "mysql"; + text = with cfg.ldapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_filter ${filter} + ssl start_tls + ''; + }; + "mysql/pam_replication" = { + permissions = "0400"; + user = "mysql"; + group = "mysql"; + text = with cfg.replicationLdapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_login_attribute cn + ssl start_tls + ''; + }; + }; + + security.pam.services = let + pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so"; + in { + mysql = { + text = '' + # https://mariadb.com/kb/en/mariadb/pam-authentication-plugin/ + auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"} + account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"} + ''; + }; + mysql_replication = { + text = '' + auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"} + account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"} + ''; + }; + }; + + }; +} diff --git a/systems/eldiron/databases/openldap/default.nix b/systems/eldiron/databases/openldap/default.nix new file mode 100644 index 0000000..7cd15da --- /dev/null +++ b/systems/eldiron/databases/openldap/default.nix @@ -0,0 +1,304 @@ +{ lib, pkgs, config, openldap, ... }: +let + cfg = config.myServices.databases.openldap; +in +{ + options.myServices.databases = { + openldap = { + enable = lib.mkOption { + default = false; + example = true; + description = "Whether to enable ldap"; + type = lib.types.bool; + }; + baseDn = lib.mkOption { + type = lib.types.str; + description = '' + Base DN for LDAP + ''; + }; + rootDn = lib.mkOption { + type = lib.types.str; + description = '' + Root DN + ''; + }; + rootPw = lib.mkOption { + type = lib.types.str; + description = '' + Root (Hashed) password + ''; + }; + accessFile = lib.mkOption { + type = lib.types.path; + description = '' + The file path that defines the access + ''; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/openldap/mdb"; + description = '' + The directory where Openldap stores its data. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/openldap"; + description = '' + The directory where Openldap puts sockets and pid files. + ''; + }; + # Output variables + pids = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + pid = "${cfg.socketsDir}/slapd.pid"; + args = "${cfg.socketsDir}/slapd.args"; + }; + readOnly = true; + description = '' + Slapd pid files + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.ldap = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + nixpkgs.overlays = [ + (self: super: { + openldap_libressl_cyrus = (self.openldap.override { + openssl = self.libressl; + cyrus_sasl = self.cyrus_sasl.overrideAttrs (old: { + configureFlags = old.configureFlags ++ [ "--with-configdir=/etc/sasl2" ]; + }); + }).overrideAttrs (old: { + configureFlags = old.configureFlags ++ [ "--with-cyrus-sasl" "--enable-spasswd" ]; + }); + }) + ]; + + secrets.keys = { + "ldap/password" = { + permissions = "0400"; + user = "openldap"; + group = "openldap"; + text = "${cfg.rootPw}"; + }; + "ldap/access" = { + permissions = "0400"; + user = "openldap"; + group = "openldap"; + text = builtins.readFile cfg.accessFile; + }; + "ldap" = { + permissions = "0500"; + user = "openldap"; + group = "openldap"; + isDir = true; + }; + }; + users.users.openldap.extraGroups = [ "keys" ]; + networking.firewall.allowedTCPPorts = [ 636 389 ]; + + security.acme.certs."ldap" = { + group = "openldap"; + domain = "ldap.immae.eu"; + postRun = '' + systemctl restart openldap.service + ''; + }; + + services.filesWatcher.openldap = { + restart = true; + paths = [ config.secrets.fullPaths."ldap" ]; + }; + + services.openldap = { + enable = true; + urlList = [ "ldap://" "ldaps://" ]; + package = pkgs.openldap_libressl_cyrus; + settings = { + attrs = { + olcPidFile = cfg.pids.pid; + olcArgsFile = cfg.pids.args; + olcLogLevel = "none"; + olcTLSCertificateFile = "${config.security.acme.certs.ldap.directory}/cert.pem"; + olcTLSCertificateKeyFile = "${config.security.acme.certs.ldap.directory}/key.pem"; + olcTLSCACertificateFile = "${config.security.acme.certs.ldap.directory}/fullchain.pem"; + olcTLSCACertificatePath = "${pkgs.cacert.unbundled}/etc/ssl/certs/"; + # This makes openldap crash + # olcTLSCipherSuite = "DEFAULT"; + #olcSaslHost = "kerberos.immae.eu"; + # Map sasl "dn" to ldap dn + #olcAuthzRegexp = ''{0}"uid=([^,]*)(,cn=IMMAE.EU)?,cn=(gssapi|gss-spnego),cn=auth" "uid=$1,ou=users,dc=immae,dc=eu"''; + }; + children = { + "cn=module{0}" = { + attrs = { + cn = "module{0}"; + objectClass = [ "olcModuleList" ]; + olcModuleLoad = [ "{0}back_mdb" "{1}memberof" "{2}syncprov" ]; + }; + }; + "cn=schema".includes = map (schema: + "${config.services.openldap.package}/etc/schema/${schema}.ldif" + ) [ "core" "cosine" "inetorgperson" "nis" ] ++ [ + "${openldap.immae-ldif}" + ]; + "olcDatabase={0}config" = { + attrs = { + objectClass = "olcDatabaseConfig"; + olcDatabase = "{0}config"; + olcAccess = ["{0}to * by * none"]; + }; + }; + "olcDatabase={1}mdb" = { + attrs = { + objectClass = [ "olcDatabaseConfig" "olcMdbConfig" ]; + olcDatabase = "{1}mdb"; + olcDbIndex = [ + "objectClass eq" + "uid pres,eq" + "mail pres,eq,sub" + "cn pres,eq,sub" + "sn pres,eq,sub" + "dc eq" + "member eq" + "memberOf eq" + ]; + olcAccess = let + join = builtins.replaceStrings ["\n"] [" "]; + in [ + # First matching "to" + "by" wins + #### Replication needs full access + (join ''{0}to * + by dn.base="uid=ldap_replication,cn=ldap,ou=services,dc=immae,dc=eu" read + by * break + '') + #### Prevent modification of SASL passwords + (join ''{1}to attrs=userPassword val.regex="^.SASL..+" + by self read + by anonymous auth + by * none + '') + #### Oneself needs access to users password + (join ''{2}to attrs=userPassword,shadowLastChange + by self write + by anonymous auth + by * none + '') + #### Should be write, but disabled during migration to psql + (join ''{3}to attrs=immaeSshKey + by self read + by * break + '') + + #### Anyone can auth, and I can see myself + (join ''{4}to * + by self read + by anonymous auth + by * break + '') + + #### Specific access for phpldapadmin + (join ''{5}to filter="(uid=*)" attrs=entry,uid + by dn.base="cn=phpldapadmin,ou=services,dc=immae,dc=eu" read + by * break + '') + + #### Hosts + # The attributes are available to every host + (join ''{6}to dn.one="ou=hosts,dc=immae,dc=eu" + by dn.subtree="ou=hosts,dc=immae,dc=eu" read + by dn.base="dc=immae,dc=eu" search + by * break + '') + #### /Hosts + + #### Local services + # this/-* & user : all your ancestors have access to you + # this/memberOf/-* & user : all those whom you belong to (in a group), + # and their ancestors, have access to you + # user/immaeAccessWriteDn*/member & this : you have write access to the + # members of your immaeAccessDn + # attributes + # user/immaeAccessDn*/member & this : you have access to the members + # of your immaeAccessDn attributes + # user/immaeAccessReadSubtree* & this/-* : you have access to the + # childrens of your immaeAccessReadSubtree + # attributes + # this/memberOf/-* & user/immaeAccessReadSubtree*: you have access to + # the members of the childrens of your + # immaeAccessReadSubtree attributes + # http://www.openldap.org/faq/data/cache/1133.html + (join ''{7}to dn.subtree="dc=immae,dc=eu" + by dn.subtree="ou=external_services,dc=immae,dc=eu" break + by set.exact="this/-* & user" read + by set.exact="this/memberOf/-* & user" read + by set.exact="user/immaeAccessWriteDn*/member & this" write + by set.exact="user/immaeAccessDn*/member & this" read + by set.exact="user/immaeAccessReadSubtree* & this/-*" read + by set.exact="this/memberOf/-* & user/immaeAccessReadSubtree*" read + by users search + by * break + '') + #### /Local services + + #### External services + # http://www.openldap.org/faq/data/cache/429.html + # FIXME: Find a way to whitelist? + (join ''{8}to attrs=immaeSshKey + by dn.subtree="ou=external_services,dc=immae,dc=eu" none + '') + (join ''{9}to dn.subtree="dc=immae,dc=eu" + by set.exact="this/-* & user" read + by set.exact="this/memberOf/-* & user" read + by set.exact="user/immaeAccessDn*/member & this/-*" read + by users search + by * none + '') + #### /External services + ]; + olcDbDirectory = cfg.dataDir; + olcRootDN = cfg.rootDn; + olcRootPW.path = config.secrets.fullPaths."ldap/password"; + olcSuffix = cfg.baseDn; + }; + children = { + "olcOverlay={0}memberof" = { + attrs = { + objectClass = [ "olcOverlayConfig" "olcMemberOf" ]; + olcOverlay = "{0}memberof"; + }; + }; + "olcOverlay={1}syncprov" = { + attrs = { + objectClass = [ "olcOverlayConfig" "olcSyncProvConfig" ]; + olcOverlay = "{1}syncprov"; + olcSpCheckpoint = "100 10"; + }; + }; + }; + }; + }; + }; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "tcp" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "ldap SSL is up to date"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = ["check_tcp_ssl" "636"]; + + servicegroups = "webstatus-ssl"; + _webstatus_name = "LDAP"; + _webstatus_url = "ldap.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/databases/postgresql.nix b/systems/eldiron/databases/postgresql.nix new file mode 100644 index 0000000..721059a --- /dev/null +++ b/systems/eldiron/databases/postgresql.nix @@ -0,0 +1,236 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.databases.postgresql; +in { + options.myServices.databases = { + postgresql = { + enable = lib.mkOption { + default = false; + example = true; + description = "Whether to enable postgresql database"; + type = lib.types.bool; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.postgresql; + description = '' + Postgresql package to use. + ''; + }; + ldapConfig = lib.mkOption { + description = "LDAP configuration to allow PAM identification via LDAP"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + filter = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + replicationLdapConfig = lib.mkOption { + description = "LDAP configuration to allow replication"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + authorizedHosts = lib.mkOption { + default = {}; + description = "Hosts to allow connections from"; + type = lib.types.attrsOf (lib.types.listOf (lib.types.submodule { + options = { + method = lib.mkOption { + default = "md5"; + type = lib.types.str; + }; + username = lib.mkOption { + default = "all"; + type = lib.types.str; + }; + database = lib.mkOption { + default = "all"; + type = lib.types.str; + }; + ip4 = lib.mkOption { + default = []; + type = lib.types.listOf lib.types.str; + }; + ip6 = lib.mkOption { + default = []; + type = lib.types.listOf lib.types.str; + }; + }; + })); + }; + replicationHosts = lib.mkOption { + default = {}; + description = "Hosts to allow replication from"; + type = lib.types.attrsOf (lib.types.submodule { + options = { + ip4 = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; + ip6 = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; + }; + }); + }; + # Output variables + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/postgresql"; + description = '' + The directory where Postgresql puts sockets. + ''; + readOnly = true; + }; + }; + }; + + config = lib.mkIf cfg.enable { + networking.firewall.allowedTCPPorts = [ 5432 ]; + + security.acme.certs."postgresql" = { + group = "postgres"; + domain = "db-1.immae.eu"; + postRun = '' + systemctl reload postgresql.service + ''; + }; + + systemd.services.postgresql.serviceConfig = { + SupplementaryGroups = "keys"; + ExecStartPre = [ ("+" + (pkgs.writeShellScript "postgresql-fix-cert" '' + # postgresql complains: + # private key file "${config.security.acme.certs.postgresql.directory}/key.pem" must be owned by the database user or root + cp -f "${config.security.acme.certs.postgresql.directory}/key.pem" "${config.services.postgresql.dataDir}/key.pem" + chown postgres:postgres "${config.services.postgresql.dataDir}/key.pem" + chmod go-r "${config.services.postgresql.dataDir}/key.pem" + '')) ]; + }; + systemd.services.postgresql.postStart = lib.mkAfter '' + # This line is already defined in 19.09 + PSQL="psql --port=5432" + + ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _: '' + $PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='${role}'" \ + | grep -q 1 \ + || $PSQL -tAc 'CREATE USER "${role}" WITH REPLICATION' + '') cfg.replicationHosts)} + + ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _: + let + sname = builtins.replaceStrings ["-"] ["_"] role; + in + '' + $PSQL -tAc "SELECT 1 FROM pg_replication_slots WHERE slot_name='${sname}'" \ + | grep -q 1 \ + || $PSQL -tAc "SELECT * FROM pg_create_physical_replication_slot('${sname}')" + '') cfg.replicationHosts)} + ''; + + services.postgresql = { + enable = true; + package = cfg.package; + enableTCPIP = true; + checkConfig = false; + logLinePrefix = "%h %q%u@%d "; # Default: '%m [%p] ', already stored independently by journald. %h needed for fail2ban + settings = { + max_connections = 300; + wal_level = "logical"; + shared_buffers = "512MB"; + work_mem = "10MB"; + max_wal_size = "1GB"; + min_wal_size = "80MB"; + log_timezone = "Europe/Paris"; + datestyle = "iso, mdy"; + timezone = "Europe/Paris"; + lc_messages = "en_US.UTF-8"; + lc_monetary = "en_US.UTF-8"; + lc_numeric = "en_US.UTF-8"; + lc_time = "en_US.UTF-8"; + default_text_search_config = "pg_catalog.english"; + # this introduces a small delay before storing on disk, but + # makes it order of magnitudes quicker + synchronous_commit = "off"; + ssl = "on"; + ssl_cert_file = "${config.security.acme.certs.postgresql.directory}/fullchain.pem"; + ssl_key_file = "${config.services.postgresql.dataDir}/key.pem"; + }; + authentication = let + hosts = builtins.concatStringsSep "\n" ( + lib.lists.flatten (lib.mapAttrsToList (k: vs: map (v: + map (ip6: "hostssl ${v.database} ${v.username} ${ip6} ${v.method}") v.ip6 + ++ map (ip4: "hostssl ${v.database} ${v.username} ${ip4}/32 ${v.method}") v.ip4 + ) vs) cfg.authorizedHosts + )); + replication = builtins.concatStringsSep "\n" ( + lib.lists.flatten (lib.mapAttrsToList (k: v: + map (ip6: "hostssl replication ${k} ${ip6}/128 pam pamservice=postgresql_replication") v.ip6 + ++ map (ip4: "hostssl replication ${k} ${ip4}/32 pam pamservice=postgresql_replication") v.ip4 + ) cfg.replicationHosts + )); + in '' + local all postgres ident + local all all md5 + ${hosts} + hostssl all all all pam + ${replication} + ''; + }; + + secrets.keys = { + "postgresql/pam" = { + permissions = "0400"; + group = "postgres"; + user = "postgres"; + text = with cfg.ldapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_filter ${filter} + ssl start_tls + ''; + }; + "postgresql/pam_replication" = { + permissions = "0400"; + group = "postgres"; + user = "postgres"; + text = with cfg.replicationLdapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_login_attribute cn + ssl start_tls + ''; + }; + }; + + security.pam.services = let + pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so"; + in { + postgresql = { + text = '' + auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"} + account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"} + ''; + }; + postgresql_replication = { + text = '' + auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"} + account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"} + ''; + }; + }; + }; +} + diff --git a/systems/eldiron/databases/redis.nix b/systems/eldiron/databases/redis.nix new file mode 100644 index 0000000..1f57aa9 --- /dev/null +++ b/systems/eldiron/databases/redis.nix @@ -0,0 +1,138 @@ +{ lib, config, pkgs, ... }: +let + cfg = config.myServices.databases.redis; +in { + options.myServices.databases.redis = { + enable = lib.mkOption { + default = false; + example = true; + description = "Whether to enable redis database"; + type = lib.types.bool; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/redis"; + description = '' + The directory where Redis puts sockets. + ''; + }; + # Output variables + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + redis = "${cfg.socketsDir}/redis.sock"; + }; + readOnly = true; + description = '' + Redis sockets + ''; + }; + }; + + config = lib.mkIf cfg.enable { + users.users.redis.uid = config.ids.uids.redis; + users.groups.redis.gid = config.ids.gids.redis; + services.redis.servers."" = { + enable = true; + bind = "127.0.0.1"; + unixSocket = cfg.sockets.redis; + unixSocketPerm = 777; + maxclients = 1024; + }; + systemd.services.redis.serviceConfig.Slice = "redis.slice"; + systemd.services.redis.serviceConfig.RuntimeDirectoryMode = lib.mkForce "0755"; + services.redis.servers."php-sessions" = { + enable = true; + maxclients = 1024; + unixSocketPerm = 777; + user = "wwwrun"; + }; + + services.spiped = { + enable = true; + config.redis = { + decrypt = true; + source = "0.0.0.0:16379"; + target = "/run/redis/redis.sock"; + keyfile = config.secrets.fullPaths."redis/spiped_keyfile"; + }; + }; + systemd.services.spiped_redis = { + description = "Secure pipe 'redis'"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Slice = "redis.slice"; + Restart = "always"; + User = "spiped"; + PermissionsStartOnly = true; + SupplementaryGroups = "keys"; + }; + + script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`"; + }; + + #services.filesWatcher.predixy = { + # restart = true; + # paths = [ config.secrets.fullPaths."redis/predixy.conf" ]; + #}; + + networking.firewall.allowedTCPPorts = [ 16379 ]; + secrets.keys = { + #"redis/predixy.conf" = { + # user = "redis"; + # group = "redis"; + # permissions = "0400"; + # text = '' + # Name Predixy + # Bind 127.0.0.1:7617 + # ClientTimeout 300 + # WorkerThreads 1 + + # Authority { + # Auth "${config.myEnv.databases.redis.predixy.read}" { + # Mode read + # } + # } + + # StandaloneServerPool { + # Databases 16 + # RefreshMethod fixed + # Group shard001 { + # + ${config.myEnv.databases.redis.socket} + # } + # } + # ''; + #}; + "redis/spiped_keyfile" = { + user = "spiped"; + group = "spiped"; + permissions = "0400"; + text = config.myEnv.databases.redis.spiped_key; + }; + }; + + systemd.slices.redis = { + description = "Redis slice"; + }; + + #systemd.services.predixy = { + # description = "Redis proxy"; + # wantedBy = [ "multi-user.target" ]; + # after = [ "redis.service" ]; + + # serviceConfig = { + # Slice = "redis.slice"; + # User = "redis"; + # Group = "redis"; + # SupplementaryGroups = "keys"; + # Type = "simple"; + + # ExecStart = "${pkgs.predixy}/bin/predixy ${config.secrets.fullPaths."redis/predixy.conf"}"; + # }; + + #}; + }; +} + diff --git a/systems/eldiron/dns.nix b/systems/eldiron/dns.nix new file mode 100644 index 0000000..486fcc1 --- /dev/null +++ b/systems/eldiron/dns.nix @@ -0,0 +1,290 @@ +{ lib, pkgs, config, dns-nix, ... }: +{ + options.myServices.dns = { + enable = lib.mkEnableOption "enable DNS resolver"; + helpers = lib.mkOption { + readOnly = true; + description = '' + Some useful constants or functions for zones definition + ''; + default = rec { + servers = config.myEnv.servers; + ips = i: { A = i.ip4; AAAA = i.ip6; }; + letsencrypt = [ { tag = "issue"; value = "letsencrypt.org"; issuerCritical = false; } ]; + toKV = a: builtins.concatStringsSep ";" (builtins.attrValues (builtins.mapAttrs (n: v: "${n}=${v}") a)); + mailMX = { + hasEmail = true; + subdomains = let + mxes = lib.filterAttrs (n: v: v ? mx && v.mx.enable) servers; + in + lib.mapAttrs' (n: v: lib.nameValuePair v.mx.subdomain (ips v.ips.main)) mxes; + }; + zoneHeader = { + TTL = 3*60*60; + SOA = { + # yyyymmdd?? (increment ?? at each change) + serial = 2022121902; # Don't change this value, it is replaced automatically! + refresh = 10800; + retry = 3600; + expire = 604800; + minimum = 10800; # negative cache ttl + adminEmail = "hostmaster@immae.eu"; #email-address s/@/./ + nameServer = "ns1.immae.eu."; + }; + }; + mailSend = { + # DKIM + subdomains._domainkey.subdomains.eldiron.TXT = [ + (toKV config.myEnv.mail.dkim.eldiron.public) + ]; + # old key, may still be used by verifiers + subdomains._domainkey.subdomains.immae_eu.TXT = [ + (toKV config.myEnv.mail.dkim.immae_eu.public) + ]; + }; + mailCommon = name: { + MX = let + mxes = lib.filterAttrs (n: v: v ? mx && v.mx.enable) servers; + in + lib.mapAttrsToList (n: v: { preference = v.mx.priority; exchange = "${v.mx.subdomain}.${name}."; }) mxes; + + # https://tools.ietf.org/html/rfc6186 + SRV = [ + { service = "submission"; proto = "tcp"; priority = 0; weight = 1; port = 587; target = "smtp.immae.eu."; } + { service = "submissions"; proto = "tcp"; priority = 0; weight = 1; port = 465; target = "smtp.immae.eu."; } + + { service = "imap"; proto = "tcp"; priority = 0; weight = 1; port = 143; target = "imap.immae.eu."; } + { service = "imaps"; proto = "tcp"; priority = 0; weight = 1; port = 993; target = "imap.immae.eu."; } + { service = "sieve"; proto = "tcp"; priority = 0; weight = 1; port = 4190; target = "imap.immae.eu."; } + + { service = "pop3"; proto = "tcp"; priority = 10; weight = 1; port = 110; target = "pop3.immae.eu."; } + { service = "pop3s"; proto = "tcp"; priority = 10; weight = 1; port = 995; target = "pop3.immae.eu."; } + ]; + + subdomains = { + # MTA-STS + # https://blog.delouw.ch/2018/12/16/using-mta-sts-to-enhance-email-transport-security-and-privacy/ + # https://support.google.com/a/answer/9261504 + _mta-sts.TXT = [ (toKV { v = "STSv1"; id = "20200109150200Z"; }) ]; # Don't change this value, it is updated automatically! + _tls.subdomains._smtp.TXT = [ (toKV { v = "TLSRPTv1"; "rua" = "mailto:postmaster+mta-sts@immae.eu"; }) ]; + mta-sts = ips servers.eldiron.ips.main; + + # DMARC + _dmarc.TXT = [ (toKV { v = "DMARC1"; p = "none"; adkim = "r"; aspf = "r"; fo = "1"; rua = "mailto:postmaster+rua@immae.eu"; ruf = "mailto:postmaster+ruf@immae.eu"; }) ]; + }; + + # SPF + TXT = [ (toKV { v = "spf1 mx ~all"; }) ]; + }; + }; + }; + zones = lib.mkOption { + type = lib.types.attrsOf (dns-nix.lib.types.zone.substSubModules ( + dns-nix.lib.types.zone.getSubModules ++ [ + ({ name, ... }: { + options = { + hasEmail = lib.mkEnableOption "This domain has e-mails configuration"; + emailPolicies = lib.mkOption { + default = {}; + type = lib.types.attrsOf (lib.types.submodule { + options = { + receive = lib.mkEnableOption "Configure this domain to receive e-mail"; + }; + }); + apply = builtins.mapAttrs (n: v: v // { + domain = name; + fqdn = if n == "" then name else "${n}.${name}"; + }); + }; + extraConfig = lib.mkOption { + type = lib.types.lines; + description = "Extra zone configuration for bind"; + example = '' + notify yes; + ''; + default = ""; + }; + slaves = lib.mkOption { + type = lib.types.listOf lib.types.str; + description = "NS slave groups of this zone"; + default = []; + }; + ns = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + }; + }; + }) + ])); + apply = let + toNS = n: builtins.map (d: "${d}.") (builtins.concatMap (s: builtins.attrNames config.myEnv.dns.ns."${s}") n); + in + builtins.mapAttrs (n: v: v // { NS = v.NS or [] ++ toNS (v.ns); }); + default = {}; + description = '' + attrset of zones to configure + ''; + }; + }; + config = let + cfg = config.services.bind; + in lib.mkIf config.myServices.dns.enable { + myServices.chatonsProperties.hostings.dns-secondaire = { + file.datetime = "2022-08-22T02:00:00"; + hosting = { + name = "DNS secondaire"; + description = "DNS secondaire"; + website = "ns1.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "bind9"; + website = pkgs.bind.meta.homepage; + license.url = pkgs.bind.meta.license.url; + license.name = pkgs.bind.meta.license.fullName; + version = pkgs.bind.version; + source.url = "https://www.isc.org/download/"; + }; + }; + myServices.dns.zones = with config.myServices.dns.helpers; { + "imsite.eu" = lib.mkMerge [ + zoneHeader + (ips servers.eldiron.ips.main) + { + ns = [ "immae" ]; + CAA = letsencrypt; + } + ]; + "immae.dev" = lib.mkMerge [ + { + extraConfig = '' + notify yes; + ''; + slaves = [ "raito" ]; + } + zoneHeader + (ips servers.eldiron.ips.integration) + { + ns = [ "immae" "raito" ]; + CAA = letsencrypt; + } + ]; + "immae.eu" = lib.mkMerge [ + { + extraConfig = '' + notify yes; + ''; + slaves = [ "raito" ]; + } + zoneHeader + (ips servers.eldiron.ips.production) + { + ns = [ "immae" "raito" ]; + CAA = letsencrypt; + + # ns1 has glue records in gandi.net + subdomains.ns1 = ips servers.eldiron.ips.main; + # raito / kurisu.dual.lahfa.xyz ; replace with eldiron in case of problem + subdomains.ns2.A = builtins.map (address: { inherit address; ttl = 600; }) servers.eldiron.ips.main.ip4; + subdomains.ns2.AAAA = builtins.map (address: { inherit address; ttl = 600; }) servers.eldiron.ips.main.ip6; + } + { + # Machines local users + emailPolicies.localhost.receive = false; + subdomains.localhost = lib.mkMerge [ (mailCommon "immae.eu") mailSend ]; + emailPolicies.eldiron.receive = true; + subdomains.eldiron = lib.mkMerge [ (mailCommon "immae.eu") mailSend ]; + } + { + # For each server "server" and each server ip group "ipgroup", + # define ipgroup.server.immae.eu + # "main" is set as server.immae.eu instead + # if main has an "alias", it is duplicated with this alias. + # If the server is a vm, use the v.immae.eu namespace (only main is created) + subdomains = let + vms = lib.filterAttrs (n: v: v.isVm) servers; + bms = lib.filterAttrs (n: v: !v.isVm) servers; + toIps = type: builtins.mapAttrs (n: v: ips v.ips."${type}"); + in + lib.mkMerge [ + (toIps "main" bms) + + { v.subdomains = toIps "main" vms; } + + (lib.mapAttrs (_: v: { + subdomains = lib.mapAttrs' + (n': v': lib.nameValuePair "${if v'.alias == null then n' else v'.alias}" (ips v')) + (lib.filterAttrs (n': v': n' != "main" || v'.alias != null) v.ips); + }) bms) + ]; + } + { + # Outils + subdomains = { + status = ips servers.monitoring-1.ips.main; + }; + } + ]; + }; + networking.firewall.allowedUDPPorts = [ 53 ]; + networking.firewall.allowedTCPPorts = [ 53 ]; + users.users.named.extraGroups = [ "keys" ]; + services.bind = { + enable = true; + cacheNetworks = ["any"]; + extraOptions = '' + allow-recursion { 127.0.0.1; }; + allow-transfer { none; }; + + notify-source ${lib.head config.myEnv.servers.eldiron.ips.main.ip4}; + notify-source-v6 ${lib.head config.myEnv.servers.eldiron.ips.main.ip6}; + version none; + hostname none; + server-id none; + ''; + zones = + builtins.mapAttrs (name: v: { + master = true; + extraConfig = v.extraConfig; + masters = []; + slaves = + lib.flatten (map (n: builtins.attrValues config.myEnv.dns.ns.${n}) v.slaves); + file = pkgs.runCommand "${name}.zone" { + text = v; + passAsFile = [ "text" ]; + # Automatically change the increment when relevant change + # happened (both serial and mta-sts) + } '' + mv "$textPath" $out + increment=$(( 100*($(date -u +%-H) * 60 + $(date -u +%-M))/1440 )) + sed -i -e "s/2022121902/$(date -u +%Y%m%d)$increment/g" $out + sed -i -e "s/20200109150200Z/$(date -u +%Y%m%d%H%M%SZ)/g" $out + ''; + }) config.myServices.dns.zones; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "dns" ]; + myServices.monitoring.fromMasterObjects.service = lib.mkMerge (lib.mapAttrsToList (name: z: + lib.optional (builtins.elem "immae" z.ns) { + service_description = "eldiron dns is active and authoritative for ${name}"; + host_name = config.hostEnv.fqdn; + use = "dns-service"; + check_command = ["check_dns" name "-A"]; + + servicegroups = "webstatus-dns"; + _webstatus_name = name; + } ++ + lib.optional (builtins.elem "raito" z.ns) { + service_description = "raito dns is active and authoritative for ${name}"; + host_name = config.hostEnv.fqdn; + use = "dns-service"; + check_command = ["check_external_dns" "kurisu.dual.lahfa.xyz" name "-A"]; + + servicegroups = "webstatus-dns"; + _webstatus_name = "${name} (Secondary DNS Raito)"; + } + ) config.myServices.dns.zones); + }; +} diff --git a/systems/eldiron/duply_backup.nix b/systems/eldiron/duply_backup.nix new file mode 100644 index 0000000..590d125 --- /dev/null +++ b/systems/eldiron/duply_backup.nix @@ -0,0 +1,151 @@ +{ lib, pkgs, config, name, ... }: + +let + cfg = config.myEnv.backup; + varDir = "/var/lib/duply"; + duplyProfile = profile: remote: prefix: '' + GPG_PW="${cfg.password}" + TARGET="${cfg.remotes.${remote}.remote profile.bucket}${prefix}" + export AWS_ACCESS_KEY_ID="${cfg.remotes.${remote}.accessKeyId}" + export AWS_SECRET_ACCESS_KEY="${cfg.remotes.${remote}.secretAccessKey}" + SOURCE="${profile.rootDir}" + FILENAME=".duplicity-ignore" + DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'" + VERBOSITY=4 + ARCH_DIR="${varDir}/caches" + + # Do a full backup after 1 month + MAX_FULLBKP_AGE=1M + DUPL_PARAMS="$DUPL_PARAMS --allow-source-mismatch --exclude-other-filesystems --full-if-older-than $MAX_FULLBKP_AGE " + # Backups older than 2months are deleted + MAX_AGE=2M + # Keep 2 full backups + MAX_FULL_BACKUPS=2 + MAX_FULLS_WITH_INCRS=2 + ''; + action = "bkp_purge_purgeFull_purgeIncr"; + varName = k: remoteName: + if remoteName == "eriomem" then k else remoteName + "_" + k; +in +{ + options = { + services.duplyBackup.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable remote backups. + ''; + }; + services.duplyBackup.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + rootDir = lib.mkOption { + type = lib.types.path; + description = '' + Path to backup + ''; + }; + bucket = lib.mkOption { + type = lib.types.str; + default = "immae-${name}"; + description = '' + Bucket to use + ''; + }; + remotes = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = ["eriomem"]; + description = '' + Remotes to use for backup + ''; + }; + excludeFile = lib.mkOption { + type = lib.types.lines; + default = ""; + description = '' + Content to put in exclude file + ''; + }; + }; + }); + }; + }; + + config = lib.mkIf config.services.duplyBackup.enable { + system.activationScripts.backup = '' + install -m 0700 -o root -g root -d ${varDir} ${varDir}/caches + ''; + secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v: + map (remote: [ + (lib.nameValuePair "backup/${varName k remote}/conf" { + permissions = "0400"; + text = duplyProfile v remote "${k}/"; + }) + (lib.nameValuePair "backup/${varName k remote}/exclude" { + permissions = "0400"; + text = v.excludeFile; + }) + (lib.nameValuePair "backup/${varName k remote}" { + permissions = "0500"; + isDir = true; + }) + ]) v.remotes) config.services.duplyBackup.profiles)); + + services.cron = { + enable = true; + systemCronJobs = let + backups = pkgs.writeScript "backups" '' + #!${pkgs.stdenv.shell} + + ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v: + map (remote: [ + '' + touch ${varDir}/${varName k remote}.log + ${pkgs.duply}/bin/duply ${config.secrets.fullPaths."backup/${varName k remote}"}/ ${action} --force >> ${varDir}/${varName k remote}.log + [[ $? = 0 ]] || echo -e "Error when doing backup for ${varName k remote}, see above\n---------------------------------------" >&2 + '' + ]) v.remotes + ) config.services.duplyBackup.profiles))} + ''; + in + [ + "0 2 * * * root ${backups}" + ]; + + }; + + security.pki.certificateFiles = [ + (pkgs.fetchurl { + url = "http://downloads.e.eriomem.net/eriomemca.pem"; + sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh"; + }) + ]; + + myServices.monitoring.fromMasterActivatedPlugins = [ "eriomem" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "eriomem backup is up and not full"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_backup_eriomem"; + + check_interval = 120; + notification_interval = "1440"; + + servicegroups = "webstatus-backup"; + } + + { + service_description = "ovh backup is up and not full"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_ok"; + + check_interval = 120; + notification_interval = "1440"; + + servicegroups = "webstatus-backup"; + } + ]; + }; +} diff --git a/systems/eldiron/ejabberd/default.nix b/systems/eldiron/ejabberd/default.nix new file mode 100644 index 0000000..5268516 --- /dev/null +++ b/systems/eldiron/ejabberd/default.nix @@ -0,0 +1,141 @@ +{ lib, pkgs, config, mypackages-lib, ... }: +let + cfg = config.myServices.ejabberd; +in +{ + options.myServices = { + ejabberd.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable ejabberd service. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.fr" = with config.myServices.dns.helpers; + lib.mkMerge [ + { + extraConfig = '' + notify yes; + ''; + slaves = [ "raito" ]; + emailPolicies."".receive = true; + } + zoneHeader + mailMX + (mailCommon "immae.fr") + (ips servers.eldiron.ips.main) + { + ns = [ "immae" "raito" ]; + CAA = letsencrypt; + subdomains.www = ips servers.eldiron.ips.production; + subdomains.im = ips servers.eldiron.ips.main; + subdomains.conference = ips servers.eldiron.ips.main; + subdomains.pubsub = ips servers.eldiron.ips.main; + subdomains.proxy = ips servers.eldiron.ips.main; + subdomains.upload = ips servers.eldiron.ips.main; + subdomains._xmppconnect.TXT = [ + "_xmpp-client-xbosh=https://im.immae.fr/bosh" + "_xmpp-client-websocket=wss://im.immae.fr/ws" + ]; + } + ]; + + security.acme.certs = { + "ejabberd" = { + group = "ejabberd"; + domain = "eldiron.immae.eu"; + keyType = "rsa4096"; + postRun = '' + systemctl restart ejabberd.service + ''; + extraDomainNames = [ "immae.fr" "conference.immae.fr" "proxy.immae.fr" "pubsub.immae.fr" "upload.immae.fr" ]; + }; + }; + networking.firewall.allowedTCPPorts = [ 5222 5269 ]; + myServices.websites.tools.im.enable = true; + systemd.services.ejabberd.postStop = '' + rm /var/log/ejabberd/erl_crash*.dump + ''; + secrets.keys = { + "ejabberd/psql.yml" = { + permissions = "0400"; + user = "ejabberd"; + group = "ejabberd"; + text = '' + sql_type: pgsql + sql_server: "localhost" + sql_database: "${config.myEnv.jabber.postgresql.database}" + sql_username: "${config.myEnv.jabber.postgresql.user}" + sql_password: "${config.myEnv.jabber.postgresql.password}" + ''; + }; + "ejabberd/host.yml" = { + permissions = "0400"; + user = "ejabberd"; + group = "ejabberd"; + text = '' + host_config: + "immae.fr": + domain_certfile: "${config.security.acme.certs.ejabberd.directory}/full.pem" + auth_method: [ldap] + ldap_servers: ["${config.myEnv.jabber.ldap.host}"] + ldap_encrypt: tls + ldap_rootdn: "${config.myEnv.jabber.ldap.dn}" + ldap_password: "${config.myEnv.jabber.ldap.password}" + ldap_base: "${config.myEnv.jabber.ldap.base}" + ldap_uids: + uid: "%u" + immaeXmppUid: "%u" + ldap_filter: "${config.myEnv.jabber.ldap.filter}" + ''; + }; + }; + users.users.ejabberd.extraGroups = [ "keys" ]; + services.ejabberd = { + package = pkgs.ejabberd.override { withPgsql = true; }; + imagemagick = true; + enable = true; + ctlConfig = '' + ERLANG_NODE=ejabberd@localhost + ''; + configFile = pkgs.runCommand "ejabberd.yml" { + certificatePrivateKeyAndFullChain = "${config.security.acme.certs.ejabberd.directory}/full.pem"; + certificateCA = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; + sql_config_file = config.secrets.fullPaths."ejabberd/psql.yml"; + host_config_file = config.secrets.fullPaths."ejabberd/host.yml"; + } '' + substituteAll ${./ejabberd.yml} $out + ''; + }; + secrets.keys."postfix/scripts/ejabberd-env" = { + user = "postfixscripts"; + group = "root"; + permissions = "0400"; + text = builtins.toJSON { + jid = "notify_bot@immae.fr"; + password = "{{ .xmpp.notify_bot }}"; + }; + }; + services.postfix.extraAliases = let + nixpkgs = builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/840c782d507d60aaa49aa9e3f6d0b0e780912742.tar.gz"; + sha256 = "14q3kvnmgz19pgwyq52gxx0cs90ddf24pnplmq33pdddbb6c51zn"; + }; + pkgs' = import nixpkgs { inherit (pkgs) system; overlays = []; }; + warn_xmpp_email = scriptEnv: pkgs'.runCommand "warn_xmpp_email" { + inherit scriptEnv; + pythonEnv = pkgs'.python3.withPackages (ps: [ + ps.unidecode ps.slixmpp + ]); + } '' + substituteAll ${./warn_xmpp_email.py} $out + chmod a+x $out + ''; + in '' + ejabberd: "|${mypackages-lib.postfixScript pkgs "ejabberd" (warn_xmpp_email config.secrets.fullPaths."postfix/scripts/ejabberd-env")}" + ''; + }; +} diff --git a/systems/eldiron/ejabberd/ejabberd.yml b/systems/eldiron/ejabberd/ejabberd.yml new file mode 100644 index 0000000..82ac35b --- /dev/null +++ b/systems/eldiron/ejabberd/ejabberd.yml @@ -0,0 +1,231 @@ +### +### ejabberd configuration file +### +### The parameters used in this configuration file are explained at +### +### https://docs.ejabberd.im/admin/configuration +### +### The configuration file is written in YAML. +### ******************************************************* +### ******* !!! WARNING !!! ******* +### ******* YAML IS INDENTATION SENSITIVE ******* +### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY ******* +### ******************************************************* +### Refer to http://en.wikipedia.org/wiki/YAML for the brief description. +### However, ejabberd treats different literals as different types: +### +### - unquoted or single-quoted strings. They are called "atoms". +### Example: dog, 'Jupiter', '3.14159', YELLOW +### +### - numeric literals. Example: 3, -45.0, .0 +### +### - quoted or folded strings. +### Examples of quoted string: "Lizzard", "orange". +### Example of folded string: +### > Art thou not Romeo, +### and a Montague? +### + +hosts: + - "immae.fr" + +loglevel: 4 +log_rotate_size: 10485760 +log_rotate_date: "" +log_rotate_count: 1 +log_rate_limit: 100 + +certfiles: + - "@certificatePrivateKeyAndFullChain@" + +listen: + - + port: 5222 + ip: "::" + module: ejabberd_c2s + max_stanza_size: 262144 + shaper: c2s_shaper + access: c2s + starttls_required: true + - + port: 5269 + ip: "::" + module: ejabberd_s2s_in + max_stanza_size: 524288 + - + port: 5280 + ip: "127.0.0.1" + module: ejabberd_http + request_handlers: + "/admin": ejabberd_web_admin + "/api": mod_http_api + "/bosh": mod_bosh + "/captcha": ejabberd_captcha + "/upload": mod_http_upload + "/ws": ejabberd_http_ws + tls: false + +s2s_use_starttls: optional +s2s_cafile: "@certificateCA@" + +default_db: sql +include_config_file: @sql_config_file@ +include_config_file: @host_config_file@ +new_sql_schema: true + +acl: + admin: + - user: "ismael@immae.fr" + local: + user_regexp: "" + loopback: + ip: + - "127.0.0.0/8" + - "::1/128" + - "::FFFF:127.0.0.1/128" + +access_rules: + local: + - allow: local + c2s: + - deny: blocked + - allow + announce: + - allow: admin + configure: + - allow: admin + muc_admin: + - allow: admin + muc_create: + - allow: local + muc: + - allow + pubsub_createnode: + - allow: local + register: + - deny + trusted_network: + - allow: loopback + +api_permissions: + "console commands": + from: + - ejabberd_ctl + who: all + what: "*" + "admin access": + who: + - acl: admin + - oauth: + - scope: "ejabberd:admin" + - acl: admin + what: + - "*" + - "!stop" + - "!start" + "public commands": + who: + - ip: + - "0.0.0.0" + - "::" + what: + - "status" + - "connected_users_number" + +shaper: + normal: 1000 + fast: 50000 + +shaper_rules: + max_user_sessions: 10 + max_user_offline_messages: + - 5000: admin + - 100 + c2s_shaper: + - none: admin + - normal + s2s_shaper: fast + +modules: + mod_adhoc: {} + mod_admin_extra: {} + mod_announce: + access: announce + mod_avatar: {} + mod_blocking: {} + mod_bosh: {} + mod_caps: {} + mod_carboncopy: {} + mod_client_state: {} + mod_configure: {} + mod_disco: {} + mod_fail2ban: {} + mod_http_api: {} + mod_http_upload: + put_url: "https://im.immae.fr/upload" + custom_headers: + "Access-Control-Allow-Origin": "*" + "Access-Control-Allow-Methods": "OPTIONS, HEAD, GET, PUT, POST" + "Access-Control-Allow-Headers": "Content-Type" + mod_last: {} + mod_mam: + default: always + mod_muc: + access: + - allow + access_admin: + - allow: admin + access_create: muc_create + access_persistent: muc_create + default_room_options: + mam: true + mod_muc_admin: {} + mod_offline: + access_max_user_messages: max_user_offline_messages + mod_ping: {} + mod_privacy: {} + mod_private: {} + mod_proxy65: + access: local + max_connections: 5 + mod_pubsub: + access_createnode: pubsub_createnode + plugins: + - "flat" + - "pep" + force_node_config: + ## Change from "whitelist" to "open" to enable OMEMO support + ## See https://github.com/processone/ejabberd/issues/2425 + "eu.siacs.conversations.axolotl.*": + access_model: open + ## Avoid buggy clients to make their bookmarks public + "storage:bookmarks": + access_model: whitelist + mod_push: {} + mod_push_keepalive: {} + mod_register: + ## Only accept registration requests from the "trusted" + ## network (see access_rules section above). + ## Think twice before enabling registration from any + ## address. See the Jabber SPAM Manifesto for details: + ## https://github.com/ge0rg/jabber-spam-fighting-manifesto + ip_access: trusted_network + access: register + mod_roster: + versioning: true + mod_s2s_dialback: {} + mod_shared_roster: {} + mod_stats: {} + mod_stream_mgmt: + resend_on_timeout: if_offline + mod_time: {} + mod_vcard: {} + mod_vcard_xupdate: {} + mod_version: + show_os: false + +### Local Variables: +### mode: yaml +### End: +### vim: set filetype=yaml tabstop=8 + diff --git a/systems/eldiron/ejabberd/warn_xmpp_email.py b/systems/eldiron/ejabberd/warn_xmpp_email.py new file mode 100755 index 0000000..d482b43 --- /dev/null +++ b/systems/eldiron/ejabberd/warn_xmpp_email.py @@ -0,0 +1,112 @@ +#!@pythonEnv@/bin/python3 + +import sys +import json +import slixmpp +import asyncio +import logging +import io + +CONFIG = json.load(open("@scriptEnv@", "r")) + +def sanitize(string): + import re + from unidecode import unidecode + return re.compile(r"[^-.A-Za-z0-9_]").sub("_", unidecode(string)) + +def parse_email(): + import email + from email.header import decode_header + + mail = email.message_from_file(sys.stdin) + try: + d = decode_header(mail["subject"])[0] + if d[1] is not None: + subject = d[0].decode(d[1]) + else: + subject = d[0] + except Exception as e: + subject = mail["subject"] + sender = mail["from"] + recipient = mail["X-Original-To"] + + body = "" + html = None + files = {} + for part in mail.walk(): + if part.get_content_type() == "text/plain": + body += "\n-------------------\n" + try: + body += part.get_payload(decode=True).decode(encoding=part.get_content_charset() or "utf-8") + except Exception as e: + body += part.get_payload(decode=False) + elif part.get_content_type() == "text/html": + html = part.get_payload(decode=True) + elif part.get_content_type() != "text/html" and\ + part.get_content_maintype() != "multipart": + + filename = part.get_filename() or "{}.dat".format(part["Content-ID"]) + files[sanitize(filename)] = (part.get_content_type(), part.get_payload(decode=True)) + + return [body, html, subject, sender, recipient, files] + +[body, html, subject, sender, recipient, files] = parse_email() + +class Bot(slixmpp.ClientXMPP): + def __init__(self, jid, password, body, html, subject, sender, recipient, files): + super().__init__(jid, password) + + self.got_error = False + self.body = body + self.html = html + self.subject = subject + self.sender = sender + self.recipient = recipient + self.files = files + self.register_plugin('xep_0363') + self.add_event_handler("session_start", self.session_start) + self.add_event_handler("message", self.message) + + @asyncio.coroutine + def session_start(self, event): + files = [] + if self.html is not None: + url = yield from self['xep_0363'].upload_file( + "mail.html", + content_type="text/html", + input_file=io.BytesIO(self.html)) + files.append(("HTML version", url)) + for f in self.files: + url = yield from self['xep_0363'].upload_file( + f, + content_type=self.files[f][0], + input_file=io.BytesIO(self.files[f][1]) + ) + files.append((f, url)) + + text = """ +New e-mail message from {sender} +Subject: {subject} +{body} +""".format(sender=self.sender, subject=self.subject, body=self.body) + if len(files) > 0: + text += "\n\nAttachments:" + for f in files: + text += "\n{}: {}".format(f[0], f[1]) + self.send_message(mto=self.recipient, mbody=text, msubject=self.subject, mtype='message') + yield from asyncio.sleep(5) + self.disconnect() + + @asyncio.coroutine + def message(self, msg): + if msg["type"] == "error": + self.got_error = True + +logging.basicConfig(level=logging.DEBUG, format='%(levelname)-8s %(message)s') +xmpp = Bot(CONFIG["jid"], CONFIG["password"], body, html, subject, sender, recipient, files) +xmpp.connect() +xmpp.process(forever=False) +if xmpp.got_error: + sys.exit(1) +else: + sys.exit(0) diff --git a/systems/eldiron/flake.lock b/systems/eldiron/flake.lock new file mode 100644 index 0000000..99a5c92 --- /dev/null +++ b/systems/eldiron/flake.lock @@ -0,0 +1,2758 @@ +{ + "nodes": { + "backports": { + "inputs": { + "flake-utils": "flake-utils_12", + "nixpkgs": "nixpkgs_15" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=", + "path": "../../backports", + "type": "path" + }, + "original": { + "path": "../../backports", + "type": "path" + } + }, + "buildslist": { + "flake": false, + "locked": { + "lastModified": 1585697026, + "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=", + "ref": "master", + "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0", + "revCount": 4, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + }, + "original": { + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist" + } + }, + "colmena": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs", + "stable": "stable" + }, + "locked": { + "lastModified": 1687954574, + "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=", + "owner": "immae", + "repo": "colmena", + "rev": "e427171150a35e23204c4c15a2483358d22a0eff", + "type": "github" + }, + "original": { + "owner": "immae", + "ref": "add-lib-get-flake", + "repo": "colmena", + "type": "github" + } + }, + "copanier": { + "flake": false, + "locked": { + "lastModified": 1633895178, + "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=", + "owner": "spiral-project", + "repo": "copanier", + "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837", + "type": "github" + }, + "original": { + "owner": "spiral-project", + "repo": "copanier", + "type": "github" + } + }, + "diaspora": { + "flake": false, + "locked": { + "lastModified": 1551139311, + "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=", + "owner": "diaspora", + "repo": "diaspora", + "rev": "663da1ef2573863eb870e0edbd50050f261f3d30", + "type": "github" + }, + "original": { + "owner": "diaspora", + "ref": "v0.7.10.0", + "repo": "diaspora", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1687968164, + "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=", + "owner": "nix-community", + "repo": "disko", + "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "dns-nix": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1635273082, + "narHash": "sha256-EHiDP2jEa7Ai5ZwIf5uld9RVFcV77+2SUxjQXwJsJa0=", + "owner": "kirelagin", + "repo": "dns.nix", + "rev": "c7b9645da9c0ddce4f9de4ef27ec01bb8108039a", + "type": "github" + }, + "original": { + "owner": "kirelagin", + "repo": "dns.nix", + "type": "github" + } + }, + "environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "environment_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../environment", + "type": "path" + }, + "original": { + "path": "../environment", + "type": "path" + } + }, + "etherpad-lite": { + "flake": false, + "locked": { + "lastModified": 1587951095, + "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=", + "owner": "ether", + "repo": "etherpad-lite", + "rev": "62101147a0c3495dc80daa87ab53a3366321a205", + "type": "github" + }, + "original": { + "owner": "ether", + "ref": "1.8.3", + "repo": "etherpad-lite", + "type": "github" + } + }, + "files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../files-watcher", + "type": "path" + }, + "original": { + "path": "../../files-watcher", + "type": "path" + } + }, + "files-watcher_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../files-watcher", + "type": "path" + }, + "original": { + "path": "../files-watcher", + "type": "path" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1687762428, + "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_4" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_7" + }, + "locked": { + "lastModified": 1675295133, + "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1614513358, + "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_10": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_11": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_12": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_13": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_14": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_15": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_16": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_17": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_18": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_19": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_20": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_21": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_22": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_23": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "locked": { + "lastModified": 1609246779, + "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_9": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "grocy": { + "flake": false, + "locked": { + "lastModified": 1585166193, + "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=", + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + }, + "original": { + "owner": "grocy", + "repo": "grocy", + "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a", + "type": "github" + } + }, + "mastodon": { + "flake": false, + "locked": { + "lastModified": 1582790581, + "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=", + "owner": "tootsuite", + "repo": "mastodon", + "rev": "9bace2dd88d127d396794375c8fcb2132619a799", + "type": "github" + }, + "original": { + "owner": "tootsuite", + "ref": "v2.9.4", + "repo": "mastodon", + "type": "github" + } + }, + "mediagoblin": { + "flake": false, + "locked": { + "lastModified": 1531090939, + "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=", + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "revCount": 4805, + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + }, + "original": { + "ref": "stable", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "submodules": true, + "type": "git", + "url": "https://git.savannah.gnu.org/git/mediagoblin.git" + } + }, + "my-lib": { + "inputs": { + "colmena": "colmena", + "disko": "disko", + "flake-parts": "flake-parts", + "nixos-anywhere": "nixos-anywhere", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=", + "path": "../../flakes/lib", + "type": "path" + }, + "original": { + "path": "../../flakes/lib", + "type": "path" + } + }, + "mypackages": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_16", + "webapps-ttrss": "webapps-ttrss" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../mypackages", + "type": "path" + }, + "original": { + "path": "../../mypackages", + "type": "path" + } + }, + "mypackages_2": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": "nixpkgs_19", + "webapps-ttrss": "webapps-ttrss_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_3": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_21", + "webapps-ttrss": "webapps-ttrss_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "mypackages_4": { + "inputs": { + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_29", + "webapps-ttrss": "webapps-ttrss_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../mypackages", + "type": "path" + }, + "original": { + "path": "../mypackages", + "type": "path" + } + }, + "myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_10": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_11": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_12": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_13": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_14": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_6": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_7": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../myuids", + "type": "path" + }, + "original": { + "path": "../../myuids", + "type": "path" + } + }, + "myuids_8": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "myuids_9": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../myuids", + "type": "path" + }, + "original": { + "path": "../myuids", + "type": "path" + } + }, + "naemon": { + "locked": { + "lastModified": 1, + "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=", + "path": "../../naemon", + "type": "path" + }, + "original": { + "path": "../../naemon", + "type": "path" + } + }, + "nixos-2305": { + "locked": { + "lastModified": 1687938137, + "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-anywhere": { + "inputs": { + "disko": [ + "my-lib", + "disko" + ], + "flake-parts": [ + "my-lib", + "flake-parts" + ], + "nixos-2305": "nixos-2305", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1689945193, + "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=", + "owner": "numtide", + "repo": "nixos-anywhere", + "rev": "27161266077a177ac116e2cb72cc70af5f145189", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nixos-anywhere", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2305": [ + "my-lib", + "nixos-anywhere", + "nixos-2305" + ], + "nixos-unstable": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1686819168, + "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1683408522, + "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-4": { + "flake": false, + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1685564631, + "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1691269286, + "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_4": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_5": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_6": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_7": { + "locked": { + "dir": "lib", + "lastModified": 1675183161, + "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1631570365, + "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df7113c0727881519248d4c7d080324e0ee3327b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1687502512, + "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_17": { + "locked": { + "lastModified": 1633901457, + "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f358794824b4595d77fec93732485d329ed7b0e0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_18": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687701825, + "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_22": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_23": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_24": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_25": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_26": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_27": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_28": { + "locked": { + "lastModified": 1611097871, + "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_29": { + "locked": { + "lastModified": 1646497237, + "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1687893427, + "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4b14ab2a916508442e685089672681dff46805be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_30": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_31": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1648725829, + "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1693158576, + "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "flake": false, + "locked": { + "lastModified": 1596265691, + "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "openarc": { + "inputs": { + "flake-utils": "flake-utils_4", + "myuids": "myuids", + "nixpkgs": "nixpkgs_7", + "openarc": "openarc_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_2": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_3": { + "inputs": { + "flake-utils": "flake-utils_6", + "myuids": "myuids_3", + "nixpkgs": "nixpkgs_9", + "openarc": "openarc_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../openarc", + "type": "path" + }, + "original": { + "path": "../../openarc", + "type": "path" + } + }, + "openarc_4": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "openarc_5": { + "flake": false, + "locked": { + "lastModified": 1537545083, + "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=", + "owner": "trusteddomainproject", + "repo": "OpenARC", + "rev": "355ee2a1ca85acccce494478991983b54f794f4e", + "type": "github" + }, + "original": { + "owner": "trusteddomainproject", + "repo": "OpenARC", + "type": "github" + } + }, + "opendmarc": { + "inputs": { + "flake-utils": "flake-utils_5", + "myuids": "myuids_2", + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "opendmarc_2": { + "inputs": { + "flake-utils": "flake-utils_7", + "myuids": "myuids_4", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../opendmarc", + "type": "path" + }, + "original": { + "path": "../../opendmarc", + "type": "path" + } + }, + "paste": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=", + "path": "../../paste", + "type": "path" + }, + "original": { + "path": "../../paste", + "type": "path" + } + }, + "peertube": { + "flake": false, + "locked": { + "lastModified": 1611184594, + "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=", + "ref": "gitolite_local/open_instance", + "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3", + "revCount": 6316, + "type": "git", + "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_2": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_3": { + "flake": false, + "locked": { + "lastModified": 1610436329, + "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=", + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86", + "type": "github" + }, + "original": { + "owner": "Chocobozzz", + "ref": "v3.0.1", + "repo": "PeerTube", + "type": "github" + } + }, + "peertube_open_instance": { + "inputs": { + "flake-utils": "flake-utils_9", + "myuids": "myuids_5", + "nixpkgs": "nixpkgs_12", + "peertube": "peertube" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "peertube_origin": { + "inputs": { + "flake-utils": "flake-utils_10", + "myuids": "myuids_6", + "nixpkgs": "nixpkgs_13", + "peertube": "peertube_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "./../../peertube", + "type": "path" + }, + "original": { + "path": "./../../peertube", + "type": "path" + } + }, + "private-buildbot": { + "inputs": { + "buildslist": "buildslist", + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=", + "path": "../../flakes/private/buildbot", + "type": "path" + }, + "original": { + "path": "../../flakes/private/buildbot", + "type": "path" + } + }, + "private-chatons": { + "inputs": { + "environment": "environment" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=", + "path": "../../flakes/private/chatons", + "type": "path" + }, + "original": { + "path": "../../flakes/private/chatons", + "type": "path" + } + }, + "private-environment": { + "locked": { + "lastModified": 1, + "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=", + "path": "../../flakes/private/environment", + "type": "path" + }, + "original": { + "path": "../../flakes/private/environment", + "type": "path" + } + }, + "private-milters": { + "inputs": { + "environment": "environment_2", + "files-watcher": "files-watcher", + "openarc": "openarc", + "opendmarc": "opendmarc", + "secrets": "secrets" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=", + "path": "../../flakes/private/milters", + "type": "path" + }, + "original": { + "path": "../../flakes/private/milters", + "type": "path" + } + }, + "private-monitoring": { + "inputs": { + "environment": "environment_3", + "naemon": "naemon", + "nixpkgs-lib": "nixpkgs-lib_2", + "secrets": "secrets_2" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=", + "path": "../../flakes/private/monitoring", + "type": "path" + }, + "original": { + "path": "../../flakes/private/monitoring", + "type": "path" + } + }, + "private-openarc": { + "inputs": { + "files-watcher": "files-watcher_2", + "openarc": "openarc_3", + "secrets": "secrets_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=", + "path": "../../flakes/private/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openarc", + "type": "path" + } + }, + "private-opendmarc": { + "inputs": { + "environment": "environment_4", + "files-watcher": "files-watcher_3", + "opendmarc": "opendmarc_2", + "secrets": "secrets_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=", + "path": "../../flakes/private/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/private/opendmarc", + "type": "path" + } + }, + "private-openldap": { + "locked": { + "lastModified": 1, + "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=", + "path": "../../flakes/private/openldap", + "type": "path" + }, + "original": { + "path": "../../flakes/private/openldap", + "type": "path" + } + }, + "private-paste": { + "inputs": { + "paste": "paste" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=", + "path": "../../flakes/private/paste", + "type": "path" + }, + "original": { + "path": "../../flakes/private/paste", + "type": "path" + } + }, + "private-peertube": { + "inputs": { + "peertube_open_instance": "peertube_open_instance", + "peertube_origin": "peertube_origin" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=", + "path": "../../flakes/private/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/private/peertube", + "type": "path" + } + }, + "private-php": { + "inputs": { + "flake-utils": "flake-utils_11", + "nixpkgs": "nixpkgs_14", + "nixpkgs-4": "nixpkgs-4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=", + "path": "../../flakes/private/php", + "type": "path" + }, + "original": { + "path": "../../flakes/private/php", + "type": "path" + } + }, + "private-ssh": { + "inputs": { + "environment": "environment_5", + "secrets": "secrets_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=", + "path": "../../flakes/private/ssh", + "type": "path" + }, + "original": { + "path": "../../flakes/private/ssh", + "type": "path" + } + }, + "private-system": { + "inputs": { + "backports": "backports", + "environment": "environment_6", + "mypackages": "mypackages", + "myuids": "myuids_7", + "secrets-public": "secrets-public" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=", + "path": "../../flakes/private/system", + "type": "path" + }, + "original": { + "path": "../../flakes/private/system", + "type": "path" + } + }, + "public-copanier": { + "inputs": { + "copanier": "copanier", + "flake-utils": "flake-utils_13", + "nixpkgs": "nixpkgs_17" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=", + "path": "../../flakes/copanier", + "type": "path" + }, + "original": { + "path": "../../flakes/copanier", + "type": "path" + } + }, + "public-diaspora": { + "inputs": { + "diaspora": "diaspora", + "flake-utils": "flake-utils_14", + "myuids": "myuids_8", + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=", + "path": "../../flakes/diaspora", + "type": "path" + }, + "original": { + "path": "../../flakes/diaspora", + "type": "path" + } + }, + "public-etherpad-lite": { + "inputs": { + "etherpad-lite": "etherpad-lite", + "flake-utils": "flake-utils_15", + "mypackages": "mypackages_2", + "nixpkgs": "nixpkgs_20" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=", + "path": "../../flakes/etherpad-lite", + "type": "path" + }, + "original": { + "path": "../../flakes/etherpad-lite", + "type": "path" + } + }, + "public-fiche": { + "locked": { + "lastModified": 1, + "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=", + "path": "../../flakes/fiche", + "type": "path" + }, + "original": { + "path": "../../flakes/fiche", + "type": "path" + } + }, + "public-files-watcher": { + "locked": { + "lastModified": 1, + "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=", + "path": "../../flakes/files-watcher", + "type": "path" + }, + "original": { + "path": "../../flakes/files-watcher", + "type": "path" + } + }, + "public-grocy": { + "inputs": { + "flake-utils": "flake-utils_16", + "grocy": "grocy", + "mypackages": "mypackages_3", + "nixpkgs": "nixpkgs_22" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=", + "path": "../../flakes/grocy", + "type": "path" + }, + "original": { + "path": "../../flakes/grocy", + "type": "path" + } + }, + "public-loginctl-linger": { + "locked": { + "lastModified": 1, + "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=", + "path": "../../flakes/loginctl-linger", + "type": "path" + }, + "original": { + "path": "../../flakes/loginctl-linger", + "type": "path" + } + }, + "public-mastodon": { + "inputs": { + "flake-utils": "flake-utils_17", + "mastodon": "mastodon", + "myuids": "myuids_9", + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=", + "path": "../../flakes/mastodon", + "type": "path" + }, + "original": { + "path": "../../flakes/mastodon", + "type": "path" + } + }, + "public-mediagoblin": { + "inputs": { + "flake-utils": "flake-utils_18", + "mediagoblin": "mediagoblin", + "myuids": "myuids_10", + "nixpkgs": "nixpkgs_24" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=", + "path": "../../flakes/mediagoblin", + "type": "path" + }, + "original": { + "path": "../../flakes/mediagoblin", + "type": "path" + } + }, + "public-multi-apache-container": { + "inputs": { + "files-watcher": "files-watcher_4", + "myuids": "myuids_11" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=", + "path": "../../flakes/multi-apache-container", + "type": "path" + }, + "original": { + "path": "../../flakes/multi-apache-container", + "type": "path" + } + }, + "public-mypackages": { + "inputs": { + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_25", + "webapps-ttrss": "webapps-ttrss_4" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=", + "path": "../../flakes/mypackages", + "type": "path" + }, + "original": { + "path": "../../flakes/mypackages", + "type": "path" + } + }, + "public-myuids": { + "locked": { + "lastModified": 1, + "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=", + "path": "../../flakes/myuids", + "type": "path" + }, + "original": { + "path": "../../flakes/myuids", + "type": "path" + } + }, + "public-openarc": { + "inputs": { + "flake-utils": "flake-utils_19", + "myuids": "myuids_12", + "nixpkgs": "nixpkgs_26", + "openarc": "openarc_5" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=", + "path": "../../flakes/openarc", + "type": "path" + }, + "original": { + "path": "../../flakes/openarc", + "type": "path" + } + }, + "public-opendmarc": { + "inputs": { + "flake-utils": "flake-utils_20", + "myuids": "myuids_13", + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=", + "path": "../../flakes/opendmarc", + "type": "path" + }, + "original": { + "path": "../../flakes/opendmarc", + "type": "path" + } + }, + "public-peertube": { + "inputs": { + "flake-utils": "flake-utils_21", + "myuids": "myuids_14", + "nixpkgs": "nixpkgs_28", + "peertube": "peertube_3" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=", + "path": "../../flakes/peertube", + "type": "path" + }, + "original": { + "path": "../../flakes/peertube", + "type": "path" + } + }, + "public-secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../flakes/secrets", + "type": "path" + }, + "original": { + "path": "../../flakes/secrets", + "type": "path" + } + }, + "public-surfer": { + "inputs": { + "flake-utils": "flake-utils_22", + "mypackages": "mypackages_4", + "nixpkgs": "nixpkgs_30", + "surfer": "surfer" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=", + "path": "../../flakes/surfer", + "type": "path" + }, + "original": { + "path": "../../flakes/surfer", + "type": "path" + } + }, + "public-taskwarrior-web": { + "inputs": { + "flake-utils": "flake-utils_23", + "nixpkgs": "nixpkgs_31", + "taskwarrior-web": "taskwarrior-web" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=", + "path": "../../flakes/taskwarrior-web", + "type": "path" + }, + "original": { + "path": "../../flakes/taskwarrior-web", + "type": "path" + } + }, + "root": { + "inputs": { + "dns-nix": "dns-nix", + "my-lib": "my-lib", + "nixpkgs": "nixpkgs_5", + "private-buildbot": "private-buildbot", + "private-chatons": "private-chatons", + "private-environment": "private-environment", + "private-milters": "private-milters", + "private-monitoring": "private-monitoring", + "private-openarc": "private-openarc", + "private-opendmarc": "private-opendmarc", + "private-openldap": "private-openldap", + "private-paste": "private-paste", + "private-peertube": "private-peertube", + "private-php": "private-php", + "private-ssh": "private-ssh", + "private-system": "private-system", + "public-copanier": "public-copanier", + "public-diaspora": "public-diaspora", + "public-etherpad-lite": "public-etherpad-lite", + "public-fiche": "public-fiche", + "public-files-watcher": "public-files-watcher", + "public-grocy": "public-grocy", + "public-loginctl-linger": "public-loginctl-linger", + "public-mastodon": "public-mastodon", + "public-mediagoblin": "public-mediagoblin", + "public-multi-apache-container": "public-multi-apache-container", + "public-mypackages": "public-mypackages", + "public-myuids": "public-myuids", + "public-openarc": "public-openarc", + "public-opendmarc": "public-opendmarc", + "public-peertube": "public-peertube", + "public-secrets": "public-secrets", + "public-surfer": "public-surfer", + "public-taskwarrior-web": "public-taskwarrior-web" + } + }, + "secrets": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets-public": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_2": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_3": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_4": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "secrets_5": { + "locked": { + "lastModified": 1, + "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", + "path": "../../secrets", + "type": "path" + }, + "original": { + "path": "../../secrets", + "type": "path" + } + }, + "stable": { + "locked": { + "lastModified": 1669735802, + "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "731cc710aeebecbf45a258e977e8b68350549522", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "surfer": { + "flake": false, + "locked": { + "lastModified": 1588637864, + "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=", + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "revCount": 318, + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + }, + "original": { + "rev": "476177380452c9c7c5b1624805feedc824c5995e", + "type": "git", + "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git" + } + }, + "taskwarrior-web": { + "flake": false, + "locked": { + "lastModified": 1546434241, + "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=", + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + }, + "original": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "my-lib", + "nixos-anywhere", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687940979, + "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "0a4f06c27610a99080b69433873885df82003aae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "webapps-ttrss": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_2": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_3": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_4": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + }, + "webapps-ttrss_5": { + "flake": false, + "locked": { + "lastModified": 1546759381, + "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=", + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "revCount": 9256, + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + }, + "original": { + "ref": "master", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "type": "git", + "url": "https://git.tt-rss.org/fox/tt-rss.git" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/systems/eldiron/flake.nix b/systems/eldiron/flake.nix new file mode 100644 index 0000000..790b638 --- /dev/null +++ b/systems/eldiron/flake.nix @@ -0,0 +1,90 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + dns-nix.url = "github:kirelagin/dns.nix"; + dns-nix.inputs.nixpkgs.follows = "nixpkgs"; + + my-lib.url = "path:../../flakes/lib"; + + public-etherpad-lite.url = "path:../../flakes/etherpad-lite"; + public-grocy.url = "path:../../flakes/grocy"; + public-openarc.url = "path:../../flakes/openarc"; + public-opendmarc.url = "path:../../flakes/opendmarc"; + public-peertube.url = "path:../../flakes/peertube"; + public-diaspora.url = "path:../../flakes/diaspora"; + public-mastodon.url = "path:../../flakes/mastodon"; + public-mediagoblin.url = "path:../../flakes/mediagoblin"; + public-surfer.url = "path:../../flakes/surfer"; + public-myuids.url = "path:../../flakes/myuids"; + public-copanier.url = "path:../../flakes/copanier"; + public-secrets.url = "path:../../flakes/secrets"; + public-files-watcher.url = "path:../../flakes/files-watcher"; + public-fiche.url = "path:../../flakes/fiche"; + public-mypackages.url = "path:../../flakes/mypackages"; + public-loginctl-linger.url = "path:../../flakes/loginctl-linger"; + public-multi-apache-container.url = "path:../../flakes/multi-apache-container"; + public-taskwarrior-web.url = "path:../../flakes/taskwarrior-web"; + + private-peertube.url = "path:../../flakes/private/peertube"; + private-buildbot.url = "path:../../flakes/private/buildbot"; + private-php.url = "path:../../flakes/private/php"; + private-environment.url = "path:../../flakes/private/environment"; + private-openarc.url = "path:../../flakes/private/openarc"; + private-openldap.url = "path:../../flakes/private/openldap"; + private-opendmarc.url = "path:../../flakes/private/opendmarc"; + private-milters.url = "path:../../flakes/private/milters"; + private-monitoring.url = "path:../../flakes/private/monitoring"; + private-paste.url = "path:../../flakes/private/paste"; + private-ssh.url = "path:../../flakes/private/ssh"; + private-chatons.url = "path:../../flakes/private/chatons"; + private-system.url = "path:../../flakes/private/system"; + }; + outputs = inputs@{ self, my-lib, nixpkgs, dns-nix, ...}: + my-lib.lib.mkColmenaFlake { + name = "eldiron"; + inherit self nixpkgs; + system = "x86_64-linux"; + targetHost = "176.9.151.89"; + targetUser = "root"; + nixosModules = with inputs; { + base = ./base.nix; + myuids = public-myuids.nixosModule; + secrets = public-secrets.nixosModule; + loginctl-linger = public-loginctl-linger.nixosModule; + files-watcher = public-files-watcher.nixosModule; + multi-apache-container = public-multi-apache-container.nixosModule; + etherpad-lite = public-etherpad-lite.nixosModule; + mastodon = public-mastodon.nixosModule; + mediagoblin = public-mediagoblin.nixosModule; + peertube = public-peertube.nixosModule; + diaspora = public-diaspora.nixosModule; + fiche = public-fiche.nixosModule; + + environment = private-environment.nixosModule; + openarc = private-openarc.nixosModule; + opendmarc = private-opendmarc.nixosModule; + ssh = private-ssh.nixosModule; + chatons = private-chatons.nixosModule; + system = private-system.nixosModule; + monitoring = private-monitoring.nixosModule; + paste = private-paste.nixosModule; + milters = private-milters.nixosModule; + }; + moduleArgs = with inputs; { + dns-nix = dns-nix; + nixpkgsRaw = nixpkgs.legacyPackages.x86_64-linux; + mypackages-lib = public-mypackages.lib.x86_64-linux; + etherpad-lite = public-etherpad-lite.defaultPackage.x86_64-linux; + taskwarrior-web = public-taskwarrior-web.defaultPackage.x86_64-linux; + copanier = public-copanier.defaultPackage.x86_64-linux; + grocy = public-grocy.defaultPackage.x86_64-linux; + surfer = public-surfer.defaultPackage.x86_64-linux; + mediagoblin = public-mediagoblin.defaultPackage.x86_64-linux; + buildbot = private-buildbot.packages.x86_64-linux.buildbot-full; + openldap = private-openldap; + monitoring = private-monitoring; + peertube = private-peertube.packages.x86_64-linux; + php = private-php; + }; + }; +} diff --git a/systems/eldiron/ftp.nix b/systems/eldiron/ftp.nix new file mode 100644 index 0000000..6aa1afc --- /dev/null +++ b/systems/eldiron/ftp.nix @@ -0,0 +1,339 @@ +{ lib, pkgs, config, ... }: +let + package = pkgs.pure-ftpd.override { ldapFtpId = "immaeFtp"; }; + pure-ftpd-enabled = config.myServices.ftp.pure-ftpd.enable; + proftpd-enabled = config.myServices.ftp.proftpd.enable; +in +{ + options = { + myServices.ftp.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable ftp. + ''; + }; + myServices.ftp.pure-ftpd.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable pure-ftpd. + ''; + }; + myServices.ftp.proftpd.enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Whether to enable proftpd. + ''; + }; + }; + + config = lib.mkIf config.myServices.ftp.enable { + myServices.dns.zones."immae.eu".subdomains.ftp = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.espace-de-stockage = { + file.datetime = "2022-08-22T01:00:00"; + service = { + name = "Espace de stockage"; + description = "Compte FTP/SFTP"; + logo = if pure-ftpd-enabled + then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png" + else if proftpd-enabled + then "http://proftpd.org/proftpd.png" + else ""; + website = "ftp.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = if pure-ftpd-enabled then { + name = "Pure-ftpd"; + website = "https://www.pureftpd.org/project/pure-ftpd/"; + license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING"; + license.name = "MIT Licence"; + version = package.version; + source.url = "https://github.com/jedisct1/pure-ftpd/"; + modules = "openssh"; + } else if proftpd-enabled then { + name = "ProFTPD"; + website = "http://proftpd.org/"; + license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.proftpd.version; + source.url = "https://github.com/proftpd/proftpd/"; + modules = "openssh"; + } else {}; + }; + #myServices.chatonsProperties.services.ftp = { + # file.datetime = "2022-08-22T01:00:00"; + # service = { + # name = "Comptes FTP"; + # description = "Compte FTP/SFTP"; + # logo = if pure-ftpd-enabled + # then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png" + # else if proftpd-enabled + # then "http://proftpd.org/proftpd.png" + # else ""; + # website = "ftp.immae.eu"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = if pure-ftpd-enabled then { + # name = "Pure-ftpd"; + # website = "https://www.pureftpd.org/project/pure-ftpd/"; + # license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING"; + # license.name = "MIT Licence"; + # version = package.version; + # source.url = "https://github.com/jedisct1/pure-ftpd/"; + # } else if proftpd-enabled then { + # name = "ProFTPD"; + # website = "http://proftpd.org/"; + # license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING"; + # license.name = "GNU General Public License v2.0"; + # version = pkgs.proftpd.version; + # source.url = "https://github.com/proftpd/proftpd/"; + # } else {}; + #}; + security.acme.certs."ftp" = { + domain = "eldiron.immae.eu"; + # FIXME: make it global + extraLegoRunFlags = ["--preferred-chain" "ISRG Root X1"]; + extraLegoRenewFlags = ["--preferred-chain" "ISRG Root X1"]; + postRun = (lib.optionalString pure-ftpd-enabled '' + systemctl restart pure-ftpd.service + '') + (lib.optionalString proftpd-enabled '' + systemctl restart proftpd.service + ''); + extraDomainNames = [ "ftp.immae.eu" ]; + }; + + networking = { + firewall = { + allowedTCPPorts = [ 21 115 ]; + allowedTCPPortRanges = [ { from = 40000; to = 50000; } ]; + }; + }; + + users.users.ftp = { + uid = config.ids.uids.ftp; # 8 + group = "ftp"; + description = "Anonymous FTP user"; + home = "/homeless-shelter"; + extraGroups = [ "keys" ]; + }; + + users.groups.ftp.gid = config.ids.gids.ftp; + + system.activationScripts.ftp = '' + install -m 0755 -o ftp -g ftp -d /var/lib/ftp + '' + (lib.optionalString proftpd-enabled '' + install -m 0755 -o nobody -g nogroup -d /var/lib/proftpd/authorized_keys + ''); + + secrets.keys."pure-ftpd-ldap" = lib.mkIf pure-ftpd-enabled { + permissions = "0400"; + user = "ftp"; + group = "ftp"; + text = '' + LDAPServer ${config.myEnv.ftp.ldap.host} + LDAPPort 389 + LDAPUseTLS True + LDAPBaseDN ${config.myEnv.ftp.ldap.base} + LDAPBindDN ${config.myEnv.ftp.ldap.dn} + LDAPBindPW ${config.myEnv.ftp.ldap.password} + LDAPDefaultUID 500 + LDAPForceDefaultUID False + LDAPDefaultGID 100 + LDAPForceDefaultGID False + LDAPFilter ${config.myEnv.ftp.ldap.pure-ftpd_filter} + + LDAPAuthMethod BIND + + # Pas de possibilite de donner l'Uid/Gid ! + # Compile dans pure-ftpd directement avec immaeFtpUid / immaeFtpGid + LDAPHomeDir immaeFtpDirectory + ''; + }; + secrets.keys."proftpd-ldap.conf" = lib.mkIf proftpd-enabled { + permissions = "0400"; + user = "ftp"; + group = "ftp"; + text = '' + LDAPServer ldaps://${config.myEnv.ftp.ldap.host}:636/??sub + LDAPUseTLS on + LDAPAuthBinds on + LDAPBindDN "${config.myEnv.ftp.ldap.dn}" "${config.myEnv.ftp.ldap.password}" + LDAPSearchScope subtree + LDAPAuthBinds on + LDAPDefaultGID 100 + LDAPDefaultUID 500 + LDAPForceDefaultUID off + LDAPForceDefaultGID off + LDAPAttr gidNumber immaeFtpGid + LDAPAttr uidNumber immaeFtpUid + LDAPAttr homeDirectory immaeFtpDirectory + LDAPUsers "${config.myEnv.ftp.ldap.base}" "${config.myEnv.ftp.ldap.proftpd_filter}" + LDAPGroups "${config.myEnv.ftp.ldap.base}" + ''; + }; + + services.filesWatcher.pure-ftpd = lib.mkIf pure-ftpd-enabled { + restart = true; + paths = [ config.secrets.fullPaths."pure-ftpd-ldap" ]; + }; + services.filesWatcher.proftpd = lib.mkIf proftpd-enabled { + restart = true; + paths = [ config.secrets.fullPaths."proftpd-ldap.conf" ]; + }; + + systemd.services.pure-ftpd = let + configFile = pkgs.writeText "pure-ftpd.conf" '' + PassivePortRange 40000 50000 + Bind 42 + ChrootEveryone yes + CreateHomeDir yes + BrokenClientsCompatibility yes + MaxClientsNumber 50 + Daemonize yes + MaxClientsPerIP 8 + VerboseLog no + DisplayDotFiles yes + AnonymousOnly no + NoAnonymous no + SyslogFacility ftp + DontResolve yes + MaxIdleTime 15 + LDAPConfigFile ${config.secrets.fullPaths."pure-ftpd-ldap"} + LimitRecursion 10000 8 + AnonymousCanCreateDirs no + MaxLoad 4 + AntiWarez yes + Umask 133:022 + # ftp + MinUID 8 + AllowUserFXP no + AllowAnonymousFXP no + ProhibitDotFilesWrite no + ProhibitDotFilesRead no + AutoRename no + AnonymousCantUpload no + MaxDiskUsage 99 + CustomerProof yes + TLS 1 + CertFile ${config.security.acme.certs.ftp.directory}/full.pem + ''; + in lib.mkIf pure-ftpd-enabled { + description = "Pure-FTPd server"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig.ExecStart = "${package}/bin/pure-ftpd ${configFile}"; + serviceConfig.Type = "forking"; + serviceConfig.PIDFile = "/run/pure-ftpd.pid"; + }; + + systemd.services.proftpd = let + configFile = pkgs.writeText "proftpd.conf" '' + ServerName "ProFTPD" + ServerType standalone + DefaultServer on + + Port 21 + UseIPv6 on + Umask 022 + MaxInstances 30 + MaxClients 50 + MaxClientsPerHost 8 + + # Set the user and group under which the server will run. + User ftp + Group ftp + + CreateHome on + DefaultRoot ~ + + AllowOverwrite on + + TLSEngine on + TLSRequired off + TLSProtocol TLSv1.1 TLSv1.2 TLSv1.3 + + TLSCertificateChainFile ${config.security.acme.certs.ftp.directory}/fullchain.pem + TLSECCertificateFile ${config.security.acme.certs.ftp.directory}/cert.pem + TLSECCertificateKeyFile ${config.security.acme.certs.ftp.directory}/key.pem + TLSRenegotiate none + PidFile /run/proftpd/proftpd.pid + + ScoreboardFile /run/proftpd/proftpd.scoreboard + + PassivePorts 40000 50000 + #DebugLevel 10 + Include ${config.secrets.fullPaths."proftpd-ldap.conf"} + + RequireValidShell off + + # Bar use of SITE CHMOD by default + + DenyAll + + + + Umask 022 + Port 115 + SFTPEngine on + CreateHome on + DefaultRoot ~ + + AllowOverwrite on + + SFTPHostKey /etc/ssh/ssh_host_ed25519_key + SFTPHostKey /etc/ssh/ssh_host_rsa_key + Include ${config.secrets.fullPaths."proftpd-ldap.conf"} + RequireValidShell off + SFTPAuthorizedUserKeys file:/var/lib/proftpd/authorized_keys/%u + SFTPAuthMethods password publickey + + SFTPOptions IgnoreSFTPSetOwners + AllowChrootSymlinks off + + ''; + in lib.mkIf proftpd-enabled { + description = "ProFTPD server"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig.ExecStart = "${pkgs.proftpd}/bin/proftpd -c ${configFile}"; + serviceConfig.Type = "forking"; + serviceConfig.PIDFile = "/run/proftpd/proftpd.pid"; + serviceConfig.RuntimeDirectory = "proftpd"; + }; + + services.cron.systemCronJobs = lib.mkIf proftpd-enabled [ + "*/2 * * * * nobody ${./ftp_sync.sh}" + ]; + + myServices.monitoring.fromMasterActivatedPlugins = [ "ftp" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "ftp has access to database for authentication"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_ftp_database"; + + servicegroups = "webstatus-remote-services"; + _webstatus_name = "FTP"; + _webstatus_url = "ftp.immae.eu"; + } + + ]; + + }; + +} diff --git a/systems/eldiron/ftp_sync.sh b/systems/eldiron/ftp_sync.sh new file mode 100755 index 0000000..aff7178 --- /dev/null +++ b/systems/eldiron/ftp_sync.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +LDAPSEARCH=ldapsearch + +LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu" +LDAP_PASS=$(cat /etc/ssh/ldap_password) +LDAP_HOST="ldap://ldap.immae.eu" +LDAP_BASE="dc=immae,dc=eu" +LDAP_FILTER="(memberOf=cn=users,cn=ftp,ou=services,dc=immae,dc=eu)" + +handle_keys() { + uids="$1" + keys="$2" + if [ -n "$uids" ]; then + for uid in $uids; do + echo "$keys" | while read key; do + if [ -n "$key" ]; then + ssh-keygen -e -f <(echo "$key") + fi + done > /var/lib/proftpd/authorized_keys/$uid + done + fi +} + +mkdir -p /var/lib/proftpd/authorized_keys + +while read i; do + if [[ "$i" =~ ^dn: ]]; then + handle_keys "$uids" "$keys" + uids="" + keys="" + fi; + if [[ "$i" =~ ^uid: ]]; then + uids="$uids ${i#uid: }" + fi + if [[ "$i" =~ ^immaeSshKey: ]]; then + key="${i#immaeSshKey: }" + if [[ "$key" =~ ^ssh- ]]; then + keys="$keys +$key" + elif echo "$key" | cut -d" " -f1 | grep -q "\bftp\b"; then + keys="$keys +$(echo "$key" | cut -d" " -f2-)" + fi + fi +done < <(ldapsearch -H "$LDAP_HOST" -ZZ -LLL -D "$LDAP_BIND" -w "$LDAP_PASS" -b "$LDAP_BASE" -x -o ldif-wrap=no "$LDAP_FILTER" uid immaeSshKey) +handle_keys "$uids" "$keys" diff --git a/systems/eldiron/gemini/default.nix b/systems/eldiron/gemini/default.nix new file mode 100644 index 0000000..600afbc --- /dev/null +++ b/systems/eldiron/gemini/default.nix @@ -0,0 +1,50 @@ +{ lib, config, pkgs, ... }: +let + configFile = pkgs.writeText "config.yaml" '' + listen: ":1965" + hosts: + immae.eu: + cert: /var/lib/acme/immae/full.pem + key: /var/lib/acme/immae/key.pem + paths: + - path: / + root: ${./public} + ''; +in +{ + options.myServices.gemini.enable = lib.mkEnableOption "enable Gemini capsule"; + config = lib.mkIf config.myServices.gemini.enable { + security.acme.certs.immae.postRun = '' + systemctl restart gemini.service + ''; + myServices.chatonsProperties.hostings.gemini = { + file.datetime = "2022-08-27T18:00:00"; + hosting = { + name = "Hébergement Gemini"; + description = "Hébergement de capsules Gemini"; + type = "INSTANCE"; + website = "gemini://immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "twins"; + website = "https://code.rocketnine.space/tslocum/twins"; + license.url = "https://code.rocketnine.space/tslocum/twins/src/branch/master/LICENSE"; + license.name = "MIT License"; + version = pkgs.twins.version; + source.url = "https://code.rocketnine.space/tslocum/twins"; + }; + }; + networking.firewall.allowedTCPPorts = [ 1965 ]; + systemd.services.gemini = { + description = "Gemini capsule server"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + serviceConfig.ExecStart = "${pkgs.twins}/bin/twins -config ${configFile}"; + serviceConfig.Type = "simple"; + }; + }; +} diff --git a/systems/eldiron/gemini/public/index.gmi b/systems/eldiron/gemini/public/index.gmi new file mode 100644 index 0000000..034a0d9 --- /dev/null +++ b/systems/eldiron/gemini/public/index.gmi @@ -0,0 +1,70 @@ +# Immae + +## Présentation + +Dans le but de promouvoir la décentralisation des données personnelles et l’usage de logiciels open source, je propose un hébergement de divers services utiles. Ces services sont basés sur du code libre et déployés sur des systèmes libres également. + +Je suis un particulier, et dans la mesure de mes capacités, j’essaye toujours de fournir des services à ma famille et à mes amis proches en remplacement de services non libres fournis par les géants du web. J’ai décidé de faire le nécessaire pour étendre ces services à un public plus large, avec pour but de conserver une qualité suffisante. + +Lorsque c’est possible, les programmes que je développe sont également libres de droits (ce n’est pas toujours dépendant de ma volonté ou tributaire de ma disponibilité pour rendre le code accessible) + +Depuis juin 2019 je fais partie du collectif CHATONS, dont je respecte en particulier la charte: +=> https://chatons.org CHATONS + +## Tarifs + +Je ne cherche pas à faire de profits en proposant ces services. Cependant, l’hébergement de ces services n’est pas gratuit, et maintenir ces services à un niveau de qualité suffisant demande de l’investissement en temps. Ainsi, selon l’usage désiré, le niveau de personnalisation et support dont vous avez besoin et les moyens à votre disposition et votre volonté, une participation pourra être demandée afin d’y accéder. +=> https://www.immae.eu/licences_et_tip.html Tips + +## Services proposés + +Voici une liste non exhaustive de services que je propose : + +* Mastodon +* Nextcloud +* Calendrier/Contacts et synchronisation +* Hébergement de vidéos (Mediagoblin) +* Hébergement de vidéos (Peertube) +* Kanboard +* Flux RSS +* "Lire plus tard" (wallabag) +* Partage de liens (Shaarli) +* Raccourcisseur d’URLs +* Édition de texte collaborative +* Réseau social +* Hébergement de dépôts git privés et publics, gestion d’issues +* Messagerie instantanée (XMPP/Jabber) +* Comptes e-mails avec domaines personnalisés, IMAP/SMTP, MX backup +* Hébergement et administration de sites web privés +* Comptes shell protégés + +Un tableau de bord des services est disponible : +=> https://tools.immae.eu Tableau de bord des services + +Je propose également de l’aide à distance (ou de visu si la distance est faible), pour l’usage de ces outils ou d’autres problèmes liés à l’informatique. + +Si vous ne voyez pas ce que vous voulez dans la liste, nous pourrons essayer de trouver une solution ensemble. Je suis ouvert aussi bien sûr à la création de nouveaux services (la liste est encore incomplète et d’autres services sont déjà prévus), dans le cadre défini en haut : basé sur des applications libres. + +=> https://status.immae.eu État des services + +## Comment faire ? + +Vous devez commencer par accepter les conditions générales dgutilisation : +=> https://www.immae.eu/CGU Conditions générales d’utilisation +Elles ne contiennent rien d’inhabituel mais elles ont été écrites par moi-même, donc sans jargon juridique. Elles vous permettront de décider si les garanties proposées sont en accord avec ce que vous pouvez vous permettre. + +Ensuite, contactez-moi avec vos vœux : +=> https://www.immae.eu/contacts_fr.html Page de contact + +## Infrastructure et open source + +Dans le but de pouvoir décemment offrir une qualité de service suffisante sans pour autant y passer mes journées, l’installation des services est gérée via NixOS, permettant d’assurer la reproductibilité et l’automatisation des installations. + +Cette configuration est stockée publiquement dans un dépôt git, réutilisable et améliorable librement (avec probablement quelques ajustements). +=> https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/ Dépôt git de la configuration + + +=> https://www.immae.eu/contacts_fr.html Page de contact +=> https://www.immae.eu/CGU Conditions générales d’utilisation +=> https://www.immae.eu/mentions.html Mentions légales +=> https://www.immae.eu/licences_et_tip.html Quelques informations sur les licences utilisées et tips diff --git a/systems/eldiron/gitolite/default.nix b/systems/eldiron/gitolite/default.nix new file mode 100644 index 0000000..1885234 --- /dev/null +++ b/systems/eldiron/gitolite/default.nix @@ -0,0 +1,127 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.gitolite; +in { + options.myServices.gitolite = { + enable = lib.mkEnableOption "my gitolite service"; + gitoliteDir = lib.mkOption { + type = lib.types.str; + default = "/var/lib/gitolite"; + }; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.git = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.gitolite = { + file.datetime = "2022-08-21T10:01:00"; + service = { + name = "Gitolite"; + description = "Gitolite allows you to setup git hosting on a central server, with fine-grained access control and many more powerful features."; + website = "https://git.immae.eu"; + logo = "https://git.immae.eu/cgit-css/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/forge-logicielle.html"; + }; + software = { + name = "Gitolite"; + website = "https://gitolite.com/gitolite/"; + license.url = "https://github.com/sitaramc/gitolite/blob/master/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.gitolite.version; + source.url = "https://github.com/sitaramc/gitolite"; + }; + }; + myServices.ssh.modules.gitolite = { + snippet = builtins.readFile ./ldap_gitolite.sh; + dependencies = [ pkgs.gitolite ]; + vars.ldap_group = "cn=users,cn=gitolite,ou=services,dc=immae,dc=eu"; + vars.shell_path = "${pkgs.gitolite}/bin/gitolite-shell"; + vars.services = let + toLine = login: key: ''command="${pkgs.gitolite}/bin/gitolite-shell ${login}",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ${key}''; + in builtins.concatStringsSep "\n" [ + (toLine "naemon" config.myEnv.monitoring.ssh_public_key) + (toLine "buildbot" config.myEnv.buildbot.ssh_key.public) + ]; + }; + networking.firewall.allowedTCPPorts = [ 9418 ]; + + secrets.keys."gitolite/ldap_password" = { + user = "gitolite"; + group = "gitolite"; + permissions = "0400"; + text = config.myEnv.tools.gitolite.ldap.password; + }; + + services.gitDaemon = { + enable = true; + user = "gitolite"; + group = "gitolite"; + basePath = "${cfg.gitoliteDir}/repositories"; + }; + + system.activationScripts.gitolite = let + deps = [ pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.coreutils ]; + gitolite_ldap_groups = pkgs.runCommand "gitolite_ldap_groups.sh" { + buildInputs = [ pkgs.makeWrapper ]; + } '' + makeWrapper "${./gitolite_ldap_groups.sh}" "$out" \ + --prefix PATH : ${lib.makeBinPath deps} \ + --set LDAP_PASS_PATH ${config.secrets.fullPaths."gitolite/ldap_password"} + ''; + in { + deps = [ "users" ]; + text = '' + if [ -d ${cfg.gitoliteDir} ]; then + ln -sf ${gitolite_ldap_groups} ${cfg.gitoliteDir}/gitolite_ldap_groups.sh + chmod g+rx ${cfg.gitoliteDir} + fi + if [ -f ${cfg.gitoliteDir}/projects.list ]; then + chmod g+r ${cfg.gitoliteDir}/projects.list + fi + ''; + }; + + users.users.wwwrun.extraGroups = [ "gitolite" ]; + users.users.gitolite.extraGroups = [ "keys" ]; + + users.users.gitolite.packages = let + python-packages = python-packages: with python-packages; [ + simplejson + apprise + sleekxmpp + urllib3 + pyyaml + ]; + in + [ + # For some reason it absolutely wants to include "doc" output + ((pkgs.python39.withPackages python-packages) // { doc = ""; }) + pkgs.nettools + pkgs.findutils + ]; + # Installation: https://git.immae.eu/mantisbt/view.php?id=93 + services.gitolite = { + enable = true; + adminPubkey = config.myEnv.sshd.rootKeys.immae_dilion; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "git" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "gitolite is working"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = "check_git"; + + servicegroups = "webstatus-remote-services"; + _webstatus_name = "Git"; + _webstatus_url = "git.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/gitolite/gitolite_ldap_groups.sh b/systems/eldiron/gitolite/gitolite_ldap_groups.sh new file mode 100755 index 0000000..ffa2dab --- /dev/null +++ b/systems/eldiron/gitolite/gitolite_ldap_groups.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +uid_param="$1" +ldap_host="ldap://ldap.immae.eu" +ldap_binddn="cn=gitolite,ou=services,dc=immae,dc=eu" +ldap_bindpw="$(cat $LDAP_PASS_PATH)" +ldap_searchbase="dc=immae,dc=eu" +ldap_scope="subtree" + +ldap_options="-H ${ldap_host} -ZZ -x -D ${ldap_binddn} -w ${ldap_bindpw} -b ${ldap_searchbase} -s ${ldap_scope}" + +ldap_filter="(&(memberOf=cn=groups,cn=gitolite,ou=services,dc=immae,dc=eu)(|(member=uid=${uid_param},ou=users,dc=immae,dc=eu)(member=uid=${uid_param},ou=group_users,dc=immae,dc=eu)))" +ldap_result=$(ldapsearch ${ldap_options} -LLL "${ldap_filter}" cn | grep 'cn:' | cut -d' ' -f2) + +echo "$ldap_result" diff --git a/systems/eldiron/gitolite/ldap_gitolite.sh b/systems/eldiron/gitolite/ldap_gitolite.sh new file mode 100644 index 0000000..75a39bf --- /dev/null +++ b/systems/eldiron/gitolite/ldap_gitolite.sh @@ -0,0 +1,28 @@ +### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh +LDAP_GITOLITE_MEMBER="@gitolite_ldap_group@" +GITOLITE_SHELL="@gitolite_shell_path@" + +if [[ $user == gitolite ]]; then + allowed_logins=$(LDAP_BASE=$USER_LDAP_BASE \ + ldap_search '(memberOf='$LDAP_GITOLITE_MEMBER')' '' \ + | grep ^dn \ + | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \ + | paste -sd,) + + psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'git' = ANY(usage) AND login IN ($allowed_logins);" | while IFS='|' read user key; do + if [[ $user == "immae" ]] || [[ $user == "denise" ]]; then + # Capitalize first letter (backward compatibility) + user=$(sed -r 's/^([a-z])/\U\1/' <<< "$user") + fi + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'command="'$GITOLITE_SHELL' '$user'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ' + echo $key + fi + fi + done +cat <&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB" + ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Junk SEEN NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB" + ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Trash NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB" + ''; + in + [ + "0 2 * * * root ${cron_script}/bin/cleanup-imap-folders" + ]; + security.acme.certs."mail-rsa" = { + postRun = '' + systemctl restart dovecot2.service + ''; + extraDomainNames = [ "imap.immae.eu" "pop3.immae.eu" ]; + }; + security.acme.certs."mail" = { + postRun = '' + systemctl restart dovecot2.service + ''; + extraDomainNames = [ "imap.immae.eu" "pop3.immae.eu" ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "imap" "tcp" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "imap connection works"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_imap_connection"; + + servicegroups = "webstatus-remote-services,webstatus-email"; + _webstatus_name = "IMAP"; + _webstatus_url = "imap.immae.eu"; + } + + { + service_description = "imap SSL is up to date"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = ["check_tcp_ssl" "993"]; + + servicegroups = "webstatus-ssl"; + _webstatus_name = "IMAP"; + _webstatus_url = "imap.immae.eu"; + } + + ]; + }; +} + diff --git a/systems/eldiron/mail/postfix.nix b/systems/eldiron/mail/postfix.nix new file mode 100644 index 0000000..f95ee1b --- /dev/null +++ b/systems/eldiron/mail/postfix.nix @@ -0,0 +1,497 @@ +{ lib, pkgs, config, options, ... }: +let + getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) (lib.filterAttrs (n: v: v.receive) p.emailPolicies); + bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones; + receiving_domains = lib.flatten (builtins.attrValues bydomain); +in +{ + options.services.postfix.submissionOptions' = options.services.postfix.submissionOptions // { + type = with lib.types; attrsOf (either str (listOf str)); + apply = builtins.mapAttrs (n: v: if builtins.isList v then builtins.concatStringsSep "," v else v); + }; + config = lib.mkIf config.myServices.mail.enable { + myServices.dns.zones."immae.eu" = with config.myServices.dns.helpers; lib.mkMerge [ + mailMX + (mailCommon "immae.eu") + mailSend + { + # Virtual forwards and mailboxes for real users + emailPolicies."mail".receive = true; + # multi-domain generic mails: + # hostmaster, cron, httpd, naemon, postmaster + # system virtual mailboxes: + # devnull, printer, testconnect + emailPolicies."".receive = true; + subdomains.mail = lib.mkMerge [ (mailCommon "immae.eu") mailSend ]; + subdomains.smtp = ips servers.eldiron.ips.main; + + # DMARC reports + subdomains._dmarc.subdomains._report.subdomains = let + getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) p.emailPolicies; + bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones; + hostsWithMail = lib.flatten (builtins.attrValues bydomain); + nvpairs = builtins.map (e: { name = e; value = { TXT = [ "v=DMARC1;" ]; }; }) hostsWithMail; + in + builtins.listToAttrs nvpairs; + } + ]; + + myServices.chatonsProperties.hostings.mx-backup = { + file.datetime = "2022-08-22T01:00:00"; + hosting = { + name = "MX Backup"; + description = "Serveur e-mail secondaire"; + logo = "https://www.postfix.org/favicon.ico"; + website = "https://mail.immae.eu/"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Postfix"; + website = "http://www.postfix.org/"; + license.url = "http://postfix.mirrors.ovh.net/postfix-release/LICENSE"; + license.name = "Eclipse Public license (EPL 2.0) and IBM Public License (IPL 1.0)"; + version = pkgs.postfix.version; + source.url = "http://www.postfix.org/download.html"; + }; + }; + secrets.keys = { + "postfix/mysql_alias_maps" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + # We need to specify that option to trigger ssl connection + tls_ciphers = TLSv1.2 + user = ${config.myEnv.mail.postfix.mysql.user} + password = ${config.myEnv.mail.postfix.mysql.password} + hosts = unix:${config.myEnv.mail.postfix.mysql.socket} + dbname = ${config.myEnv.mail.postfix.mysql.database} + query = SELECT DISTINCT destination + FROM forwardings + WHERE + ((regex = 1 AND '%s' REGEXP CONCAT('^',source,'$') ) OR (regex = 0 AND source = '%s')) + AND active = 1 + AND '%s' NOT IN + ( + SELECT source + FROM forwardings_blacklisted + WHERE source = '%s' + ) UNION + SELECT 'devnull@immae.eu' + FROM forwardings_blacklisted + WHERE source = '%s' + ''; + }; + "postfix/ldap_mailboxes" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + server_host = ldaps://${config.myEnv.mail.dovecot.ldap.host}:636 + search_base = ${config.myEnv.mail.dovecot.ldap.base} + query_filter = ${config.myEnv.mail.dovecot.ldap.postfix_mailbox_filter} + bind_dn = ${config.myEnv.mail.dovecot.ldap.dn} + bind_pw = ${config.myEnv.mail.dovecot.ldap.password} + result_attribute = immaePostfixAddress + result_format = dummy + version = 3 + ''; + }; + "postfix/mysql_sender_login_maps" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + # We need to specify that option to trigger ssl connection + tls_ciphers = TLSv1.2 + user = ${config.myEnv.mail.postfix.mysql.user} + password = ${config.myEnv.mail.postfix.mysql.password} + hosts = unix:${config.myEnv.mail.postfix.mysql.socket} + dbname = ${config.myEnv.mail.postfix.mysql.database} + query = SELECT DISTINCT destination + FROM forwardings + WHERE + ( + (regex = 1 AND CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') REGEXP CONCAT('^',source,'$') ) + OR + (regex = 0 AND source = CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d')) + ) + AND active = 1 + UNION SELECT CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') AS destination + ''; + }; + "postfix/mysql_sender_relays_maps" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + # We need to specify that option to trigger ssl connection + tls_ciphers = TLSv1.2 + user = ${config.myEnv.mail.postfix.mysql.user} + password = ${config.myEnv.mail.postfix.mysql.password} + hosts = unix:${config.myEnv.mail.postfix.mysql.socket} + dbname = ${config.myEnv.mail.postfix.mysql.database} + # INSERT INTO sender_relays + # (`from`, owner, relay, login, password, regex, active) + # VALUES + # ( 'sender@otherhost.org' + # , 'me@mail.immae.eu' + # , '[otherhost.org]:587' + # , 'otherhostlogin' + # , AES_ENCRYPT('otherhostpassword', '${config.myEnv.mail.postfix.mysql.password_encrypt}') + # , '0' + # , '1'); + + query = SELECT DISTINCT `owner` + FROM sender_relays + WHERE + ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s')) + AND active = 1 + ''; + }; + "postfix/mysql_sender_relays_hosts" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + # We need to specify that option to trigger ssl connection + tls_ciphers = TLSv1.2 + user = ${config.myEnv.mail.postfix.mysql.user} + password = ${config.myEnv.mail.postfix.mysql.password} + hosts = unix:${config.myEnv.mail.postfix.mysql.socket} + dbname = ${config.myEnv.mail.postfix.mysql.database} + + query = SELECT DISTINCT relay + FROM sender_relays + WHERE + ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s')) + AND active = 1 + ''; + }; + "postfix/mysql_sender_relays_creds" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + # We need to specify that option to trigger ssl connection + tls_ciphers = TLSv1.2 + user = ${config.myEnv.mail.postfix.mysql.user} + password = ${config.myEnv.mail.postfix.mysql.password} + hosts = unix:${config.myEnv.mail.postfix.mysql.socket} + dbname = ${config.myEnv.mail.postfix.mysql.database} + + query = SELECT DISTINCT CONCAT(`login`, ':', AES_DECRYPT(`password`, '${config.myEnv.mail.postfix.mysql.password_encrypt}')) + FROM sender_relays + WHERE + ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s')) + AND active = 1 + ''; + }; + "postfix/ldap_ejabberd_users_immae_fr" = { + user = config.services.postfix.user; + group = config.services.postfix.group; + permissions = "0440"; + text = '' + server_host = ldaps://${config.myEnv.jabber.ldap.host}:636 + search_base = ${config.myEnv.jabber.ldap.base} + query_filter = ${config.myEnv.jabber.postfix_user_filter} + domain = immae.fr + bind_dn = ${config.myEnv.jabber.ldap.dn} + bind_pw = ${config.myEnv.jabber.ldap.password} + result_attribute = immaeXmppUid + result_format = ejabberd@localhost + version = 3 + ''; + }; + }; + + networking.firewall.allowedTCPPorts = [ 25 465 587 ]; + + users.users.postfixscripts = { + group = "keys"; + uid = config.ids.uids.postfixscripts; + description = "Postfix scripts user"; + }; + users.users."${config.services.postfix.user}".extraGroups = [ "keys" ]; + services.filesWatcher.postfix = { + restart = true; + paths = [ + config.secrets.fullPaths."postfix/mysql_alias_maps" + config.secrets.fullPaths."postfix/ldap_mailboxes" + config.secrets.fullPaths."postfix/mysql_sender_login_maps" + config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr" + ]; + }; + services.postfix = { + extraAliases = let + testmail = pkgs.writeScript "testmail" '' + #! ${pkgs.stdenv.shell} + ${pkgs.coreutils}/bin/touch \ + "/var/lib/naemon/checks/email/$(${pkgs.procmail}/bin/formail -x To: | ${pkgs.coreutils}/bin/tr -d ' <>')" + ''; + in + ''testmail: "|${testmail}"''; + mapFiles = let + virtual_map = { + virtual = let + cfg = config.myEnv.monitoring.email_check.eldiron; + address = "${cfg.mail_address}@${cfg.mail_domain}"; + aliases = config.myEnv.mail.postfix.common_aliases; + admins = builtins.concatStringsSep "," config.myEnv.mail.postfix.admins; + in pkgs.writeText "postfix-virtual" ( + builtins.concatStringsSep "\n" ( + [ "${address} testmail@localhost" + ] ++ + map (a: "${a} ${admins}") config.myEnv.mail.postfix.other_aliases + ++ lib.lists.flatten ( + map (domain: + map (alias: "${alias}@${domain} ${admins}") aliases + ) receiving_domains + ) + )); + }; + sasl_access = { + host_sender_login = with lib.attrsets; let + addresses = zipAttrs (lib.flatten (mapAttrsToList + (n: v: (map (e: { "${e}" = "${n}@immae.eu"; }) v.emails)) config.myEnv.servers)); + aliases = config.myEnv.mail.postfix.common_aliases; + joined = builtins.concatStringsSep ","; + admins = joined config.myEnv.mail.postfix.admins; + in pkgs.writeText "host-sender-login" + (builtins.concatStringsSep "\n" ( + mapAttrsToList (n: v: "${n} ${joined v}") addresses + ++ lib.lists.flatten ( + map (domain: + map (alias: "${alias}@${domain} ${admins}") aliases + ) receiving_domains + ) + ++ map (a: "${a} ${admins}") config.myEnv.mail.postfix.other_aliases + )); + }; + in + virtual_map // sasl_access; + config = { + ### postfix module overrides + readme_directory = "${pkgs.postfix}/share/postfix/doc"; + smtp_tls_CAfile = lib.mkForce ""; + smtp_tls_cert_file = lib.mkForce ""; + smtp_tls_key_file = lib.mkForce ""; + + message_size_limit = "1073741824"; # Don't put 0 here, it's not equivalent to "unlimited" + mailbox_size_limit = "1073741825"; # Workaround, local delivered mails should all go through scripts + alias_database = "\$alias_maps"; + + ### Aliases scripts user + default_privs = "postfixscripts"; + + ### Virtual mailboxes config + virtual_alias_maps = [ + "hash:/etc/postfix/virtual" + "mysql:${config.secrets.fullPaths."postfix/mysql_alias_maps"}" + "ldap:${config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"}" + ]; + virtual_mailbox_domains = receiving_domains; + virtual_mailbox_maps = [ + "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}" + ]; + dovecot_destination_recipient_limit = "1"; + virtual_transport = "dovecot"; + + ### Relay domains + smtpd_relay_restrictions = [ + "defer_unauth_destination" + ]; + + ### Additional smtpd configuration + smtpd_tls_received_header = "yes"; + smtpd_tls_loglevel = "1"; + + ### Email sending configuration + smtp_tls_security_level = "may"; + smtp_tls_loglevel = "1"; + + ### Force ip bind for smtp + smtp_bind_address = builtins.head config.hostEnv.ips.main.ip4; + smtp_bind_address6 = builtins.head config.hostEnv.ips.main.ip6; + + # Use some relays when authorized senders are not myself + smtp_sasl_mechanism_filter = [ + "plain" + "login" + ]; # GSSAPI Not correctly supported by postfix + smtp_sasl_auth_enable = "yes"; + smtp_sasl_password_maps = [ + "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_creds"}" + ]; + smtp_sasl_security_options = "noanonymous"; + smtp_sender_dependent_authentication = "yes"; + sender_dependent_relayhost_maps = [ + "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_hosts"}" + ]; + + ### opendkim, opendmarc, openarc milters + non_smtpd_milters = [ + "unix:${config.myServices.mail.milters.sockets.opendkim}" + ]; + smtpd_milters = [ + "unix:${config.myServices.mail.milters.sockets.opendkim}" + "unix:${config.myServices.mail.milters.sockets.openarc}" + "unix:${config.myServices.mail.milters.sockets.opendmarc}" + ]; + + smtp_use_tls = true; + smtpd_use_tls = true; + smtpd_tls_chain_files = [ + "/var/lib/acme/mail/full.pem" + "/var/lib/acme/mail-rsa/full.pem" + ]; + + maximal_queue_lifetime = "6w"; + bounce_queue_lifetime = "6w"; + }; + enable = true; + enableSmtp = true; + enableSubmission = true; + submissionOptions = config.services.postfix.submissionOptions'; + submissionOptions' = { + # Don’t use "long form", only commas (cf + # http://www.postfix.org/master.5.html long form is not handled + # well by the submission function) + smtpd_tls_security_level = "encrypt"; + smtpd_sasl_auth_enable = "yes"; + smtpd_tls_auth_only = "yes"; + smtpd_sasl_tls_security_options = "noanonymous"; + smtpd_sasl_type = "dovecot"; + smtpd_sasl_path = "private/auth"; + smtpd_reject_unlisted_recipient = "no"; + smtpd_client_restrictions = [ + "permit_sasl_authenticated" + "reject" + ]; + smtpd_relay_restrictions = [ + "permit_sasl_authenticated" + "reject" + ]; + # Refuse to send e-mails with a From that is not handled + smtpd_sender_restrictions = [ + "reject_sender_login_mismatch" + "reject_unlisted_sender" + "permit_sasl_authenticated,reject" + ]; + smtpd_sender_login_maps = [ + "hash:/etc/postfix/host_sender_login" + "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_maps"}" + "mysql:${config.secrets.fullPaths."postfix/mysql_sender_login_maps"}" + ]; + smtpd_recipient_restrictions = [ + "permit_sasl_authenticated" + "reject" + ]; + milter_macro_daemon_name = "ORIGINATING"; + smtpd_milters = [ + # FIXME: put it back when opensmtpd is upgraded and able to + # rewrite the from header + #"unix:/run/milter_verify_from/verify_from.sock" + "unix:${config.myServices.mail.milters.sockets.opendkim}" + ]; + }; + destination = ["localhost"]; + # This needs to reverse DNS + hostname = config.hostEnv.fqdn; + setSendmail = true; + recipientDelimiter = "+"; + masterConfig = { + submissions = { + type = "inet"; + private = false; + command = "smtpd"; + args = ["-o" "smtpd_tls_wrappermode=yes" ] ++ (let + mkKeyVal = opt: val: [ "-o" (opt + "=" + val) ]; + in lib.concatLists (lib.mapAttrsToList mkKeyVal config.services.postfix.submissionOptions) + ); + }; + dovecot = { + type = "unix"; + privileged = true; + chroot = false; + command = "pipe"; + args = let + # rspamd could be used as a milter, but then it cannot apply + # its checks "per user" (milter is not yet dispatched to + # users), so we wrap dovecot-lda inside rspamc per recipient + # here. + rspamc_dovecot = pkgs.writeScriptBin "rspamc_dovecot" '' + #! ${pkgs.stdenv.shell} + set -o pipefail + sender="$1" + original_recipient="$2" + user="$3" + + ${pkgs.coreutils}/bin/cat - | \ + ${pkgs.rspamd}/bin/rspamc -h ${config.myServices.mail.rspamd.sockets.worker-controller} -c bayes -d "$user" --mime | \ + ${pkgs.dovecot}/libexec/dovecot/dovecot-lda -f "$sender" -a "$original_recipient" -d "$user" + if echo ''${PIPESTATUS[@]} | ${pkgs.gnugrep}/bin/grep -qE '^[0 ]+$'; then + exit 0 + else + # src/global/sys_exits.h to retry + exit 75 + fi + ''; + in [ + "flags=ODRhu" "user=vhost:vhost" + "argv=${rspamc_dovecot}/bin/rspamc_dovecot \${sender} \${original_recipient} \${user}@\${nexthop}" + ]; + }; + }; + }; + security.acme.certs."mail" = { + postRun = '' + systemctl restart postfix.service + ''; + extraDomainNames = [ "smtp.immae.eu" ]; + }; + security.acme.certs."mail-rsa" = { + postRun = '' + systemctl restart postfix.service + ''; + extraDomainNames = [ "smtp.immae.eu" ]; + }; + system.activationScripts.testmail = { + deps = [ "users" ]; + text = let + allCfg = config.myEnv.monitoring.email_check; + cfg = allCfg.eldiron; + reverseTargets = builtins.attrNames (lib.attrsets.filterAttrs (k: v: builtins.elem "eldiron" v.targets) allCfg); + to_email = cfg': host': + let sep = if lib.strings.hasInfix "+" cfg'.mail_address then "_" else "+"; + in "${cfg'.mail_address}${sep}${host'}@${cfg'.mail_domain}"; + mails_to_receive = builtins.concatStringsSep " " (map (to_email cfg) reverseTargets); + in '' + install -m 0555 -o postfixscripts -g keys -d /var/lib/naemon/checks/email + for f in ${mails_to_receive}; do + if [ ! -f /var/lib/naemon/checks/email/$f ]; then + install -m 0644 -o postfixscripts -g keys /dev/null -T /var/lib/naemon/checks/email/$f + touch -m -d @0 /var/lib/naemon/checks/email/$f + fi + done + ''; + }; + systemd.services.postfix.serviceConfig.Slice = "mail.slice"; + + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "postfix SSL is up to date"; + host_name = config.hostEnv.fqdn; + use = "external-service"; + check_command = "check_smtp"; + + servicegroups = "webstatus-ssl"; + _webstatus_name = "SMTP"; + _webstatus_url = "smtp.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/mail/rspamd.nix b/systems/eldiron/mail/rspamd.nix new file mode 100644 index 0000000..a300cc5 --- /dev/null +++ b/systems/eldiron/mail/rspamd.nix @@ -0,0 +1,88 @@ +{ lib, pkgs, config, ... }: +{ + options.myServices.mail.rspamd.sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + worker-controller = "/run/rspamd/worker-controller.sock"; + }; + readOnly = true; + description = '' + rspamd sockets + ''; + }; + config = lib.mkIf config.myServices.mail.enable { + services.cron.systemCronJobs = let + cron_script = pkgs.runCommand "cron_script" { + buildInputs = [ pkgs.makeWrapper ]; + } '' + mkdir -p $out + cp ${./scan_reported_mails} $out/scan_reported_mails + patchShebangs $out + for i in $out/*; do + wrapProgram "$i" --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils pkgs.rspamd pkgs.flock ]} + done + ''; + in + [ "*/20 * * * * vhost ${cron_script}/scan_reported_mails" ]; + + systemd.services.rspamd.serviceConfig.Slice = "mail.slice"; + systemd.services.rspamd.serviceConfig.SupplementaryGroups = [ "vhost" ]; + services.rspamd = { + enable = true; + debug = false; + overrides = { + "actions.conf".text = '' + reject = null; + add_header = 6; + greylist = null; + ''; + "milter_headers.conf".text = '' + extended_spam_headers = true; + ''; + }; + locals = { + "redis.conf".text = '' + servers = "${config.myEnv.mail.rspamd.redis.socket}"; + db = "${config.myEnv.mail.rspamd.redis.db}"; + ''; + "classifier-bayes.conf".text = '' + users_enabled = true; + backend = "redis"; + servers = "${config.myEnv.mail.rspamd.redis.socket}"; + database = "${config.myEnv.mail.rspamd.redis.db}"; + autolearn = true; + cache { + backend = "redis"; + } + new_schema = true; + statfile { + BAYES_HAM { + spam = false; + } + BAYES_SPAM { + spam = true; + } + } + ''; + }; + workers = { + controller = { + extraConfig = '' + enable_password = "${config.myEnv.mail.rspamd.write_password_hashed}"; + password = "${config.myEnv.mail.rspamd.read_password_hashed}"; + ''; + bindSockets = [ { + socket = config.myServices.mail.rspamd.sockets.worker-controller; + mode = "0660"; + owner = config.services.rspamd.user; + group = "vhost"; + } ]; + }; + }; + postfix = { + enable = true; + config = {}; + }; + }; + }; +} diff --git a/systems/eldiron/mail/scan_reported_mails b/systems/eldiron/mail/scan_reported_mails new file mode 100755 index 0000000..fe9f4d6 --- /dev/null +++ b/systems/eldiron/mail/scan_reported_mails @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +( flock -n 9 || exit 1 +shopt -s nullglob +for spool in /var/lib/vhost/.rspamd/*/pending; do + rspamd_folder=$(dirname $spool) + mail_user=$(basename $rspamd_folder) + mv $rspamd_folder/pending $rspamd_folder/processing + + for mtype in ham spam; do + if [ -d $rspamd_folder/processing/$mtype ]; then + output="$(rspamc -h /run/rspamd/worker-controller.sock -c bayes -d $mail_user learn_$mtype $rspamd_folder/processing/$mtype/*)" + echo "[$mtype: $mail_user]" ${output} >> /var/lib/vhost/.rspamd/rspamd.log + mkdir -p $rspamd_folder/processed/$mtype + cp $rspamd_folder/processing/$mtype/* $rspamd_folder/processed/$mtype/ + fi + done + + rm -rf $rspamd_folder/processing +done +) 9>/var/lib/vhost/scan_reported_mails.lock diff --git a/systems/eldiron/mail/sieve_bin/imapsieve_copy b/systems/eldiron/mail/sieve_bin/imapsieve_copy new file mode 100755 index 0000000..2ca1f23 --- /dev/null +++ b/systems/eldiron/mail/sieve_bin/imapsieve_copy @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# Inspired from https://docs.iredmail.org/dovecot.imapsieve.html + +MSG_TYPE="$1" +OUTPUT_DIR="/var/lib/vhost/.rspamd/${USER}/pending/${MSG_TYPE}" +FILE="${OUTPUT_DIR}/$(date +%Y%m%d%H%M%S)-${RANDOM}${RANDOM}.eml" +mkdir -p "${OUTPUT_DIR}" +cat > ${FILE} < /dev/stdin diff --git a/systems/eldiron/mail/sieve_scripts/backup.sieve b/systems/eldiron/mail/sieve_scripts/backup.sieve new file mode 100644 index 0000000..3014c0a --- /dev/null +++ b/systems/eldiron/mail/sieve_scripts/backup.sieve @@ -0,0 +1,7 @@ +# vim: filetype=sieve +require ["copy","mailbox","fileinto","regex"]; +if header :is "X-Spam" "Yes" { + fileinto :create :copy "Backup/Spam"; +} else { + fileinto :create :copy "Backup/Ham"; +} diff --git a/systems/eldiron/mail/sieve_scripts/report_ham.sieve b/systems/eldiron/mail/sieve_scripts/report_ham.sieve new file mode 100644 index 0000000..f9b8481 --- /dev/null +++ b/systems/eldiron/mail/sieve_scripts/report_ham.sieve @@ -0,0 +1,11 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; + +if environment :matches "imap.mailbox" "*" { + set "mailbox" "${1}"; +} + +if string "${mailbox}" "Trash" { + stop; +} + +pipe :copy "imapsieve_copy" [ "ham" ]; diff --git a/systems/eldiron/mail/sieve_scripts/report_spam.sieve b/systems/eldiron/mail/sieve_scripts/report_spam.sieve new file mode 100644 index 0000000..9a1f794 --- /dev/null +++ b/systems/eldiron/mail/sieve_scripts/report_spam.sieve @@ -0,0 +1,3 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve" ]; + +pipe :copy "imapsieve_copy" [ "spam" ]; diff --git a/systems/eldiron/mail/sympa.nix b/systems/eldiron/mail/sympa.nix new file mode 100644 index 0000000..8e801dd --- /dev/null +++ b/systems/eldiron/mail/sympa.nix @@ -0,0 +1,232 @@ +{ lib, pkgs, config, ... }: +let + domain = "lists.immae.eu"; + sympaConfig = config.myEnv.mail.sympa; +in +{ + config = lib.mkIf config.myServices.mail.enable { + myServices.dns.zones."immae.eu".emailPolicies."lists".receive = true; + myServices.dns.zones."immae.eu".subdomains.lists = + with config.myServices.dns.helpers; lib.mkMerge [ + (ips servers.eldiron.ips.main) + (mailCommon "immae.eu") + mailSend + ]; + + myServices.chatonsProperties.services.sympa = { + file.datetime = "2022-08-22T00:50:00"; + service = { + name = "Sympa"; + description = "Mailing lists service"; + website = "https://mail.immae.eu/sympa"; + logo = "https://mail.immae.eu/static-sympa/icons/favicon_sympa.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Sympa"; + website = "https://www.sympa.org/"; + license.url = "https://github.com/sympa-community/sympa/blob/sympa-6.2/COPYING"; + license.name = "GNU General Public License v2.0"; + version = pkgs.sympa.version; + source.url = "https://github.com/sympa-community/sympa/"; + }; + }; + myServices.databases.postgresql.authorizedHosts = { + backup-2 = [ + { + username = "sympa"; + database = "sympa"; + ip4 = config.myEnv.servers.backup-2.ips.main.ip4; + ip6 = map (v: "${v}/128") config.myEnv.servers.backup-2.ips.main.ip6; + } + ]; + }; + services.websites.env.tools.vhostConfs.mail = { + extraConfig = lib.mkAfter [ + '' + Alias /static-sympa/ /var/lib/sympa/static_content/ + + Require all granted + AllowOverride none + + + SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://" + Require all granted + + '' + ]; + }; + + secrets.keys = { + "sympa/db_password" = { + permissions = "0400"; + group = "sympa"; + user = "sympa"; + text = sympaConfig.postgresql.password; + }; + } + // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/data_sources/${n}.incl" { + permissions = "0400"; group = "sympa"; user = "sympa"; text = v; + }) sympaConfig.data_sources + // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/scenari/${n}" { + permissions = "0400"; group = "sympa"; user = "sympa"; text = v; + }) sympaConfig.scenari; + users.users.sympa.extraGroups = [ "keys" ]; + systemd.slices.mail-sympa = { + description = "Sympa slice"; + }; + + systemd.services.sympa.serviceConfig.SupplementaryGroups = [ "keys" ]; + systemd.services.sympa-archive.serviceConfig.SupplementaryGroups = [ "keys" ]; + systemd.services.sympa-bounce.serviceConfig.SupplementaryGroups = [ "keys" ]; + systemd.services.sympa-bulk.serviceConfig.SupplementaryGroups = [ "keys" ]; + systemd.services.sympa-task.serviceConfig.SupplementaryGroups = [ "keys" ]; + + systemd.services.sympa.serviceConfig.Slice = "mail-sympa.slice"; + systemd.services.sympa-archive.serviceConfig.Slice = "mail-sympa.slice"; + systemd.services.sympa-bounce.serviceConfig.Slice = "mail-sympa.slice"; + systemd.services.sympa-bulk.serviceConfig.Slice = "mail-sympa.slice"; + systemd.services.sympa-task.serviceConfig.Slice = "mail-sympa.slice"; + + # https://github.com/NixOS/nixpkgs/pull/84202 + systemd.services.sympa.serviceConfig.ProtectKernelModules = lib.mkForce false; + systemd.services.sympa-archive.serviceConfig.ProtectKernelModules = lib.mkForce false; + systemd.services.sympa-bounce.serviceConfig.ProtectKernelModules = lib.mkForce false; + systemd.services.sympa-bulk.serviceConfig.ProtectKernelModules = lib.mkForce false; + systemd.services.sympa-task.serviceConfig.ProtectKernelModules = lib.mkForce false; + systemd.services.sympa.serviceConfig.ProtectKernelTunables = lib.mkForce false; + systemd.services.sympa-archive.serviceConfig.ProtectKernelTunables = lib.mkForce false; + systemd.services.sympa-bounce.serviceConfig.ProtectKernelTunables = lib.mkForce false; + systemd.services.sympa-bulk.serviceConfig.ProtectKernelTunables = lib.mkForce false; + systemd.services.sympa-task.serviceConfig.ProtectKernelTunables = lib.mkForce false; + + systemd.services.wwsympa = { + wantedBy = [ "multi-user.target" ]; + after = [ "sympa.service" ]; + serviceConfig = { + Slice = "mail-sympa.slice"; + Type = "forking"; + PIDFile = "/run/sympa/wwsympa.pid"; + Restart = "always"; + ExecStart = ''${pkgs.spawn_fcgi}/bin/spawn-fcgi \ + -u sympa \ + -g sympa \ + -U wwwrun \ + -M 0600 \ + -F 2 \ + -P /run/sympa/wwsympa.pid \ + -s /run/sympa/wwsympa.socket \ + -- ${pkgs.sympa}/lib/sympa/cgi/wwsympa.fcgi + ''; + StateDirectory = "sympa"; + ProtectHome = true; + ProtectSystem = "full"; + ProtectControlGroups = true; + }; + }; + + services.postfix = { + mapFiles = { + # Update relay list when changing one of those + sympa_virtual = pkgs.writeText "virtual.sympa" '' + sympa-request@${domain} postmaster@immae.eu + sympa-owner@${domain} postmaster@immae.eu + ''; + sympa_transport = pkgs.writeText "transport.sympa" '' + ${domain} error:User unknown in recipient table + sympa@${domain} sympa:sympa@${domain} + listmaster@${domain} sympa:listmaster@${domain} + bounce@${domain} sympabounce:sympa@${domain} + abuse-feedback-report@${domain} sympabounce:sympa@${domain} + ''; + }; + config = { + transport_maps = lib.mkAfter [ + "hash:/etc/postfix/sympa_transport" + "hash:/var/lib/sympa/sympa_transport" + ]; + virtual_alias_maps = lib.mkAfter [ + "hash:/etc/postfix/sympa_virtual" + ]; + virtual_mailbox_maps = lib.mkAfter [ + "hash:/etc/postfix/sympa_transport" + "hash:/var/lib/sympa/sympa_transport" + "hash:/etc/postfix/sympa_virtual" + ]; + }; + masterConfig = { + sympa = { + type = "unix"; + privileged = true; + chroot = false; + command = "pipe"; + args = [ + "flags=hqRu" + "user=sympa" + "argv=${pkgs.sympa}/libexec/queue" + "\${nexthop}" + ]; + }; + sympabounce = { + type = "unix"; + privileged = true; + chroot = false; + command = "pipe"; + args = [ + "flags=hqRu" + "user=sympa" + "argv=${pkgs.sympa}/libexec/bouncequeue" + "\${nexthop}" + ]; + }; + }; + }; + services.sympa = { + enable = true; + listMasters = sympaConfig.listmasters; + mainDomain = domain; + domains = { + "${domain}" = { + webHost = "mail.immae.eu"; + webLocation = "/sympa"; + }; + }; + + database = { + type = "PostgreSQL"; + user = sympaConfig.postgresql.user; + host = sympaConfig.postgresql.socket; + name = sympaConfig.postgresql.database; + passwordFile = config.secrets.fullPaths."sympa/db_password"; + createLocally = false; + }; + settings = { + sendmail = "/run/wrappers/bin/sendmail"; + log_smtp = "on"; + sendmail_aliases = "/var/lib/sympa/sympa_transport"; + aliases_program = "${pkgs.postfix}/bin/postmap"; + create_list = "listmaster"; + }; + settingsFile = { + "virtual.sympa".enable = false; + "transport.sympa".enable = false; + } // lib.mapAttrs' (n: v: lib.nameValuePair + "etc/${domain}/data_sources/${n}.incl" + { source = config.secrets.fullPaths."sympa/data_sources/${n}.incl"; }) sympaConfig.data_sources + // lib.mapAttrs' (n: v: lib.nameValuePair + "etc/${domain}/scenari/${n}" + { source = config.secrets.fullPaths."sympa/scenari/${n}"; }) sympaConfig.scenari; + web = { + server = "none"; + }; + + mta = { + type = "none"; + }; + }; + }; +} diff --git a/systems/eldiron/monitoring.nix b/systems/eldiron/monitoring.nix new file mode 100644 index 0000000..2aa7f8f --- /dev/null +++ b/systems/eldiron/monitoring.nix @@ -0,0 +1,51 @@ +{ config, pkgs, lib, name, monitoring, ... }: +let + hostFQDN = config.hostEnv.fqdn; + emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check; +in +{ + config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "emails" "mdadm" "postfix" "postgresql" "zfs" "notify-secondary"]; + config.myServices.monitoring.pluginsArgs.postgresql.package = config.myServices.databases.postgresql.package; + config.myServices.monitoring.objects = lib.mkMerge [ + (monitoring.lib.objectsCommon { + inherit hostFQDN; + hostName = name; + master = false; + processWarn = "550"; processAlert = "650"; + loadWarn = "1.0"; loadAlert = "1.2"; + interface = builtins.head (builtins.attrNames config.networking.interfaces); + }) + + { + service = [ + { + service_description = "No mdadm array is degraded"; + use = "local-service"; + check_command = ["check_mdadm"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "Postgresql replication for backup-2 is up to date"; + use = "local-service"; + check_command = ["check_postgresql_replication" "backup-2" "/run/postgresql" "5432"]; + __passive_servicegroups = "webstatus-databases"; + } + { + service_description = "No ZFS pool is degraded"; + use = "local-service"; + check_command = ["check_zfs"]; + __passive_servicegroups = "webstatus-resources"; + } + { + service_description = "mailq is empty"; + use = "local-service"; + check_command = ["check_mailq"]; + __passive_servicegroups = "webstatus-email"; + } + (emailCheck "eldiron" hostFQDN // { + __passive_servicegroups = "webstatus-email"; + }) + ]; + } + ]; +} diff --git a/systems/eldiron/mpd.nix b/systems/eldiron/mpd.nix new file mode 100644 index 0000000..640b001 --- /dev/null +++ b/systems/eldiron/mpd.nix @@ -0,0 +1,60 @@ +{ lib, pkgs, config, ... }: +{ + options.myServices.mpd.enable = lib.mkEnableOption "enable MPD"; + config = lib.mkIf config.myServices.mpd.enable { + secrets.keys = { + "mpd" = { + permissions = "0400"; + text = config.myEnv.mpd.password; + }; + "mpd-config" = { + permissions = "0400"; + user = "mpd"; + group = "mpd"; + text = '' + password "${config.myEnv.mpd.password}@read,add,control,admin" + ''; + }; + }; + networking.firewall.allowedTCPPorts = [ 6600 ]; + users.users.mpd.extraGroups = [ "wwwrun" "keys" ]; + systemd.services.mpd.serviceConfig.RuntimeDirectory = "mpd"; + services.filesWatcher.mpd = { + restart = true; + paths = [ config.secrets.fullPaths."mpd-config" ]; + }; + + services.mpd = { + enable = true; + network.listenAddress = "any"; + musicDirectory = config.myEnv.mpd.folder; + extraConfig = '' + include "${config.secrets.fullPaths."mpd-config"}" + audio_output { + type "null" + name "No Output" + mixer_type "none" + } + audio_output { + type "httpd" + name "OGG" + encoder "vorbis" + bind_to_address "/run/mpd/ogg.sock" + quality "5.0" + format "44100:16:1" + } + audio_output { + type "httpd" + name "MP3" + encoder "lame" + bind_to_address "/run/mpd/mp3.sock" + quality "5.0" + format "44100:16:1" + } + + + ''; + }; + }; +} + diff --git a/systems/eldiron/pub/default.nix b/systems/eldiron/pub/default.nix new file mode 100644 index 0000000..ca8122a --- /dev/null +++ b/systems/eldiron/pub/default.nix @@ -0,0 +1,100 @@ +{ lib, pkgs, config, ... }: +let + restrict = pkgs.runCommand "restrict" { + file = ./restrict; + buildInputs = [ pkgs.makeWrapper ]; + } '' + mkdir -p $out/bin + cp $file $out/bin/restrict + chmod a+x $out/bin/restrict + patchShebangs $out/bin/restrict + wrapProgram $out/bin/restrict \ + --prefix PATH : ${lib.makeBinPath [ pkgs.bubblewrap pkgs.rrsync ]} \ + --set TMUX_RESTRICT ${./tmux.restrict.conf} + ''; +in +{ + options = { + myServices.pub.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable pub user. + ''; + }; + myServices.pub.usersProfiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.listOf lib.types.package); + default = {}; + description = '' + specific user profile + ''; + }; + myServices.pub.restrictCommand = lib.mkOption { + type = lib.types.path; + readOnly = true; + default = "${restrict}/bin/restrict"; + description = '' + path to the restrict shell + ''; + }; + }; + + config = lib.mkIf config.myServices.pub.enable { + myServices.dns.zones."immae.eu".subdomains.pub = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.vm-like = { + file.datetime = "2022-08-22T01:00:00"; + service = { + name = "Comptes shell"; + description = "Compte shell cloisonné"; + logo = "https://www.openssh.com/favicon.ico"; + website = "pub.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Openssh"; + website = "https://www.openssh.com/"; + license.url = "https://github.com/openssh/openssh-portable/blob/master/LICENCE"; + license.name = "BSD Licence"; + version = pkgs.openssh.version; + source.url = "https://github.com/openssh/openssh-portable"; + }; + }; + myServices.ssh.modules.pub = { + snippet = builtins.readFile ./ldap_pub.sh; + dependencies = [ pkgs.coreutils ]; + vars.ldap_forward_group = "cn=forward,cn=pub,ou=services,dc=immae,dc=eu"; + vars.ldap_pub_group = "cn=restrict,cn=pub,ou=services,dc=immae,dc=eu"; + vars.echo_command = "${pkgs.coreutils}/bin/echo"; + vars.restrict_command = "${restrict}/bin/restrict"; + }; + + system.extraSystemBuilderCmds = let + toPath = u: paths: pkgs.buildEnv { + name = "${u}-profile"; + inherit paths; + }; + in '' + mkdir -p $out/pub + ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (u: m: "ln -s ${toPath u m} $out/pub/${u}") config.myServices.pub.usersProfiles)} + ''; + users.users.pub = let + in { + createHome = true; + description = "Restricted shell user"; + home = "/var/lib/pub"; + uid = config.myEnv.users.pub.uid; + isNormalUser = true; + group = "nogroup"; + useDefaultShell = true; + packages = [ + pkgs.tmux + ]; + }; + }; +} diff --git a/systems/eldiron/pub/ldap_pub.sh b/systems/eldiron/pub/ldap_pub.sh new file mode 100644 index 0000000..9f03ffe --- /dev/null +++ b/systems/eldiron/pub/ldap_pub.sh @@ -0,0 +1,38 @@ +### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh +LDAP_PUB_RESTRICT_MEMBER="@pub_ldap_pub_group@" +LDAP_PUB_FORWARD_MEMBER="@pub_ldap_forward_group@" +ECHO="@pub_echo_command@" + +if [[ $user == pub ]]; then + allowed_logins=$(LDAP_BASE=$USER_LDAP_BASE \ + ldap_search '(memberOf='$LDAP_PUB_RESTRICT_MEMBER')' '' \ + | grep ^dn \ + | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \ + | paste -sd,) + + allowed_forwards=$(LDAP_BASE=$USER_LDAP_BASE \ + ldap_search '(memberOf='$LDAP_PUB_FORWARD_MEMBER')' '' \ + | grep ^dn \ + | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \ + | paste -sd,) + + psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'pub' = ANY(usage) AND login IN ($allowed_logins);" | while IFS='|' read user key; do + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'command="@pub_restrict_command@ '$user'" ' + echo $key + fi + fi + done + + psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'forward' = ANY(usage) AND login IN ($allowed_logins,$allowed_forwards);" | while IFS='|' read user key; do + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" ' + echo $key + fi + fi + done + exit 0 +fi + diff --git a/systems/eldiron/pub/restrict b/systems/eldiron/pub/restrict new file mode 100644 index 0000000..698e394 --- /dev/null +++ b/systems/eldiron/pub/restrict @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +user="$1" +rootuser="$HOME/$user/" +mkdir -p $rootuser + +orig="$SSH_ORIGINAL_COMMAND" +if [ -z "$orig" ]; then + orig="/bin/bash -l" +fi +if [ "${orig:0:7}" = "command" ]; then + orig="${orig:8}" +fi + +case "$orig" in +rsync*) + rrsync $HOME/$user/ + ;; +*) + nix_store_paths() { + nix-store -q -R \ + /run/current-system/sw \ + /etc/profiles/per-user/pub \ + /etc/ssl/certs/ca-bundle.crt \ + | while read i; do + printf '%s--ro-bind\0'$i'\0'$i'\0' '' + done + if [ -e "/run/current-system/pub/$user" ]; then + nix-store -q -R "/run/current-system/pub/$user" \ + | while read i; do + printf '%s--ro-bind\0'$i'\0'$i'\0' '' + done + printf '%s--ro-bind\0/run/current-system/pub/'$user'/bin\0/bin-pub-'$user'\0' '' + fi + } + + set -euo pipefail + (exec -c bwrap --ro-bind /usr /usr \ + --args 10 \ + --dir /tmp \ + --dir /var \ + --symlink ../tmp var/tmp \ + --proc /proc \ + --dev /dev \ + --ro-bind /etc/resolv.conf /etc/resolv.conf \ + --ro-bind /etc/zoneinfo /etc/zoneinfo \ + --ro-bind /etc/ssl /etc/ssl \ + --ro-bind /etc/static/ssl/certs /etc/static/ssl/certs \ + --ro-bind /run/current-system/sw/lib/locale/locale-archive /etc/locale-archive \ + --ro-bind /run/current-system/sw/bin /bin \ + --ro-bind /etc/profiles/per-user/pub/bin /bin-pub \ + --bind /var/lib/pub/$user /var/lib/pub \ + --dir /var/lib/commons \ + --ro-bind $TMUX_RESTRICT /var/lib/commons/tmux.restrict.conf \ + --chdir /var/lib/pub \ + --unshare-all \ + --share-net \ + --dir /run/user/$(id -u) \ + --setenv TERM "$TERM" \ + --setenv LOCALE_ARCHIVE "/etc/locale-archive" \ + --setenv XDG_RUNTIME_DIR "/run/user/`id -u`" \ + --setenv PS1 "$user@pub $ " \ + --setenv PATH "/bin-pub-$user:/bin:/bin-pub" \ + --setenv HOME "/var/lib/pub" \ + --file 11 /etc/passwd \ + --file 12 /etc/group \ + -- $orig) \ + 10< <(nix_store_paths | sort | uniq) \ + 11< <(getent passwd $UID 65534) \ + 12< <(getent group $(id -g) 65534) + ;; +esac diff --git a/systems/eldiron/pub/tmux.restrict.conf b/systems/eldiron/pub/tmux.restrict.conf new file mode 100644 index 0000000..5aefd1c --- /dev/null +++ b/systems/eldiron/pub/tmux.restrict.conf @@ -0,0 +1,43 @@ +# Pour les nostalgiques de screen +# comme les raccourcis ne sont pas les mêmes, j'évite +set -g prefix C-a +unbind-key C-b + +unbind-key -a +bind-key -n C-h list-keys +bind-key C-d detach +bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window + +# même hack que sur screen lorsqu'on veut profiter du scroll du terminal +# (xterm ...) +set -g terminal-overrides 'xterm*:smcup@:rmcup@' + +#Pour les ctrl+arrow +set-option -g xterm-keys on + +# c'est un minimum (defaut 2000) +set-option -g history-limit 10000 + +# lorsque j'ai encore un tmux ailleurs seule +# sa fenetre active réduit la taille de ma fenetre locale +setw -g aggressive-resize on + +# Pour etre alerté sur un changement dans une autre fenêtre +setw -g monitor-activity on +#set -g visual-activity on +#set -g visual-bell on + +set -g base-index 1 + +# repercuter le contenu de la fenetre dans la barre de titre +# reference des string : man tmux (status-left) +set -g set-titles on +set -g set-titles-string '#H #W #T' # host window command + +#Dans les valeurs par defaut deja, avec le ssh-agent +set -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY PATH" + +set -g status off +set -g status-left '' +set -g status-right '' + diff --git a/systems/eldiron/tasks/default.nix b/systems/eldiron/tasks/default.nix new file mode 100644 index 0000000..0772a5f --- /dev/null +++ b/systems/eldiron/tasks/default.nix @@ -0,0 +1,384 @@ +{ lib, pkgs, config, taskwarrior-web, ... }: +let + cfg = config.myServices.tasks; + server_vardir = config.services.taskserver.dataDir; + fqdn = "task.immae.eu"; + user = config.services.taskserver.user; + env = config.myEnv.tools.task; + group = config.services.taskserver.group; + taskserver-user-certs = pkgs.runCommand "taskserver-user-certs" {} '' + mkdir -p $out/bin + cat > $out/bin/taskserver-user-certs <<"EOF" + #!/usr/bin/env bash + + user=$1 + + silent_certtool() { + if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then + echo "GNUTLS certtool invocation failed with output:" >&2 + echo "$output" >&2 + fi + } + + silent_certtool -p \ + --bits 4096 \ + --outfile "${server_vardir}/userkeys/$user.key.pem" + ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${server_vardir}/userkeys/$user.key.pem" + + silent_certtool -c \ + --template "${pkgs.writeText "taskserver-ca.template" '' + tls_www_client + encryption_key + signing_key + expiration_days = 3650 + ''}" \ + --load-ca-certificate "${server_vardir}/keys/ca.cert" \ + --load-ca-privkey "${server_vardir}/keys/ca.key" \ + --load-privkey "${server_vardir}/userkeys/$user.key.pem" \ + --outfile "${server_vardir}/userkeys/$user.cert.pem" + EOF + chmod a+x $out/bin/taskserver-user-certs + patchShebangs $out/bin/taskserver-user-certs + ''; + socketsDir = "/run/taskwarrior-web"; + varDir = "/var/lib/taskwarrior-web"; + taskwebPages = let + uidPages = lib.attrsets.zipAttrs ( + lib.lists.flatten + (lib.attrsets.mapAttrsToList (k: c: map (v: { "${v}" = k; }) c.uid) env.taskwarrior-web) + ); + pages = lib.attrsets.mapAttrs (uid: items: + if lib.lists.length items == 1 then + '' + + + + + + + '' + else + '' + + + To-do list disponibles + + + + +
    + ${builtins.concatStringsSep "\n" (map (item: "
  • ${item}
  • ") items)} +
+ + + '' + ) uidPages; + in + pkgs.runCommand "taskwerver-pages" {} '' + mkdir -p $out/ + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: "cp ${pkgs.writeText k v} $out/${k}.html") pages)} + echo "Please login" > $out/index.html + ''; +in { + options.myServices.tasks = { + enable = lib.mkEnableOption "my tasks service"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.task = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.taskwarrior = { + file.datetime = "2022-08-22T00:00:00"; + service = { + name = "Taskwarrior"; + description = "Taskwarrior is Free and Open Source Software that manages your TODO list from the command line. Web interface and synchronization server"; + website = "https://task.immae.eu/"; + logo = "https://taskwarrior.org/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Taskwarrior"; + website = "https://taskwarrior.org/"; + license.url = "https://github.com/GothenburgBitFactory/taskwarrior/blob/develop/LICENSE"; + license.name = "MIT License"; + version = taskwarrior-web.version; + source.url = "https://taskwarrior.org/download/"; + }; + }; + secrets.keys = { + "webapps/tools-taskwarrior-web" = { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}" + SetEnv TASKD_VARDIR "${server_vardir}" + SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}" + SetEnv TASKD_LDAP_DN "${env.ldap.dn}" + SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}" + SetEnv TASKD_LDAP_BASE "${env.ldap.base}" + SetEnv TASKD_LDAP_FILTER "${env.ldap.filter}" + ''; + }; + } // (lib.mapAttrs' (name: userConfig: lib.nameValuePair "webapps/tools-taskwarrior/${name}-taskrc" ( + let + credentials = "${userConfig.org}/${name}/${userConfig.key}"; + dateFormat = userConfig.date; + cacert = pkgs.writeText "ca.cert" '' + -----BEGIN CERTIFICATE----- + MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw + TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh + cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 + WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu + ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY + MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc + h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ + 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U + A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW + T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH + B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC + B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv + KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn + OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn + jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw + qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI + rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV + HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq + hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL + ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ + 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK + NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 + ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur + TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC + jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc + oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq + 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA + mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d + emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= + -----END CERTIFICATE-----''; + in { + inherit user group; + permissions = "0400"; + text = '' + data.location=${varDir}/${name} + taskd.certificate=${server_vardir}/userkeys/taskwarrior-web.cert.pem + taskd.key=${server_vardir}/userkeys/taskwarrior-web.key.pem + # IdenTrust DST Root CA X3 + # obtained here: https://letsencrypt.org/fr/certificates/ + taskd.ca=${cacert} + taskd.server=${fqdn}:${toString config.services.taskserver.listenPort} + taskd.credentials=${credentials} + dateformat=${dateFormat} + ''; + keyDependencies = [ cacert ]; + })) env.taskwarrior-web); + security.acme.certs.eldiron.extraDomainNames = [ "task.immae.eu" ]; + services.websites.env.tools.watchPaths = [ config.secrets.fullPaths."webapps/tools-taskwarrior-web" ]; + services.websites.env.tools.modules = [ "proxy_fcgi" "sed" ]; + services.websites.env.tools.vhostConfs.task = { + certName = "eldiron"; + hosts = [ "task.immae.eu" ]; + root = ./www; + extraConfig = [ '' + + DirectoryIndex index.php + Use LDAPConnect + Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu + + SetHandler "proxy:unix:${config.services.phpfpm.pools.tasks.socket}|fcgi://localhost" + + Include ${config.secrets.fullPaths."webapps/tools-taskwarrior-web"} + + '' + '' + + ProxyPass "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" + ProxyPassReverse "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" + ProxyPassReverse http://${fqdn}/ + + SetOutputFilter Sed + OutputSed "s|/ajax|/taskweb/%{folderName}/ajax|g" + OutputSed "s|\([^x]\)/tasks|\1/taskweb/%{folderName}/tasks|g" + OutputSed "s|\([^x]\)/projects|\1/taskweb/%{folderName}/projects|g" + OutputSed "s|http://${fqdn}/|/taskweb/%{folderName}/|g" + OutputSed "s|/img/relax.jpg|/taskweb/%{folderName}/img/relax.jpg|g" + + '' + '' + Alias /taskweb ${taskwebPages} + + DirectoryIndex index.html + Require all granted + + + RewriteEngine on + RewriteRule ^/taskweb$ /taskweb/ [R=301,L] + RedirectMatch permanent ^/taskweb/([^/]+)$ /taskweb/$1/ + + RewriteCond %{LA-U:REMOTE_USER} !="" + RewriteCond ${taskwebPages}/%{LA-U:REMOTE_USER}.html -f + RewriteRule ^/taskweb/?$ ${taskwebPages}/%{LA-U:REMOTE_USER}.html [L] + + + Use LDAPConnect + Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu + + '' + ] ++ (lib.attrsets.mapAttrsToList (k: v: '' + + ${builtins.concatStringsSep "\n" (map (uid: "Require ldap-attribute uid=${uid}") v.uid)} + + Use Taskwarrior ${k} + + '') env.taskwarrior-web); + }; + services.phpfpm.pools = { + tasks = { + user = user; + group = group; + settings = { + "listen.owner" = "wwwrun"; + "listen.group" = "wwwrun"; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "10"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "TaskPHPSESSID"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Task:'"; + "php_admin_value[open_basedir]" = "${./www}:/tmp:${server_vardir}:/etc/profiles/per-user/${user}/bin/"; + }; + phpEnv = { + PATH = "/etc/profiles/per-user/${user}/bin"; + }; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + }; + + security.acme.certs."task" = { + inherit group; + domain = fqdn; + postRun = '' + systemctl restart taskserver.service + ''; + }; + + users.users.${user} = { + extraGroups = [ "keys" ]; + packages = [ taskserver-user-certs ]; + }; + + system.activationScripts.taskserver = { + deps = [ "users" ]; + text = '' + install -m 0750 -o ${user} -g ${group} -d ${server_vardir} + install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/userkeys + install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/keys + + if [ ! -e "${server_vardir}/keys/ca.key" ]; then + silent_certtool() { + if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then + echo "GNUTLS certtool invocation failed with output:" >&2 + echo "$output" >&2 + fi + } + + silent_certtool -p \ + --bits 4096 \ + --outfile "${server_vardir}/keys/ca.key" + + silent_certtool -s \ + --template "${pkgs.writeText "taskserver-ca.template" '' + cn = ${fqdn} + expiration_days = -1 + cert_signing_key + ca + ''}" \ + --load-privkey "${server_vardir}/keys/ca.key" \ + --outfile "${server_vardir}/keys/ca.cert" + + chown :${group} "${server_vardir}/keys/ca.key" + chmod g+r "${server_vardir}/keys/ca.key" + fi + ''; + }; + + services.taskserver = { + enable = true; + allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ]; + inherit fqdn; + listenHost = "::"; + pki.manual.ca.cert = "${server_vardir}/keys/ca.cert"; + pki.manual.server.cert = "${config.security.acme.certs.task.directory}/fullchain.pem"; + pki.manual.server.crl = "${config.security.acme.certs.task.directory}/invalid.crl"; + pki.manual.server.key = "${config.security.acme.certs.task.directory}/key.pem"; + requestLimit = 104857600; + }; + + system.activationScripts.taskwarrior-web = { + deps = [ "users" ]; + text = '' + if [ ! -f ${server_vardir}/userkeys/taskwarrior-web.cert.pem ]; then + ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web + chown taskd:taskd ${server_vardir}/userkeys/taskwarrior-web.cert.pem ${server_vardir}/userkeys/taskwarrior-web.key.pem + fi + ''; + }; + + systemd.slices.taskwarrior = { + description = "Taskwarrior slice"; + }; + + systemd.services = (lib.attrsets.mapAttrs' (name: userConfig: + lib.attrsets.nameValuePair "taskwarrior-web-${name}" { + description = "Taskwarrior webapp for ${name}"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + path = [ pkgs.taskwarrior ]; + + environment.TASKRC = config.secrets.fullPaths."webapps/tools-taskwarrior/${name}-taskrc"; + environment.BUNDLE_PATH = "${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}"; + environment.BUNDLE_GEMFILE = "${taskwarrior-web.gems.confFiles}/Gemfile"; + environment.LC_ALL = "fr_FR.UTF-8"; + + script = '' + exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${socketsDir}/${name}.sock + ''; + + serviceConfig = { + Slice = "taskwarrior.slice"; + User = user; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 60; + Type = "simple"; + WorkingDirectory = taskwarrior-web; + StateDirectoryMode = 0750; + StateDirectory = assert lib.strings.hasPrefix "/var/lib/" varDir; + (lib.strings.removePrefix "/var/lib/" varDir + "/${name}"); + RuntimeDirectoryPreserve = "yes"; + RuntimeDirectory = assert lib.strings.hasPrefix "/run/" socketsDir; + lib.strings.removePrefix "/run/" socketsDir; + }; + + unitConfig.RequiresMountsFor = varDir; + }) env.taskwarrior-web) // { + taskserver-ca.postStart = '' + chown :${group} "${server_vardir}/keys/ca.key" + chmod g+r "${server_vardir}/keys/ca.key" + ''; + taskserver-ca.serviceConfig.Slice = "taskwarrior.slice"; + taskserver-init.serviceConfig.Slice = "taskwarrior.slice"; + taskserver.serviceConfig.Slice = "taskwarrior.slice"; + }; + + }; +} diff --git a/systems/eldiron/tasks/www/index.php b/systems/eldiron/tasks/www/index.php new file mode 100644 index 0000000..bde773d --- /dev/null +++ b/systems/eldiron/tasks/www/index.php @@ -0,0 +1,168 @@ + $value) { + if ($key !== "count") { + $entries[] = explode(":", $value); + } +} + +if (isset($_GET["file"])) { + $basecert = $vardir . "/userkeys/" . $ldap_user; + if (!file_exists($basecert . ".cert.pem")) { + exec("taskserver-user-certs $ldap_user"); + } + $certificate = file_get_contents($basecert . ".cert.pem"); + $cert_key = file_get_contents($basecert . ".key.pem"); + + // IdenTrust DST Root CA X3 + // obtained here: https://letsencrypt.org/fr/certificates/ + $server_cert = "-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE-----"; + + $file = $_GET["file"]; + switch($file) { + case "ca.cert.pem": + $content = $server_cert; + $name = "ca.cert.pem"; + $type = "application/x-x509-ca-cert"; + break; + case "cert.pem": + $content = $certificate; + $name = $ldap_user . ".cert.pem"; + $type = "application/x-x509-ca-cert"; + break; + case "key.pem": + $content = $cert_key; + $name = $ldap_user . ".key.pem"; + $type = "application/x-x509-ca-cert"; + break; + case "mirakel"; + foreach ($entries as $entry) { + list($org, $user, $key) = $entry; + if ($key == $_GET["key"]) { break; } + } + $name = $user . ".mirakel"; + $type = "text/plain"; + $content = "username: $user +org: $org +user key: $key +server: $host +client.cert: +$certificate +Client.key: +$cert_key +ca.cert: +$server_cert +"; + break; + default: + die("invalid file name"); + break; + } + + header("Content-Type: $type"); + header('Content-Disposition: attachment; filename="' . $name . '"'); + header('Content-Transfer-Encoding: binary'); + header('Accept-Ranges: bytes'); + header('Cache-Control: private'); + header('Pragma: private'); + echo $content; + exit; +} +?> + +
+ Taskwarrior configuration +
+ + +For command line interface, download the files, put them near your Taskwarrior +configuration files, and add that to your Taskwarrior configuration: +
+taskd.certificate=/path/to/.cert.pem
+taskd.key=/path/to/.key.pem
+taskd.server=
+taskd.ca=/path/to/ca.cert.pem
+ 1) {
+  echo "# Chose one of them\n";
+  foreach($entries as $entry) {
+    list($org, $user, $key) = $entry;
+    echo "# taskd.credentials=$org/$user/$key\n";
+  }
+} else { ?>
+taskd.credentials=//
+
+
+For Mirakel, download and import the file: + +For Android Taskwarrior app, see instructions here. + + + diff --git a/systems/eldiron/vpn/default.nix b/systems/eldiron/vpn/default.nix new file mode 100644 index 0000000..df56249 --- /dev/null +++ b/systems/eldiron/vpn/default.nix @@ -0,0 +1,92 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.myServices.vpn; +in +{ + options.myServices = { + vpn.enable = lib.mkEnableOption "Enable vpn service"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.vpn = with config.myServices.dns.helpers; + ips servers.eldiron.ips.main // { + subdomains.gw.AAAA = [ "${config.myEnv.vpn.eldiron.prefix}:0:ffff:1" ]; + # Fake address to designate the subnet + subdomains.sn.AAAA = [ "${config.myEnv.vpn.eldiron.prefix}::" ]; + }; + myServices.chatonsProperties.hostings.vpn = { + file.datetime = "2022-08-27T18:00:00"; + hosting = { + name = "VPN"; + description = "VPN"; + website = "https://vpn.immae.eu"; + logo = "https://tinc-vpn.org/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration.load = "FULL"; + install.type = "PACKAGE"; + }; + software = { + name = "tinc"; + website = "https://tinc-vpn.org/"; + license.url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"; + license.name = "GNU General Public License v2.0"; + version = pkgs.tinc.version; + source.url = "https://tinc-vpn.org/git/browse?p=tinc"; + }; + }; + secrets.keys = { + "tinc/key.priv" = { + user = "root"; + group = "root"; + permissions = "0400"; + text = config.myEnv.vpn.eldiron.privateKey; + }; + "tinc/key.pub" = { + user = "root"; + group = "root"; + permissions = "0400"; + text = config.myEnv.vpn.eldiron.publicKey; + }; + }; + networking.firewall.allowedTCPPorts = [ 655 1194 ]; + system.activationScripts.tinc = let + configFiles = pkgs.runCommand "tinc-files" { + mainInterface = "eth0"; + hostName = "ImmaeEu"; + network = "Immae"; + keyFile = config.secrets.fullPaths."tinc/key.priv"; + } '' + mkdir -p $out + for i in ${./tinc}/*; do + substituteAll $i $out/$(basename $i) + done + ''; + in '' + install -m750 -o root -g root -d /var/lib/tinc/ /var/lib/tinc/Immae + install -m700 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/{host-*,tinc-*} + install -m400 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/tinc.conf + if [ ! -d /var/lib/tinc/Immae/hosts ]; then + ${pkgs.git}/bin/git clone -b master https://git.immae.eu/perso/Immae/Config/tinc/hosts /var/lib/tinc/Immae/hosts + fi + ''; + + systemd.slices.tinc = { + description = "Tinc slice"; + }; + + systemd.services.tinc-Immae = { + description = "Tinc Daemon - Immae"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + path = [ pkgs.getent pkgs.tinc pkgs.bashInteractive pkgs.iproute pkgs.gnused pkgs.gawk pkgs.git pkgs.glibc ]; + serviceConfig = { + Slice = "tinc.slice"; + Type = "simple"; + Restart = "always"; + RestartSec = "3"; + ExecStart = "${pkgs.tinc}/bin/tincd -d1 -D -c /var/lib/tinc/Immae --pidfile /run/tinc.Immae.pid"; + }; + }; + }; +} diff --git a/systems/eldiron/vpn/tinc/host-down b/systems/eldiron/vpn/tinc/host-down new file mode 100755 index 0000000..1e79bd3 --- /dev/null +++ b/systems/eldiron/vpn/tinc/host-down @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }') +NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '` +for NODEIP in $NODEIPS; do + ip neigh del proxy $NODEIP dev @mainInterface@ +done diff --git a/systems/eldiron/vpn/tinc/host-up b/systems/eldiron/vpn/tinc/host-up new file mode 100755 index 0000000..2f7cee2 --- /dev/null +++ b/systems/eldiron/vpn/tinc/host-up @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }') +while [ -z "$NODEIPS" ]; do + NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '` + sleep 5 +done +for NODEIP in $NODEIPS; do + ip neigh add proxy $NODEIP dev @mainInterface@ +done +(cd /var/lib/tinc/@network@/hosts && git pull -q origin master) || true diff --git a/systems/eldiron/vpn/tinc/tinc-down b/systems/eldiron/vpn/tinc/tinc-down new file mode 100755 index 0000000..1cc45c0 --- /dev/null +++ b/systems/eldiron/vpn/tinc/tinc-down @@ -0,0 +1,12 @@ +#!/bin/sh +# This file closes down the tap device. + +echo 0 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp +echo 0 > /proc/sys/net/ipv6/conf/all/forwarding + +GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1` + +ip neigh del proxy $GWIP dev eth0 + +ip -6 addr del $GWIP/96 dev $INTERFACE +ip -6 link set $INTERFACE down diff --git a/systems/eldiron/vpn/tinc/tinc-up b/systems/eldiron/vpn/tinc/tinc-up new file mode 100755 index 0000000..26c1ec3 --- /dev/null +++ b/systems/eldiron/vpn/tinc/tinc-up @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +echo 1 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp +echo 1 > /proc/sys/net/ipv6/conf/all/forwarding + +SUBNET=`getent hosts sn.vpn.immae.eu | head -n1 | cut -d' ' -f1` +GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1` + +ip -6 link set $INTERFACE up mtu 1280 txqueuelen 1000 + +ip -6 addr add $GWIP/96 dev $INTERFACE +ip -6 route add $SUBNET/80 dev $INTERFACE + +ip neigh add proxy $GWIP dev @mainInterface@ diff --git a/systems/eldiron/vpn/tinc/tinc.conf b/systems/eldiron/vpn/tinc/tinc.conf new file mode 100644 index 0000000..7a4f103 --- /dev/null +++ b/systems/eldiron/vpn/tinc/tinc.conf @@ -0,0 +1,11 @@ +BindToAddress = * 655 +BindToAddress = * 1194 + +Name = @hostName@ +Interface = vpn6 + +Mode = switch + +Device = /dev/net/tun +GraphDumpFile = /var/lib/tinc/@network@/tinc_graph +PrivateKeyFile = @keyFile@ diff --git a/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html b/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html new file mode 100644 index 0000000..ff6dbf3 --- /dev/null +++ b/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html @@ -0,0 +1 @@ +google-site-verification: googleb6d69446ff4ca3e5.html \ No newline at end of file diff --git a/systems/eldiron/websites/_www/index.htm b/systems/eldiron/websites/_www/index.htm new file mode 100644 index 0000000..0274251 --- /dev/null +++ b/systems/eldiron/websites/_www/index.htm @@ -0,0 +1,9 @@ + + + + Hello World HTML + + +

It works!

+ + diff --git a/systems/eldiron/websites/_www/maintenance_immae.html b/systems/eldiron/websites/_www/maintenance_immae.html new file mode 100644 index 0000000..90f265f --- /dev/null +++ b/systems/eldiron/websites/_www/maintenance_immae.html @@ -0,0 +1,58 @@ + + + + Maintenance + + + + + +
+

Erreur serveur ou maintenance en cours !

+
+

Une mise à jour ou une opération de maintenance est en cours sur le site. Retentez dans quelques instants ou patientez, la page se rechargera automatiquement.

+
+
+ +
+

Server error or website in maintenance!

+
+

An update or a maintenance is on track on the website. Please try again in a few seconds or wait, the page will reload automatically.

+
+
+ + diff --git a/systems/eldiron/websites/_www/nossl.html b/systems/eldiron/websites/_www/nossl.html new file mode 100644 index 0000000..4401a80 --- /dev/null +++ b/systems/eldiron/websites/_www/nossl.html @@ -0,0 +1,11 @@ + + + + No SSL site + + +

No SSL on this site

+

Use for wifi networks with login page that doesn't work well with + https.

+ + diff --git a/systems/eldiron/websites/assets/default.nix b/systems/eldiron/websites/assets/default.nix new file mode 100644 index 0000000..02a4952 --- /dev/null +++ b/systems/eldiron/websites/assets/default.nix @@ -0,0 +1,98 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.tools.assets; + fetchFont = v: pkgs.runCommand "fetch-font" { + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = v.sha256; + } '' + mkdir -p $out + ${pkgs.curl}/bin/curl -k --output $out/font.css -H "User-Agent: Firefox/100.0" "${v.url}" + cat $out/font.css | grep -o "https://[^ )]*" | while read url; do + filename=$(echo "$url" | sed -e "s@.*/@@g") + ${pkgs.curl}/bin/curl -k --output "$out/$filename" "$url" + sed -i -e "s@$url@./$filename@" "$out/font.css" + done + ''; + fetchTgz = v: pkgs.runCommand "fetch-tgz" { + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = v.sha256; + } '' + mkdir -p $out + cd $out + ${pkgs.curl}/bin/curl -L -k "${v.url}" | tar -xz --strip-components=${builtins.toString v.tgzRemoveComponents} + ''; + fetchAsset = v: + if v.assetType == "googleFont" + then fetchFont v + else if v.assetType == "tgz" + then fetchTgz v + else pkgs.fetchurl { url = v.url; sha256 = v.sha256; }; + assets_urls = lib.mapAttrs (k: fetchAsset) config.myEnv.tools.assets; + assets = pkgs.runCommand "assets" {} ('' + mkdir -p $out + cp -a ${./static}/* $out/ + '' + builtins.concatStringsSep "\n" + (lib.mapAttrsToList (k: v: '' + if [ -d "${v}" ]; then + mkdir -p "$out/$(dirname "${k}")" + cp -a "${v}" "$out/${k}" + chmod -R u+rwX "$out/${k}" + else + install -D -m644 -T "${v}" "$out/${k}" + fi + '') assets_urls)); +in +{ + options.myServices.websites.tools.assets = { + enable = lib.mkEnableOption "Enable assets website"; + }; + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.assets = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + services.websites.env.production.bindMounts."/run/imgproxy" = {}; + security.acme.certs.eldiron.extraDomainNames = [ "assets.immae.eu" ]; + services.websites.env.tools.vhostConfs.assets = { + certName = "eldiron"; + hosts = [ "assets.immae.eu" ]; + root = assets; + extraConfig = [ + '' + Use Apaxy "${assets}" "title" + + Options Indexes FollowSymlinks + AllowOverride None + Require all granted + Header always set Last-Modified "Tue, 01 Jan 2020 00:00:00 GMT" + Header always set Cache-Control "public, max-age=31536000, immutable" + Header always set Access-Control-Allow-Origin "*" + Header always set Access-Control-Expose-Headers "*" + + + MergeSlashes OFF + + ProxyPass unix:///run/imgproxy/imgproxy.sock|http://assets.immae.eu + ProxyPassReverse unix:///run/imgproxy/imgproxy.sock|http://assets.immae.eu + + '' + ]; + }; + systemd.services.imgproxy = { + description = "IMG proxy"; + wantedBy = [ "multi-user.target" ]; + + environment = { + IMGPROXY_NETWORK = "unix"; + IMGPROXY_BIND = "%t/imgproxy/imgproxy.sock"; + }; + serviceConfig = { + User = "wwwrun"; + Group = "wwwrun"; + RuntimeDirectory = "imgproxy"; + ExecStart = "${pkgs.imgproxy}/bin/imgproxy"; + }; + }; + }; +} diff --git a/systems/eldiron/websites/assets/static/favicon.png b/systems/eldiron/websites/assets/static/favicon.png new file mode 100644 index 0000000..1caf5a4 Binary files /dev/null and b/systems/eldiron/websites/assets/static/favicon.png differ diff --git a/systems/eldiron/websites/assets/static/logger.png b/systems/eldiron/websites/assets/static/logger.png new file mode 100644 index 0000000..d9579fb Binary files /dev/null and b/systems/eldiron/websites/assets/static/logger.png differ diff --git a/systems/eldiron/websites/assets/static/logger.txt b/systems/eldiron/websites/assets/static/logger.txt new file mode 100644 index 0000000..50dccc6 --- /dev/null +++ b/systems/eldiron/websites/assets/static/logger.txt @@ -0,0 +1,3 @@ +Downloaded from https://commons.wikimedia.org/wiki/File:Ghost2.svg +Licence Creative Commons Attribution-Share Alike 4.0 International +https://creativecommons.org/licenses/by-sa/4.0/deed.en diff --git a/systems/eldiron/websites/assets/static/logo.jpg b/systems/eldiron/websites/assets/static/logo.jpg new file mode 100644 index 0000000..a89172d Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo.jpg differ diff --git a/systems/eldiron/websites/assets/static/logo.txt b/systems/eldiron/websites/assets/static/logo.txt new file mode 100644 index 0000000..327e62a --- /dev/null +++ b/systems/eldiron/websites/assets/static/logo.txt @@ -0,0 +1,7 @@ +size: 2 +dpi: 72 +background: white +plot_type: fullcolor +center: "whole" +whitespace: 0.5 +format: jpg diff --git a/systems/eldiron/websites/assets/static/logo_big.jpg b/systems/eldiron/websites/assets/static/logo_big.jpg new file mode 100644 index 0000000..45448f2 Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo_big.jpg differ diff --git a/systems/eldiron/websites/assets/static/logo_big.txt b/systems/eldiron/websites/assets/static/logo_big.txt new file mode 100644 index 0000000..ce92c09 --- /dev/null +++ b/systems/eldiron/websites/assets/static/logo_big.txt @@ -0,0 +1,7 @@ +size: 4 +dpi: 72 +background: white +plot_type: fullcolor +center: "whole" +whitespace: 0.5 +format: jpg diff --git a/systems/eldiron/websites/assets/static/logo_center.jpg b/systems/eldiron/websites/assets/static/logo_center.jpg new file mode 100644 index 0000000..6b177e0 Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo_center.jpg differ diff --git a/systems/eldiron/websites/assets/static/logo_center.txt b/systems/eldiron/websites/assets/static/logo_center.txt new file mode 100644 index 0000000..60a8f1c --- /dev/null +++ b/systems/eldiron/websites/assets/static/logo_center.txt @@ -0,0 +1,8 @@ +size: 4 +dpi: 72 +background: white +plot_type: fullcolor +center: "center" +whitespace: 0.5 +format: jpg + diff --git a/systems/eldiron/websites/assets/static/monitoring.png b/systems/eldiron/websites/assets/static/monitoring.png new file mode 100644 index 0000000..0024fee Binary files /dev/null and b/systems/eldiron/websites/assets/static/monitoring.png differ diff --git a/systems/eldiron/websites/assets/static/monitoring.txt b/systems/eldiron/websites/assets/static/monitoring.txt new file mode 100644 index 0000000..9f3e13a --- /dev/null +++ b/systems/eldiron/websites/assets/static/monitoring.txt @@ -0,0 +1,3 @@ +Downloaded from https://commons.wikimedia.org/wiki/File:Magnifying_Glass2.svg +Licence Creative Commons CC0 1.0 Universal Public Domain Dedication +https://creativecommons.org/publicdomain/zero/1.0/deed.en diff --git a/systems/eldiron/websites/assets/static/photos/ct.jpg b/systems/eldiron/websites/assets/static/photos/ct.jpg new file mode 100644 index 0000000..ab7876b Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/ct.jpg differ diff --git a/systems/eldiron/websites/assets/static/photos/fretlink.jpg b/systems/eldiron/websites/assets/static/photos/fretlink.jpg new file mode 100644 index 0000000..c941e1d Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/fretlink.jpg differ diff --git a/systems/eldiron/websites/assets/static/photos/raton.jpg b/systems/eldiron/websites/assets/static/photos/raton.jpg new file mode 100644 index 0000000..a859e1c Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/raton.jpg differ diff --git a/systems/eldiron/websites/cloud/add-htaccess.php b/systems/eldiron/websites/cloud/add-htaccess.php new file mode 100644 index 0000000..e11d943 --- /dev/null +++ b/systems/eldiron/websites/cloud/add-htaccess.php @@ -0,0 +1,70 @@ +a = $a; + } + public function getValue($val, $default) { + if(isset($this->a[$val])) { + return $this->a[$val]; + } else { + return $default; + } + } + } +} + +namespace { + class NServer { + private $argv; + public function __construct($argv) { + $this->argv = $argv; + } + public function getSystemConfig() { + return new OC\SystemConfig(Array( + 'htaccess.RewriteBase' => $this->argv[1], + )); + } + + public function get($c) { + return new $c(); + } + public function getL10N() { + return new \OCP\IL10N(); + } + public function query($c) { + return new $c(); + } + public function getSecureRandom() { + return new \OCP\Security\ISecureRandom(); + } + } + + class OC { + public static Bool $CLI = false; + public static $SERVERROOT = '.'; + public static $WEBROOT; + public static \NServer $server; + } + + \OC::$server = new NServer($argv); + \OC::$WEBROOT = $argv[1]; + + require "./lib/private/Setup.php"; + $result = \OC\Setup::updateHtaccess(); + if ($result) { + echo "done"; + }; +} diff --git a/systems/eldiron/websites/cloud/default.nix b/systems/eldiron/websites/cloud/default.nix new file mode 100644 index 0000000..e1df883 --- /dev/null +++ b/systems/eldiron/websites/cloud/default.nix @@ -0,0 +1,151 @@ +{ lib, pkgs, config, ... }: +let + ncfg = config.myServices.tools.cloud.farm.instances.immae; + env = config.myEnv.tools.nextcloud; + cfg = config.myServices.websites.tools.cloud; +in { + options.myServices.websites.tools.cloud = { + enable = lib.mkEnableOption "enable cloud website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.cloud = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.nextcloud = { + file.datetime = "2022-08-21T19:50:00"; + hosting = { + name = "Nextcloud"; + description = "The self-hosted productivity platform that keeps you in control"; + website = "https://cloud.immae.eu/"; + logo = "https://cloud.immae.eu/core/img/favicon.ico"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.nextcloud = { + file.datetime = "2022-08-21T19:50:00"; + service = { + name = "Nextcloud"; + description = "The self-hosted productivity platform that keeps you in control"; + website = "https://cloud.immae.eu/"; + logo = "https://cloud.immae.eu/core/img/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/nextcloud.html"; + }; + software = { + name = "Nextcloud"; + website = "https://nextcloud.com/"; + license.url = "https://github.com/nextcloud/server/blob/master/COPYING"; + license.name = "GNU Affero General Public License v3.0"; + version = ncfg.rootDir.version; + source.url = "https://github.com/nextcloud/server"; + modules = map (a: a.appName) ncfg.rootDir.apps; + }; + }; + + myServices.tools.cloud.farm.instances.immae = { + nextcloud = pkgs.webapps-nextcloud_27.override ({ + # Allow /index.php redirects + postInstall = '' + cd $out + ${pkgs.php81}/bin/php ${./add-htaccess.php} / + ''; + }); + apps = a: [ + a.side_menu a.audioplayer a.bookmarks a.calendar a.carnet a.contacts + a.cookbook a.deck a.extract a.files_markdown a.files_mindmap + a.gpxpod a.keeweb a.maps a.metadata a.music + a.notes a.passman a.polls a.spreed a.tasks + ]; + varDir = "/var/lib/nextcloud"; + secretsPath = "webapps/tools-nextcloud"; + phpPackage = pkgs.php81; + # Be careful when editing that: config from here takes + # precedence over the regular one, but if a key got removed, it my + # still exist in the default config file + config = let + env = config.myEnv.tools.nextcloud; + in { + "dbtype" = "pgsql"; + "dbname" = env.postgresql.database; + "dbhost" = env.postgresql.socket; + "dbport" = ""; + "dbtableprefix" = "oc_"; + "dbuser" = env.postgresql.user; + "dbpassword" = env.postgresql.password; + + "instanceid" = env.instance_id; + "passwordsalt" = env.password_salt; + "secret" = env.secret; + + "trusted_domains" = [ "cloud.immae.eu" ]; + "overwrite.cli.url" = "https://cloud.immae.eu"; + + "lost_password_link" = "disabled"; + + "remember_login_cookie_lifetime" = 60*60*24*30; + "session_keepalive" = true; + "session_lifefime" = 60*60*24*30; + + "maxZipInputSize" = 0; + "allowZipDownload" = true; + + # set by Carnet + "has_rebuilt_cache" = true; + + "memcache.distributed" = "\\OC\\Memcache\\Redis"; + "memcache.locking" = "\\OC\\Memcache\\Redis"; + "filelocking.enabled" = true; + "redis" = { + "host" = env.redis.socket; + "port" = 0; + "dbindex" = env.redis.db; + }; + + "ldapIgnoreNamingRules" = false; + "ldapProviderFactory" = "\\OCA\\User_LDAP\\LDAPProviderFactory"; + + "mail_smtpmode" = "sendmail"; + "mail_smtphost" = "127.0.0.1"; + "mail_smtpname" = ""; + "mail_smtppassword" = ""; + "mail_from_address" = "nextcloud"; + "mail_smtpauth" = false; + "mail_domain" = "tools.immae.eu"; + }; + }; + services.websites.env.tools.modules = [ "proxy_fcgi" ]; + + security.acme.certs.eldiron.extraDomainNames = [ "cloud.immae.eu" ]; + services.websites.env.tools.vhostConfs.cloud = { + certName = "eldiron"; + hosts = ["cloud.immae.eu" ]; + root = ncfg.rootDir; + extraConfig = [ + ncfg.vhost + ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "owncloud website is running on cloud.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "cloud.immae.eu" "/" "a safe home for all your data"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Nextcloud"; + _webstatus_url = "https://cloud.immae.eu"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/cloud/farm.nix b/systems/eldiron/websites/cloud/farm.nix new file mode 100644 index 0000000..df24cba --- /dev/null +++ b/systems/eldiron/websites/cloud/farm.nix @@ -0,0 +1,221 @@ +{ lib, pkgs, config, ... }: +let + scfg = config.secrets.fullPaths; + cfg = config.myServices.tools.cloud.farm; + apacheUser = config.services.websites.env.production.user; + apacheGroup = config.services.websites.env.production.group; + additionalConfs = icfg: lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) icfg.rootDir.otherConfig; + overrideConfig = icfg: pkgs.writeText "override.config.php" '' + + AcceptPathInfo On + DirectoryIndex index.php + Options FollowSymlinks + Require all granted + AllowOverride all + + + Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" + + + CGIPassAuth on + SetHandler "proxy:unix:${config.services.phpfpm.pools.${icfg.phpPoolName}.socket}|fcgi://localhost" + + + + ''; +in +{ + options.myServices.tools.cloud.farm = { + instances = lib.mkOption { + description = "Instances names for the nextcloud Farm"; + default = {}; + type = lib.types.attrsOf (lib.types.submodule ({ name, config, ... }: { + options = { + nextcloud = lib.mkOption { + description = "Nextcloud version to use"; + default = pkgs.webapps-nextcloud_27; + type = lib.types.package; + }; + apps = lib.mkOption { + description = "Applications to use"; + default = a: []; + #type = functionTo (listOf packages) + type = lib.types.unspecified; + }; + config = lib.mkOption { + description = "Config keys"; + default = {}; + type = lib.types.attrsOf lib.types.unspecified; + }; + secretsPath = lib.mkOption { + description = "Path in secrets to nextcloud config file"; + default = "websites/${name}/nextcloud"; + type = lib.types.str; + }; + configOverride = lib.mkOption { + description = "Path to config override"; + readOnly = true; + default = scfg."${config.secretsPath}"; + type = lib.types.path; + }; + phpPackage = lib.mkOption { + description = "PHP package to use"; + default = pkgs.php81; + type = lib.types.package; + apply = v: (v.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache all.imagick all.sysvsem ])).override { extraConfig = '' + apc.enable_cli = 1 + apc.enabled = 1 + ''; + }; + }; + rootDir = lib.mkOption { + description = "Instance root dirs"; + readOnly = true; + type = lib.types.package; + default = config.nextcloud.withApps config.apps; + }; + phpPoolName = lib.mkOption { + description = "Php pool name for the instance"; + readOnly = true; + type = lib.types.str; + default = "nextcloud_farm_" + name; + }; + phpBaseDir = lib.mkOption { + description = "Php basedir for the instance"; + readOnly = true; + type = lib.types.str; + default = builtins.concatStringsSep ":" ( + [ config.rootDir config.varDir ] + ++ config.rootDir.apps + ++ [ config.configOverride (overrideConfig config) ] + ++ (builtins.attrValues (additionalConfs config)) + ); + }; + varDir = lib.mkOption { + description = "Instance var dir"; + type = lib.types.path; + default = "/var/lib/nextcloud_farm/${name}"; + }; + vhost = lib.mkOption { + description = "Instance vhost config"; + readOnly = true; + type = lib.types.str; + default = toVhost config; + }; + }; + })); + }; + }; + + config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) { + systemd.services = lib.mapAttrs' (k: v: lib.nameValuePair ("phpfpm-" + v.phpPoolName) { + after = lib.mkAfter [ "postgresql.service" ]; + wants = [ "postgresql.service" ]; + serviceConfig.ExecStartPre = + "+${pkgs.writeScript "phpfpm-nextcloud-${k}-pre-start" '' + #!${pkgs.stdenv.shell} + + install -m 0755 -o wwwrun -g wwwrun -d ${v.varDir} -d ${v.varDir}/config + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: f: + "ln -sf ${f} ${v.varDir}/config/${n}.json" + ) (additionalConfs v))} + ln -sf ${overrideConfig v} ${v.varDir}/config/override.config.php + ''}"; + }) cfg.instances; + services.phpfpm.pools = lib.mapAttrs' (k: v: lib.nameValuePair v.phpPoolName { + user = apacheUser; + group = apacheGroup; + settings = { + "listen.owner" = apacheUser; + "listen.group" = apacheGroup; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "3"; + "pm.min_spare_servers" = "3"; + "pm.max_spare_servers" = "3"; + "pm.process_idle_timeout" = "60"; + + "php_admin_value[output_buffering]" = "0"; + "php_admin_value[max_execution_time]" = "1800"; + "php_admin_value[zend_extension]" = "opcache"; + "php_value[apc.enable_cli]" = "1"; + "php_value[apc.enabled]" = "1"; + #already enabled by default? + #"php_value[opcache.enable]" = "1"; + "php_value[opcache.enable_cli]" = "1"; + "php_value[opcache.interned_strings_buffer]" = "32"; + "php_value[opcache.max_accelerated_files]" = "10000"; + "php_value[opcache.memory_consumption]" = "128"; + "php_value[opcache.save_comments]" = "1"; + "php_value[opcache.revalidate_freq]" = "1"; + "php_admin_value[memory_limit]" = "512M"; + + "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${v.phpBaseDir}:/proc/cpuinfo:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:NextcloudFarm:${k}:'"; + }; + phpPackage = v.phpPackage; + }) cfg.instances; + environment.systemPackages = let + toOcc = name: icfg: pkgs.writeScriptBin "nextcloud-occ-${name}" '' + #! ${pkgs.stdenv.shell} + cd ${icfg.rootDir} + NEXTCLOUD_CONFIG_DIR="${icfg.varDir}/config" \ + exec \ + sudo -E -u wwwrun ${icfg.phpPackage}/bin/php \ + -d memory_limit=512M \ + -c ${icfg.phpPackage}/etc/php.ini \ + occ $* + ''; + in lib.mapAttrsToList toOcc cfg.instances; + services.cron = { + enable = true; + systemCronJobs = let + toScript = name: icfg: pkgs.writeScriptBin "nextcloud-cron" '' + #! ${pkgs.stdenv.shell} + export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive + export PATH=/run/wrappers/bin:$PATH + export NEXTCLOUD_CONFIG_DIR="${icfg.varDir}/config" + ${icfg.phpPackage}/bin/php -c ${icfg.phpPackage}/etc/php.ini -d memory_limit=512M -f ${icfg.rootDir}/cron.php + ''; + toLine = name: icfg: '' + */5 * * * * wwwrun ${toScript name icfg}/bin/nextcloud-cron + ''; + in lib.mapAttrsToList toLine cfg.instances; + }; + + secrets.keys = lib.mapAttrs' (name: v: lib.nameValuePair "${v.secretsPath}" { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0600"; + # Be careful when editing that: config from this file takes + # precedence over the regular one, but if a key got removed, it my + # still exist in the default config file + text = builtins.toJSON ( { + "datadirectory" = if name == "immae" then v.varDir else "${v.varDir}/data"; + + "appstoreenabled" = false; + "integrity.check.disabled" = true; + "updater.release.channel" = "stable"; + "upgrade.disable-web" = true; + + "memcache.local" = "\\OC\\Memcache\\APCu"; + + "htaccess.RewriteBase" = "/"; + + "loglevel" = 2; + "logtimezone" = "Europe/Paris"; + + "default_phone_region" = "FR"; + "skeletondirectory" = ""; + "theme" = ""; + } // v.config); + }) cfg.instances; + }; +} diff --git a/systems/eldiron/websites/commento/default.nix b/systems/eldiron/websites/commento/default.nix new file mode 100644 index 0000000..c5131b8 --- /dev/null +++ b/systems/eldiron/websites/commento/default.nix @@ -0,0 +1,84 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.tools.commento; + env = config.myEnv.tools.commento; + webPort = "${host}:${port}"; + port = toString env.listenPort; + host = "localhost"; + postgresql_url = "postgres://${env.postgresql.user}:${env.postgresql.password}@localhost:${env.postgresql.port}/${env.postgresql.database}?sslmode=disable"; +in +{ + options.myServices.websites.tools.commento = { + enable = lib.mkEnableOption "Enable commento website"; + }; + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.commento = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.commento = { + file.datetime = "2022-08-21T01:11:00"; + service = { + name = "Commento"; + description = "Commento is a fast, privacy-focused commenting platform"; + website = "https://commento.immae.eu"; + logo = "https://commento.immae.eu/images/logo.svg"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Commento"; + website = "https://www.commento.io/"; + license.url = "https://gitlab.com/commento/commento/-/blob/master/LICENSE"; + license.name = "MIT License"; + version = pkgs.commento.version; + source.url = "https://gitlab.com/commento/commento"; + }; + }; + secrets.keys = { + "commento/env" = { + permissions = "0400"; + text = '' + COMMENTO_ORIGIN=https://commento.immae.eu/ + COMMENTO_PORT=${port} + COMMENTO_POSTGRES=${postgresql_url} + COMMENTO_FORBID_NEW_OWNERS=true + COMMENTO_BIND_ADDRESS=${host} + COMMENTO_GZIP_STATIC=true + COMMENTO_SMTP_HOST=${env.smtp.host} + COMMENTO_SMTP_PORT=${env.smtp.port} + COMMENTO_SMTP_USERNAME=${env.smtp.email} + COMMENTO_SMTP_PASSWORD=${env.smtp.password} + COMMENTO_SMTP_FROM_ADDRESS=${env.smtp.email} + ''; + }; + }; + + security.acme.certs.eldiron.extraDomainNames = [ "commento.immae.eu" ]; + services.websites.env.tools.vhostConfs.commento = { + certName = "eldiron"; + hosts = [ "commento.immae.eu" ]; + root = null; + extraConfig = [ + '' + ProxyPass / http://${webPort}/ + ProxyPassReverse / http://${webPort}/ + ProxyPreserveHost On + '' + ]; + }; + systemd.services.commento = { + description = "Commento"; + wantedBy = [ "multi-user.target" ]; + requires = ["postgresql.service"]; + after = ["network.target" "postgresql.service"]; + serviceConfig = { + User = "wwwrun"; + ExecStart = "${pkgs.commento}/commento"; + EnvironmentFile = config.secrets.fullPaths."commento/env"; + }; + }; + }; +} diff --git a/systems/eldiron/websites/cryptpad/default.nix b/systems/eldiron/websites/cryptpad/default.nix new file mode 100644 index 0000000..4635548 --- /dev/null +++ b/systems/eldiron/websites/cryptpad/default.nix @@ -0,0 +1,89 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.myServices.websites.tools.cryptpad; + envCfg = config.myEnv.tools.cryptpad; + domain = "cryptpad.immae.eu"; + port = envCfg.port; + configFile = pkgs.writeText "config.js" '' + // ${pkgs.cryptpad}/lib/node_modules/cryptpad/config/config.example.js + module.exports = { + httpUnsafeOrigin: 'https://${domain}', + httpPort: ${toString port}, + adminEmail: '${envCfg.email}', + filePath: './datastore/', + archivePath: './data/archive', + pinPath: './data/pins', + taskPath: './data/tasks', + blockPath: './block', + blobPath: './blob', + blobStagingPath: './data/blobstage', + decreePath: './data/decrees', + logPath: './data/logs', + logToStdout: false, + logLevel: 'info', + logFeedback: false, + verbose: false, + inactiveTime: false, + maxUploadSize: 100 * 1024 * 1024, + adminKeys: ${builtins.toJSON envCfg.admins}, + }; + ''; +in +{ + options.myServices.websites.tools.cryptpad.enable = lib.mkEnableOption "Enable Cryptpad"; + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.cryptpad = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.cryptpad = { + file.datetime = "2022-08-21T01:20:00"; + hosting = { + name = "Cryptpad"; + description = "Collaboration suite, encrypted and open-source"; + website = "https://cryptpad.immae.eu/"; + logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.cryptpad = { + file.datetime = "2022-08-21T01:20:00"; + service = { + name = "Cryptpad"; + description = "Collaboration suite, encrypted and open-source"; + website = "https://cryptpad.immae.eu/"; + logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "FREE" "MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Cryptpad"; + website = "https://cryptpad.org/"; + license.url = "https://github.com/xwiki-labs/cryptpad/blob/main/LICENSE"; + license.name = "GNU Affero General Public License v3.0"; + version = pkgs.cryptpad.version; + source.url = "https://github.com/xwiki-labs/cryptpad"; + }; + }; + myServices.tools.cryptpad.farm.hosts.immaeEu = { + inherit domain port; + config = configFile; + }; + services.websites.env.tools.modules = [ "proxy_wstunnel" ]; + security.acme.certs.eldiron.extraDomainNames = [ domain ]; + services.websites.env.tools.vhostConfs.cryptpad = { + certName = "eldiron"; + hosts = [domain]; + root = config.myServices.tools.cryptpad.farm.vhostRoots.immaeEu; + extraConfig = [ + config.myServices.tools.cryptpad.farm.vhosts.immaeEu + ]; + }; + }; +} diff --git a/systems/eldiron/websites/cryptpad/farm.nix b/systems/eldiron/websites/cryptpad/farm.nix new file mode 100644 index 0000000..58393ab --- /dev/null +++ b/systems/eldiron/websites/cryptpad/farm.nix @@ -0,0 +1,186 @@ +{ pkgs, config, lib, ... }: +let + cfg = config.myServices.tools.cryptpad.farm; + toService = name: + let + inherit (cfg.hosts.${name}) package config; + in { + description = "Cryptpad ${name} Service"; + wantedBy = [ "multi-user.target" ]; + after = [ "networking.target" ]; + serviceConfig = { + User = "cryptpad"; + Group = "cryptpad"; + Environment = [ + "CRYPTPAD_CONFIG=${config}" + "HOME=%S/cryptpad/${name}" + ]; + ExecStart = "${package}/bin/cryptpad"; + PrivateTmp = true; + Restart = "always"; + StateDirectory = "cryptpad/${name}"; + WorkingDirectory = "%S/cryptpad/${name}"; + }; + }; + toVhostRoot = name: "${cfg.hosts.${name}.package}/lib/node_modules/cryptpad"; + toVhost = name: + let + inherit (cfg.hosts.${name}) package domain port; + api_domain = domain; + files_domain = domain; + in '' + RewriteEngine On + + Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + Header set X-XSS-Protection "1; mode=block" + Header set X-Content-Type-Options "nosniff" + Header set Access-Control-Allow-Origin "*" + Header set Permissions-Policy "interest-cohort=()" + + Header set Cross-Origin-Resource-Policy "cross-origin" + + Header set Cross-Origin-Opener-Policy "same-origin" + + Header set Cross-Origin-Embedder-Policy "require-corp" + + ErrorDocument 404 /customize.dist/404.html + + + Header set Cache-Control "max-age=31536000" + + + Header set Cache-Control "no-cache" + + + SetEnv styleSrc "'unsafe-inline' 'self' ${domain}" + SetEnv connectSrc "'self' https://${domain} ${domain} https://${api_domain} blob: wss://${api_domain} ${api_domain} ${files_domain}" + SetEnv fontSrc "'self' data: ${domain}" + SetEnv imgSrc "'self' data: * blob: ${domain}" + SetEnv frameSrc "'self' blob:" + SetEnv mediaSrc "'self' data: * blob: ${domain}" + SetEnv childSrc "https://${domain}" + SetEnv workerSrc "https://${domain}" + SetEnv scriptSrc "'self' 'unsafe-eval' 'unsafe-inline' resource: ${domain}" + + Header set Content-Security-Policy "default-src 'none'; child-src %{childSrc}e; worker-src %{workerSrc}e; media-src %{mediaSrc}e; style-src %{styleSrc}e; script-src %{scriptSrc}e; connect-src %{connectSrc}e; font-src %{fontSrc}e; img-src %{imgSrc}e; frame-src %{frameSrc}e;" + + RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] + RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] + RewriteRule .* ws://localhost:${toString port}%{REQUEST_URI} [P,NE,QSA,L] + + RewriteRule ^/customize/(.*)$ /customize.dist/$1 [L] + + ProxyPassMatch "^/(api/(config|broadcast).*)$" "http://localhost:${toString port}/$1" + ProxyPassReverse /api http://localhost:${toString port}/api + ProxyPreserveHost On + RequestHeader set X-Real-IP %{REMOTE_ADDR}s + + Alias /blob /var/lib/cryptpad/${name}/blob + + Require all granted + AllowOverride None + + Alias /block /var/lib/cryptpad/${name}/block + + Require all granted + AllowOverride None + + + Header set Cache-Control "max-age=31536000" + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" + Header set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length" + Header set Access-Control-Expose-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length" + + RewriteCond %{REQUEST_METHOD} OPTIONS + RewriteRule ^(.*)$ $1 [R=204,L] + + + + Header set Cache-Control "max-age=0" + + + RewriteRule ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media|profile|contacts|todo|filepicker|debug|kanban|sheet|support|admin|notifications|teams|calendar|presentation|doc)$ $1/ [R=302,L] + + RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI} -f + RewriteRule (.*) /www/$1 [L] + + RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI}/index.html -f + RewriteRule (.*) /www/$1/index.html [L] + + RewriteCond %{DOCUMENT_ROOT}/customize.dist/%{REQUEST_URI} -f + RewriteRule (.*) /customize.dist/$1 [L] + + + AllowOverride None + Require all granted + DirectoryIndex index.html + + + AllowOverride None + Require all granted + DirectoryIndex index.html + + ''; +in +{ + options.myServices.tools.cryptpad.farm = { + hosts = lib.mkOption { + default = {}; + description = "Hosts to install"; + type = lib.types.attrsOf (lib.types.submodule { + options = { + port = lib.mkOption { + type = lib.types.port; + }; + package = lib.mkOption { + type = lib.types.package; + description = "Cryptpad package to use"; + default = pkgs.cryptpad; + }; + domain = lib.mkOption { + type = lib.types.str; + description = "Domain for main host"; + }; + config = lib.mkOption { + type = lib.types.path; + description = "Path to configuration"; + }; + }; + }); + }; + vhosts = lib.mkOption { + description = "Instance vhosts configs"; + readOnly = true; + type = lib.types.attrsOf lib.types.str; + default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhost; + }; + vhostRoots = lib.mkOption { + description = "Instance vhosts document roots"; + readOnly = true; + type = lib.types.attrsOf lib.types.path; + default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhostRoot; + }; + vhostVarDirs = lib.mkOption { + description = "Instance vhosts var dirs"; + readOnly = true; + type = lib.types.attrsOf lib.types.path; + default = lib.genAttrs (builtins.attrNames cfg.hosts) (n: "/var/lib/cryptpad/${n}"); + }; + }; + config = { + users.users = lib.optionalAttrs (cfg.hosts != {}) { + cryptpad = { + uid = config.ids.uids.cryptpad; + group = "cryptpad"; + description = "Cryptpad user"; + }; + }; + users.groups = lib.optionalAttrs (cfg.hosts != {}) { + cryptpad = { + gid = config.ids.gids.cryptpad; + }; + }; + systemd.services = lib.listToAttrs (map (n: lib.nameValuePair "cryptpad-${n}" (toService n)) (builtins.attrNames cfg.hosts)); + }; +} diff --git a/systems/eldiron/websites/dav/davical.nix b/systems/eldiron/websites/dav/davical.nix new file mode 100644 index 0000000..b418cb8 --- /dev/null +++ b/systems/eldiron/websites/dav/davical.nix @@ -0,0 +1,128 @@ +{ stdenv, fetchurl, gettext, writeText, env, awl, davical, config }: +rec { + keys."webapps/dav-davical" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + pg_connect[] = "dbname=${env.postgresql.database} user=${env.postgresql.user} host=${env.postgresql.socket} password=${env.postgresql.password}"; + + $c->readonly_webdav_collections = false; + + $c->admin_email ='davical@tools.immae.eu'; + + $c->restrict_setup_to_admin = true; + + $c->collections_always_exist = false; + + $c->external_refresh = 60; + + $c->enable_scheduling = true; + + $c->iMIP = (object) array("send_email" => true); + + $c->authenticate_hook['optional'] = false; + $c->authenticate_hook['call'] = 'LDAP_check'; + $c->authenticate_hook['config'] = array( + 'host' => '${env.ldap.host}', + 'port' => '389', + 'startTLS' => 'yes', + 'bindDN'=> '${env.ldap.dn}', + 'passDN'=> '${env.ldap.password}', + 'protocolVersion' => '3', + 'baseDNUsers'=> array('ou=users,${env.ldap.base}', 'ou=group_users,${env.ldap.base}'), + 'filterUsers' => '${env.ldap.filter}', + 'baseDNGroups' => 'ou=groups,${env.ldap.base}', + 'filterGroups' => 'memberOf=cn=groups,${env.ldap.dn}', + 'mapping_field' => array( + "username" => "uid", + "fullname" => "cn", + "email" => "mail", + "modified" => "modifyTimestamp", + ), + 'format_updated'=> array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)), + /** used to set default value for all users, will be overcharged by ldap if defined also in mapping_field **/ + // 'default_value' => array("date_format_type" => "E","locale" => "fr_FR"), + 'group_mapping_field' => array( + "username" => "cn", + "updated" => "modifyTimestamp", + "fullname" => "givenName", + "displayname" => "givenName", + "members" => "memberUid", + "email" => "mail", + ), + ); + + $c->do_not_sync_from_ldap = array('admin' => true); + include('drivers_ldap.php'); + ''; + }; + webapp = davical.override { davical_config = config.secrets.fullPaths."webapps/dav-davical"; }; + webRoot = "${webapp}/htdocs"; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /davical "${root}" + Alias /caldav.php "${root}/caldav.php" + + DirectoryIndex index.php index.html + AcceptPathInfo On + AllowOverride None + Require all granted + + + CGIPassAuth on + SetHandler "proxy:unix:${socket}|fcgi://localhost" + + + RewriteEngine On + + Header unset Access-Control-Allow-Origin + Header unset Access-Control-Allow-Methods + Header unset Access-Control-Allow-Headers + Header unset Access-Control-Allow-Credentials + Header unset Access-Control-Expose-Headers + + Header always set Access-Control-Allow-Origin "*" + Header always set Access-Control-Allow-Methods "GET,POST,OPTIONS,PROPFIND,PROPPATCH,REPORT,PUT,MOVE,DELETE,LOCK,UNLOCK" + Header always set Access-Control-Allow-Headers "User-Agent,Authorization,Content-type,Depth,If-match,If-None-Match,Lock-Token,Timeout,Destination,Overwrite,Prefer,X-client,X-Requested-With" + Header always set Access-Control-Allow-Credentials false + Header always set Access-Control-Expose-Headers "Etag,Preference-Applied" + + RewriteCond %{HTTP:Access-Control-Request-Method} !^$ + RewriteCond %{REQUEST_METHOD} OPTIONS + RewriteRule ^(.*)$ $1 [R=200,L] + + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webapp config.secrets.fullPaths."webapps/dav-davical" awl ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "10"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "DavicalPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[include_path]" = "${awl}/inc:${webapp}/inc"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Davical:'"; + "php_flag[magic_quotes_gpc]" = "Off"; + "php_flag[register_globals]" = "Off"; + "php_admin_value[error_reporting]" = "E_ALL & ~E_NOTICE"; + "php_admin_value[default_charset]" = "utf-8"; + "php_flag[magic_quotes_runtime]" = "Off"; + }; + }; +} diff --git a/systems/eldiron/websites/dav/default.nix b/systems/eldiron/websites/dav/default.nix new file mode 100644 index 0000000..109715d --- /dev/null +++ b/systems/eldiron/websites/dav/default.nix @@ -0,0 +1,140 @@ +{ lib, pkgs, config, ... }: +let + infcloud = rec { + root = pkgs.webapps-infcloud; + vhostConf = '' + Alias /carddavmate ${root} + Alias /caldavzap ${root} + Alias /infcloud ${root} + + AllowOverride All + Options FollowSymlinks + Require all granted + DirectoryIndex index.html + + ''; + }; + davical = pkgs.callPackage ./davical.nix { + env = config.myEnv.tools.davical; + davical = pkgs.webapps-davical; + awl = pkgs.webapps-awl; + inherit config; + }; + + cfg = config.myServices.websites.tools.dav; +in { + options.myServices.websites.tools.dav = { + enable = lib.mkEnableOption "enable dav website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.dav = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services = { + davical = { + file.datetime = "2022-08-21T01:33:00"; + service = { + name = "Davical"; + description = "DAViCal is a server for calendar sharing"; + website = "https://dav.immae.eu"; + logo = "https://www.davical.org/images/logo.gif"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Davical"; + website = "https://www.davical.org/"; + license.url = "https://gitlab.com/davical-project/davical/-/blob/master/COPYING"; + license.name = "GNU General Public License Version 2"; + version = pkgs.webapps-davical.version; + source.url = "https://gitlab.com/davical-project/davical/"; + modules = "infcloud"; + }; + }; + #calendar = { + # file.datetime = "2022-08-22T00:00:00"; + # service = { + # name = "Calendar"; + # description = "Opensource CalDAV web client"; + # website = "https://dav.immae.eu/caldavzap/"; + # logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "InfCloud"; + # website = "https://inf-it.com/open-source/clients/infcloud/"; + # license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html"; + # license.name = "GNU Affero General Public License (version 3.0)"; + # version = pkgs.webapps-infcloud.version; + # source.url = "https://inf-it.com/open-source/clients/infcloud/"; + # }; + #}; + #contacts = { + # file.datetime = "2022-08-22T00:00:00"; + # service = { + # name = "Contacts"; + # description = "Opensource Carddav web client"; + # website = "https://dav.immae.eu/carddavmate/"; + # logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "InfCloud"; + # website = "https://inf-it.com/open-source/clients/infcloud/"; + # license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html"; + # license.name = "GNU Affero General Public License (version 3.0)"; + # version = pkgs.webapps-infcloud.version; + # source.url = "https://inf-it.com/open-source/clients/infcloud/"; + # }; + #}; + }; + secrets.keys = davical.keys; + services.websites.env.tools.modules = davical.apache.modules; + + security.acme.certs.eldiron.extraDomainNames = [ "dav.immae.eu" ]; + services.websites.env.tools.vhostConfs.dav = { + certName = "eldiron"; + hosts = ["dav.immae.eu" ]; + root = ./www; + extraConfig = [ + infcloud.vhostConf + (davical.apache.vhostConf config.services.phpfpm.pools.davical.socket) + ]; + }; + + services.phpfpm.pools = { + davical = { + user = config.services.websites.env.tools.user; + group = config.services.websites.env.tools.group; + settings = davical.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "davical website is running on dav.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "dav.immae.eu" "/davical/" "Log On Please"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Davical"; + _webstatus_url = "https://dav.immae.eu/davical"; + } + ]; + }; +} + diff --git a/systems/eldiron/websites/dav/www/index.html b/systems/eldiron/websites/dav/www/index.html new file mode 100644 index 0000000..91c25ba --- /dev/null +++ b/systems/eldiron/websites/dav/www/index.html @@ -0,0 +1,42 @@ + + + + + + Dav configuration + + + +

+ Dav configuration: +

    +
  • Server: https://dav.immae.eu/caldav.php +
  • +
+

+

Clients: +

+

+ + + diff --git a/systems/eldiron/websites/db/default.nix b/systems/eldiron/websites/db/default.nix new file mode 100644 index 0000000..339948f --- /dev/null +++ b/systems/eldiron/websites/db/default.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.tools.db; +in { + options.myServices.websites.tools.db = { + enable = lib.mkEnableOption "enable database's website"; + }; + + config = lib.mkIf cfg.enable { + services.websites.env.tools.modules = [ "proxy_fcgi" ]; + security.acme.certs.eldiron.extraDomainNames = [ "db-1.immae.eu" ]; + services.websites.env.tools.vhostConfs.db-1 = { + certName = "eldiron"; + hosts = ["db-1.immae.eu" ]; + root = null; + extraConfig = [ '' + Alias /adminer ${pkgs.webapps-adminer} + + DirectoryIndex index.php + + SetHandler "proxy:unix:${config.services.phpfpm.pools.adminer.socket}|fcgi://localhost" + + + Use LDAPConnect + Require ldap-group cn=users,cn=mysql,cn=pam,ou=services,dc=immae,dc=eu + Require ldap-group cn=users,cn=postgresql,cn=pam,ou=services,dc=immae,dc=eu + + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/default.nix b/systems/eldiron/websites/default.nix new file mode 100644 index 0000000..68205de --- /dev/null +++ b/systems/eldiron/websites/default.nix @@ -0,0 +1,319 @@ +{ lib, pkgs, config, mypackages-lib, ... }: +let + www_root = ./_www; + theme_root = (mypackages-lib.apache-theme {}).theme; + apacheConfig = { + shutdownconfig = { + # Only give 5 seconds to workers to finish their work + extraConfig = '' + GracefulShutdownTimeout 5 + ''; + }; + cache = { + # This setting permits to ignore time-based cache for files in the + # nix store: + # If a client requires an If-Modified-Since from timestamp 1, then + # this header is removed, and if the response contains a + # too old Last-Modified tag, then it is removed too + extraConfig = '' + + RequestHeader unset If-Modified-Since + + Header unset Last-Modified "expr=%{LAST_MODIFIED} < 19991231235959" + ''; + }; + gzip = { + modules = [ "deflate" "filter" ]; + extraConfig = '' + AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript + ''; + }; + macros = { + modules = [ "macro" ]; + }; + stats = { + extraConfig = '' + + Alias /webstats ${config.services.webstats.dataDir}/%{domain} + + DirectoryIndex index.html + AllowOverride None + Require all granted + + + Use LDAPConnect + Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu + + + ''; + }; + ldap = { + modules = [ "ldap" "authnz_ldap" ]; + extraConfig = '' + + LDAPSharedCacheSize 500000 + LDAPCacheEntries 1024 + LDAPCacheTTL 600 + LDAPOpCacheEntries 1024 + LDAPOpCacheTTL 600 + + + Include ${config.secrets.fullPaths."apache-ldap"} + ''; + }; + global = { + extraConfig = '' + ErrorDocument 500 /maintenance_immae.html + ErrorDocument 501 /maintenance_immae.html + ErrorDocument 502 /maintenance_immae.html + ErrorDocument 503 /maintenance_immae.html + ErrorDocument 504 /maintenance_immae.html + Alias /maintenance_immae.html ${www_root}/maintenance_immae.html + ProxyPass /maintenance_immae.html ! + + AliasMatch "(.*)/googleb6d69446ff4ca3e5.html" ${www_root}/googleb6d69446ff4ca3e5.html + + AllowOverride None + Require all granted + + ''; + }; + apaxy = { + extraConfig = (mypackages-lib.apache-theme { inherit theme_root; }).apacheConfig; + }; + http2 = { + modules = [ "http2" ]; + extraConfig = '' + Protocols h2 http/1.1 + ''; + }; + customLog = { + extraConfig = '' + LogFormat "%{Host}i:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost + ''; + }; + }; + makeModules = lib.lists.flatten (lib.attrsets.mapAttrsToList (n: v: v.modules or []) apacheConfig); + makeExtraConfig = (builtins.filter (x: x != null) (lib.attrsets.mapAttrsToList (n: v: v.extraConfig or null) apacheConfig)); + moomin = let + lines = lib.splitString "\n" (lib.fileContents ./moomin.txt); + pad = width: str: let + padWidth = width - lib.stringLength str; + padding = lib.concatStrings (lib.genList (lib.const "0") padWidth); + in lib.optionalString (padWidth > 0) padding + str; + in + lib.imap0 (i: e: ''Header always set "X-Moomin-${pad 2 (builtins.toString i)}" "${e}"'') lines; +in +{ + imports = [ + ./immae/production.nix + ./immae/release.nix + + # Tools + ./assets + ./cloud + ./cloud/farm.nix + ./cryptpad + ./cryptpad/farm.nix + ./commento + ./dav + ./vpn + ./db + ./diaspora + ./ether + ./git + ./im + ./mastodon + ./mgoblin + ./peertube + ./performance + ./tools + ./mail + ./stats + ./visio + ./kanboard/farm.nix + + # Games + ./games/codenames + ./games/terraforming-mars + ]; + + options.myServices.websites.enable = lib.mkEnableOption "enable websites"; + + config = lib.mkIf config.myServices.websites.enable { + myServices.dns.zones."immae.eu".subdomains = with config.myServices.dns.helpers; + { + games = ips servers.eldiron.ips.main; + nossl = ips servers.eldiron.ips.main; + }; + + myServices.chatonsProperties.hostings.web = { + file.datetime = "2022-08-22T01:30:00"; + hosting = { + name = "Hébergement Web"; + description = "Service d'hébergement web avec php/mysql/postgresql"; + website = "https://www.immae.eu"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Apache Httpd"; + website = "https://httpd.apache.org/"; + license.url = "https://www.apache.org/licenses/"; + license.name = "Apache License Version 2"; + version = pkgs.apacheHttpd.version; + source.url = "https://httpd.apache.org/download.cgi"; + modules = "openssh,pure-ftpd"; + }; + }; + users.users.wwwrun.extraGroups = [ "keys" ]; + networking.firewall.allowedTCPPorts = [ 80 443 ]; + + secrets.keys."apache-ldap" = { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + + + AuthLDAPURL ldap://ldap.immae.eu:389/dc=immae,dc=eu STARTTLS + AuthLDAPBindDN cn=httpd,ou=services,dc=immae,dc=eu + AuthLDAPBindPassword "${config.myEnv.httpd.ldap.password}" + AuthType Basic + AuthName "Authentification requise (Acces LDAP)" + AuthBasicProvider ldap + + + ''; + }; + + system.activationScripts = { + httpd = '' + install -d -m 0755 /var/lib/acme/acme-challenges + install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions + ''; + }; + + services.phpfpm = { + phpOptions = '' + session.save_path = "/var/lib/php/sessions" + post_max_size = 20M + ; 15 days (seconds) + session.gc_maxlifetime = 1296000 + ; 30 days (minutes) + session.cache_expire = 43200 + ''; + settings = { + log_level = "notice"; + }; + }; + + services.websites.env.production = { + enable = true; + moduleType = "container"; + adminAddr = "httpd@immae.eu"; + bindMounts."/var/lib/ftp" = {}; + # FIXME: Bind directly the needed files + bindMounts."/var/secrets" = {}; + bindMounts."/var/lib/goaccess" = {}; + bindMounts."/var/lib/acme" = {}; + bindMounts."/run/phpfpm" = {}; + ips = + let ips = config.myEnv.servers.eldiron.ips.production; + in (ips.ip4 or []) ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig; + fallbackVhost = { + certName = "eldiron"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + }; + + services.websites.env.integration = { + enable = true; + moduleType = "container"; + adminAddr = "httpd@immae.eu"; + bindMounts."/var/lib/ftp" = {}; + bindMounts."/var/secrets" = {}; + bindMounts."/var/lib/goaccess" = {}; + bindMounts."/var/lib/acme" = {}; + bindMounts."/run/phpfpm" = {}; + ips = + let ips = config.myEnv.servers.eldiron.ips.integration; + in (ips.ip4 or []) ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig ++ moomin; + fallbackVhost = { + certName = "integration"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + watchPaths = [ config.secrets.fullPaths."apache-ldap" ]; + }; + + services.websites.env.tools = { + enable = true; + moduleType = "main"; + adminAddr = "httpd@immae.eu"; + ips = + let ips = config.myEnv.servers.eldiron.ips.main; + in (ips.ip4 or []) ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig ++ + [ '' + RedirectMatch ^/licen[cs]es?_et_tip(ping)?$ https://www.immae.eu/licences_et_tip.html + RedirectMatch ^/licen[cs]es?_and_tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html + RedirectMatch ^/licen[cs]es?$ https://www.immae.eu/licenses_and_tipping.html + RedirectMatch ^/tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html + RedirectMatch ^/(mentions|mentions_legales|legal)$ https://www.immae.eu/mentions.html + RedirectMatch ^/CGU$ https://www.immae.eu/CGU + '' + ]; + nosslVhost = { + enable = true; + host = "nossl.immae.eu"; + root = ./nossl; + }; + fallbackVhost = { + certName = "eldiron"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + watchPaths = [ config.secrets.fullPaths."apache-ldap" ]; + }; + + myServices.websites = { + immae = { + production.enable = true; + release.enable = true; + }; + + tools.assets.enable = true; + tools.cloud.enable = true; + tools.commento.enable = true; + tools.cryptpad.enable = true; + tools.dav.enable = true; + tools.db.enable = true; + tools.diaspora.enable = true; + tools.etherpad-lite.enable = true; + tools.git.enable = true; + tools.mastodon.enable = true; + tools.mediagoblin.enable = true; + tools.peertube.enable = true; + tools.performance.enable = true; + tools.tools.enable = true; + tools.email.enable = true; + tools.stats.enable = false; + tools.visio.enable = true; + + games.codenames.enable = true; + games.terraforming-mars.enable = true; + }; + }; +} diff --git a/systems/eldiron/websites/diaspora/default.nix b/systems/eldiron/websites/diaspora/default.nix new file mode 100644 index 0000000..c536446 --- /dev/null +++ b/systems/eldiron/websites/diaspora/default.nix @@ -0,0 +1,224 @@ +{ lib, pkgs, config, ... }: +let + env = config.myEnv.tools.diaspora; + root = "${dcfg.workdir}/public/"; + cfg = config.myServices.websites.tools.diaspora; + dcfg = config.services.diaspora; +in { + options.myServices.websites.tools.diaspora = { + enable = lib.mkEnableOption "enable diaspora's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.diaspora = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.diaspora = { + file.datetime = "2022-08-21T01:39:00"; + service = { + name = "Diaspora"; + description = "The online social world where you are in control"; + website = "https://diaspora.immae.eu"; + logo = "https://diaspora.immae.eu/assets/apple-touch-icon-9f7c9cc3923b4817fbb25bfeb0dd5fd34638827fd9c82b5a03f7b68e6e90806f.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Diaspora*"; + website = "https://diasporafoundation.org/"; + license.url = "https://github.com/diaspora/diaspora/blob/develop/LICENSE"; + license.name = "GNU Affero General Public License v3.0"; + version = dcfg.package.version; + source.url = "https://github.com/diaspora/diaspora"; + }; + }; + users.users.diaspora.extraGroups = [ "keys" ]; + + secrets.keys = { + "webapps/diaspora" = { + isDir = true; + user = "diaspora"; + group = "diaspora"; + permissions = "0500"; + }; + "webapps/diaspora/diaspora.yml" = { + user = "diaspora"; + group = "diaspora"; + permissions = "0400"; + keyDependencies = [ pkgs.cacert ]; + text = '' + configuration: + environment: + url: "https://diaspora.immae.eu/" + certificate_authorities: '${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt' + redis: 'redis://${env.redis.host}:${env.redis.port}/${env.redis.db}' + sidekiq: + s3: + assets: + logging: + logrotate: + debug: + server: + listen: '${dcfg.sockets.rails}' + rails_environment: 'production' + chat: + server: + bosh: + log: + map: + mapbox: + privacy: + piwik: + statistics: + camo: + settings: + enable_registrations: false + welcome_message: + invitations: + open: false + paypal_donations: + community_spotlight: + captcha: + enable: false + terms: + maintenance: + remove_old_users: + default_metas: + csp: + services: + twitter: + tumblr: + wordpress: + mail: + enable: true + sender_address: 'diaspora@tools.immae.eu' + method: 'sendmail' + smtp: + sendmail: + location: '/run/wrappers/bin/sendmail' + admins: + account: "ismael" + podmin_email: 'diaspora@tools.immae.eu' + relay: + outbound: + inbound: + ldap: + enable: true + host: ${env.ldap.host} + port: 636 + only_ldap: true + mail_attribute: mail + skip_email_confirmation: true + use_bind_dn: true + bind_dn: "${env.ldap.dn}" + bind_pw: "${env.ldap.password}" + search_base: "${env.ldap.base}" + search_filter: "${env.ldap.filter}" + production: + environment: + development: + environment: + ''; + }; + "webapps/diaspora/database.yml" = { + user = "diaspora"; + group = "diaspora"; + permissions = "0400"; + text = '' + postgresql: &postgresql + adapter: postgresql + host: "${env.postgresql.socket}" + port: "${env.postgresql.port}" + username: "${env.postgresql.user}" + password: "${env.postgresql.password}" + encoding: unicode + common: &common + <<: *postgresql + combined: &combined + <<: *common + development: + <<: *combined + database: diaspora_development + production: + <<: *combined + database: ${env.postgresql.database} + test: + <<: *combined + database: "diaspora_test" + integration1: + <<: *combined + database: diaspora_integration1 + integration2: + <<: *combined + database: diaspora_integration2 + ''; + }; + "webapps/diaspora/secret_token.rb" = { + user = "diaspora"; + group = "diaspora"; + permissions = "0400"; + text = '' + Diaspora::Application.config.secret_key_base = '${env.secret_token}' + ''; + }; + }; + + services.diaspora = { + enable = true; + withLdap = true; + dataDir = "/var/lib/diaspora_immae"; + adminEmail = "diaspora@tools.immae.eu"; + configDir = config.secrets.fullPaths."webapps/diaspora"; + }; + + services.filesWatcher.diaspora = { + restart = true; + paths = [ dcfg.configDir ]; + }; + + services.websites.env.tools.modules = [ + "headers" "proxy" "proxy_http" + ]; + security.acme.certs.eldiron.extraDomainNames = [ "diaspora.immae.eu" ]; + services.websites.env.tools.vhostConfs.diaspora = { + certName = "eldiron"; + hosts = [ "diaspora.immae.eu" ]; + root = root; + extraConfig = [ '' + RewriteEngine On + RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f + RewriteRule ^/(.*)$ unix://${dcfg.sockets.rails}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L] + + ProxyRequests Off + ProxyVia On + ProxyPreserveHost On + RequestHeader set X_FORWARDED_PROTO https + + + Require all granted + + + + Require all granted + Options -MultiViews + + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "diaspora website is running on diaspora.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "diaspora.immae.eu" "/" "is the online social world where you are in control"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Diaspora"; + _webstatus_url = "https://diaspora.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/ether/default.nix b/systems/eldiron/websites/ether/default.nix new file mode 100644 index 0000000..3993553 --- /dev/null +++ b/systems/eldiron/websites/ether/default.nix @@ -0,0 +1,251 @@ +{ lib, pkgs, config, nixpkgsRaw, etherpad-lite, ... }: +let + env = config.myEnv.tools.etherpad-lite; + cfg = config.myServices.websites.tools.etherpad-lite; + # Make sure we’re not rebuilding whole libreoffice just because of a + # dependency + libreoffice = nixpkgsRaw.libreoffice-fresh; + ecfg = config.services.etherpad-lite; +in { + options.myServices.websites.tools.etherpad-lite = { + enable = lib.mkEnableOption "enable etherpad's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.ether = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.etherpad = { + file.datetime = "2021-01-04T00:01:00"; + service = { + name = "Etherpad"; + description = "Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément."; + website = "https://ether.immae.eu"; + logo = "https://ether.immae.eu/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Etherpad"; + website = "https://etherpad.org/"; + license.url = "https://github.com/ether/etherpad-lite/blob/develop/LICENSE"; + license.name = "Apache License Version 2.0"; + version = ecfg.package.version; + source.url = "https://github.com/ether/etherpad-lite"; + modules = ecfg.package.moduleNames; + }; + }; + secrets.keys = { + "webapps/tools-etherpad-apikey" = { + permissions = "0400"; + text = env.api_key; + }; + "webapps/tools-etherpad-sessionkey" = { + permissions = "0400"; + text = env.session_key; + }; + "webapps/tools-etherpad" = { + permissions = "0400"; + keyDependencies = [ libreoffice ]; + text = '' + { + "title": "Etherpad", + "favicon": "favicon.ico", + "skinName": "colibris", + "skinVariants": "dark-toolbar light-background super-light-editor full-width-editor", + + "ip": "", + "port" : "${ecfg.sockets.node}", + "showSettingsInAdminPage" : false, + "dbType" : "postgres", + "dbSettings" : { + "user" : "${env.postgresql.user}", + "host" : "${env.postgresql.socket}", + "password": "${env.postgresql.password}", + "database": "${env.postgresql.database}", + "charset" : "utf8mb4" + }, + + "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n", + "padOptions": { + "noColors": false, + "showControls": true, + "showChat": true, + "showLineNumbers": true, + "useMonospaceFont": false, + "userName": false, + "userColor": false, + "rtl": false, + "alwaysShowChat": false, + "chatAndUsers": false, + "lang": "fr" + }, + + "suppressErrorsInPadText" : false, + "requireSession" : false, + "editOnly" : false, + "sessionNoPassword" : false, + "minify" : false, + "maxAge" : 21600, + "abiword" : null, + "soffice" : "${libreoffice}/bin/soffice", + "tidyHtml" : "", + "allowUnknownFileEnds" : true, + "requireAuthentication" : false, + "requireAuthorization" : false, + "trustProxy" : true, + "disableIPlogging" : false, + "automaticReconnectionTimeout" : 0, + "scrollWhenFocusLineIsOutOfViewport": { + "percentage": { + "editionAboveViewport": 0, + "editionBelowViewport": 0 + }, + "duration": 0, + "scrollWhenCaretIsInTheLastLineOfViewport": false, + "percentageToScrollWhenUserPressesArrowUp": 0 + }, + "users": { + "admin": { + "password": "${env.adminPassword}", + "is_admin": true + }, + "ldapauth": { + "hash": "invalid", + "url": "ldaps://${env.ldap.host}", + "accountBase": "${env.ldap.base}", + "accountPattern": "${env.ldap.filter}", + "displayNameAttribute": "cn", + "searchDN": "${env.ldap.dn}", + "searchPWD": "${env.ldap.password}", + "groupSearchBase": "${env.ldap.base}", + "groupAttribute": "member", + "groupAttributeIsDN": true, + "searchScope": "sub", + "groupSearch": "${env.ldap.group_filter}", + "anonymousReadonly": false + } + }, + "ep_mypads": { + "warning": "This hash is stored in database, changing anything here will not have any consequence", + "ldap": { + "url": "ldaps://${env.ldap.host}", + "bindDN": "${env.ldap.dn}", + "bindCredentials": "${env.ldap.password}", + "searchBase": "${env.ldap.base}", + "searchFilter": "${env.ldap.filter}", + "properties": { + "login": "uid", + "email": "mail", + "firstname": "givenName", + "lastname": "sn" + }, + "defaultLang": "fr" + } + }, + "ep_comments_page": { + "displayCommentAsIcon": true, + "highlightSelectedText": true + }, + "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], + "loadTest": false, + "indentationOnNewLine": false, + "toolbar": { + "left": [ + ["bold", "italic", "underline", "strikethrough"], + ["orderedlist", "unorderedlist", "indent", "outdent"], + ["undo", "redo"], + ["clearauthorship"] + ], + "right": [ + ["importexport", "timeslider", "savedrevision"], + ["settings", "embed"], + ["showusers"] + ], + "timeslider": [ + ["timeslider_export", "timeslider_returnToPad"] + ] + }, + "loglevel": "INFO", + "logconfig" : { "appenders": [ { "type": "console" } ] } + } + ''; + }; + }; + services.etherpad-lite = { + enable = true; + package = etherpad-lite.withModules (p: [ + p.ep_align p.ep_bookmark p.ep_colors p.ep_comments_page + p.ep_cursortrace p.ep_delete_empty_pads p.ep_embedmedia + p.ep_font_size p.ep_headings2 p.ep_immae_buttons p.ep_ldapauth + p.ep_line_height p.ep_markdown p.ep_mypads p.ep_page_view + p.ep_previewimages p.ep_ruler p.ep_scrollto + p.ep_set_title_on_pad p.ep_subscript_and_superscript + p.ep_timesliderdiff + ]); + modules = []; + sessionKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-sessionkey"; + apiKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-apikey"; + configFile = config.secrets.fullPaths."webapps/tools-etherpad"; + }; + + systemd.services.etherpad-lite.serviceConfig.SupplementaryGroups = "keys"; + systemd.services.etherpad-lite-cleanup.serviceConfig.SupplementaryGroups = "keys"; + # Needed so that they get in the closure + systemd.services.etherpad-lite.path = [ libreoffice pkgs.html-tidy ]; + + services.filesWatcher.etherpad-lite = { + restart = true; + paths = [ ecfg.sessionKeyFile ecfg.apiKeyFile ecfg.configFile ]; + }; + + services.websites.env.tools.modules = [ + "headers" "proxy" "proxy_http" "proxy_wstunnel" + ]; + security.acme.certs.eldiron.extraDomainNames = [ "ether.immae.eu" ]; + services.websites.env.tools.vhostConfs.etherpad-lite = { + certName = "eldiron"; + hosts = [ "ether.immae.eu" ]; + root = null; + extraConfig = [ '' + Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;" + RequestHeader set X-Forwarded-Proto "https" + + RewriteEngine On + + RewriteCond %{REQUEST_URI} ^/socket.io [NC] + RewriteCond %{QUERY_STRING} transport=websocket [NC] + RewriteRule /(.*) unix://${ecfg.sockets.node}|ws://ether.immae.eu/$1 [P,NE,QSA,L] + + + ProxyVia On + ProxyRequests Off + ProxyPreserveHost On + ProxyPass / unix://${ecfg.sockets.node}|http://ether.immae.eu/ + ProxyPassReverse / unix://${ecfg.sockets.node}|http://ether.immae.eu/ + + Options FollowSymLinks MultiViews + AllowOverride None + Require all granted + + + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "etherpad website is running on ether.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "ether.immae.eu" "/" "Etherpad"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Etherpad"; + _webstatus_url = "https://ether.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/games/codenames/codenames.patch b/systems/eldiron/websites/games/codenames/codenames.patch new file mode 100644 index 0000000..9faf069 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/codenames.patch @@ -0,0 +1,8306 @@ +diff --git a/elm.json b/elm.json +index a0d276b..1b73a46 100644 +--- a/elm.json ++++ b/elm.json +@@ -3,7 +3,7 @@ + "source-directories": [ + "src" + ], +- "elm-version": "0.19.0", ++ "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/browser": "1.0.1", +@@ -15,12 +15,11 @@ + "perzanko/elm-loading": "2.0.4" + }, + "indirect": { +- "Skinney/murmur3": "2.0.8", + "elm/bytes": "1.0.8", + "elm/file": "1.0.5", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.2", +- "rtfeldman/elm-css": "16.0.1", ++ "rtfeldman/elm-css": "16.1.0", + "rtfeldman/elm-hex": "1.0.0" + } + }, +@@ -32,4 +31,4 @@ + "elm/random": "1.0.0" + } + } +-} +\ No newline at end of file ++} +diff --git a/package-lock.json b/package-lock.json +index 778b061..05a22ab 100644 +--- a/package-lock.json ++++ b/package-lock.json +@@ -4,196 +4,7963 @@ + "lockfileVersion": 1, + "requires": true, + "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.0.0", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", ++ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.0.0" ++ } ++ }, ++ "@babel/core": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", ++ "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.0.0", ++ "@babel/generator": "^7.3.4", ++ "@babel/helpers": "^7.2.0", ++ "@babel/parser": "^7.3.4", ++ "@babel/template": "^7.2.2", ++ "@babel/traverse": "^7.3.4", ++ "@babel/types": "^7.3.4", ++ "convert-source-map": "^1.1.0", ++ "debug": "^4.1.0", ++ "json5": "^2.1.0", ++ "lodash": "^4.17.11", ++ "resolve": "^1.3.2", ++ "semver": "^5.4.1", ++ "source-map": "^0.5.0" ++ }, ++ "dependencies": { ++ "json5": { ++ "version": "2.1.3", ++ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", ++ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", ++ "dev": true, ++ "requires": { ++ "minimist": "^1.2.5" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/generator": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", ++ "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.3.4", ++ "jsesc": "^2.5.1", ++ "lodash": "^4.17.11", ++ "source-map": "^0.5.0", ++ "trim-right": "^1.0.1" ++ }, ++ "dependencies": { ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/helper-annotate-as-pure": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", ++ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-builder-binary-assignment-operator-visitor": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", ++ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-explode-assignable-expression": "^7.8.3", ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-builder-react-jsx": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", ++ "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-annotate-as-pure": "^7.8.3", ++ "@babel/types": "^7.9.0" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-create-regexp-features-plugin": { ++ "version": "7.8.8", ++ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", ++ "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-annotate-as-pure": "^7.8.3", ++ "@babel/helper-regex": "^7.8.3", ++ "regexpu-core": "^4.7.0" ++ } ++ }, ++ "@babel/helper-define-map": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", ++ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-function-name": "^7.8.3", ++ "@babel/types": "^7.8.3", ++ "lodash": "^4.17.13" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-explode-assignable-expression": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", ++ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", ++ "dev": true, ++ "requires": { ++ "@babel/traverse": "^7.8.3", ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/generator": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", ++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.9.5", ++ "jsesc": "^2.5.1", ++ "lodash": "^4.17.13", ++ "source-map": "^0.5.0" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/traverse": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", ++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/generator": "^7.9.5", ++ "@babel/helper-function-name": "^7.9.5", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "@babel/parser": "^7.9.0", ++ "@babel/types": "^7.9.5", ++ "debug": "^4.1.0", ++ "globals": "^11.1.0", ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/helper-function-name": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", ++ "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-get-function-arity": "^7.8.3", ++ "@babel/template": "^7.8.3", ++ "@babel/types": "^7.9.5" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/template": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", ++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/parser": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-get-function-arity": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", ++ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-hoist-variables": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", ++ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-member-expression-to-functions": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", ++ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-module-imports": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", ++ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-module-transforms": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", ++ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-module-imports": "^7.8.3", ++ "@babel/helper-replace-supers": "^7.8.6", ++ "@babel/helper-simple-access": "^7.8.3", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "@babel/template": "^7.8.6", ++ "@babel/types": "^7.9.0", ++ "lodash": "^4.17.13" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/template": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", ++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/parser": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-optimise-call-expression": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", ++ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-plugin-utils": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", ++ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", ++ "dev": true ++ }, ++ "@babel/helper-regex": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", ++ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", ++ "dev": true, ++ "requires": { ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/helper-remap-async-to-generator": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", ++ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-annotate-as-pure": "^7.8.3", ++ "@babel/helper-wrap-function": "^7.8.3", ++ "@babel/template": "^7.8.3", ++ "@babel/traverse": "^7.8.3", ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/generator": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", ++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.9.5", ++ "jsesc": "^2.5.1", ++ "lodash": "^4.17.13", ++ "source-map": "^0.5.0" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/template": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", ++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/parser": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ } ++ }, ++ "@babel/traverse": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", ++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/generator": "^7.9.5", ++ "@babel/helper-function-name": "^7.9.5", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "@babel/parser": "^7.9.0", ++ "@babel/types": "^7.9.5", ++ "debug": "^4.1.0", ++ "globals": "^11.1.0", ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/helper-replace-supers": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", ++ "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-member-expression-to-functions": "^7.8.3", ++ "@babel/helper-optimise-call-expression": "^7.8.3", ++ "@babel/traverse": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/generator": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", ++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.9.5", ++ "jsesc": "^2.5.1", ++ "lodash": "^4.17.13", ++ "source-map": "^0.5.0" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/traverse": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", ++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/generator": "^7.9.5", ++ "@babel/helper-function-name": "^7.9.5", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "@babel/parser": "^7.9.0", ++ "@babel/types": "^7.9.5", ++ "debug": "^4.1.0", ++ "globals": "^11.1.0", ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/helper-simple-access": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", ++ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", ++ "dev": true, ++ "requires": { ++ "@babel/template": "^7.8.3", ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/template": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", ++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/parser": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-split-export-declaration": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", ++ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ } ++ } ++ }, ++ "@babel/helper-validator-identifier": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", ++ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", ++ "dev": true ++ }, ++ "@babel/helper-wrap-function": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", ++ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-function-name": "^7.8.3", ++ "@babel/template": "^7.8.3", ++ "@babel/traverse": "^7.8.3", ++ "@babel/types": "^7.8.3" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/generator": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", ++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.9.5", ++ "jsesc": "^2.5.1", ++ "lodash": "^4.17.13", ++ "source-map": "^0.5.0" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/template": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", ++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/parser": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ } ++ }, ++ "@babel/traverse": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", ++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/generator": "^7.9.5", ++ "@babel/helper-function-name": "^7.9.5", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "@babel/parser": "^7.9.0", ++ "@babel/types": "^7.9.5", ++ "debug": "^4.1.0", ++ "globals": "^11.1.0", ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/helpers": { ++ "version": "7.9.2", ++ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", ++ "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", ++ "dev": true, ++ "requires": { ++ "@babel/template": "^7.8.3", ++ "@babel/traverse": "^7.9.0", ++ "@babel/types": "^7.9.0" ++ }, ++ "dependencies": { ++ "@babel/code-frame": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", ++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", ++ "dev": true, ++ "requires": { ++ "@babel/highlight": "^7.8.3" ++ } ++ }, ++ "@babel/generator": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", ++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", ++ "dev": true, ++ "requires": { ++ "@babel/types": "^7.9.5", ++ "jsesc": "^2.5.1", ++ "lodash": "^4.17.13", ++ "source-map": "^0.5.0" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.9.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", ++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", ++ "dev": true ++ }, ++ "@babel/template": { ++ "version": "7.8.6", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", ++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/parser": "^7.8.6", ++ "@babel/types": "^7.8.6" ++ } ++ }, ++ "@babel/traverse": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", ++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.8.3", ++ "@babel/generator": "^7.9.5", ++ "@babel/helper-function-name": "^7.9.5", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "@babel/parser": "^7.9.0", ++ "@babel/types": "^7.9.5", ++ "debug": "^4.1.0", ++ "globals": "^11.1.0", ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", ++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.5", ++ "lodash": "^4.17.13", ++ "to-fast-properties": "^2.0.0" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/highlight": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", ++ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-validator-identifier": "^7.9.0", ++ "chalk": "^2.0.0", ++ "js-tokens": "^4.0.0" ++ } ++ }, ++ "@babel/parser": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", ++ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", ++ "dev": true ++ }, ++ "@babel/plugin-proposal-async-generator-functions": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", ++ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/helper-remap-async-to-generator": "^7.8.3", ++ "@babel/plugin-syntax-async-generators": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-proposal-json-strings": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", ++ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/plugin-syntax-json-strings": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-proposal-object-rest-spread": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", ++ "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", ++ "@babel/plugin-transform-parameters": "^7.9.5" ++ } ++ }, ++ "@babel/plugin-proposal-optional-catch-binding": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", ++ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-proposal-unicode-property-regex": { ++ "version": "7.8.8", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", ++ "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-create-regexp-features-plugin": "^7.8.8", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-syntax-async-generators": { ++ "version": "7.8.4", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", ++ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-syntax-flow": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz", ++ "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-syntax-json-strings": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", ++ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-syntax-jsx": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", ++ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-syntax-object-rest-spread": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", ++ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-syntax-optional-catch-binding": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", ++ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.0" ++ } ++ }, ++ "@babel/plugin-transform-arrow-functions": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", ++ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-async-to-generator": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", ++ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-module-imports": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/helper-remap-async-to-generator": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-block-scoped-functions": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", ++ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-block-scoping": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", ++ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "lodash": "^4.17.13" ++ } ++ }, ++ "@babel/plugin-transform-classes": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", ++ "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-annotate-as-pure": "^7.8.3", ++ "@babel/helper-define-map": "^7.8.3", ++ "@babel/helper-function-name": "^7.9.5", ++ "@babel/helper-optimise-call-expression": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/helper-replace-supers": "^7.8.6", ++ "@babel/helper-split-export-declaration": "^7.8.3", ++ "globals": "^11.1.0" ++ } ++ }, ++ "@babel/plugin-transform-computed-properties": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", ++ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-destructuring": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", ++ "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-dotall-regex": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", ++ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-create-regexp-features-plugin": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-duplicate-keys": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", ++ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-exponentiation-operator": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", ++ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-flow-strip-types": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz", ++ "integrity": "sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.0.0", ++ "@babel/plugin-syntax-flow": "^7.2.0" ++ } ++ }, ++ "@babel/plugin-transform-for-of": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", ++ "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-function-name": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", ++ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-function-name": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-literals": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", ++ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-modules-amd": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", ++ "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-module-transforms": "^7.9.0", ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "babel-plugin-dynamic-import-node": "^2.3.0" ++ } ++ }, ++ "@babel/plugin-transform-modules-commonjs": { ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", ++ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-module-transforms": "^7.1.0", ++ "@babel/helper-plugin-utils": "^7.0.0", ++ "@babel/helper-simple-access": "^7.1.0" ++ } ++ }, ++ "@babel/plugin-transform-modules-systemjs": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", ++ "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-hoist-variables": "^7.8.3", ++ "@babel/helper-module-transforms": "^7.9.0", ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "babel-plugin-dynamic-import-node": "^2.3.0" ++ } ++ }, ++ "@babel/plugin-transform-modules-umd": { ++ "version": "7.9.0", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", ++ "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-module-transforms": "^7.9.0", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-named-capturing-groups-regex": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", ++ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-create-regexp-features-plugin": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-new-target": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", ++ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-object-super": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", ++ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/helper-replace-supers": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-parameters": { ++ "version": "7.9.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", ++ "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-get-function-arity": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-react-jsx": { ++ "version": "7.3.0", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", ++ "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-builder-react-jsx": "^7.3.0", ++ "@babel/helper-plugin-utils": "^7.0.0", ++ "@babel/plugin-syntax-jsx": "^7.2.0" ++ } ++ }, ++ "@babel/plugin-transform-regenerator": { ++ "version": "7.8.7", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", ++ "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", ++ "dev": true, ++ "requires": { ++ "regenerator-transform": "^0.14.2" ++ } ++ }, ++ "@babel/plugin-transform-shorthand-properties": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", ++ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-spread": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", ++ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-sticky-regex": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", ++ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3", ++ "@babel/helper-regex": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-template-literals": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", ++ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-annotate-as-pure": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-typeof-symbol": { ++ "version": "7.8.4", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", ++ "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/plugin-transform-unicode-regex": { ++ "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", ++ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-create-regexp-features-plugin": "^7.8.3", ++ "@babel/helper-plugin-utils": "^7.8.3" ++ } ++ }, ++ "@babel/preset-env": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", ++ "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", ++ "dev": true, ++ "requires": { ++ "@babel/helper-module-imports": "^7.0.0", ++ "@babel/helper-plugin-utils": "^7.0.0", ++ "@babel/plugin-proposal-async-generator-functions": "^7.2.0", ++ "@babel/plugin-proposal-json-strings": "^7.2.0", ++ "@babel/plugin-proposal-object-rest-spread": "^7.3.4", ++ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", ++ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", ++ "@babel/plugin-syntax-async-generators": "^7.2.0", ++ "@babel/plugin-syntax-json-strings": "^7.2.0", ++ "@babel/plugin-syntax-object-rest-spread": "^7.2.0", ++ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", ++ "@babel/plugin-transform-arrow-functions": "^7.2.0", ++ "@babel/plugin-transform-async-to-generator": "^7.3.4", ++ "@babel/plugin-transform-block-scoped-functions": "^7.2.0", ++ "@babel/plugin-transform-block-scoping": "^7.3.4", ++ "@babel/plugin-transform-classes": "^7.3.4", ++ "@babel/plugin-transform-computed-properties": "^7.2.0", ++ "@babel/plugin-transform-destructuring": "^7.2.0", ++ "@babel/plugin-transform-dotall-regex": "^7.2.0", ++ "@babel/plugin-transform-duplicate-keys": "^7.2.0", ++ "@babel/plugin-transform-exponentiation-operator": "^7.2.0", ++ "@babel/plugin-transform-for-of": "^7.2.0", ++ "@babel/plugin-transform-function-name": "^7.2.0", ++ "@babel/plugin-transform-literals": "^7.2.0", ++ "@babel/plugin-transform-modules-amd": "^7.2.0", ++ "@babel/plugin-transform-modules-commonjs": "^7.2.0", ++ "@babel/plugin-transform-modules-systemjs": "^7.3.4", ++ "@babel/plugin-transform-modules-umd": "^7.2.0", ++ "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", ++ "@babel/plugin-transform-new-target": "^7.0.0", ++ "@babel/plugin-transform-object-super": "^7.2.0", ++ "@babel/plugin-transform-parameters": "^7.2.0", ++ "@babel/plugin-transform-regenerator": "^7.3.4", ++ "@babel/plugin-transform-shorthand-properties": "^7.2.0", ++ "@babel/plugin-transform-spread": "^7.2.0", ++ "@babel/plugin-transform-sticky-regex": "^7.2.0", ++ "@babel/plugin-transform-template-literals": "^7.2.0", ++ "@babel/plugin-transform-typeof-symbol": "^7.2.0", ++ "@babel/plugin-transform-unicode-regex": "^7.2.0", ++ "browserslist": "^4.3.4", ++ "invariant": "^2.2.2", ++ "js-levenshtein": "^1.1.3", ++ "semver": "^5.3.0" ++ } ++ }, ++ "@babel/runtime": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", ++ "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", ++ "dev": true, ++ "requires": { ++ "regenerator-runtime": "^0.12.0" ++ }, ++ "dependencies": { ++ "regenerator-runtime": { ++ "version": "0.12.1", ++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", ++ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", ++ "dev": true ++ } ++ } ++ }, ++ "@babel/template": { ++ "version": "7.2.2", ++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", ++ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.0.0", ++ "@babel/parser": "^7.2.2", ++ "@babel/types": "^7.2.2" ++ } ++ }, ++ "@babel/traverse": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", ++ "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.0.0", ++ "@babel/generator": "^7.3.4", ++ "@babel/helper-function-name": "^7.1.0", ++ "@babel/helper-split-export-declaration": "^7.0.0", ++ "@babel/parser": "^7.3.4", ++ "@babel/types": "^7.3.4", ++ "debug": "^4.1.0", ++ "globals": "^11.1.0", ++ "lodash": "^4.17.11" ++ } ++ }, ++ "@babel/types": { ++ "version": "7.3.4", ++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", ++ "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", ++ "dev": true, ++ "requires": { ++ "esutils": "^2.0.2", ++ "lodash": "^4.17.11", ++ "to-fast-properties": "^2.0.0" ++ } ++ }, ++ "@iarna/toml": { ++ "version": "2.2.5", ++ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", ++ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", ++ "dev": true ++ }, ++ "@mrmlnc/readdir-enhanced": { ++ "version": "2.2.1", ++ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", ++ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", ++ "dev": true, ++ "requires": { ++ "call-me-maybe": "^1.0.1", ++ "glob-to-regexp": "^0.3.0" ++ } ++ }, ++ "@nodelib/fs.stat": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", ++ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", ++ "dev": true ++ }, ++ "@parcel/fs": { ++ "version": "1.11.0", ++ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz", ++ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==", ++ "dev": true, ++ "requires": { ++ "@parcel/utils": "^1.11.0", ++ "mkdirp": "^0.5.1", ++ "rimraf": "^2.6.2" ++ } ++ }, ++ "@parcel/logger": { ++ "version": "1.11.1", ++ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz", ++ "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==", ++ "dev": true, ++ "requires": { ++ "@parcel/workers": "^1.11.0", ++ "chalk": "^2.1.0", ++ "grapheme-breaker": "^0.3.2", ++ "ora": "^2.1.0", ++ "strip-ansi": "^4.0.0" ++ } ++ }, ++ "@parcel/utils": { ++ "version": "1.11.0", ++ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz", ++ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==", ++ "dev": true ++ }, ++ "@parcel/watcher": { ++ "version": "1.12.1", ++ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz", ++ "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==", ++ "dev": true, ++ "requires": { ++ "@parcel/utils": "^1.11.0", ++ "chokidar": "^2.1.5" ++ } ++ }, ++ "@parcel/workers": { ++ "version": "1.11.0", ++ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz", ++ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==", ++ "dev": true, ++ "requires": { ++ "@parcel/utils": "^1.11.0", ++ "physical-cpu-count": "^2.0.0" ++ } ++ }, ++ "@types/q": { ++ "version": "1.5.2", ++ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", ++ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", ++ "dev": true ++ }, ++ "abab": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", ++ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", ++ "dev": true ++ }, ++ "abbrev": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", ++ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", ++ "dev": true ++ }, ++ "acorn": { ++ "version": "7.1.1", ++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", ++ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", ++ "dev": true ++ }, ++ "acorn-globals": { ++ "version": "4.3.4", ++ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", ++ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", ++ "dev": true, ++ "requires": { ++ "acorn": "^6.0.1", ++ "acorn-walk": "^6.0.1" ++ }, ++ "dependencies": { ++ "acorn": { ++ "version": "6.4.1", ++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", ++ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", ++ "dev": true ++ } ++ } ++ }, ++ "acorn-walk": { ++ "version": "6.2.0", ++ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", ++ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", ++ "dev": true ++ }, ++ "ajv": { ++ "version": "6.12.2", ++ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", ++ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", ++ "requires": { ++ "fast-deep-equal": "^3.1.1", ++ "fast-json-stable-stringify": "^2.0.0", ++ "json-schema-traverse": "^0.4.1", ++ "uri-js": "^4.2.2" ++ } ++ }, ++ "alphanum-sort": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", ++ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", ++ "dev": true ++ }, ++ "ansi-regex": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", ++ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", ++ "dev": true ++ }, ++ "ansi-styles": { ++ "version": "3.2.1", ++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", ++ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", ++ "dev": true, ++ "requires": { ++ "color-convert": "^1.9.0" ++ } ++ }, ++ "ansi-to-html": { ++ "version": "0.6.14", ++ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", ++ "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", ++ "dev": true, ++ "requires": { ++ "entities": "^1.1.2" ++ }, ++ "dependencies": { ++ "entities": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", ++ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", ++ "dev": true ++ } ++ } ++ }, ++ "anymatch": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", ++ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", ++ "dev": true, ++ "requires": { ++ "micromatch": "^3.1.4", ++ "normalize-path": "^2.1.1" ++ }, ++ "dependencies": { ++ "normalize-path": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", ++ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", ++ "dev": true, ++ "requires": { ++ "remove-trailing-separator": "^1.0.1" ++ } ++ } ++ } ++ }, ++ "argparse": { ++ "version": "1.0.10", ++ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", ++ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", ++ "dev": true, ++ "requires": { ++ "sprintf-js": "~1.0.2" ++ } ++ }, ++ "arr-diff": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", ++ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", ++ "dev": true ++ }, ++ "arr-flatten": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", ++ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", ++ "dev": true ++ }, ++ "arr-union": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", ++ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", ++ "dev": true ++ }, ++ "array-equal": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", ++ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", ++ "dev": true ++ }, ++ "array-unique": { ++ "version": "0.3.2", ++ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", ++ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", ++ "dev": true ++ }, ++ "asn1": { ++ "version": "0.2.4", ++ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", ++ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", ++ "requires": { ++ "safer-buffer": "~2.1.0" ++ } ++ }, ++ "asn1.js": { ++ "version": "4.10.1", ++ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", ++ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.0.0", ++ "inherits": "^2.0.1", ++ "minimalistic-assert": "^1.0.0" ++ } ++ }, ++ "assert": { ++ "version": "1.5.0", ++ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", ++ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", ++ "dev": true, ++ "requires": { ++ "object-assign": "^4.1.1", ++ "util": "0.10.3" ++ }, ++ "dependencies": { ++ "inherits": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", ++ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", ++ "dev": true ++ }, ++ "util": { ++ "version": "0.10.3", ++ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", ++ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", ++ "dev": true, ++ "requires": { ++ "inherits": "2.0.1" ++ } ++ } ++ } ++ }, ++ "assert-plus": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", ++ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" ++ }, ++ "assign-symbols": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", ++ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", ++ "dev": true ++ }, ++ "async-each": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", ++ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", ++ "dev": true ++ }, ++ "async-limiter": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", ++ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", ++ "dev": true ++ }, ++ "asynckit": { ++ "version": "0.4.0", ++ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", ++ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" ++ }, ++ "atob": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", ++ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", ++ "dev": true ++ }, ++ "aws-sign2": { ++ "version": "0.7.0", ++ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", ++ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" ++ }, ++ "aws4": { ++ "version": "1.9.1", ++ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", ++ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" ++ }, ++ "babel-plugin-dynamic-import-node": { ++ "version": "2.3.3", ++ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", ++ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", ++ "dev": true, ++ "requires": { ++ "object.assign": "^4.1.0" ++ } ++ }, ++ "babel-runtime": { ++ "version": "6.26.0", ++ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", ++ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", ++ "dev": true, ++ "requires": { ++ "core-js": "^2.4.0", ++ "regenerator-runtime": "^0.11.0" ++ }, ++ "dependencies": { ++ "regenerator-runtime": { ++ "version": "0.11.1", ++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", ++ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", ++ "dev": true ++ } ++ } ++ }, ++ "babel-types": { ++ "version": "6.26.0", ++ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", ++ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", ++ "dev": true, ++ "requires": { ++ "babel-runtime": "^6.26.0", ++ "esutils": "^2.0.2", ++ "lodash": "^4.17.4", ++ "to-fast-properties": "^1.0.3" ++ }, ++ "dependencies": { ++ "to-fast-properties": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", ++ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", ++ "dev": true ++ } ++ } ++ }, ++ "babylon-walk": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz", ++ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=", ++ "dev": true, ++ "requires": { ++ "babel-runtime": "^6.11.6", ++ "babel-types": "^6.15.0", ++ "lodash.clone": "^4.5.0" ++ } ++ }, + "balanced-match": { + "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", +- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", ++ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", ++ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", ++ "dev": true ++ }, ++ "base": { ++ "version": "0.11.2", ++ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", ++ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", ++ "dev": true, ++ "requires": { ++ "cache-base": "^1.0.1", ++ "class-utils": "^0.3.5", ++ "component-emitter": "^1.2.1", ++ "define-property": "^1.0.0", ++ "isobject": "^3.0.1", ++ "mixin-deep": "^1.2.0", ++ "pascalcase": "^0.1.1" ++ }, ++ "dependencies": { ++ "define-property": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", ++ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^1.0.0" ++ } ++ }, ++ "is-accessor-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", ++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-data-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", ++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-descriptor": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", ++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", ++ "dev": true, ++ "requires": { ++ "is-accessor-descriptor": "^1.0.0", ++ "is-data-descriptor": "^1.0.0", ++ "kind-of": "^6.0.2" ++ } ++ } ++ } ++ }, ++ "base64-js": { ++ "version": "1.3.1", ++ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", ++ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", ++ "dev": true ++ }, ++ "bcrypt-pbkdf": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", ++ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", ++ "requires": { ++ "tweetnacl": "^0.14.3" ++ } ++ }, ++ "binary-extensions": { ++ "version": "1.13.1", ++ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", ++ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", ++ "dev": true ++ }, ++ "bindings": { ++ "version": "1.5.0", ++ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", ++ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", ++ "dev": true, ++ "requires": { ++ "file-uri-to-path": "1.0.0" ++ } ++ }, ++ "bn.js": { ++ "version": "4.11.8", ++ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", ++ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", ++ "dev": true ++ }, ++ "boolbase": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", ++ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", ++ "dev": true ++ }, ++ "brace-expansion": { ++ "version": "1.1.11", ++ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", ++ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", ++ "dev": true, ++ "requires": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" ++ } ++ }, ++ "braces": { ++ "version": "2.3.2", ++ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", ++ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", ++ "dev": true, ++ "requires": { ++ "arr-flatten": "^1.1.0", ++ "array-unique": "^0.3.2", ++ "extend-shallow": "^2.0.1", ++ "fill-range": "^4.0.0", ++ "isobject": "^3.0.1", ++ "repeat-element": "^1.1.2", ++ "snapdragon": "^0.8.1", ++ "snapdragon-node": "^2.0.1", ++ "split-string": "^3.0.2", ++ "to-regex": "^3.0.1" ++ }, ++ "dependencies": { ++ "extend-shallow": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", ++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", ++ "dev": true, ++ "requires": { ++ "is-extendable": "^0.1.0" ++ } ++ } ++ } ++ }, ++ "brfs": { ++ "version": "1.6.1", ++ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", ++ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", ++ "dev": true, ++ "requires": { ++ "quote-stream": "^1.0.1", ++ "resolve": "^1.1.5", ++ "static-module": "^2.2.0", ++ "through2": "^2.0.0" ++ } ++ }, ++ "brorand": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", ++ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", ++ "dev": true ++ }, ++ "browser-process-hrtime": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", ++ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", ++ "dev": true ++ }, ++ "browserify-aes": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", ++ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", ++ "dev": true, ++ "requires": { ++ "buffer-xor": "^1.0.3", ++ "cipher-base": "^1.0.0", ++ "create-hash": "^1.1.0", ++ "evp_bytestokey": "^1.0.3", ++ "inherits": "^2.0.1", ++ "safe-buffer": "^5.0.1" ++ } ++ }, ++ "browserify-cipher": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", ++ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", ++ "dev": true, ++ "requires": { ++ "browserify-aes": "^1.0.4", ++ "browserify-des": "^1.0.0", ++ "evp_bytestokey": "^1.0.0" ++ } ++ }, ++ "browserify-des": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", ++ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", ++ "dev": true, ++ "requires": { ++ "cipher-base": "^1.0.1", ++ "des.js": "^1.0.0", ++ "inherits": "^2.0.1", ++ "safe-buffer": "^5.1.2" ++ } ++ }, ++ "browserify-rsa": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", ++ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.1.0", ++ "randombytes": "^2.0.1" ++ } ++ }, ++ "browserify-sign": { ++ "version": "4.0.4", ++ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", ++ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.1.1", ++ "browserify-rsa": "^4.0.0", ++ "create-hash": "^1.1.0", ++ "create-hmac": "^1.1.2", ++ "elliptic": "^6.0.0", ++ "inherits": "^2.0.1", ++ "parse-asn1": "^5.0.0" ++ } ++ }, ++ "browserify-zlib": { ++ "version": "0.2.0", ++ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", ++ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", ++ "dev": true, ++ "requires": { ++ "pako": "~1.0.5" ++ }, ++ "dependencies": { ++ "pako": { ++ "version": "1.0.11", ++ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", ++ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", ++ "dev": true ++ } ++ } ++ }, ++ "browserslist": { ++ "version": "4.12.0", ++ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", ++ "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", ++ "dev": true, ++ "requires": { ++ "caniuse-lite": "^1.0.30001043", ++ "electron-to-chromium": "^1.3.413", ++ "node-releases": "^1.1.53", ++ "pkg-up": "^2.0.0" ++ } ++ }, ++ "buffer": { ++ "version": "4.9.2", ++ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", ++ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", ++ "dev": true, ++ "requires": { ++ "base64-js": "^1.0.2", ++ "ieee754": "^1.1.4", ++ "isarray": "^1.0.0" ++ } ++ }, ++ "buffer-equal": { ++ "version": "0.0.1", ++ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", ++ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", ++ "dev": true ++ }, ++ "buffer-from": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", ++ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", ++ "dev": true ++ }, ++ "buffer-xor": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", ++ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", ++ "dev": true ++ }, ++ "builtin-status-codes": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", ++ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", ++ "dev": true ++ }, ++ "cache-base": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", ++ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", ++ "dev": true, ++ "requires": { ++ "collection-visit": "^1.0.0", ++ "component-emitter": "^1.2.1", ++ "get-value": "^2.0.6", ++ "has-value": "^1.0.0", ++ "isobject": "^3.0.1", ++ "set-value": "^2.0.0", ++ "to-object-path": "^0.3.0", ++ "union-value": "^1.0.0", ++ "unset-value": "^1.0.0" ++ } ++ }, ++ "call-me-maybe": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", ++ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", ++ "dev": true ++ }, ++ "caller-callsite": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", ++ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", ++ "dev": true, ++ "requires": { ++ "callsites": "^2.0.0" ++ } ++ }, ++ "caller-path": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", ++ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", ++ "dev": true, ++ "requires": { ++ "caller-callsite": "^2.0.0" ++ } ++ }, ++ "callsites": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", ++ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", ++ "dev": true ++ }, ++ "camelcase": { ++ "version": "5.3.1", ++ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", ++ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", ++ "dev": true ++ }, ++ "caniuse-api": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", ++ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", ++ "dev": true, ++ "requires": { ++ "browserslist": "^4.0.0", ++ "caniuse-lite": "^1.0.0", ++ "lodash.memoize": "^4.1.2", ++ "lodash.uniq": "^4.5.0" ++ } ++ }, ++ "caniuse-lite": { ++ "version": "1.0.30001048", ++ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", ++ "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", ++ "dev": true ++ }, ++ "caseless": { ++ "version": "0.12.0", ++ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", ++ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" ++ }, ++ "chalk": { ++ "version": "2.4.2", ++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", ++ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", ++ "dev": true, ++ "requires": { ++ "ansi-styles": "^3.2.1", ++ "escape-string-regexp": "^1.0.5", ++ "supports-color": "^5.3.0" ++ }, ++ "dependencies": { ++ "supports-color": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "dev": true, ++ "requires": { ++ "has-flag": "^3.0.0" ++ } ++ } ++ } ++ }, ++ "chokidar": { ++ "version": "2.1.8", ++ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", ++ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", ++ "dev": true, ++ "requires": { ++ "anymatch": "^2.0.0", ++ "async-each": "^1.0.1", ++ "braces": "^2.3.2", ++ "fsevents": "^1.2.7", ++ "glob-parent": "^3.1.0", ++ "inherits": "^2.0.3", ++ "is-binary-path": "^1.0.0", ++ "is-glob": "^4.0.0", ++ "normalize-path": "^3.0.0", ++ "path-is-absolute": "^1.0.0", ++ "readdirp": "^2.2.1", ++ "upath": "^1.1.1" ++ }, ++ "dependencies": { ++ "fsevents": { ++ "version": "1.2.12", ++ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", ++ "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "bindings": "^1.5.0", ++ "nan": "^2.12.1", ++ "node-pre-gyp": "*" ++ }, ++ "dependencies": { ++ "abbrev": { ++ "version": "1.1.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "ansi-regex": { ++ "version": "2.1.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "aproba": { ++ "version": "1.2.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "are-we-there-yet": { ++ "version": "1.1.5", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "delegates": "^1.0.0", ++ "readable-stream": "^2.0.6" ++ } ++ }, ++ "balanced-match": { ++ "version": "1.0.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "brace-expansion": { ++ "version": "1.1.11", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" ++ } ++ }, ++ "chownr": { ++ "version": "1.1.4", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "code-point-at": { ++ "version": "1.1.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "concat-map": { ++ "version": "0.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "console-control-strings": { ++ "version": "1.1.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "core-util-is": { ++ "version": "1.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "debug": { ++ "version": "3.2.6", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "ms": "^2.1.1" ++ } ++ }, ++ "deep-extend": { ++ "version": "0.6.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "delegates": { ++ "version": "1.0.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "detect-libc": { ++ "version": "1.0.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "fs-minipass": { ++ "version": "1.2.7", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "minipass": "^2.6.0" ++ } ++ }, ++ "fs.realpath": { ++ "version": "1.0.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "gauge": { ++ "version": "2.7.4", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "aproba": "^1.0.3", ++ "console-control-strings": "^1.0.0", ++ "has-unicode": "^2.0.0", ++ "object-assign": "^4.1.0", ++ "signal-exit": "^3.0.0", ++ "string-width": "^1.0.1", ++ "strip-ansi": "^3.0.1", ++ "wide-align": "^1.1.0" ++ } ++ }, ++ "glob": { ++ "version": "7.1.6", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "fs.realpath": "^1.0.0", ++ "inflight": "^1.0.4", ++ "inherits": "2", ++ "minimatch": "^3.0.4", ++ "once": "^1.3.0", ++ "path-is-absolute": "^1.0.0" ++ } ++ }, ++ "has-unicode": { ++ "version": "2.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "iconv-lite": { ++ "version": "0.4.24", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "safer-buffer": ">= 2.1.2 < 3" ++ } ++ }, ++ "ignore-walk": { ++ "version": "3.0.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "minimatch": "^3.0.4" ++ } ++ }, ++ "inflight": { ++ "version": "1.0.6", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "once": "^1.3.0", ++ "wrappy": "1" ++ } ++ }, ++ "inherits": { ++ "version": "2.0.4", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "ini": { ++ "version": "1.3.5", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "is-fullwidth-code-point": { ++ "version": "1.0.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "number-is-nan": "^1.0.0" ++ } ++ }, ++ "isarray": { ++ "version": "1.0.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "minimatch": { ++ "version": "3.0.4", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "brace-expansion": "^1.1.7" ++ } ++ }, ++ "minimist": { ++ "version": "1.2.5", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "minipass": { ++ "version": "2.9.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "safe-buffer": "^5.1.2", ++ "yallist": "^3.0.0" ++ } ++ }, ++ "minizlib": { ++ "version": "1.3.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "minipass": "^2.9.0" ++ } ++ }, ++ "mkdirp": { ++ "version": "0.5.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "minimist": "^1.2.5" ++ } ++ }, ++ "ms": { ++ "version": "2.1.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "needle": { ++ "version": "2.3.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "debug": "^3.2.6", ++ "iconv-lite": "^0.4.4", ++ "sax": "^1.2.4" ++ } ++ }, ++ "node-pre-gyp": { ++ "version": "0.14.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "detect-libc": "^1.0.2", ++ "mkdirp": "^0.5.1", ++ "needle": "^2.2.1", ++ "nopt": "^4.0.1", ++ "npm-packlist": "^1.1.6", ++ "npmlog": "^4.0.2", ++ "rc": "^1.2.7", ++ "rimraf": "^2.6.1", ++ "semver": "^5.3.0", ++ "tar": "^4.4.2" ++ } ++ }, ++ "nopt": { ++ "version": "4.0.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "abbrev": "1", ++ "osenv": "^0.1.4" ++ } ++ }, ++ "npm-bundled": { ++ "version": "1.1.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "npm-normalize-package-bin": "^1.0.1" ++ } ++ }, ++ "npm-normalize-package-bin": { ++ "version": "1.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "npm-packlist": { ++ "version": "1.4.8", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "ignore-walk": "^3.0.1", ++ "npm-bundled": "^1.0.1", ++ "npm-normalize-package-bin": "^1.0.1" ++ } ++ }, ++ "npmlog": { ++ "version": "4.1.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "are-we-there-yet": "~1.1.2", ++ "console-control-strings": "~1.1.0", ++ "gauge": "~2.7.3", ++ "set-blocking": "~2.0.0" ++ } ++ }, ++ "number-is-nan": { ++ "version": "1.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "object-assign": { ++ "version": "4.1.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "once": { ++ "version": "1.4.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "wrappy": "1" ++ } ++ }, ++ "os-homedir": { ++ "version": "1.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "os-tmpdir": { ++ "version": "1.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "osenv": { ++ "version": "0.1.5", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "os-homedir": "^1.0.0", ++ "os-tmpdir": "^1.0.0" ++ } ++ }, ++ "path-is-absolute": { ++ "version": "1.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "process-nextick-args": { ++ "version": "2.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "rc": { ++ "version": "1.2.8", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "deep-extend": "^0.6.0", ++ "ini": "~1.3.0", ++ "minimist": "^1.2.0", ++ "strip-json-comments": "~2.0.1" ++ } ++ }, ++ "readable-stream": { ++ "version": "2.3.7", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "core-util-is": "~1.0.0", ++ "inherits": "~2.0.3", ++ "isarray": "~1.0.0", ++ "process-nextick-args": "~2.0.0", ++ "safe-buffer": "~5.1.1", ++ "string_decoder": "~1.1.1", ++ "util-deprecate": "~1.0.1" ++ } ++ }, ++ "rimraf": { ++ "version": "2.7.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "glob": "^7.1.3" ++ } ++ }, ++ "safe-buffer": { ++ "version": "5.1.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "safer-buffer": { ++ "version": "2.1.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "sax": { ++ "version": "1.2.4", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "semver": { ++ "version": "5.7.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "set-blocking": { ++ "version": "2.0.0", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "signal-exit": { ++ "version": "3.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "string-width": { ++ "version": "1.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "code-point-at": "^1.0.0", ++ "is-fullwidth-code-point": "^1.0.0", ++ "strip-ansi": "^3.0.0" ++ } ++ }, ++ "string_decoder": { ++ "version": "1.1.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "safe-buffer": "~5.1.0" ++ } ++ }, ++ "strip-ansi": { ++ "version": "3.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "ansi-regex": "^2.0.0" ++ } ++ }, ++ "strip-json-comments": { ++ "version": "2.0.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "tar": { ++ "version": "4.4.13", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "chownr": "^1.1.1", ++ "fs-minipass": "^1.2.5", ++ "minipass": "^2.8.6", ++ "minizlib": "^1.2.1", ++ "mkdirp": "^0.5.0", ++ "safe-buffer": "^5.1.2", ++ "yallist": "^3.0.3" ++ } ++ }, ++ "util-deprecate": { ++ "version": "1.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "wide-align": { ++ "version": "1.1.3", ++ "bundled": true, ++ "dev": true, ++ "optional": true, ++ "requires": { ++ "string-width": "^1.0.2 || 2" ++ } ++ }, ++ "wrappy": { ++ "version": "1.0.2", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ }, ++ "yallist": { ++ "version": "3.1.1", ++ "bundled": true, ++ "dev": true, ++ "optional": true ++ } ++ } ++ } ++ } ++ }, ++ "cipher-base": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", ++ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", ++ "dev": true, ++ "requires": { ++ "inherits": "^2.0.1", ++ "safe-buffer": "^5.0.1" ++ } ++ }, ++ "class-utils": { ++ "version": "0.3.6", ++ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", ++ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", ++ "dev": true, ++ "requires": { ++ "arr-union": "^3.1.0", ++ "define-property": "^0.2.5", ++ "isobject": "^3.0.0", ++ "static-extend": "^0.1.1" ++ }, ++ "dependencies": { ++ "define-property": { ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", ++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^0.1.0" ++ } ++ } ++ } ++ }, ++ "cli-cursor": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", ++ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", ++ "dev": true, ++ "requires": { ++ "restore-cursor": "^2.0.0" ++ } ++ }, ++ "cli-spinners": { ++ "version": "1.3.1", ++ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", ++ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", ++ "dev": true ++ }, ++ "cliui": { ++ "version": "5.0.0", ++ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", ++ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", ++ "dev": true, ++ "requires": { ++ "string-width": "^3.1.0", ++ "strip-ansi": "^5.2.0", ++ "wrap-ansi": "^5.1.0" ++ }, ++ "dependencies": { ++ "ansi-regex": { ++ "version": "4.1.0", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", ++ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", ++ "dev": true ++ }, ++ "strip-ansi": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", ++ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", ++ "dev": true, ++ "requires": { ++ "ansi-regex": "^4.1.0" ++ } ++ } ++ } ++ }, ++ "clone": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", ++ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", ++ "dev": true ++ }, ++ "clones": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz", ++ "integrity": "sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==", ++ "dev": true ++ }, ++ "coa": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", ++ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", ++ "dev": true, ++ "requires": { ++ "@types/q": "^1.5.1", ++ "chalk": "^2.4.1", ++ "q": "^1.1.2" ++ } ++ }, ++ "collection-visit": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", ++ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", ++ "dev": true, ++ "requires": { ++ "map-visit": "^1.0.0", ++ "object-visit": "^1.0.0" ++ } ++ }, ++ "color": { ++ "version": "3.1.2", ++ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", ++ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", ++ "dev": true, ++ "requires": { ++ "color-convert": "^1.9.1", ++ "color-string": "^1.5.2" ++ } ++ }, ++ "color-convert": { ++ "version": "1.9.3", ++ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", ++ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", ++ "dev": true, ++ "requires": { ++ "color-name": "1.1.3" ++ } ++ }, ++ "color-name": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", ++ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", ++ "dev": true ++ }, ++ "color-string": { ++ "version": "1.5.3", ++ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", ++ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", ++ "dev": true, ++ "requires": { ++ "color-name": "^1.0.0", ++ "simple-swizzle": "^0.2.2" ++ } ++ }, ++ "combined-stream": { ++ "version": "1.0.8", ++ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", ++ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", ++ "requires": { ++ "delayed-stream": "~1.0.0" ++ } ++ }, ++ "command-exists": { ++ "version": "1.2.9", ++ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", ++ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", ++ "dev": true ++ }, ++ "commander": { ++ "version": "2.20.3", ++ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", ++ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", ++ "dev": true ++ }, ++ "component-emitter": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", ++ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", ++ "dev": true ++ }, ++ "concat-map": { ++ "version": "0.0.1", ++ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", ++ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", ++ "dev": true ++ }, ++ "concat-stream": { ++ "version": "1.6.2", ++ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", ++ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", ++ "dev": true, ++ "requires": { ++ "buffer-from": "^1.0.0", ++ "inherits": "^2.0.3", ++ "readable-stream": "^2.2.2", ++ "typedarray": "^0.0.6" ++ } ++ }, ++ "config-chain": { ++ "version": "1.1.12", ++ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", ++ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", ++ "dev": true, ++ "requires": { ++ "ini": "^1.3.4", ++ "proto-list": "~1.2.1" ++ } ++ }, ++ "console-browserify": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", ++ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", ++ "dev": true ++ }, ++ "constants-browserify": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", ++ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", ++ "dev": true ++ }, ++ "convert-source-map": { ++ "version": "1.7.0", ++ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", ++ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", ++ "dev": true, ++ "requires": { ++ "safe-buffer": "~5.1.1" ++ } ++ }, ++ "copy-descriptor": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", ++ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", ++ "dev": true ++ }, ++ "core-js": { ++ "version": "2.6.11", ++ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", ++ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", ++ "dev": true ++ }, ++ "core-util-is": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", ++ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" ++ }, ++ "cosmiconfig": { ++ "version": "5.2.1", ++ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", ++ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", ++ "dev": true, ++ "requires": { ++ "import-fresh": "^2.0.0", ++ "is-directory": "^0.3.1", ++ "js-yaml": "^3.13.1", ++ "parse-json": "^4.0.0" ++ } ++ }, ++ "create-ecdh": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", ++ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.1.0", ++ "elliptic": "^6.0.0" ++ } ++ }, ++ "create-hash": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", ++ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", ++ "dev": true, ++ "requires": { ++ "cipher-base": "^1.0.1", ++ "inherits": "^2.0.1", ++ "md5.js": "^1.3.4", ++ "ripemd160": "^2.0.1", ++ "sha.js": "^2.4.0" ++ } ++ }, ++ "create-hmac": { ++ "version": "1.1.7", ++ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", ++ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", ++ "dev": true, ++ "requires": { ++ "cipher-base": "^1.0.3", ++ "create-hash": "^1.1.0", ++ "inherits": "^2.0.1", ++ "ripemd160": "^2.0.0", ++ "safe-buffer": "^5.0.1", ++ "sha.js": "^2.4.8" ++ } ++ }, ++ "cross-spawn": { ++ "version": "6.0.5", ++ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", ++ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", ++ "dev": true, ++ "requires": { ++ "nice-try": "^1.0.4", ++ "path-key": "^2.0.1", ++ "semver": "^5.5.0", ++ "shebang-command": "^1.2.0", ++ "which": "^1.2.9" ++ } ++ }, ++ "crypto-browserify": { ++ "version": "3.12.0", ++ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", ++ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", ++ "dev": true, ++ "requires": { ++ "browserify-cipher": "^1.0.0", ++ "browserify-sign": "^4.0.0", ++ "create-ecdh": "^4.0.0", ++ "create-hash": "^1.1.0", ++ "create-hmac": "^1.1.0", ++ "diffie-hellman": "^5.0.0", ++ "inherits": "^2.0.1", ++ "pbkdf2": "^3.0.3", ++ "public-encrypt": "^4.0.0", ++ "randombytes": "^2.0.0", ++ "randomfill": "^1.0.3" ++ } ++ }, ++ "css-color-names": { ++ "version": "0.0.4", ++ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", ++ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", ++ "dev": true ++ }, ++ "css-declaration-sorter": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", ++ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.1", ++ "timsort": "^0.3.0" ++ } ++ }, ++ "css-modules-loader-core": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", ++ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", ++ "dev": true, ++ "requires": { ++ "icss-replace-symbols": "1.1.0", ++ "postcss": "6.0.1", ++ "postcss-modules-extract-imports": "1.1.0", ++ "postcss-modules-local-by-default": "1.2.0", ++ "postcss-modules-scope": "1.1.0", ++ "postcss-modules-values": "1.3.0" ++ }, ++ "dependencies": { ++ "ansi-regex": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", ++ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", ++ "dev": true ++ }, ++ "ansi-styles": { ++ "version": "2.2.1", ++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", ++ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", ++ "dev": true ++ }, ++ "chalk": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", ++ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", ++ "dev": true, ++ "requires": { ++ "ansi-styles": "^2.2.1", ++ "escape-string-regexp": "^1.0.2", ++ "has-ansi": "^2.0.0", ++ "strip-ansi": "^3.0.0", ++ "supports-color": "^2.0.0" ++ }, ++ "dependencies": { ++ "supports-color": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", ++ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", ++ "dev": true ++ } ++ } ++ }, ++ "has-flag": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", ++ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", ++ "dev": true ++ }, ++ "postcss": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", ++ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", ++ "dev": true, ++ "requires": { ++ "chalk": "^1.1.3", ++ "source-map": "^0.5.6", ++ "supports-color": "^3.2.3" ++ } ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ }, ++ "strip-ansi": { ++ "version": "3.0.1", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", ++ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", ++ "dev": true, ++ "requires": { ++ "ansi-regex": "^2.0.0" ++ } ++ }, ++ "supports-color": { ++ "version": "3.2.3", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", ++ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", ++ "dev": true, ++ "requires": { ++ "has-flag": "^1.0.0" ++ } ++ } ++ } ++ }, ++ "css-select": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", ++ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", ++ "dev": true, ++ "requires": { ++ "boolbase": "^1.0.0", ++ "css-what": "^3.2.1", ++ "domutils": "^1.7.0", ++ "nth-check": "^1.0.2" ++ } ++ }, ++ "css-select-base-adapter": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", ++ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", ++ "dev": true ++ }, ++ "css-selector-tokenizer": { ++ "version": "0.7.2", ++ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", ++ "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", ++ "dev": true, ++ "requires": { ++ "cssesc": "^3.0.0", ++ "fastparse": "^1.1.2", ++ "regexpu-core": "^4.6.0" ++ } ++ }, ++ "css-tree": { ++ "version": "1.0.0-alpha.37", ++ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", ++ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", ++ "dev": true, ++ "requires": { ++ "mdn-data": "2.0.4", ++ "source-map": "^0.6.1" ++ } ++ }, ++ "css-what": { ++ "version": "3.2.1", ++ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", ++ "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", ++ "dev": true ++ }, ++ "cssesc": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", ++ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", ++ "dev": true ++ }, ++ "cssnano": { ++ "version": "4.1.10", ++ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", ++ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", ++ "dev": true, ++ "requires": { ++ "cosmiconfig": "^5.0.0", ++ "cssnano-preset-default": "^4.0.7", ++ "is-resolvable": "^1.0.0", ++ "postcss": "^7.0.0" ++ } ++ }, ++ "cssnano-preset-default": { ++ "version": "4.0.7", ++ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", ++ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", ++ "dev": true, ++ "requires": { ++ "css-declaration-sorter": "^4.0.1", ++ "cssnano-util-raw-cache": "^4.0.1", ++ "postcss": "^7.0.0", ++ "postcss-calc": "^7.0.1", ++ "postcss-colormin": "^4.0.3", ++ "postcss-convert-values": "^4.0.1", ++ "postcss-discard-comments": "^4.0.2", ++ "postcss-discard-duplicates": "^4.0.2", ++ "postcss-discard-empty": "^4.0.1", ++ "postcss-discard-overridden": "^4.0.1", ++ "postcss-merge-longhand": "^4.0.11", ++ "postcss-merge-rules": "^4.0.3", ++ "postcss-minify-font-values": "^4.0.2", ++ "postcss-minify-gradients": "^4.0.2", ++ "postcss-minify-params": "^4.0.2", ++ "postcss-minify-selectors": "^4.0.2", ++ "postcss-normalize-charset": "^4.0.1", ++ "postcss-normalize-display-values": "^4.0.2", ++ "postcss-normalize-positions": "^4.0.2", ++ "postcss-normalize-repeat-style": "^4.0.2", ++ "postcss-normalize-string": "^4.0.2", ++ "postcss-normalize-timing-functions": "^4.0.2", ++ "postcss-normalize-unicode": "^4.0.1", ++ "postcss-normalize-url": "^4.0.1", ++ "postcss-normalize-whitespace": "^4.0.2", ++ "postcss-ordered-values": "^4.1.2", ++ "postcss-reduce-initial": "^4.0.3", ++ "postcss-reduce-transforms": "^4.0.2", ++ "postcss-svgo": "^4.0.2", ++ "postcss-unique-selectors": "^4.0.1" ++ } ++ }, ++ "cssnano-util-get-arguments": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", ++ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", ++ "dev": true ++ }, ++ "cssnano-util-get-match": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", ++ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", ++ "dev": true ++ }, ++ "cssnano-util-raw-cache": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", ++ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0" ++ } ++ }, ++ "cssnano-util-same-parent": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", ++ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", ++ "dev": true ++ }, ++ "csso": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", ++ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", ++ "dev": true, ++ "requires": { ++ "css-tree": "1.0.0-alpha.39" ++ }, ++ "dependencies": { ++ "css-tree": { ++ "version": "1.0.0-alpha.39", ++ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", ++ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", ++ "dev": true, ++ "requires": { ++ "mdn-data": "2.0.6", ++ "source-map": "^0.6.1" ++ } ++ }, ++ "mdn-data": { ++ "version": "2.0.6", ++ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", ++ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", ++ "dev": true ++ } ++ } ++ }, ++ "cssom": { ++ "version": "0.3.8", ++ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", ++ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", ++ "dev": true ++ }, ++ "cssstyle": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", ++ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", ++ "dev": true, ++ "requires": { ++ "cssom": "0.3.x" ++ } ++ }, ++ "dashdash": { ++ "version": "1.14.1", ++ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", ++ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", ++ "requires": { ++ "assert-plus": "^1.0.0" ++ } ++ }, ++ "data-urls": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", ++ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", ++ "dev": true, ++ "requires": { ++ "abab": "^2.0.0", ++ "whatwg-mimetype": "^2.2.0", ++ "whatwg-url": "^7.0.0" ++ } ++ }, ++ "deasync": { ++ "version": "0.1.19", ++ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz", ++ "integrity": "sha512-oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg==", ++ "dev": true, ++ "requires": { ++ "bindings": "^1.5.0", ++ "node-addon-api": "^1.7.1" ++ } ++ }, ++ "debug": { ++ "version": "4.1.1", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", ++ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", ++ "dev": true, ++ "requires": { ++ "ms": "^2.1.1" ++ } ++ }, ++ "decamelize": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", ++ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", ++ "dev": true ++ }, ++ "decode-uri-component": { ++ "version": "0.2.0", ++ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", ++ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", ++ "dev": true ++ }, ++ "deep-is": { ++ "version": "0.1.3", ++ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", ++ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", ++ "dev": true ++ }, ++ "defaults": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", ++ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", ++ "dev": true, ++ "requires": { ++ "clone": "^1.0.2" ++ }, ++ "dependencies": { ++ "clone": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", ++ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", ++ "dev": true ++ } ++ } ++ }, ++ "define-properties": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", ++ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", ++ "dev": true, ++ "requires": { ++ "object-keys": "^1.0.12" ++ } ++ }, ++ "define-property": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", ++ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^1.0.2", ++ "isobject": "^3.0.1" ++ }, ++ "dependencies": { ++ "is-accessor-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", ++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-data-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", ++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-descriptor": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", ++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", ++ "dev": true, ++ "requires": { ++ "is-accessor-descriptor": "^1.0.0", ++ "is-data-descriptor": "^1.0.0", ++ "kind-of": "^6.0.2" ++ } ++ } ++ } ++ }, ++ "delayed-stream": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", ++ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" ++ }, ++ "depd": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", ++ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", ++ "dev": true ++ }, ++ "des.js": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", ++ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", ++ "dev": true, ++ "requires": { ++ "inherits": "^2.0.1", ++ "minimalistic-assert": "^1.0.0" ++ } ++ }, ++ "destroy": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", ++ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", ++ "dev": true ++ }, ++ "diffie-hellman": { ++ "version": "5.0.3", ++ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", ++ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.1.0", ++ "miller-rabin": "^4.0.0", ++ "randombytes": "^2.0.0" ++ } ++ }, ++ "dom-serializer": { ++ "version": "0.2.2", ++ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", ++ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", ++ "dev": true, ++ "requires": { ++ "domelementtype": "^2.0.1", ++ "entities": "^2.0.0" ++ }, ++ "dependencies": { ++ "domelementtype": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", ++ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", ++ "dev": true ++ } ++ } ++ }, ++ "domain-browser": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", ++ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", ++ "dev": true ++ }, ++ "domelementtype": { ++ "version": "1.3.1", ++ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", ++ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", ++ "dev": true ++ }, ++ "domexception": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", ++ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", ++ "dev": true, ++ "requires": { ++ "webidl-conversions": "^4.0.2" ++ } ++ }, ++ "domhandler": { ++ "version": "2.4.2", ++ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", ++ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", ++ "dev": true, ++ "requires": { ++ "domelementtype": "1" ++ } ++ }, ++ "domutils": { ++ "version": "1.7.0", ++ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", ++ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", ++ "dev": true, ++ "requires": { ++ "dom-serializer": "0", ++ "domelementtype": "1" ++ } ++ }, ++ "dot-prop": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", ++ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", ++ "dev": true, ++ "requires": { ++ "is-obj": "^2.0.0" ++ } ++ }, ++ "dotenv": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", ++ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", ++ "dev": true ++ }, ++ "dotenv-expand": { ++ "version": "4.2.0", ++ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", ++ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", ++ "dev": true ++ }, ++ "duplexer2": { ++ "version": "0.1.4", ++ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", ++ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", ++ "dev": true, ++ "requires": { ++ "readable-stream": "^2.0.2" ++ } ++ }, ++ "ecc-jsbn": { ++ "version": "0.1.2", ++ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", ++ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", ++ "requires": { ++ "jsbn": "~0.1.0", ++ "safer-buffer": "^2.1.0" ++ } ++ }, ++ "editorconfig": { ++ "version": "0.15.3", ++ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", ++ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", ++ "dev": true, ++ "requires": { ++ "commander": "^2.19.0", ++ "lru-cache": "^4.1.5", ++ "semver": "^5.6.0", ++ "sigmund": "^1.0.1" ++ } ++ }, ++ "ee-first": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", ++ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", ++ "dev": true ++ }, ++ "electron-to-chromium": { ++ "version": "1.3.418", ++ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz", ++ "integrity": "sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==", ++ "dev": true ++ }, ++ "elliptic": { ++ "version": "6.5.2", ++ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", ++ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.4.0", ++ "brorand": "^1.0.1", ++ "hash.js": "^1.0.0", ++ "hmac-drbg": "^1.0.0", ++ "inherits": "^2.0.1", ++ "minimalistic-assert": "^1.0.0", ++ "minimalistic-crypto-utils": "^1.0.0" ++ } ++ }, ++ "elm-hot": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz", ++ "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==", ++ "dev": true ++ }, ++ "emoji-regex": { ++ "version": "7.0.3", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", ++ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", ++ "dev": true ++ }, ++ "encodeurl": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", ++ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", ++ "dev": true ++ }, ++ "entities": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", ++ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", ++ "dev": true ++ }, ++ "error-ex": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", ++ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", ++ "dev": true, ++ "requires": { ++ "is-arrayish": "^0.2.1" ++ } ++ }, ++ "es-abstract": { ++ "version": "1.17.5", ++ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", ++ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", ++ "dev": true, ++ "requires": { ++ "es-to-primitive": "^1.2.1", ++ "function-bind": "^1.1.1", ++ "has": "^1.0.3", ++ "has-symbols": "^1.0.1", ++ "is-callable": "^1.1.5", ++ "is-regex": "^1.0.5", ++ "object-inspect": "^1.7.0", ++ "object-keys": "^1.1.1", ++ "object.assign": "^4.1.0", ++ "string.prototype.trimleft": "^2.1.1", ++ "string.prototype.trimright": "^2.1.1" ++ } ++ }, ++ "es-to-primitive": { ++ "version": "1.2.1", ++ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", ++ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", ++ "dev": true, ++ "requires": { ++ "is-callable": "^1.1.4", ++ "is-date-object": "^1.0.1", ++ "is-symbol": "^1.0.2" ++ } ++ }, ++ "escape-html": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", ++ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", ++ "dev": true ++ }, ++ "escape-string-regexp": { ++ "version": "1.0.5", ++ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", ++ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", ++ "dev": true ++ }, ++ "escodegen": { ++ "version": "1.9.1", ++ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", ++ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", ++ "dev": true, ++ "requires": { ++ "esprima": "^3.1.3", ++ "estraverse": "^4.2.0", ++ "esutils": "^2.0.2", ++ "optionator": "^0.8.1", ++ "source-map": "~0.6.1" ++ }, ++ "dependencies": { ++ "esprima": { ++ "version": "3.1.3", ++ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", ++ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", ++ "dev": true ++ } ++ } ++ }, ++ "esprima": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", ++ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", ++ "dev": true ++ }, ++ "estraverse": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", ++ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", ++ "dev": true ++ }, ++ "esutils": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", ++ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", ++ "dev": true ++ }, ++ "etag": { ++ "version": "1.8.1", ++ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", ++ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", ++ "dev": true ++ }, ++ "events": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", ++ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", ++ "dev": true ++ }, ++ "evp_bytestokey": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", ++ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", ++ "dev": true, ++ "requires": { ++ "md5.js": "^1.3.4", ++ "safe-buffer": "^5.1.1" ++ } ++ }, ++ "expand-brackets": { ++ "version": "2.1.4", ++ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", ++ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", ++ "dev": true, ++ "requires": { ++ "debug": "^2.3.3", ++ "define-property": "^0.2.5", ++ "extend-shallow": "^2.0.1", ++ "posix-character-classes": "^0.1.0", ++ "regex-not": "^1.0.0", ++ "snapdragon": "^0.8.1", ++ "to-regex": "^3.0.1" ++ }, ++ "dependencies": { ++ "debug": { ++ "version": "2.6.9", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", ++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", ++ "dev": true, ++ "requires": { ++ "ms": "2.0.0" ++ } ++ }, ++ "define-property": { ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", ++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^0.1.0" ++ } ++ }, ++ "extend-shallow": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", ++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", ++ "dev": true, ++ "requires": { ++ "is-extendable": "^0.1.0" ++ } ++ }, ++ "ms": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", ++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", ++ "dev": true ++ } ++ } ++ }, ++ "extend": { ++ "version": "3.0.2", ++ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", ++ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" ++ }, ++ "extend-shallow": { ++ "version": "3.0.2", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", ++ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", ++ "dev": true, ++ "requires": { ++ "assign-symbols": "^1.0.0", ++ "is-extendable": "^1.0.1" ++ }, ++ "dependencies": { ++ "is-extendable": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", ++ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", ++ "dev": true, ++ "requires": { ++ "is-plain-object": "^2.0.4" ++ } ++ } ++ } ++ }, ++ "extglob": { ++ "version": "2.0.4", ++ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", ++ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", ++ "dev": true, ++ "requires": { ++ "array-unique": "^0.3.2", ++ "define-property": "^1.0.0", ++ "expand-brackets": "^2.1.4", ++ "extend-shallow": "^2.0.1", ++ "fragment-cache": "^0.2.1", ++ "regex-not": "^1.0.0", ++ "snapdragon": "^0.8.1", ++ "to-regex": "^3.0.1" ++ }, ++ "dependencies": { ++ "define-property": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", ++ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^1.0.0" ++ } ++ }, ++ "extend-shallow": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", ++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", ++ "dev": true, ++ "requires": { ++ "is-extendable": "^0.1.0" ++ } ++ }, ++ "is-accessor-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", ++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-data-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", ++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-descriptor": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", ++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", ++ "dev": true, ++ "requires": { ++ "is-accessor-descriptor": "^1.0.0", ++ "is-data-descriptor": "^1.0.0", ++ "kind-of": "^6.0.2" ++ } ++ } ++ } ++ }, ++ "extsprintf": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", ++ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" ++ }, ++ "falafel": { ++ "version": "2.2.4", ++ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", ++ "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", ++ "dev": true, ++ "requires": { ++ "acorn": "^7.1.1", ++ "foreach": "^2.0.5", ++ "isarray": "^2.0.1", ++ "object-keys": "^1.0.6" ++ }, ++ "dependencies": { ++ "isarray": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", ++ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", ++ "dev": true ++ } ++ } ++ }, ++ "fast-deep-equal": { ++ "version": "3.1.1", ++ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", ++ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" ++ }, ++ "fast-glob": { ++ "version": "2.2.7", ++ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", ++ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", ++ "dev": true, ++ "requires": { ++ "@mrmlnc/readdir-enhanced": "^2.2.1", ++ "@nodelib/fs.stat": "^1.1.2", ++ "glob-parent": "^3.1.0", ++ "is-glob": "^4.0.0", ++ "merge2": "^1.2.3", ++ "micromatch": "^3.1.10" ++ } ++ }, ++ "fast-json-stable-stringify": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", ++ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" ++ }, ++ "fast-levenshtein": { ++ "version": "2.0.6", ++ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", ++ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", ++ "dev": true ++ }, ++ "fastparse": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", ++ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", ++ "dev": true ++ }, ++ "file-uri-to-path": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", ++ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", ++ "dev": true ++ }, ++ "filesize": { ++ "version": "3.6.1", ++ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", ++ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", ++ "dev": true ++ }, ++ "fill-range": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", ++ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", ++ "dev": true, ++ "requires": { ++ "extend-shallow": "^2.0.1", ++ "is-number": "^3.0.0", ++ "repeat-string": "^1.6.1", ++ "to-regex-range": "^2.1.0" ++ }, ++ "dependencies": { ++ "extend-shallow": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", ++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", ++ "dev": true, ++ "requires": { ++ "is-extendable": "^0.1.0" ++ } ++ } ++ } ++ }, ++ "find-elm-dependencies": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz", ++ "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==", ++ "dev": true, ++ "requires": { ++ "firstline": "1.2.0", ++ "lodash": "4.17.15" ++ } ++ }, ++ "find-up": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", ++ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", ++ "dev": true, ++ "requires": { ++ "locate-path": "^2.0.0" ++ } ++ }, ++ "firstline": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz", ++ "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=", ++ "dev": true ++ }, ++ "for-in": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", ++ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", ++ "dev": true ++ }, ++ "foreach": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", ++ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", ++ "dev": true ++ }, ++ "forever-agent": { ++ "version": "0.6.1", ++ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", ++ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" ++ }, ++ "form-data": { ++ "version": "2.3.3", ++ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", ++ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", ++ "requires": { ++ "asynckit": "^0.4.0", ++ "combined-stream": "^1.0.6", ++ "mime-types": "^2.1.12" ++ } ++ }, ++ "fragment-cache": { ++ "version": "0.2.1", ++ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", ++ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", ++ "dev": true, ++ "requires": { ++ "map-cache": "^0.2.2" ++ } ++ }, ++ "fresh": { ++ "version": "0.5.2", ++ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", ++ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", ++ "dev": true ++ }, ++ "fs.realpath": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", ++ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", ++ "dev": true ++ }, ++ "function-bind": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", ++ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", ++ "dev": true ++ }, ++ "get-caller-file": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", ++ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", ++ "dev": true ++ }, ++ "get-port": { ++ "version": "3.2.0", ++ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", ++ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", ++ "dev": true ++ }, ++ "get-value": { ++ "version": "2.0.6", ++ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", ++ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", ++ "dev": true ++ }, ++ "getpass": { ++ "version": "0.1.7", ++ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", ++ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", ++ "requires": { ++ "assert-plus": "^1.0.0" ++ } ++ }, ++ "glob": { ++ "version": "7.1.4", ++ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", ++ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", ++ "dev": true, ++ "requires": { ++ "fs.realpath": "^1.0.0", ++ "inflight": "^1.0.4", ++ "inherits": "2", ++ "minimatch": "^3.0.4", ++ "once": "^1.3.0", ++ "path-is-absolute": "^1.0.0" ++ } ++ }, ++ "glob-parent": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", ++ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", ++ "dev": true, ++ "requires": { ++ "is-glob": "^3.1.0", ++ "path-dirname": "^1.0.0" ++ }, ++ "dependencies": { ++ "is-glob": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", ++ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", ++ "dev": true, ++ "requires": { ++ "is-extglob": "^2.1.0" ++ } ++ } ++ } ++ }, ++ "glob-to-regexp": { ++ "version": "0.3.0", ++ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", ++ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", ++ "dev": true ++ }, ++ "globals": { ++ "version": "11.12.0", ++ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", ++ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", ++ "dev": true ++ }, ++ "graceful-fs": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", ++ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", ++ "dev": true ++ }, ++ "grapheme-breaker": { ++ "version": "0.3.2", ++ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", ++ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=", ++ "dev": true, ++ "requires": { ++ "brfs": "^1.2.0", ++ "unicode-trie": "^0.3.1" ++ } ++ }, ++ "har-schema": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", ++ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" ++ }, ++ "har-validator": { ++ "version": "5.1.3", ++ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", ++ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", ++ "requires": { ++ "ajv": "^6.5.5", ++ "har-schema": "^2.0.0" ++ } ++ }, ++ "has": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", ++ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", ++ "dev": true, ++ "requires": { ++ "function-bind": "^1.1.1" ++ } ++ }, ++ "has-ansi": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", ++ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", ++ "dev": true, ++ "requires": { ++ "ansi-regex": "^2.0.0" ++ }, ++ "dependencies": { ++ "ansi-regex": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", ++ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", ++ "dev": true ++ } ++ } ++ }, ++ "has-flag": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", ++ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", ++ "dev": true ++ }, ++ "has-symbols": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", ++ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", ++ "dev": true ++ }, ++ "has-value": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", ++ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", ++ "dev": true, ++ "requires": { ++ "get-value": "^2.0.6", ++ "has-values": "^1.0.0", ++ "isobject": "^3.0.0" ++ } ++ }, ++ "has-values": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", ++ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", ++ "dev": true, ++ "requires": { ++ "is-number": "^3.0.0", ++ "kind-of": "^4.0.0" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", ++ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "hash-base": { ++ "version": "3.0.4", ++ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", ++ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", ++ "dev": true, ++ "requires": { ++ "inherits": "^2.0.1", ++ "safe-buffer": "^5.0.1" ++ } ++ }, ++ "hash.js": { ++ "version": "1.1.7", ++ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", ++ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", ++ "dev": true, ++ "requires": { ++ "inherits": "^2.0.3", ++ "minimalistic-assert": "^1.0.1" ++ } ++ }, ++ "hex-color-regex": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", ++ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", ++ "dev": true ++ }, ++ "hmac-drbg": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", ++ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", ++ "dev": true, ++ "requires": { ++ "hash.js": "^1.0.3", ++ "minimalistic-assert": "^1.0.0", ++ "minimalistic-crypto-utils": "^1.0.1" ++ } ++ }, ++ "hsl-regex": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", ++ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", ++ "dev": true ++ }, ++ "hsla-regex": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", ++ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", ++ "dev": true ++ }, ++ "html-comment-regex": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", ++ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", ++ "dev": true ++ }, ++ "html-encoding-sniffer": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", ++ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", ++ "dev": true, ++ "requires": { ++ "whatwg-encoding": "^1.0.1" ++ } ++ }, ++ "html-tags": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", ++ "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=", ++ "dev": true ++ }, ++ "htmlnano": { ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz", ++ "integrity": "sha512-X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA==", ++ "dev": true, ++ "requires": { ++ "cssnano": "^4.1.10", ++ "normalize-html-whitespace": "^1.0.0", ++ "posthtml": "^0.12.0", ++ "posthtml-render": "^1.1.5", ++ "purgecss": "^1.4.0", ++ "svgo": "^1.3.2", ++ "terser": "^4.3.9", ++ "uncss": "^0.17.2" ++ }, ++ "dependencies": { ++ "posthtml": { ++ "version": "0.12.3", ++ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz", ++ "integrity": "sha512-Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==", ++ "dev": true, ++ "requires": { ++ "posthtml-parser": "^0.4.2", ++ "posthtml-render": "^1.2.2" ++ } ++ }, ++ "terser": { ++ "version": "4.6.12", ++ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz", ++ "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==", ++ "dev": true, ++ "requires": { ++ "commander": "^2.20.0", ++ "source-map": "~0.6.1", ++ "source-map-support": "~0.5.12" ++ } ++ } ++ } ++ }, ++ "htmlparser2": { ++ "version": "3.10.1", ++ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", ++ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", ++ "dev": true, ++ "requires": { ++ "domelementtype": "^1.3.1", ++ "domhandler": "^2.3.0", ++ "domutils": "^1.5.1", ++ "entities": "^1.1.1", ++ "inherits": "^2.0.1", ++ "readable-stream": "^3.1.1" ++ }, ++ "dependencies": { ++ "entities": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", ++ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", ++ "dev": true ++ }, ++ "readable-stream": { ++ "version": "3.6.0", ++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", ++ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", ++ "dev": true, ++ "requires": { ++ "inherits": "^2.0.3", ++ "string_decoder": "^1.1.1", ++ "util-deprecate": "^1.0.1" ++ } ++ } ++ } ++ }, ++ "http-errors": { ++ "version": "1.7.3", ++ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", ++ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", ++ "dev": true, ++ "requires": { ++ "depd": "~1.1.2", ++ "inherits": "2.0.4", ++ "setprototypeof": "1.1.1", ++ "statuses": ">= 1.5.0 < 2", ++ "toidentifier": "1.0.0" ++ } ++ }, ++ "http-signature": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", ++ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", ++ "requires": { ++ "assert-plus": "^1.0.0", ++ "jsprim": "^1.2.2", ++ "sshpk": "^1.7.0" ++ } ++ }, ++ "https-browserify": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", ++ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", ++ "dev": true ++ }, ++ "iconv-lite": { ++ "version": "0.4.24", ++ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", ++ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", ++ "dev": true, ++ "requires": { ++ "safer-buffer": ">= 2.1.2 < 3" ++ } ++ }, ++ "icss-replace-symbols": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", ++ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", ++ "dev": true ++ }, ++ "ieee754": { ++ "version": "1.1.13", ++ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", ++ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", ++ "dev": true ++ }, ++ "import-fresh": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", ++ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", ++ "dev": true, ++ "requires": { ++ "caller-path": "^2.0.0", ++ "resolve-from": "^3.0.0" ++ } ++ }, ++ "indexes-of": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", ++ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", ++ "dev": true ++ }, ++ "inflight": { ++ "version": "1.0.6", ++ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", ++ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", ++ "dev": true, ++ "requires": { ++ "once": "^1.3.0", ++ "wrappy": "1" ++ } ++ }, ++ "inherits": { ++ "version": "2.0.4", ++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", ++ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", ++ "dev": true ++ }, ++ "ini": { ++ "version": "1.3.5", ++ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", ++ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", ++ "dev": true ++ }, ++ "invariant": { ++ "version": "2.2.4", ++ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", ++ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", ++ "dev": true, ++ "requires": { ++ "loose-envify": "^1.0.0" ++ } ++ }, ++ "is-absolute-url": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", ++ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", ++ "dev": true ++ }, ++ "is-accessor-descriptor": { ++ "version": "0.1.6", ++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", ++ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", ++ "dev": true, ++ "requires": { ++ "kind-of": "^3.0.2" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", ++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "is-arrayish": { ++ "version": "0.2.1", ++ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", ++ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", ++ "dev": true ++ }, ++ "is-binary-path": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", ++ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", ++ "dev": true, ++ "requires": { ++ "binary-extensions": "^1.0.0" ++ } ++ }, ++ "is-buffer": { ++ "version": "1.1.6", ++ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", ++ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", ++ "dev": true ++ }, ++ "is-callable": { ++ "version": "1.1.5", ++ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", ++ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", ++ "dev": true ++ }, ++ "is-color-stop": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", ++ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", ++ "dev": true, ++ "requires": { ++ "css-color-names": "^0.0.4", ++ "hex-color-regex": "^1.1.0", ++ "hsl-regex": "^1.0.0", ++ "hsla-regex": "^1.0.0", ++ "rgb-regex": "^1.0.1", ++ "rgba-regex": "^1.0.0" ++ } ++ }, ++ "is-data-descriptor": { ++ "version": "0.1.4", ++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", ++ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", ++ "dev": true, ++ "requires": { ++ "kind-of": "^3.0.2" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", ++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "is-date-object": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", ++ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", ++ "dev": true ++ }, ++ "is-descriptor": { ++ "version": "0.1.6", ++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", ++ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", ++ "dev": true, ++ "requires": { ++ "is-accessor-descriptor": "^0.1.6", ++ "is-data-descriptor": "^0.1.4", ++ "kind-of": "^5.0.0" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "5.1.0", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", ++ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", ++ "dev": true ++ } ++ } ++ }, ++ "is-directory": { ++ "version": "0.3.1", ++ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", ++ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", ++ "dev": true ++ }, ++ "is-extendable": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", ++ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", ++ "dev": true ++ }, ++ "is-extglob": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", ++ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", ++ "dev": true ++ }, ++ "is-fullwidth-code-point": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", ++ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", ++ "dev": true ++ }, ++ "is-glob": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", ++ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", ++ "dev": true, ++ "requires": { ++ "is-extglob": "^2.1.1" ++ } ++ }, ++ "is-html": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", ++ "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=", ++ "dev": true, ++ "requires": { ++ "html-tags": "^1.0.0" ++ } ++ }, ++ "is-number": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", ++ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", ++ "dev": true, ++ "requires": { ++ "kind-of": "^3.0.2" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", ++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "is-obj": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", ++ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", ++ "dev": true ++ }, ++ "is-plain-object": { ++ "version": "2.0.4", ++ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", ++ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", ++ "dev": true, ++ "requires": { ++ "isobject": "^3.0.1" ++ } ++ }, ++ "is-regex": { ++ "version": "1.0.5", ++ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", ++ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", ++ "dev": true, ++ "requires": { ++ "has": "^1.0.3" ++ } ++ }, ++ "is-resolvable": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", ++ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", ++ "dev": true ++ }, ++ "is-svg": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", ++ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", ++ "dev": true, ++ "requires": { ++ "html-comment-regex": "^1.1.0" ++ } ++ }, ++ "is-symbol": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", ++ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", ++ "dev": true, ++ "requires": { ++ "has-symbols": "^1.0.1" ++ } ++ }, ++ "is-typedarray": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", ++ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" ++ }, ++ "is-url": { ++ "version": "1.2.4", ++ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", ++ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", ++ "dev": true ++ }, ++ "is-windows": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", ++ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", ++ "dev": true ++ }, ++ "is-wsl": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", ++ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", ++ "dev": true ++ }, ++ "isarray": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", ++ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", ++ "dev": true ++ }, ++ "isexe": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", ++ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", ++ "dev": true ++ }, ++ "isobject": { ++ "version": "3.0.1", ++ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", ++ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", ++ "dev": true ++ }, ++ "isstream": { ++ "version": "0.1.2", ++ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", ++ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" ++ }, ++ "js-beautify": { ++ "version": "1.11.0", ++ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", ++ "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==", ++ "dev": true, ++ "requires": { ++ "config-chain": "^1.1.12", ++ "editorconfig": "^0.15.3", ++ "glob": "^7.1.3", ++ "mkdirp": "~1.0.3", ++ "nopt": "^4.0.3" ++ }, ++ "dependencies": { ++ "mkdirp": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", ++ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", ++ "dev": true ++ } ++ } ++ }, ++ "js-levenshtein": { ++ "version": "1.1.6", ++ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", ++ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", ++ "dev": true ++ }, ++ "js-tokens": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", ++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", ++ "dev": true ++ }, ++ "js-yaml": { ++ "version": "3.13.1", ++ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", ++ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", ++ "dev": true, ++ "requires": { ++ "argparse": "^1.0.7", ++ "esprima": "^4.0.0" ++ } ++ }, ++ "jsbn": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", ++ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" ++ }, ++ "jsdom": { ++ "version": "14.1.0", ++ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", ++ "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", ++ "dev": true, ++ "requires": { ++ "abab": "^2.0.0", ++ "acorn": "^6.0.4", ++ "acorn-globals": "^4.3.0", ++ "array-equal": "^1.0.0", ++ "cssom": "^0.3.4", ++ "cssstyle": "^1.1.1", ++ "data-urls": "^1.1.0", ++ "domexception": "^1.0.1", ++ "escodegen": "^1.11.0", ++ "html-encoding-sniffer": "^1.0.2", ++ "nwsapi": "^2.1.3", ++ "parse5": "5.1.0", ++ "pn": "^1.1.0", ++ "request": "^2.88.0", ++ "request-promise-native": "^1.0.5", ++ "saxes": "^3.1.9", ++ "symbol-tree": "^3.2.2", ++ "tough-cookie": "^2.5.0", ++ "w3c-hr-time": "^1.0.1", ++ "w3c-xmlserializer": "^1.1.2", ++ "webidl-conversions": "^4.0.2", ++ "whatwg-encoding": "^1.0.5", ++ "whatwg-mimetype": "^2.3.0", ++ "whatwg-url": "^7.0.0", ++ "ws": "^6.1.2", ++ "xml-name-validator": "^3.0.0" ++ }, ++ "dependencies": { ++ "acorn": { ++ "version": "6.4.1", ++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", ++ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", ++ "dev": true ++ }, ++ "escodegen": { ++ "version": "1.14.1", ++ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", ++ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", ++ "dev": true, ++ "requires": { ++ "esprima": "^4.0.1", ++ "estraverse": "^4.2.0", ++ "esutils": "^2.0.2", ++ "optionator": "^0.8.1", ++ "source-map": "~0.6.1" ++ } ++ }, ++ "ws": { ++ "version": "6.2.1", ++ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", ++ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", ++ "dev": true, ++ "requires": { ++ "async-limiter": "~1.0.0" ++ } ++ } ++ } ++ }, ++ "jsesc": { ++ "version": "2.5.2", ++ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", ++ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", ++ "dev": true ++ }, ++ "json-parse-better-errors": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", ++ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", ++ "dev": true ++ }, ++ "json-schema": { ++ "version": "0.2.3", ++ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", ++ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" ++ }, ++ "json-schema-traverse": { ++ "version": "0.4.1", ++ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", ++ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" ++ }, ++ "json-stringify-safe": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", ++ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" ++ }, ++ "json5": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", ++ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", ++ "dev": true, ++ "requires": { ++ "minimist": "^1.2.0" ++ } ++ }, ++ "jsprim": { ++ "version": "1.4.1", ++ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", ++ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", ++ "requires": { ++ "assert-plus": "1.0.0", ++ "extsprintf": "1.3.0", ++ "json-schema": "0.2.3", ++ "verror": "1.10.0" ++ } ++ }, ++ "kind-of": { ++ "version": "6.0.3", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", ++ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", ++ "dev": true ++ }, ++ "levn": { ++ "version": "0.3.0", ++ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", ++ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", ++ "dev": true, ++ "requires": { ++ "prelude-ls": "~1.1.2", ++ "type-check": "~0.3.2" ++ } ++ }, ++ "locate-path": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", ++ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", ++ "dev": true, ++ "requires": { ++ "p-locate": "^2.0.0", ++ "path-exists": "^3.0.0" ++ } ++ }, ++ "lodash": { ++ "version": "4.17.15", ++ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", ++ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", ++ "dev": true ++ }, ++ "lodash.clone": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", ++ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", ++ "dev": true ++ }, ++ "lodash.memoize": { ++ "version": "4.1.2", ++ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", ++ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", ++ "dev": true ++ }, ++ "lodash.sortby": { ++ "version": "4.7.0", ++ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", ++ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", ++ "dev": true ++ }, ++ "lodash.uniq": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", ++ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", ++ "dev": true ++ }, ++ "log-symbols": { ++ "version": "2.2.0", ++ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", ++ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.0.1" ++ } ++ }, ++ "loose-envify": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", ++ "dev": true, ++ "requires": { ++ "js-tokens": "^3.0.0 || ^4.0.0" ++ } ++ }, ++ "lru-cache": { ++ "version": "4.1.5", ++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", ++ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", ++ "dev": true, ++ "requires": { ++ "pseudomap": "^1.0.2", ++ "yallist": "^2.1.2" ++ } ++ }, ++ "magic-string": { ++ "version": "0.22.5", ++ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", ++ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", ++ "dev": true, ++ "requires": { ++ "vlq": "^0.2.2" ++ } ++ }, ++ "map-cache": { ++ "version": "0.2.2", ++ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", ++ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", ++ "dev": true ++ }, ++ "map-visit": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", ++ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", ++ "dev": true, ++ "requires": { ++ "object-visit": "^1.0.0" ++ } ++ }, ++ "md5.js": { ++ "version": "1.3.5", ++ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", ++ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", ++ "dev": true, ++ "requires": { ++ "hash-base": "^3.0.0", ++ "inherits": "^2.0.1", ++ "safe-buffer": "^5.1.2" ++ } ++ }, ++ "mdn-data": { ++ "version": "2.0.4", ++ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", ++ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", ++ "dev": true ++ }, ++ "merge-source-map": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", ++ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", ++ "dev": true, ++ "requires": { ++ "source-map": "^0.5.6" ++ }, ++ "dependencies": { ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "merge2": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", ++ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", ++ "dev": true ++ }, ++ "micromatch": { ++ "version": "3.1.10", ++ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", ++ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", ++ "dev": true, ++ "requires": { ++ "arr-diff": "^4.0.0", ++ "array-unique": "^0.3.2", ++ "braces": "^2.3.1", ++ "define-property": "^2.0.2", ++ "extend-shallow": "^3.0.2", ++ "extglob": "^2.0.4", ++ "fragment-cache": "^0.2.1", ++ "kind-of": "^6.0.2", ++ "nanomatch": "^1.2.9", ++ "object.pick": "^1.3.0", ++ "regex-not": "^1.0.0", ++ "snapdragon": "^0.8.1", ++ "to-regex": "^3.0.2" ++ } ++ }, ++ "miller-rabin": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", ++ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.0.0", ++ "brorand": "^1.0.1" ++ } ++ }, ++ "mime": { ++ "version": "1.6.0", ++ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", ++ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", ++ "dev": true ++ }, ++ "mime-db": { ++ "version": "1.44.0", ++ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", ++ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" ++ }, ++ "mime-types": { ++ "version": "2.1.27", ++ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", ++ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", ++ "requires": { ++ "mime-db": "1.44.0" ++ } ++ }, ++ "mimic-fn": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", ++ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", ++ "dev": true ++ }, ++ "minimalistic-assert": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", ++ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", ++ "dev": true ++ }, ++ "minimalistic-crypto-utils": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", ++ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", ++ "dev": true ++ }, ++ "minimatch": { ++ "version": "3.0.4", ++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", ++ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", ++ "dev": true, ++ "requires": { ++ "brace-expansion": "^1.1.7" ++ } ++ }, ++ "minimist": { ++ "version": "1.2.5", ++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", ++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", ++ "dev": true ++ }, ++ "mixin-deep": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", ++ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", ++ "dev": true, ++ "requires": { ++ "for-in": "^1.0.2", ++ "is-extendable": "^1.0.1" ++ }, ++ "dependencies": { ++ "is-extendable": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", ++ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", ++ "dev": true, ++ "requires": { ++ "is-plain-object": "^2.0.4" ++ } ++ } ++ } ++ }, ++ "mkdirp": { ++ "version": "0.5.5", ++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", ++ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", ++ "dev": true, ++ "requires": { ++ "minimist": "^1.2.5" ++ } ++ }, ++ "ms": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", ++ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", ++ "dev": true ++ }, ++ "nan": { ++ "version": "2.14.1", ++ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", ++ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", ++ "dev": true, ++ "optional": true ++ }, ++ "nanomatch": { ++ "version": "1.2.13", ++ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", ++ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", ++ "dev": true, ++ "requires": { ++ "arr-diff": "^4.0.0", ++ "array-unique": "^0.3.2", ++ "define-property": "^2.0.2", ++ "extend-shallow": "^3.0.2", ++ "fragment-cache": "^0.2.1", ++ "is-windows": "^1.0.2", ++ "kind-of": "^6.0.2", ++ "object.pick": "^1.3.0", ++ "regex-not": "^1.0.0", ++ "snapdragon": "^0.8.1", ++ "to-regex": "^3.0.1" ++ } ++ }, ++ "nice-try": { ++ "version": "1.0.5", ++ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", ++ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", ++ "dev": true ++ }, ++ "node-addon-api": { ++ "version": "1.7.1", ++ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz", ++ "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==", ++ "dev": true ++ }, ++ "node-elm-compiler": { ++ "version": "5.0.4", ++ "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz", ++ "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==", ++ "dev": true, ++ "requires": { ++ "cross-spawn": "6.0.5", ++ "find-elm-dependencies": "2.0.2", ++ "lodash": "4.17.15", ++ "temp": "^0.9.0" ++ } ++ }, ++ "node-forge": { ++ "version": "0.7.6", ++ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", ++ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==", ++ "dev": true ++ }, ++ "node-libs-browser": { ++ "version": "2.2.1", ++ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", ++ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", ++ "dev": true, ++ "requires": { ++ "assert": "^1.1.1", ++ "browserify-zlib": "^0.2.0", ++ "buffer": "^4.3.0", ++ "console-browserify": "^1.1.0", ++ "constants-browserify": "^1.0.0", ++ "crypto-browserify": "^3.11.0", ++ "domain-browser": "^1.1.1", ++ "events": "^3.0.0", ++ "https-browserify": "^1.0.0", ++ "os-browserify": "^0.3.0", ++ "path-browserify": "0.0.1", ++ "process": "^0.11.10", ++ "punycode": "^1.2.4", ++ "querystring-es3": "^0.2.0", ++ "readable-stream": "^2.3.3", ++ "stream-browserify": "^2.0.1", ++ "stream-http": "^2.7.2", ++ "string_decoder": "^1.0.0", ++ "timers-browserify": "^2.0.4", ++ "tty-browserify": "0.0.0", ++ "url": "^0.11.0", ++ "util": "^0.11.0", ++ "vm-browserify": "^1.0.1" ++ }, ++ "dependencies": { ++ "punycode": { ++ "version": "1.4.1", ++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", ++ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", ++ "dev": true ++ } ++ } ++ }, ++ "node-releases": { ++ "version": "1.1.53", ++ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", ++ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", ++ "dev": true ++ }, ++ "nopt": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", ++ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", ++ "dev": true, ++ "requires": { ++ "abbrev": "1", ++ "osenv": "^0.1.4" ++ } ++ }, ++ "normalize-html-whitespace": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", ++ "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==", ++ "dev": true ++ }, ++ "normalize-path": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", ++ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", ++ "dev": true ++ }, ++ "normalize-url": { ++ "version": "3.3.0", ++ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", ++ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", ++ "dev": true ++ }, ++ "nth-check": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", ++ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", ++ "dev": true, ++ "requires": { ++ "boolbase": "~1.0.0" ++ } ++ }, ++ "nwsapi": { ++ "version": "2.2.0", ++ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", ++ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", ++ "dev": true ++ }, ++ "oauth-sign": { ++ "version": "0.9.0", ++ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", ++ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" ++ }, ++ "object-assign": { ++ "version": "4.1.1", ++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", ++ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", ++ "dev": true ++ }, ++ "object-copy": { ++ "version": "0.1.0", ++ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", ++ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", ++ "dev": true, ++ "requires": { ++ "copy-descriptor": "^0.1.0", ++ "define-property": "^0.2.5", ++ "kind-of": "^3.0.3" ++ }, ++ "dependencies": { ++ "define-property": { ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", ++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^0.1.0" ++ } ++ }, ++ "kind-of": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", ++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "object-inspect": { ++ "version": "1.7.0", ++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", ++ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", ++ "dev": true ++ }, ++ "object-keys": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", ++ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", ++ "dev": true ++ }, ++ "object-visit": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", ++ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", ++ "dev": true, ++ "requires": { ++ "isobject": "^3.0.0" ++ } ++ }, ++ "object.assign": { ++ "version": "4.1.0", ++ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", ++ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.2", ++ "function-bind": "^1.1.1", ++ "has-symbols": "^1.0.0", ++ "object-keys": "^1.0.11" ++ } ++ }, ++ "object.getownpropertydescriptors": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", ++ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.0-next.1" ++ } ++ }, ++ "object.pick": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", ++ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", ++ "dev": true, ++ "requires": { ++ "isobject": "^3.0.1" ++ } ++ }, ++ "object.values": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", ++ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.0-next.1", ++ "function-bind": "^1.1.1", ++ "has": "^1.0.3" ++ } ++ }, ++ "on-finished": { ++ "version": "2.3.0", ++ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", ++ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", ++ "dev": true, ++ "requires": { ++ "ee-first": "1.1.1" ++ } ++ }, ++ "once": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", ++ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", ++ "dev": true, ++ "requires": { ++ "wrappy": "1" ++ } ++ }, ++ "onetime": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", ++ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", ++ "dev": true, ++ "requires": { ++ "mimic-fn": "^1.0.0" ++ } ++ }, ++ "opn": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", ++ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", ++ "dev": true, ++ "requires": { ++ "is-wsl": "^1.1.0" ++ } ++ }, ++ "optionator": { ++ "version": "0.8.3", ++ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", ++ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", ++ "dev": true, ++ "requires": { ++ "deep-is": "~0.1.3", ++ "fast-levenshtein": "~2.0.6", ++ "levn": "~0.3.0", ++ "prelude-ls": "~1.1.2", ++ "type-check": "~0.3.2", ++ "word-wrap": "~1.2.3" ++ } ++ }, ++ "ora": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", ++ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.3.1", ++ "cli-cursor": "^2.1.0", ++ "cli-spinners": "^1.1.0", ++ "log-symbols": "^2.2.0", ++ "strip-ansi": "^4.0.0", ++ "wcwidth": "^1.0.1" ++ } ++ }, ++ "os-browserify": { ++ "version": "0.3.0", ++ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", ++ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", ++ "dev": true ++ }, ++ "os-homedir": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", ++ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", ++ "dev": true ++ }, ++ "os-tmpdir": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", ++ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", ++ "dev": true ++ }, ++ "osenv": { ++ "version": "0.1.5", ++ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", ++ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", ++ "dev": true, ++ "requires": { ++ "os-homedir": "^1.0.0", ++ "os-tmpdir": "^1.0.0" ++ } ++ }, ++ "p-limit": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", ++ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", ++ "dev": true, ++ "requires": { ++ "p-try": "^1.0.0" ++ } ++ }, ++ "p-locate": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", ++ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", ++ "dev": true, ++ "requires": { ++ "p-limit": "^1.1.0" ++ } ++ }, ++ "p-try": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", ++ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", ++ "dev": true ++ }, ++ "pako": { ++ "version": "0.2.9", ++ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", ++ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", ++ "dev": true ++ }, ++ "parcel-bundler": { ++ "version": "1.12.3", ++ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz", ++ "integrity": "sha512-8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A==", ++ "dev": true, ++ "requires": { ++ "@babel/code-frame": "^7.0.0 <7.4.0", ++ "@babel/core": "^7.0.0 <7.4.0", ++ "@babel/generator": "^7.0.0 <7.4.0", ++ "@babel/parser": "^7.0.0 <7.4.0", ++ "@babel/plugin-transform-flow-strip-types": "^7.0.0 <7.4.0", ++ "@babel/plugin-transform-modules-commonjs": "^7.0.0 <7.4.0", ++ "@babel/plugin-transform-react-jsx": "^7.0.0 <7.4.0", ++ "@babel/preset-env": "^7.0.0 <7.4.0", ++ "@babel/runtime": "^7.0.0 <7.4.0", ++ "@babel/template": "^7.0.0 <7.4.0", ++ "@babel/traverse": "^7.0.0 <7.4.0", ++ "@babel/types": "^7.0.0 <7.4.0", ++ "@iarna/toml": "^2.2.0", ++ "@parcel/fs": "^1.11.0", ++ "@parcel/logger": "^1.11.0", ++ "@parcel/utils": "^1.11.0", ++ "@parcel/watcher": "^1.12.0", ++ "@parcel/workers": "^1.11.0", ++ "ansi-to-html": "^0.6.4", ++ "babylon-walk": "^1.0.2", ++ "browserslist": "^4.1.0", ++ "chalk": "^2.1.0", ++ "clone": "^2.1.1", ++ "command-exists": "^1.2.6", ++ "commander": "^2.11.0", ++ "cross-spawn": "^6.0.4", ++ "css-modules-loader-core": "^1.1.0", ++ "cssnano": "^4.0.0", ++ "deasync": "^0.1.14", ++ "dotenv": "^5.0.0", ++ "dotenv-expand": "^4.2.0", ++ "fast-glob": "^2.2.2", ++ "filesize": "^3.6.0", ++ "get-port": "^3.2.0", ++ "htmlnano": "^0.2.2", ++ "is-glob": "^4.0.0", ++ "is-url": "^1.2.2", ++ "js-yaml": "^3.10.0", ++ "json5": "^1.0.1", ++ "micromatch": "^3.0.4", ++ "mkdirp": "^0.5.1", ++ "node-forge": "^0.7.1", ++ "node-libs-browser": "^2.0.0", ++ "opn": "^5.1.0", ++ "postcss": "^7.0.11", ++ "postcss-value-parser": "^3.3.1", ++ "posthtml": "^0.11.2", ++ "posthtml-parser": "^0.4.0", ++ "posthtml-render": "^1.1.3", ++ "resolve": "^1.4.0", ++ "semver": "^5.4.1", ++ "serialize-to-js": "^1.1.1", ++ "serve-static": "^1.12.4", ++ "source-map": "0.6.1", ++ "terser": "^3.7.3", ++ "v8-compile-cache": "^2.0.0", ++ "ws": "^5.1.1" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "parse-asn1": { ++ "version": "5.1.5", ++ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", ++ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", ++ "dev": true, ++ "requires": { ++ "asn1.js": "^4.0.0", ++ "browserify-aes": "^1.0.0", ++ "create-hash": "^1.1.0", ++ "evp_bytestokey": "^1.0.0", ++ "pbkdf2": "^3.0.3", ++ "safe-buffer": "^5.1.1" ++ } ++ }, ++ "parse-json": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", ++ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", ++ "dev": true, ++ "requires": { ++ "error-ex": "^1.3.1", ++ "json-parse-better-errors": "^1.0.1" ++ } ++ }, ++ "parse5": { ++ "version": "5.1.0", ++ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", ++ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", ++ "dev": true ++ }, ++ "parseurl": { ++ "version": "1.3.3", ++ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", ++ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", ++ "dev": true ++ }, ++ "pascalcase": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", ++ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", ++ "dev": true ++ }, ++ "path-browserify": { ++ "version": "0.0.1", ++ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", ++ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", ++ "dev": true ++ }, ++ "path-dirname": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", ++ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", ++ "dev": true ++ }, ++ "path-exists": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", ++ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", ++ "dev": true ++ }, ++ "path-is-absolute": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", ++ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", ++ "dev": true ++ }, ++ "path-key": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", ++ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", ++ "dev": true ++ }, ++ "path-parse": { ++ "version": "1.0.6", ++ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", ++ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", ++ "dev": true ++ }, ++ "pbkdf2": { ++ "version": "3.0.17", ++ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", ++ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", ++ "dev": true, ++ "requires": { ++ "create-hash": "^1.1.2", ++ "create-hmac": "^1.1.4", ++ "ripemd160": "^2.0.1", ++ "safe-buffer": "^5.0.1", ++ "sha.js": "^2.4.8" ++ } ++ }, ++ "performance-now": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", ++ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" ++ }, ++ "physical-cpu-count": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", ++ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=", ++ "dev": true ++ }, ++ "pkg-up": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", ++ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", ++ "dev": true, ++ "requires": { ++ "find-up": "^2.1.0" ++ } ++ }, ++ "pn": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", ++ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", ++ "dev": true ++ }, ++ "posix-character-classes": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", ++ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", ++ "dev": true ++ }, ++ "postcss": { ++ "version": "7.0.27", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", ++ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.4.2", ++ "source-map": "^0.6.1", ++ "supports-color": "^6.1.0" ++ } ++ }, ++ "postcss-calc": { ++ "version": "7.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", ++ "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.27", ++ "postcss-selector-parser": "^6.0.2", ++ "postcss-value-parser": "^4.0.2" ++ } ++ }, ++ "postcss-colormin": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", ++ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", ++ "dev": true, ++ "requires": { ++ "browserslist": "^4.0.0", ++ "color": "^3.0.0", ++ "has": "^1.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-convert-values": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", ++ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-discard-comments": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", ++ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0" ++ } ++ }, ++ "postcss-discard-duplicates": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", ++ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0" ++ } ++ }, ++ "postcss-discard-empty": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", ++ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0" ++ } ++ }, ++ "postcss-discard-overridden": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", ++ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0" ++ } ++ }, ++ "postcss-merge-longhand": { ++ "version": "4.0.11", ++ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", ++ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", ++ "dev": true, ++ "requires": { ++ "css-color-names": "0.0.4", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0", ++ "stylehacks": "^4.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-merge-rules": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", ++ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", ++ "dev": true, ++ "requires": { ++ "browserslist": "^4.0.0", ++ "caniuse-api": "^3.0.0", ++ "cssnano-util-same-parent": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-selector-parser": "^3.0.0", ++ "vendors": "^1.0.0" ++ }, ++ "dependencies": { ++ "postcss-selector-parser": { ++ "version": "3.1.2", ++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", ++ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", ++ "dev": true, ++ "requires": { ++ "dot-prop": "^5.2.0", ++ "indexes-of": "^1.0.1", ++ "uniq": "^1.0.1" ++ } ++ } ++ } ++ }, ++ "postcss-minify-font-values": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", ++ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-minify-gradients": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", ++ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-arguments": "^4.0.0", ++ "is-color-stop": "^1.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-minify-params": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", ++ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", ++ "dev": true, ++ "requires": { ++ "alphanum-sort": "^1.0.0", ++ "browserslist": "^4.0.0", ++ "cssnano-util-get-arguments": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0", ++ "uniqs": "^2.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-minify-selectors": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", ++ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", ++ "dev": true, ++ "requires": { ++ "alphanum-sort": "^1.0.0", ++ "has": "^1.0.0", ++ "postcss": "^7.0.0", ++ "postcss-selector-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-selector-parser": { ++ "version": "3.1.2", ++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", ++ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", ++ "dev": true, ++ "requires": { ++ "dot-prop": "^5.2.0", ++ "indexes-of": "^1.0.1", ++ "uniq": "^1.0.1" ++ } ++ } ++ } ++ }, ++ "postcss-modules-extract-imports": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", ++ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", ++ "dev": true, ++ "requires": { ++ "postcss": "^6.0.1" ++ }, ++ "dependencies": { ++ "postcss": { ++ "version": "6.0.23", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", ++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.4.1", ++ "source-map": "^0.6.1", ++ "supports-color": "^5.4.0" ++ } ++ }, ++ "supports-color": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "dev": true, ++ "requires": { ++ "has-flag": "^3.0.0" ++ } ++ } ++ } ++ }, ++ "postcss-modules-local-by-default": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", ++ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", ++ "dev": true, ++ "requires": { ++ "css-selector-tokenizer": "^0.7.0", ++ "postcss": "^6.0.1" ++ }, ++ "dependencies": { ++ "postcss": { ++ "version": "6.0.23", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", ++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.4.1", ++ "source-map": "^0.6.1", ++ "supports-color": "^5.4.0" ++ } ++ }, ++ "supports-color": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "dev": true, ++ "requires": { ++ "has-flag": "^3.0.0" ++ } ++ } ++ } ++ }, ++ "postcss-modules-scope": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", ++ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", ++ "dev": true, ++ "requires": { ++ "css-selector-tokenizer": "^0.7.0", ++ "postcss": "^6.0.1" ++ }, ++ "dependencies": { ++ "postcss": { ++ "version": "6.0.23", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", ++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.4.1", ++ "source-map": "^0.6.1", ++ "supports-color": "^5.4.0" ++ } ++ }, ++ "supports-color": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "dev": true, ++ "requires": { ++ "has-flag": "^3.0.0" ++ } ++ } ++ } ++ }, ++ "postcss-modules-values": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", ++ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", ++ "dev": true, ++ "requires": { ++ "icss-replace-symbols": "^1.1.0", ++ "postcss": "^6.0.1" ++ }, ++ "dependencies": { ++ "postcss": { ++ "version": "6.0.23", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", ++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.4.1", ++ "source-map": "^0.6.1", ++ "supports-color": "^5.4.0" ++ } ++ }, ++ "supports-color": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "dev": true, ++ "requires": { ++ "has-flag": "^3.0.0" ++ } ++ } ++ } ++ }, ++ "postcss-normalize-charset": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", ++ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0" ++ } ++ }, ++ "postcss-normalize-display-values": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", ++ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-match": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-positions": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", ++ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-arguments": "^4.0.0", ++ "has": "^1.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-repeat-style": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", ++ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-arguments": "^4.0.0", ++ "cssnano-util-get-match": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-string": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", ++ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", ++ "dev": true, ++ "requires": { ++ "has": "^1.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-timing-functions": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", ++ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-match": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-unicode": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", ++ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", ++ "dev": true, ++ "requires": { ++ "browserslist": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-url": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", ++ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", ++ "dev": true, ++ "requires": { ++ "is-absolute-url": "^2.0.0", ++ "normalize-url": "^3.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-normalize-whitespace": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", ++ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", ++ "dev": true, ++ "requires": { ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-ordered-values": { ++ "version": "4.1.2", ++ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", ++ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-arguments": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-reduce-initial": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", ++ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", ++ "dev": true, ++ "requires": { ++ "browserslist": "^4.0.0", ++ "caniuse-api": "^3.0.0", ++ "has": "^1.0.0", ++ "postcss": "^7.0.0" ++ } ++ }, ++ "postcss-reduce-transforms": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", ++ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", ++ "dev": true, ++ "requires": { ++ "cssnano-util-get-match": "^4.0.0", ++ "has": "^1.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-selector-parser": { ++ "version": "6.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", ++ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", ++ "dev": true, ++ "requires": { ++ "cssesc": "^3.0.0", ++ "indexes-of": "^1.0.1", ++ "uniq": "^1.0.1" ++ } ++ }, ++ "postcss-svgo": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", ++ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", ++ "dev": true, ++ "requires": { ++ "is-svg": "^3.0.0", ++ "postcss": "^7.0.0", ++ "postcss-value-parser": "^3.0.0", ++ "svgo": "^1.0.0" ++ }, ++ "dependencies": { ++ "postcss-value-parser": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", ++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", ++ "dev": true ++ } ++ } ++ }, ++ "postcss-unique-selectors": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", ++ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", ++ "dev": true, ++ "requires": { ++ "alphanum-sort": "^1.0.0", ++ "postcss": "^7.0.0", ++ "uniqs": "^2.0.0" ++ } ++ }, ++ "postcss-value-parser": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", ++ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", ++ "dev": true ++ }, ++ "posthtml": { ++ "version": "0.11.6", ++ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", ++ "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", ++ "dev": true, ++ "requires": { ++ "posthtml-parser": "^0.4.1", ++ "posthtml-render": "^1.1.5" ++ } ++ }, ++ "posthtml-parser": { ++ "version": "0.4.2", ++ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", ++ "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", ++ "dev": true, ++ "requires": { ++ "htmlparser2": "^3.9.2" ++ } ++ }, ++ "posthtml-render": { ++ "version": "1.2.2", ++ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz", ++ "integrity": "sha512-MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==", ++ "dev": true ++ }, ++ "prelude-ls": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", ++ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", ++ "dev": true ++ }, ++ "private": { ++ "version": "0.1.8", ++ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", ++ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", ++ "dev": true ++ }, ++ "process": { ++ "version": "0.11.10", ++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ++ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", ++ "dev": true ++ }, ++ "process-nextick-args": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", ++ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", ++ "dev": true ++ }, ++ "proto-list": { ++ "version": "1.2.4", ++ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", ++ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", ++ "dev": true ++ }, ++ "pseudomap": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", ++ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", ++ "dev": true ++ }, ++ "psl": { ++ "version": "1.8.0", ++ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", ++ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" ++ }, ++ "public-encrypt": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", ++ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", ++ "dev": true, ++ "requires": { ++ "bn.js": "^4.1.0", ++ "browserify-rsa": "^4.0.0", ++ "create-hash": "^1.1.0", ++ "parse-asn1": "^5.0.0", ++ "randombytes": "^2.0.1", ++ "safe-buffer": "^5.1.2" ++ } ++ }, ++ "punycode": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", ++ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" ++ }, ++ "purgecss": { ++ "version": "1.4.2", ++ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz", ++ "integrity": "sha512-hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==", ++ "dev": true, ++ "requires": { ++ "glob": "^7.1.3", ++ "postcss": "^7.0.14", ++ "postcss-selector-parser": "^6.0.0", ++ "yargs": "^14.0.0" ++ } ++ }, ++ "q": { ++ "version": "1.5.1", ++ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", ++ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", ++ "dev": true ++ }, ++ "qs": { ++ "version": "6.5.2", ++ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", ++ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" ++ }, ++ "querystring": { ++ "version": "0.2.0", ++ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", ++ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", ++ "dev": true ++ }, ++ "querystring-es3": { ++ "version": "0.2.1", ++ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", ++ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", ++ "dev": true ++ }, ++ "quote-stream": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", ++ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", ++ "dev": true, ++ "requires": { ++ "buffer-equal": "0.0.1", ++ "minimist": "^1.1.3", ++ "through2": "^2.0.0" ++ } ++ }, ++ "randombytes": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", ++ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", ++ "dev": true, ++ "requires": { ++ "safe-buffer": "^5.1.0" ++ } ++ }, ++ "randomfill": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", ++ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", ++ "dev": true, ++ "requires": { ++ "randombytes": "^2.0.5", ++ "safe-buffer": "^5.1.0" ++ } ++ }, ++ "range-parser": { ++ "version": "1.2.1", ++ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", ++ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", ++ "dev": true ++ }, ++ "readable-stream": { ++ "version": "2.3.7", ++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", ++ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", ++ "dev": true, ++ "requires": { ++ "core-util-is": "~1.0.0", ++ "inherits": "~2.0.3", ++ "isarray": "~1.0.0", ++ "process-nextick-args": "~2.0.0", ++ "safe-buffer": "~5.1.1", ++ "string_decoder": "~1.1.1", ++ "util-deprecate": "~1.0.1" ++ } ++ }, ++ "readdirp": { ++ "version": "2.2.1", ++ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", ++ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", ++ "dev": true, ++ "requires": { ++ "graceful-fs": "^4.1.11", ++ "micromatch": "^3.1.10", ++ "readable-stream": "^2.0.2" ++ } ++ }, ++ "regenerate": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", ++ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", ++ "dev": true ++ }, ++ "regenerate-unicode-properties": { ++ "version": "8.2.0", ++ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", ++ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", ++ "dev": true, ++ "requires": { ++ "regenerate": "^1.4.0" ++ } ++ }, ++ "regenerator-runtime": { ++ "version": "0.13.5", ++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", ++ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", ++ "dev": true ++ }, ++ "regenerator-transform": { ++ "version": "0.14.4", ++ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", ++ "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", ++ "dev": true, ++ "requires": { ++ "@babel/runtime": "^7.8.4", ++ "private": "^0.1.8" ++ }, ++ "dependencies": { ++ "@babel/runtime": { ++ "version": "7.9.2", ++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", ++ "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", ++ "dev": true, ++ "requires": { ++ "regenerator-runtime": "^0.13.4" ++ } ++ } ++ } ++ }, ++ "regex-not": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", ++ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", ++ "dev": true, ++ "requires": { ++ "extend-shallow": "^3.0.2", ++ "safe-regex": "^1.1.0" ++ } ++ }, ++ "regexpu-core": { ++ "version": "4.7.0", ++ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", ++ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", ++ "dev": true, ++ "requires": { ++ "regenerate": "^1.4.0", ++ "regenerate-unicode-properties": "^8.2.0", ++ "regjsgen": "^0.5.1", ++ "regjsparser": "^0.6.4", ++ "unicode-match-property-ecmascript": "^1.0.4", ++ "unicode-match-property-value-ecmascript": "^1.2.0" ++ } ++ }, ++ "regjsgen": { ++ "version": "0.5.1", ++ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", ++ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", ++ "dev": true ++ }, ++ "regjsparser": { ++ "version": "0.6.4", ++ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", ++ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", ++ "dev": true, ++ "requires": { ++ "jsesc": "~0.5.0" ++ }, ++ "dependencies": { ++ "jsesc": { ++ "version": "0.5.0", ++ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", ++ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", ++ "dev": true ++ } ++ } ++ }, ++ "remove-trailing-separator": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", ++ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", ++ "dev": true ++ }, ++ "repeat-element": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", ++ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", ++ "dev": true ++ }, ++ "repeat-string": { ++ "version": "1.6.1", ++ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", ++ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", ++ "dev": true ++ }, ++ "request": { ++ "version": "2.88.2", ++ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", ++ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", ++ "requires": { ++ "aws-sign2": "~0.7.0", ++ "aws4": "^1.8.0", ++ "caseless": "~0.12.0", ++ "combined-stream": "~1.0.6", ++ "extend": "~3.0.2", ++ "forever-agent": "~0.6.1", ++ "form-data": "~2.3.2", ++ "har-validator": "~5.1.3", ++ "http-signature": "~1.2.0", ++ "is-typedarray": "~1.0.0", ++ "isstream": "~0.1.2", ++ "json-stringify-safe": "~5.0.1", ++ "mime-types": "~2.1.19", ++ "oauth-sign": "~0.9.0", ++ "performance-now": "^2.1.0", ++ "qs": "~6.5.2", ++ "safe-buffer": "^5.1.2", ++ "tough-cookie": "~2.5.0", ++ "tunnel-agent": "^0.6.0", ++ "uuid": "^3.3.2" ++ } ++ }, ++ "request-promise-core": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", ++ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", ++ "dev": true, ++ "requires": { ++ "lodash": "^4.17.15" ++ } ++ }, ++ "request-promise-native": { ++ "version": "1.0.8", ++ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", ++ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", ++ "dev": true, ++ "requires": { ++ "request-promise-core": "1.1.3", ++ "stealthy-require": "^1.1.1", ++ "tough-cookie": "^2.3.3" ++ } ++ }, ++ "require-directory": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", ++ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", ++ "dev": true ++ }, ++ "require-main-filename": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", ++ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", ++ "dev": true ++ }, ++ "resolve": { ++ "version": "1.17.0", ++ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", ++ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", ++ "dev": true, ++ "requires": { ++ "path-parse": "^1.0.6" ++ } ++ }, ++ "resolve-from": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", ++ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", ++ "dev": true ++ }, ++ "resolve-url": { ++ "version": "0.2.1", ++ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", ++ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", ++ "dev": true ++ }, ++ "restore-cursor": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", ++ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", ++ "dev": true, ++ "requires": { ++ "onetime": "^2.0.0", ++ "signal-exit": "^3.0.2" ++ } ++ }, ++ "ret": { ++ "version": "0.1.15", ++ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", ++ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", ++ "dev": true ++ }, ++ "rgb-regex": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", ++ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", ++ "dev": true ++ }, ++ "rgba-regex": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", ++ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", ++ "dev": true ++ }, ++ "rimraf": { ++ "version": "2.6.3", ++ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", ++ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", ++ "dev": true, ++ "requires": { ++ "glob": "^7.1.3" ++ } ++ }, ++ "ripemd160": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", ++ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", ++ "dev": true, ++ "requires": { ++ "hash-base": "^3.0.0", ++ "inherits": "^2.0.1" ++ } ++ }, ++ "safe-buffer": { ++ "version": "5.1.2", ++ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", ++ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" ++ }, ++ "safe-regex": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", ++ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", ++ "dev": true, ++ "requires": { ++ "ret": "~0.1.10" ++ } ++ }, ++ "safer-buffer": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", ++ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" ++ }, ++ "safer-eval": { ++ "version": "1.3.6", ++ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz", ++ "integrity": "sha512-DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw==", ++ "dev": true, ++ "requires": { ++ "clones": "^1.2.0" ++ } ++ }, ++ "sax": { ++ "version": "1.2.4", ++ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", ++ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", ++ "dev": true ++ }, ++ "saxes": { ++ "version": "3.1.11", ++ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", ++ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", ++ "dev": true, ++ "requires": { ++ "xmlchars": "^2.1.1" ++ } ++ }, ++ "semver": { ++ "version": "5.7.1", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", ++ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", ++ "dev": true ++ }, ++ "send": { ++ "version": "0.17.1", ++ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", ++ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", ++ "dev": true, ++ "requires": { ++ "debug": "2.6.9", ++ "depd": "~1.1.2", ++ "destroy": "~1.0.4", ++ "encodeurl": "~1.0.2", ++ "escape-html": "~1.0.3", ++ "etag": "~1.8.1", ++ "fresh": "0.5.2", ++ "http-errors": "~1.7.2", ++ "mime": "1.6.0", ++ "ms": "2.1.1", ++ "on-finished": "~2.3.0", ++ "range-parser": "~1.2.1", ++ "statuses": "~1.5.0" ++ }, ++ "dependencies": { ++ "debug": { ++ "version": "2.6.9", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", ++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", ++ "dev": true, ++ "requires": { ++ "ms": "2.0.0" ++ }, ++ "dependencies": { ++ "ms": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", ++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", ++ "dev": true ++ } ++ } ++ }, ++ "ms": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", ++ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", ++ "dev": true ++ } ++ } ++ }, ++ "serialize-to-js": { ++ "version": "1.2.2", ++ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz", ++ "integrity": "sha512-mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==", ++ "dev": true, ++ "requires": { ++ "js-beautify": "^1.8.9", ++ "safer-eval": "^1.3.0" ++ } ++ }, ++ "serve-static": { ++ "version": "1.14.1", ++ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", ++ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", ++ "dev": true, ++ "requires": { ++ "encodeurl": "~1.0.2", ++ "escape-html": "~1.0.3", ++ "parseurl": "~1.3.3", ++ "send": "0.17.1" ++ } ++ }, ++ "set-blocking": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", ++ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", ++ "dev": true ++ }, ++ "set-value": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", ++ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", ++ "dev": true, ++ "requires": { ++ "extend-shallow": "^2.0.1", ++ "is-extendable": "^0.1.1", ++ "is-plain-object": "^2.0.3", ++ "split-string": "^3.0.1" ++ }, ++ "dependencies": { ++ "extend-shallow": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", ++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", ++ "dev": true, ++ "requires": { ++ "is-extendable": "^0.1.0" ++ } ++ } ++ } ++ }, ++ "setimmediate": { ++ "version": "1.0.5", ++ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ++ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", ++ "dev": true ++ }, ++ "setprototypeof": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", ++ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", ++ "dev": true ++ }, ++ "sha.js": { ++ "version": "2.4.11", ++ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", ++ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", ++ "dev": true, ++ "requires": { ++ "inherits": "^2.0.1", ++ "safe-buffer": "^5.0.1" ++ } ++ }, ++ "shallow-copy": { ++ "version": "0.0.1", ++ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", ++ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", ++ "dev": true ++ }, ++ "shebang-command": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", ++ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", ++ "dev": true, ++ "requires": { ++ "shebang-regex": "^1.0.0" ++ } ++ }, ++ "shebang-regex": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", ++ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", ++ "dev": true ++ }, ++ "sigmund": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", ++ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", ++ "dev": true ++ }, ++ "signal-exit": { ++ "version": "3.0.3", ++ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", ++ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", ++ "dev": true ++ }, ++ "simple-swizzle": { ++ "version": "0.2.2", ++ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", ++ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", ++ "dev": true, ++ "requires": { ++ "is-arrayish": "^0.3.1" ++ }, ++ "dependencies": { ++ "is-arrayish": { ++ "version": "0.3.2", ++ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", ++ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", ++ "dev": true ++ } ++ } ++ }, ++ "snapdragon": { ++ "version": "0.8.2", ++ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", ++ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", ++ "dev": true, ++ "requires": { ++ "base": "^0.11.1", ++ "debug": "^2.2.0", ++ "define-property": "^0.2.5", ++ "extend-shallow": "^2.0.1", ++ "map-cache": "^0.2.2", ++ "source-map": "^0.5.6", ++ "source-map-resolve": "^0.5.0", ++ "use": "^3.1.0" ++ }, ++ "dependencies": { ++ "debug": { ++ "version": "2.6.9", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", ++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", ++ "dev": true, ++ "requires": { ++ "ms": "2.0.0" ++ } ++ }, ++ "define-property": { ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", ++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^0.1.0" ++ } ++ }, ++ "extend-shallow": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", ++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", ++ "dev": true, ++ "requires": { ++ "is-extendable": "^0.1.0" ++ } ++ }, ++ "ms": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", ++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", ++ "dev": true ++ }, ++ "source-map": { ++ "version": "0.5.7", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", ++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", ++ "dev": true ++ } ++ } ++ }, ++ "snapdragon-node": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", ++ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", ++ "dev": true, ++ "requires": { ++ "define-property": "^1.0.0", ++ "isobject": "^3.0.0", ++ "snapdragon-util": "^3.0.1" ++ }, ++ "dependencies": { ++ "define-property": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", ++ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^1.0.0" ++ } ++ }, ++ "is-accessor-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", ++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-data-descriptor": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", ++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^6.0.0" ++ } ++ }, ++ "is-descriptor": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", ++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", ++ "dev": true, ++ "requires": { ++ "is-accessor-descriptor": "^1.0.0", ++ "is-data-descriptor": "^1.0.0", ++ "kind-of": "^6.0.2" ++ } ++ } ++ } ++ }, ++ "snapdragon-util": { ++ "version": "3.0.1", ++ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", ++ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", ++ "dev": true, ++ "requires": { ++ "kind-of": "^3.2.0" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", ++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "source-map": { ++ "version": "0.6.1", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", ++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", ++ "dev": true ++ }, ++ "source-map-resolve": { ++ "version": "0.5.3", ++ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", ++ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", ++ "dev": true, ++ "requires": { ++ "atob": "^2.1.2", ++ "decode-uri-component": "^0.2.0", ++ "resolve-url": "^0.2.1", ++ "source-map-url": "^0.4.0", ++ "urix": "^0.1.0" ++ } ++ }, ++ "source-map-support": { ++ "version": "0.5.19", ++ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", ++ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", ++ "dev": true, ++ "requires": { ++ "buffer-from": "^1.0.0", ++ "source-map": "^0.6.0" ++ } ++ }, ++ "source-map-url": { ++ "version": "0.4.0", ++ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", ++ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", ++ "dev": true ++ }, ++ "split-string": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", ++ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", ++ "dev": true, ++ "requires": { ++ "extend-shallow": "^3.0.0" ++ } ++ }, ++ "sprintf-js": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", ++ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", ++ "dev": true ++ }, ++ "sshpk": { ++ "version": "1.16.1", ++ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", ++ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", ++ "requires": { ++ "asn1": "~0.2.3", ++ "assert-plus": "^1.0.0", ++ "bcrypt-pbkdf": "^1.0.0", ++ "dashdash": "^1.12.0", ++ "ecc-jsbn": "~0.1.1", ++ "getpass": "^0.1.1", ++ "jsbn": "~0.1.0", ++ "safer-buffer": "^2.0.2", ++ "tweetnacl": "~0.14.0" ++ } ++ }, ++ "stable": { ++ "version": "0.1.8", ++ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", ++ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", ++ "dev": true ++ }, ++ "static-eval": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz", ++ "integrity": "sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==", ++ "dev": true, ++ "requires": { ++ "escodegen": "^1.11.1" ++ }, ++ "dependencies": { ++ "escodegen": { ++ "version": "1.14.1", ++ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", ++ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", ++ "dev": true, ++ "requires": { ++ "esprima": "^4.0.1", ++ "estraverse": "^4.2.0", ++ "esutils": "^2.0.2", ++ "optionator": "^0.8.1", ++ "source-map": "~0.6.1" ++ } ++ } ++ } ++ }, ++ "static-extend": { ++ "version": "0.1.2", ++ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", ++ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", ++ "dev": true, ++ "requires": { ++ "define-property": "^0.2.5", ++ "object-copy": "^0.1.0" ++ }, ++ "dependencies": { ++ "define-property": { ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", ++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", ++ "dev": true, ++ "requires": { ++ "is-descriptor": "^0.1.0" ++ } ++ } ++ } ++ }, ++ "static-module": { ++ "version": "2.2.5", ++ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", ++ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", ++ "dev": true, ++ "requires": { ++ "concat-stream": "~1.6.0", ++ "convert-source-map": "^1.5.1", ++ "duplexer2": "~0.1.4", ++ "escodegen": "~1.9.0", ++ "falafel": "^2.1.0", ++ "has": "^1.0.1", ++ "magic-string": "^0.22.4", ++ "merge-source-map": "1.0.4", ++ "object-inspect": "~1.4.0", ++ "quote-stream": "~1.0.2", ++ "readable-stream": "~2.3.3", ++ "shallow-copy": "~0.0.1", ++ "static-eval": "^2.0.0", ++ "through2": "~2.0.3" ++ }, ++ "dependencies": { ++ "object-inspect": { ++ "version": "1.4.1", ++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", ++ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", ++ "dev": true ++ } ++ } ++ }, ++ "statuses": { ++ "version": "1.5.0", ++ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", ++ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", ++ "dev": true ++ }, ++ "stealthy-require": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", ++ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", ++ "dev": true ++ }, ++ "stream-browserify": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", ++ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", ++ "dev": true, ++ "requires": { ++ "inherits": "~2.0.1", ++ "readable-stream": "^2.0.2" ++ } ++ }, ++ "stream-http": { ++ "version": "2.8.3", ++ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", ++ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", ++ "dev": true, ++ "requires": { ++ "builtin-status-codes": "^3.0.0", ++ "inherits": "^2.0.1", ++ "readable-stream": "^2.3.6", ++ "to-arraybuffer": "^1.0.0", ++ "xtend": "^4.0.0" ++ } ++ }, ++ "string-width": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", ++ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", ++ "dev": true, ++ "requires": { ++ "emoji-regex": "^7.0.1", ++ "is-fullwidth-code-point": "^2.0.0", ++ "strip-ansi": "^5.1.0" ++ }, ++ "dependencies": { ++ "ansi-regex": { ++ "version": "4.1.0", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", ++ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", ++ "dev": true ++ }, ++ "strip-ansi": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", ++ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", ++ "dev": true, ++ "requires": { ++ "ansi-regex": "^4.1.0" ++ } ++ } ++ } ++ }, ++ "string.prototype.trimend": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", ++ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.5" ++ } ++ }, ++ "string.prototype.trimleft": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", ++ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.5", ++ "string.prototype.trimstart": "^1.0.0" ++ } ++ }, ++ "string.prototype.trimright": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", ++ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.5", ++ "string.prototype.trimend": "^1.0.0" ++ } ++ }, ++ "string.prototype.trimstart": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", ++ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.5" ++ } ++ }, ++ "string_decoder": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", ++ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", ++ "dev": true, ++ "requires": { ++ "safe-buffer": "~5.1.0" ++ } ++ }, ++ "strip-ansi": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", ++ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", ++ "dev": true, ++ "requires": { ++ "ansi-regex": "^3.0.0" ++ } ++ }, ++ "stylehacks": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", ++ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", ++ "dev": true, ++ "requires": { ++ "browserslist": "^4.0.0", ++ "postcss": "^7.0.0", ++ "postcss-selector-parser": "^3.0.0" ++ }, ++ "dependencies": { ++ "postcss-selector-parser": { ++ "version": "3.1.2", ++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", ++ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", ++ "dev": true, ++ "requires": { ++ "dot-prop": "^5.2.0", ++ "indexes-of": "^1.0.1", ++ "uniq": "^1.0.1" ++ } ++ } ++ } ++ }, ++ "supports-color": { ++ "version": "6.1.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", ++ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", ++ "dev": true, ++ "requires": { ++ "has-flag": "^3.0.0" ++ } ++ }, ++ "svgo": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", ++ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", ++ "dev": true, ++ "requires": { ++ "chalk": "^2.4.1", ++ "coa": "^2.0.2", ++ "css-select": "^2.0.0", ++ "css-select-base-adapter": "^0.1.1", ++ "css-tree": "1.0.0-alpha.37", ++ "csso": "^4.0.2", ++ "js-yaml": "^3.13.1", ++ "mkdirp": "~0.5.1", ++ "object.values": "^1.1.0", ++ "sax": "~1.2.4", ++ "stable": "^0.1.8", ++ "unquote": "~1.1.1", ++ "util.promisify": "~1.0.0" ++ } ++ }, ++ "symbol-tree": { ++ "version": "3.2.4", ++ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", ++ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", ++ "dev": true ++ }, ++ "temp": { ++ "version": "0.9.0", ++ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz", ++ "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==", ++ "dev": true, ++ "requires": { ++ "rimraf": "~2.6.2" ++ } ++ }, ++ "terser": { ++ "version": "3.17.0", ++ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", ++ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", ++ "dev": true, ++ "requires": { ++ "commander": "^2.19.0", ++ "source-map": "~0.6.1", ++ "source-map-support": "~0.5.10" ++ } ++ }, ++ "through2": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", ++ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", ++ "dev": true, ++ "requires": { ++ "readable-stream": "~2.3.6", ++ "xtend": "~4.0.1" ++ } ++ }, ++ "timers-browserify": { ++ "version": "2.0.11", ++ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", ++ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", ++ "dev": true, ++ "requires": { ++ "setimmediate": "^1.0.4" ++ } ++ }, ++ "timsort": { ++ "version": "0.3.0", ++ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", ++ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", ++ "dev": true ++ }, ++ "tiny-inflate": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", ++ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", ++ "dev": true ++ }, ++ "to-arraybuffer": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", ++ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", ++ "dev": true ++ }, ++ "to-fast-properties": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", ++ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", ++ "dev": true ++ }, ++ "to-object-path": { ++ "version": "0.3.0", ++ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", ++ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", ++ "dev": true, ++ "requires": { ++ "kind-of": "^3.0.2" ++ }, ++ "dependencies": { ++ "kind-of": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", ++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", ++ "dev": true, ++ "requires": { ++ "is-buffer": "^1.1.5" ++ } ++ } ++ } ++ }, ++ "to-regex": { ++ "version": "3.0.2", ++ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", ++ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", ++ "dev": true, ++ "requires": { ++ "define-property": "^2.0.2", ++ "extend-shallow": "^3.0.2", ++ "regex-not": "^1.0.2", ++ "safe-regex": "^1.1.0" ++ } ++ }, ++ "to-regex-range": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", ++ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", ++ "dev": true, ++ "requires": { ++ "is-number": "^3.0.0", ++ "repeat-string": "^1.6.1" ++ } ++ }, ++ "toidentifier": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", ++ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, +- "brace-expansion": { +- "version": "1.1.11", +- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", +- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", ++ "tough-cookie": { ++ "version": "2.5.0", ++ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", ++ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", ++ "requires": { ++ "psl": "^1.1.28", ++ "punycode": "^2.1.1" ++ } ++ }, ++ "tr46": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", ++ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { +- "balanced-match": "^1.0.0", +- "concat-map": "0.0.1" ++ "punycode": "^2.1.0" + } + }, +- "concat-map": { +- "version": "0.0.1", +- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", +- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", ++ "trim-right": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", ++ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, +- "cross-spawn": { +- "version": "6.0.5", +- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", +- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", ++ "tty-browserify": { ++ "version": "0.0.0", ++ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", ++ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", ++ "dev": true ++ }, ++ "tunnel-agent": { ++ "version": "0.6.0", ++ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", ++ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", ++ "requires": { ++ "safe-buffer": "^5.0.1" ++ } ++ }, ++ "tweetnacl": { ++ "version": "0.14.5", ++ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", ++ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" ++ }, ++ "type-check": { ++ "version": "0.3.2", ++ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", ++ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { +- "nice-try": "^1.0.4", +- "path-key": "^2.0.1", +- "semver": "^5.5.0", +- "shebang-command": "^1.2.0", +- "which": "^1.2.9" ++ "prelude-ls": "~1.1.2" + } + }, +- "elm-hot": { +- "version": "1.1.1", +- "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz", +- "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==", ++ "typedarray": { ++ "version": "0.0.6", ++ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", ++ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, +- "find-elm-dependencies": { +- "version": "2.0.2", +- "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz", +- "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==", ++ "uncss": { ++ "version": "0.17.3", ++ "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", ++ "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", + "dev": true, + "requires": { +- "firstline": "1.2.0", +- "lodash": "4.17.15" ++ "commander": "^2.20.0", ++ "glob": "^7.1.4", ++ "is-absolute-url": "^3.0.1", ++ "is-html": "^1.1.0", ++ "jsdom": "^14.1.0", ++ "lodash": "^4.17.15", ++ "postcss": "^7.0.17", ++ "postcss-selector-parser": "6.0.2", ++ "request": "^2.88.0" ++ }, ++ "dependencies": { ++ "is-absolute-url": { ++ "version": "3.0.3", ++ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", ++ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", ++ "dev": true ++ } + } + }, +- "firstline": { ++ "unicode-canonical-property-names-ecmascript": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", ++ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", ++ "dev": true ++ }, ++ "unicode-match-property-ecmascript": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", ++ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", ++ "dev": true, ++ "requires": { ++ "unicode-canonical-property-names-ecmascript": "^1.0.4", ++ "unicode-property-aliases-ecmascript": "^1.0.4" ++ } ++ }, ++ "unicode-match-property-value-ecmascript": { + "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz", +- "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=", ++ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", ++ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, +- "fs.realpath": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", +- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", ++ "unicode-property-aliases-ecmascript": { ++ "version": "1.1.0", ++ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", ++ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, +- "glob": { +- "version": "7.1.4", +- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", +- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", ++ "unicode-trie": { ++ "version": "0.3.1", ++ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", ++ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=", + "dev": true, + "requires": { +- "fs.realpath": "^1.0.0", +- "inflight": "^1.0.4", +- "inherits": "2", +- "minimatch": "^3.0.4", +- "once": "^1.3.0", +- "path-is-absolute": "^1.0.0" ++ "pako": "^0.2.5", ++ "tiny-inflate": "^1.0.0" + } + }, +- "inflight": { +- "version": "1.0.6", +- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", +- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", ++ "union-value": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", ++ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { +- "once": "^1.3.0", +- "wrappy": "1" ++ "arr-union": "^3.1.0", ++ "get-value": "^2.0.6", ++ "is-extendable": "^0.1.1", ++ "set-value": "^2.0.1" + } + }, +- "inherits": { +- "version": "2.0.4", +- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", +- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", ++ "uniq": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", ++ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, +- "isexe": { ++ "uniqs": { + "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", +- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", ++ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", ++ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, +- "lodash": { +- "version": "4.17.15", +- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", +- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", ++ "unquote": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", ++ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, +- "minimatch": { +- "version": "3.0.4", +- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", +- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", ++ "unset-value": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", ++ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { +- "brace-expansion": "^1.1.7" ++ "has-value": "^0.3.1", ++ "isobject": "^3.0.0" ++ }, ++ "dependencies": { ++ "has-value": { ++ "version": "0.3.1", ++ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", ++ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", ++ "dev": true, ++ "requires": { ++ "get-value": "^2.0.3", ++ "has-values": "^0.1.4", ++ "isobject": "^2.0.0" ++ }, ++ "dependencies": { ++ "isobject": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", ++ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", ++ "dev": true, ++ "requires": { ++ "isarray": "1.0.0" ++ } ++ } ++ } ++ }, ++ "has-values": { ++ "version": "0.1.4", ++ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", ++ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", ++ "dev": true ++ } + } + }, +- "nice-try": { +- "version": "1.0.5", +- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", +- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", ++ "upath": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", ++ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, +- "node-elm-compiler": { +- "version": "5.0.4", +- "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz", +- "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==", ++ "uri-js": { ++ "version": "4.2.2", ++ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", ++ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", ++ "requires": { ++ "punycode": "^2.1.0" ++ } ++ }, ++ "urix": { ++ "version": "0.1.0", ++ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", ++ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", ++ "dev": true ++ }, ++ "url": { ++ "version": "0.11.0", ++ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", ++ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { +- "cross-spawn": "6.0.5", +- "find-elm-dependencies": "2.0.2", +- "lodash": "4.17.15", +- "temp": "^0.9.0" ++ "punycode": "1.3.2", ++ "querystring": "0.2.0" ++ }, ++ "dependencies": { ++ "punycode": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", ++ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", ++ "dev": true ++ } + } + }, +- "once": { +- "version": "1.4.0", +- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", +- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", ++ "use": { ++ "version": "3.1.1", ++ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", ++ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", ++ "dev": true ++ }, ++ "util": { ++ "version": "0.11.1", ++ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", ++ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { +- "wrappy": "1" ++ "inherits": "2.0.3" ++ }, ++ "dependencies": { ++ "inherits": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", ++ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", ++ "dev": true ++ } + } + }, +- "path-is-absolute": { ++ "util-deprecate": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", ++ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", ++ "dev": true ++ }, ++ "util.promisify": { + "version": "1.0.1", +- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", +- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", ++ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", ++ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", ++ "dev": true, ++ "requires": { ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.2", ++ "has-symbols": "^1.0.1", ++ "object.getownpropertydescriptors": "^2.1.0" ++ } ++ }, ++ "uuid": { ++ "version": "3.4.0", ++ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", ++ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" ++ }, ++ "v8-compile-cache": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", ++ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, +- "path-key": { +- "version": "2.0.1", +- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", +- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", ++ "vendors": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", ++ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, +- "rimraf": { +- "version": "2.6.3", +- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", +- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", ++ "verror": { ++ "version": "1.10.0", ++ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", ++ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", ++ "requires": { ++ "assert-plus": "^1.0.0", ++ "core-util-is": "1.0.2", ++ "extsprintf": "^1.2.0" ++ } ++ }, ++ "vlq": { ++ "version": "0.2.3", ++ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", ++ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", ++ "dev": true ++ }, ++ "vm-browserify": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", ++ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", ++ "dev": true ++ }, ++ "w3c-hr-time": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", ++ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { +- "glob": "^7.1.3" ++ "browser-process-hrtime": "^1.0.0" + } + }, +- "semver": { +- "version": "5.7.1", +- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", ++ "w3c-xmlserializer": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", ++ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", ++ "dev": true, ++ "requires": { ++ "domexception": "^1.0.1", ++ "webidl-conversions": "^4.0.2", ++ "xml-name-validator": "^3.0.0" ++ } ++ }, ++ "wcwidth": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", ++ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", ++ "dev": true, ++ "requires": { ++ "defaults": "^1.0.3" ++ } ++ }, ++ "webidl-conversions": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", ++ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, +- "shebang-command": { +- "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", +- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", ++ "whatwg-encoding": { ++ "version": "1.0.5", ++ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", ++ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { +- "shebang-regex": "^1.0.0" ++ "iconv-lite": "0.4.24" + } + }, +- "shebang-regex": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", +- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", ++ "whatwg-mimetype": { ++ "version": "2.3.0", ++ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", ++ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, +- "temp": { +- "version": "0.9.0", +- "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz", +- "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==", ++ "whatwg-url": { ++ "version": "7.1.0", ++ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", ++ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { +- "rimraf": "~2.6.2" ++ "lodash.sortby": "^4.7.0", ++ "tr46": "^1.0.1", ++ "webidl-conversions": "^4.0.2" + } + }, + "which": { +@@ -205,11 +7972,164 @@ + "isexe": "^2.0.0" + } + }, ++ "which-module": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", ++ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", ++ "dev": true ++ }, ++ "word-wrap": { ++ "version": "1.2.3", ++ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", ++ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", ++ "dev": true ++ }, ++ "wrap-ansi": { ++ "version": "5.1.0", ++ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", ++ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", ++ "dev": true, ++ "requires": { ++ "ansi-styles": "^3.2.0", ++ "string-width": "^3.0.0", ++ "strip-ansi": "^5.0.0" ++ }, ++ "dependencies": { ++ "ansi-regex": { ++ "version": "4.1.0", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", ++ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", ++ "dev": true ++ }, ++ "strip-ansi": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", ++ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", ++ "dev": true, ++ "requires": { ++ "ansi-regex": "^4.1.0" ++ } ++ } ++ } ++ }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true ++ }, ++ "ws": { ++ "version": "5.2.2", ++ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", ++ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", ++ "dev": true, ++ "requires": { ++ "async-limiter": "~1.0.0" ++ } ++ }, ++ "xml-name-validator": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", ++ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", ++ "dev": true ++ }, ++ "xmlchars": { ++ "version": "2.2.0", ++ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", ++ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", ++ "dev": true ++ }, ++ "xtend": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", ++ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", ++ "dev": true ++ }, ++ "y18n": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", ++ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", ++ "dev": true ++ }, ++ "yallist": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", ++ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", ++ "dev": true ++ }, ++ "yargs": { ++ "version": "14.2.3", ++ "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", ++ "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", ++ "dev": true, ++ "requires": { ++ "cliui": "^5.0.0", ++ "decamelize": "^1.2.0", ++ "find-up": "^3.0.0", ++ "get-caller-file": "^2.0.1", ++ "require-directory": "^2.1.1", ++ "require-main-filename": "^2.0.0", ++ "set-blocking": "^2.0.0", ++ "string-width": "^3.0.0", ++ "which-module": "^2.0.0", ++ "y18n": "^4.0.0", ++ "yargs-parser": "^15.0.1" ++ }, ++ "dependencies": { ++ "find-up": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", ++ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", ++ "dev": true, ++ "requires": { ++ "locate-path": "^3.0.0" ++ } ++ }, ++ "locate-path": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", ++ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", ++ "dev": true, ++ "requires": { ++ "p-locate": "^3.0.0", ++ "path-exists": "^3.0.0" ++ } ++ }, ++ "p-limit": { ++ "version": "2.3.0", ++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", ++ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", ++ "dev": true, ++ "requires": { ++ "p-try": "^2.0.0" ++ } ++ }, ++ "p-locate": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", ++ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", ++ "dev": true, ++ "requires": { ++ "p-limit": "^2.0.0" ++ } ++ }, ++ "p-try": { ++ "version": "2.2.0", ++ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", ++ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", ++ "dev": true ++ } ++ } ++ }, ++ "yargs-parser": { ++ "version": "15.0.1", ++ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", ++ "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", ++ "dev": true, ++ "requires": { ++ "camelcase": "^5.0.0", ++ "decamelize": "^1.2.0" ++ } + } + } + } +diff --git a/src/Api.elm b/src/Api.elm +index 82e5f6c..bd8c516 100644 +--- a/src/Api.elm ++++ b/src/Api.elm +@@ -36,7 +36,7 @@ init url = + { url | host = "api.codenamesgreen.com", path = "", query = Nothing, fragment = Nothing } + + _ -> +- { url | host = "api." ++ url.host, path = "", query = Nothing, fragment = Nothing } ++ { url | host = url.host, path = "/api", query = Nothing, fragment = Nothing } + in + { baseUrl = baseUrl } + +@@ -80,7 +80,7 @@ type alias Index = + + endpointUrl : Url.Url -> String -> String + endpointUrl baseUrl path = +- { baseUrl | path = path } ++ { baseUrl | path = baseUrl.path ++ path } + |> Url.toString + + diff --git a/systems/eldiron/websites/games/codenames/default.nix b/systems/eldiron/websites/games/codenames/default.nix new file mode 100644 index 0000000..7f09cc3 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/default.nix @@ -0,0 +1,76 @@ +{ config, lib, pkgs, ... }: +let + greenapid = pkgs.callPackage ./greenapid.nix {}; + frontend = pkgs.callPackage ./frontend.nix { nodeEnv = pkgs.callPackage pkgs.mylibs.nodeEnv {}; }; + wordlists = pkgs.runCommand "wordlists" {} '' + mkdir -p $out + cp -r ${./wordlists} $out/wordlists + ''; + cfg = config.myServices.websites.games.codenames; +in +{ + options.myServices.websites.games.codenames.enable = lib.mkEnableOption "Enable Codenames game"; + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.games.subdomains.codenames = with config.myServices.dns.helpers; + ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.codenames = { + file.datetime = "2022-08-27T14:08:00"; + service = { + name = "Codenames Green"; + description = "Co-op codenames app"; + website = "https://codenames.games.immae.eu/"; + logo = "https://codenames.games.immae.eu/images/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Codenames Green"; + website = "https://www.codenamesgreen.com/"; + license.url = "https://github.com/jbowens/codenamesgreen/blob/master/package.json"; + license.name = "MIT"; + version = greenapid.version; + source.url = "https://github.com/jbowens/codenamesgreen"; + }; + }; + systemd.services.codenames_api = { + description = "Api for codenames game"; + wantedBy = [ "multi-user.target" ]; + script = "${greenapid}/bin/greenapid"; + postStart = '' + sleep 5; + chown :wwwrun /run/codenamesgreen/socket.sock + chmod g+w /run/codenamesgreen/socket.sock + ''; + serviceConfig = { + User = "codenames"; + DynamicUser = true; + SupplementaryGroups = [ "wwwrun" ]; + Type = "simple"; + RuntimeDirectory = "codenamesgreen"; + WorkingDirectory = builtins.toString wordlists; + }; + }; + + security.acme.certs.games.domain = "games.immae.eu"; + security.acme.certs.games.extraDomainNames = [ "codenames.games.immae.eu" ]; + services.websites.env.tools.vhostConfs.games_codenames = { + certName = "games"; + hosts = [ "codenames.games.immae.eu" ]; + root = frontend; + extraConfig = [ + '' + ProxyPass /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/ + ProxyPassReverse /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/ + + <Directory ${frontend}> + FallbackResource index.html + </Directory> + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/games/codenames/deps.nix b/systems/eldiron/websites/games/codenames/deps.nix new file mode 100644 index 0000000..fddec2e --- /dev/null +++ b/systems/eldiron/websites/games/codenames/deps.nix @@ -0,0 +1,11 @@ +[ + { + goPackagePath = "github.com/jbowens/dictionary"; + fetch = { + type = "git"; + url = "https://github.com/jbowens/dictionary"; + rev = "229cf68df1a675e7a2462c4028d7df4abfd98854"; + sha256 = "0gyg3xcx4xqx6w8id2dq5s280mdfhs6yc9flg2jbj8jff040s28w"; + }; + } +] diff --git a/systems/eldiron/websites/games/codenames/elm-srcs.nix b/systems/eldiron/websites/games/codenames/elm-srcs.nix new file mode 100644 index 0000000..031e7ff --- /dev/null +++ b/systems/eldiron/websites/games/codenames/elm-srcs.nix @@ -0,0 +1,77 @@ +{ + + "elm/json" = { + sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh"; + version = "1.1.3"; + }; + + "perzanko/elm-loading" = { + sha256 = "0fs7ly4jib4gwhh157g91hgjryqja096i6jhbsq7qb4k4r3c5l80"; + version = "2.0.4"; + }; + + "elm/html" = { + sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; + version = "1.0.0"; + }; + + "elm/browser" = { + sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; + version = "1.0.1"; + }; + + "elm/core" = { + sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; + version = "1.0.2"; + }; + + "elm/url" = { + sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; + version = "1.0.0"; + }; + + "elm/http" = { + sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; + version = "2.0.0"; + }; + + "elm/bytes" = { + sha256 = "02ywbf52akvxclpxwj9n04jydajcbsbcbsnjs53yjc5lwck3abwj"; + version = "1.0.8"; + }; + + "elm/file" = { + sha256 = "1rljcb41dl97myidyjih2yliyzddkr2m7n74x7gg46rcw4jl0ny8"; + version = "1.0.5"; + }; + + "rtfeldman/elm-hex" = { + sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d"; + version = "1.0.0"; + }; + + "rtfeldman/elm-css" = { + sha256 = "0nxiyxyw3kw55whkpwhrcgc0dr6a8zlm2nqvsaqdw6mzkykg0ba6"; + version = "16.1.0"; + }; + + "elm/time" = { + sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; + version = "1.0.0"; + }; + + "elm/virtual-dom" = { + sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg"; + version = "1.0.2"; + }; + + "elm-explorations/test" = { + sha256 = "0rpynrm9irgzyynd1bws0xspww5lnwv7w7998750jb8kcrw39h0n"; + version = "1.0.0"; + }; + + "elm/random" = { + sha256 = "138n2455wdjwa657w6sjq18wx2r0k60ibpc4frhbqr50sncxrfdl"; + version = "1.0.0"; + }; +} diff --git a/systems/eldiron/websites/games/codenames/frontend.nix b/systems/eldiron/websites/games/codenames/frontend.nix new file mode 100644 index 0000000..0f29070 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/frontend.nix @@ -0,0 +1,22 @@ +{ callPackage, runCommand, nodejs, utillinux, nodeEnv, nodePackages, elmPackages }: +let + codenamesgreen_packages = callPackage ./node-packages.nix { inherit nodeEnv; }; +in +runCommand "frontend" { + buildInputs = [ + nodejs utillinux nodePackages.parcel-bundler elmPackages.elm + ]; +} '' + cp -a ${codenamesgreen_packages.package}/lib/node_modules/codenamesgreen . + chmod -R u+w codenamesgreen + cd codenamesgreen + ${elmPackages.fetchElmDeps { + elmPackages = import ./elm-srcs.nix; + registryDat = ./registry.dat; + elmVersion = elmPackages.elm.version; + }} + npx parcel build src/index.html + cp -a dist $out + cp -R src/images $out + cp src/robots.txt $out +'' diff --git a/systems/eldiron/websites/games/codenames/greenapid.nix b/systems/eldiron/websites/games/codenames/greenapid.nix new file mode 100644 index 0000000..52bda3b --- /dev/null +++ b/systems/eldiron/websites/games/codenames/greenapid.nix @@ -0,0 +1,18 @@ +{ buildGoPackage, fetchFromGitHub, socket ? "/run/codenamesgreen/socket.sock" }: +buildGoPackage rec { + pname = "greenapid"; + version = "master-6d014d0"; + + goPackagePath = "github.com/jbowens/codenamesgreen"; + subPackages = [ "cmd/greenapid" ]; + + src = fetchFromGitHub { + owner = "jbowens"; + repo = "codenamesgreen"; + rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b"; + sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0"; + }; + + patches = [ ./greenapid.patch ]; + goDeps = ./deps.nix; +} diff --git a/systems/eldiron/websites/games/codenames/greenapid.patch b/systems/eldiron/websites/games/codenames/greenapid.patch new file mode 100644 index 0000000..21a9fad --- /dev/null +++ b/systems/eldiron/websites/games/codenames/greenapid.patch @@ -0,0 +1,39 @@ +diff --git a/cmd/greenapid/main.go b/cmd/greenapid/main.go +index 86499e9..1589323 100644 +--- a/cmd/greenapid/main.go ++++ b/cmd/greenapid/main.go +@@ -1,6 +1,7 @@ + package main + + import ( ++ "net" + "net/http" + + "github.com/jbowens/codenamesgreen/gameapi" +@@ -13,6 +14,12 @@ func main() { + } + + h := gameapi.Handler(wordLists) +- err = http.ListenAndServe(":8080", h) ++ server := &http.Server{Handler: h} ++ ln, err := net.Listen("unix", "/run/codenamesgreen/socket.sock") ++ if err != nil { ++ panic(err) ++ } ++ ++ err = server.Serve(ln) + panic(err) + } +diff --git a/gameapi/handler.go b/gameapi/handler.go +index d67cf94..108e7e1 100644 +--- a/gameapi/handler.go ++++ b/gameapi/handler.go +@@ -101,7 +101,7 @@ func (h *handler) handleIndex(rw http.ResponseWriter, req *http.Request) { + for { + w1 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))]) + w2 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))]) +- id := fmt.Sprintf("%s-%s", w1, w2) ++ id = fmt.Sprintf("%s-%s", w1, w2) + if _, ok := h.games[id]; !ok { + break + } diff --git a/systems/eldiron/websites/games/codenames/immae-assets.patch b/systems/eldiron/websites/games/codenames/immae-assets.patch new file mode 100644 index 0000000..c53ab97 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/immae-assets.patch @@ -0,0 +1,15 @@ +diff --git a/src/index.html b/src/index.html +index 2559a37..84a0d64 100644 +--- a/src/index.html ++++ b/src/index.html +@@ -6,8 +6,8 @@ + <meta name="description" content="Online cooperative codenames game. Play with two or more players."> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> + <meta name="theme-color" content="#ffffff"> +- <link href="https://fonts.googleapis.com/css?family=Exo+2&display=swap" rel="stylesheet"> +- <link href="https://unpkg.com/ionicons@4.5.10-0/dist/css/ionicons.min.css" rel="stylesheet"> ++ <link href="https://assets.immae.eu/fonts/Exo2_swap/font.css" rel="stylesheet"> ++ <link href="https://assets.immae.eu/ionicons/4.5.10-0/dist/css/ionicons.min.css" rel="stylesheet"> + <link rel="manifest" href="/codenames.manifest"> + <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png"> diff --git a/systems/eldiron/websites/games/codenames/node-packages.nix b/systems/eldiron/websites/games/codenames/node-packages.nix new file mode 100644 index 0000000..1fb2db3 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/node-packages.nix @@ -0,0 +1,7622 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, fetchFromGitHub, runCommand, globalBuildInputs ? []}: + +let + sources = { + "@babel/code-frame-7.0.0" = { + name = "_at_babel_slash_code-frame"; + packageName = "@babel/code-frame"; + version = "7.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz"; + sha512 = "OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA=="; + }; + }; + "@babel/code-frame-7.8.3" = { + name = "_at_babel_slash_code-frame"; + packageName = "@babel/code-frame"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz"; + sha512 = "a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g=="; + }; + }; + "@babel/core-7.3.4" = { + name = "_at_babel_slash_core"; + packageName = "@babel/core"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz"; + sha512 = "jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA=="; + }; + }; + "@babel/generator-7.3.4" = { + name = "_at_babel_slash_generator"; + packageName = "@babel/generator"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz"; + sha512 = "8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg=="; + }; + }; + "@babel/generator-7.9.5" = { + name = "_at_babel_slash_generator"; + packageName = "@babel/generator"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz"; + sha512 = "GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ=="; + }; + }; + "@babel/helper-annotate-as-pure-7.8.3" = { + name = "_at_babel_slash_helper-annotate-as-pure"; + packageName = "@babel/helper-annotate-as-pure"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz"; + sha512 = "6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw=="; + }; + }; + "@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" = { + name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor"; + packageName = "@babel/helper-builder-binary-assignment-operator-visitor"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz"; + sha512 = "5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw=="; + }; + }; + "@babel/helper-builder-react-jsx-7.9.0" = { + name = "_at_babel_slash_helper-builder-react-jsx"; + packageName = "@babel/helper-builder-react-jsx"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz"; + sha512 = "weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw=="; + }; + }; + "@babel/helper-create-regexp-features-plugin-7.8.8" = { + name = "_at_babel_slash_helper-create-regexp-features-plugin"; + packageName = "@babel/helper-create-regexp-features-plugin"; + version = "7.8.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz"; + sha512 = "LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg=="; + }; + }; + "@babel/helper-define-map-7.8.3" = { + name = "_at_babel_slash_helper-define-map"; + packageName = "@babel/helper-define-map"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz"; + sha512 = "PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g=="; + }; + }; + "@babel/helper-explode-assignable-expression-7.8.3" = { + name = "_at_babel_slash_helper-explode-assignable-expression"; + packageName = "@babel/helper-explode-assignable-expression"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz"; + sha512 = "N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw=="; + }; + }; + "@babel/helper-function-name-7.9.5" = { + name = "_at_babel_slash_helper-function-name"; + packageName = "@babel/helper-function-name"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz"; + sha512 = "JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw=="; + }; + }; + "@babel/helper-get-function-arity-7.8.3" = { + name = "_at_babel_slash_helper-get-function-arity"; + packageName = "@babel/helper-get-function-arity"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz"; + sha512 = "FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA=="; + }; + }; + "@babel/helper-hoist-variables-7.8.3" = { + name = "_at_babel_slash_helper-hoist-variables"; + packageName = "@babel/helper-hoist-variables"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz"; + sha512 = "ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg=="; + }; + }; + "@babel/helper-member-expression-to-functions-7.8.3" = { + name = "_at_babel_slash_helper-member-expression-to-functions"; + packageName = "@babel/helper-member-expression-to-functions"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz"; + sha512 = "fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA=="; + }; + }; + "@babel/helper-module-imports-7.8.3" = { + name = "_at_babel_slash_helper-module-imports"; + packageName = "@babel/helper-module-imports"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz"; + sha512 = "R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg=="; + }; + }; + "@babel/helper-module-transforms-7.9.0" = { + name = "_at_babel_slash_helper-module-transforms"; + packageName = "@babel/helper-module-transforms"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz"; + sha512 = "0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA=="; + }; + }; + "@babel/helper-optimise-call-expression-7.8.3" = { + name = "_at_babel_slash_helper-optimise-call-expression"; + packageName = "@babel/helper-optimise-call-expression"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz"; + sha512 = "Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ=="; + }; + }; + "@babel/helper-plugin-utils-7.8.3" = { + name = "_at_babel_slash_helper-plugin-utils"; + packageName = "@babel/helper-plugin-utils"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz"; + sha512 = "j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="; + }; + }; + "@babel/helper-regex-7.8.3" = { + name = "_at_babel_slash_helper-regex"; + packageName = "@babel/helper-regex"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz"; + sha512 = "BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ=="; + }; + }; + "@babel/helper-remap-async-to-generator-7.8.3" = { + name = "_at_babel_slash_helper-remap-async-to-generator"; + packageName = "@babel/helper-remap-async-to-generator"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz"; + sha512 = "kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA=="; + }; + }; + "@babel/helper-replace-supers-7.8.6" = { + name = "_at_babel_slash_helper-replace-supers"; + packageName = "@babel/helper-replace-supers"; + version = "7.8.6"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz"; + sha512 = "PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA=="; + }; + }; + "@babel/helper-simple-access-7.8.3" = { + name = "_at_babel_slash_helper-simple-access"; + packageName = "@babel/helper-simple-access"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz"; + sha512 = "VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw=="; + }; + }; + "@babel/helper-split-export-declaration-7.8.3" = { + name = "_at_babel_slash_helper-split-export-declaration"; + packageName = "@babel/helper-split-export-declaration"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz"; + sha512 = "3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA=="; + }; + }; + "@babel/helper-validator-identifier-7.9.5" = { + name = "_at_babel_slash_helper-validator-identifier"; + packageName = "@babel/helper-validator-identifier"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz"; + sha512 = "/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g=="; + }; + }; + "@babel/helper-wrap-function-7.8.3" = { + name = "_at_babel_slash_helper-wrap-function"; + packageName = "@babel/helper-wrap-function"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz"; + sha512 = "LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ=="; + }; + }; + "@babel/helpers-7.9.2" = { + name = "_at_babel_slash_helpers"; + packageName = "@babel/helpers"; + version = "7.9.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz"; + sha512 = "JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA=="; + }; + }; + "@babel/highlight-7.9.0" = { + name = "_at_babel_slash_highlight"; + packageName = "@babel/highlight"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz"; + sha512 = "lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ=="; + }; + }; + "@babel/parser-7.3.4" = { + name = "_at_babel_slash_parser"; + packageName = "@babel/parser"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz"; + sha512 = "tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ=="; + }; + }; + "@babel/parser-7.9.4" = { + name = "_at_babel_slash_parser"; + packageName = "@babel/parser"; + version = "7.9.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz"; + sha512 = "bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA=="; + }; + }; + "@babel/plugin-proposal-async-generator-functions-7.8.3" = { + name = "_at_babel_slash_plugin-proposal-async-generator-functions"; + packageName = "@babel/plugin-proposal-async-generator-functions"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz"; + sha512 = "NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw=="; + }; + }; + "@babel/plugin-proposal-json-strings-7.8.3" = { + name = "_at_babel_slash_plugin-proposal-json-strings"; + packageName = "@babel/plugin-proposal-json-strings"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz"; + sha512 = "KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q=="; + }; + }; + "@babel/plugin-proposal-object-rest-spread-7.9.5" = { + name = "_at_babel_slash_plugin-proposal-object-rest-spread"; + packageName = "@babel/plugin-proposal-object-rest-spread"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz"; + sha512 = "VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg=="; + }; + }; + "@babel/plugin-proposal-optional-catch-binding-7.8.3" = { + name = "_at_babel_slash_plugin-proposal-optional-catch-binding"; + packageName = "@babel/plugin-proposal-optional-catch-binding"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz"; + sha512 = "0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw=="; + }; + }; + "@babel/plugin-proposal-unicode-property-regex-7.8.8" = { + name = "_at_babel_slash_plugin-proposal-unicode-property-regex"; + packageName = "@babel/plugin-proposal-unicode-property-regex"; + version = "7.8.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz"; + sha512 = "EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A=="; + }; + }; + "@babel/plugin-syntax-async-generators-7.8.4" = { + name = "_at_babel_slash_plugin-syntax-async-generators"; + packageName = "@babel/plugin-syntax-async-generators"; + version = "7.8.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"; + sha512 = "tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="; + }; + }; + "@babel/plugin-syntax-flow-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-flow"; + packageName = "@babel/plugin-syntax-flow"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz"; + sha512 = "innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg=="; + }; + }; + "@babel/plugin-syntax-json-strings-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-json-strings"; + packageName = "@babel/plugin-syntax-json-strings"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"; + sha512 = "lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="; + }; + }; + "@babel/plugin-syntax-jsx-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-jsx"; + packageName = "@babel/plugin-syntax-jsx"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz"; + sha512 = "WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A=="; + }; + }; + "@babel/plugin-syntax-object-rest-spread-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-object-rest-spread"; + packageName = "@babel/plugin-syntax-object-rest-spread"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"; + sha512 = "XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="; + }; + }; + "@babel/plugin-syntax-optional-catch-binding-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-optional-catch-binding"; + packageName = "@babel/plugin-syntax-optional-catch-binding"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"; + sha512 = "6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="; + }; + }; + "@babel/plugin-transform-arrow-functions-7.8.3" = { + name = "_at_babel_slash_plugin-transform-arrow-functions"; + packageName = "@babel/plugin-transform-arrow-functions"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz"; + sha512 = "0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg=="; + }; + }; + "@babel/plugin-transform-async-to-generator-7.8.3" = { + name = "_at_babel_slash_plugin-transform-async-to-generator"; + packageName = "@babel/plugin-transform-async-to-generator"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz"; + sha512 = "imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ=="; + }; + }; + "@babel/plugin-transform-block-scoped-functions-7.8.3" = { + name = "_at_babel_slash_plugin-transform-block-scoped-functions"; + packageName = "@babel/plugin-transform-block-scoped-functions"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz"; + sha512 = "vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg=="; + }; + }; + "@babel/plugin-transform-block-scoping-7.8.3" = { + name = "_at_babel_slash_plugin-transform-block-scoping"; + packageName = "@babel/plugin-transform-block-scoping"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz"; + sha512 = "pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w=="; + }; + }; + "@babel/plugin-transform-classes-7.9.5" = { + name = "_at_babel_slash_plugin-transform-classes"; + packageName = "@babel/plugin-transform-classes"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz"; + sha512 = "x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg=="; + }; + }; + "@babel/plugin-transform-computed-properties-7.8.3" = { + name = "_at_babel_slash_plugin-transform-computed-properties"; + packageName = "@babel/plugin-transform-computed-properties"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz"; + sha512 = "O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA=="; + }; + }; + "@babel/plugin-transform-destructuring-7.9.5" = { + name = "_at_babel_slash_plugin-transform-destructuring"; + packageName = "@babel/plugin-transform-destructuring"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz"; + sha512 = "j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q=="; + }; + }; + "@babel/plugin-transform-dotall-regex-7.8.3" = { + name = "_at_babel_slash_plugin-transform-dotall-regex"; + packageName = "@babel/plugin-transform-dotall-regex"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz"; + sha512 = "kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw=="; + }; + }; + "@babel/plugin-transform-duplicate-keys-7.8.3" = { + name = "_at_babel_slash_plugin-transform-duplicate-keys"; + packageName = "@babel/plugin-transform-duplicate-keys"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz"; + sha512 = "s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ=="; + }; + }; + "@babel/plugin-transform-exponentiation-operator-7.8.3" = { + name = "_at_babel_slash_plugin-transform-exponentiation-operator"; + packageName = "@babel/plugin-transform-exponentiation-operator"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz"; + sha512 = "zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ=="; + }; + }; + "@babel/plugin-transform-flow-strip-types-7.3.4" = { + name = "_at_babel_slash_plugin-transform-flow-strip-types"; + packageName = "@babel/plugin-transform-flow-strip-types"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz"; + sha512 = "PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA=="; + }; + }; + "@babel/plugin-transform-for-of-7.9.0" = { + name = "_at_babel_slash_plugin-transform-for-of"; + packageName = "@babel/plugin-transform-for-of"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz"; + sha512 = "lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ=="; + }; + }; + "@babel/plugin-transform-function-name-7.8.3" = { + name = "_at_babel_slash_plugin-transform-function-name"; + packageName = "@babel/plugin-transform-function-name"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz"; + sha512 = "rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ=="; + }; + }; + "@babel/plugin-transform-literals-7.8.3" = { + name = "_at_babel_slash_plugin-transform-literals"; + packageName = "@babel/plugin-transform-literals"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz"; + sha512 = "3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A=="; + }; + }; + "@babel/plugin-transform-modules-amd-7.9.0" = { + name = "_at_babel_slash_plugin-transform-modules-amd"; + packageName = "@babel/plugin-transform-modules-amd"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz"; + sha512 = "vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q=="; + }; + }; + "@babel/plugin-transform-modules-commonjs-7.2.0" = { + name = "_at_babel_slash_plugin-transform-modules-commonjs"; + packageName = "@babel/plugin-transform-modules-commonjs"; + version = "7.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz"; + sha512 = "V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ=="; + }; + }; + "@babel/plugin-transform-modules-systemjs-7.9.0" = { + name = "_at_babel_slash_plugin-transform-modules-systemjs"; + packageName = "@babel/plugin-transform-modules-systemjs"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz"; + sha512 = "FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ=="; + }; + }; + "@babel/plugin-transform-modules-umd-7.9.0" = { + name = "_at_babel_slash_plugin-transform-modules-umd"; + packageName = "@babel/plugin-transform-modules-umd"; + version = "7.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz"; + sha512 = "uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ=="; + }; + }; + "@babel/plugin-transform-named-capturing-groups-regex-7.8.3" = { + name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex"; + packageName = "@babel/plugin-transform-named-capturing-groups-regex"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz"; + sha512 = "f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw=="; + }; + }; + "@babel/plugin-transform-new-target-7.8.3" = { + name = "_at_babel_slash_plugin-transform-new-target"; + packageName = "@babel/plugin-transform-new-target"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz"; + sha512 = "QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw=="; + }; + }; + "@babel/plugin-transform-object-super-7.8.3" = { + name = "_at_babel_slash_plugin-transform-object-super"; + packageName = "@babel/plugin-transform-object-super"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz"; + sha512 = "57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ=="; + }; + }; + "@babel/plugin-transform-parameters-7.9.5" = { + name = "_at_babel_slash_plugin-transform-parameters"; + packageName = "@babel/plugin-transform-parameters"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz"; + sha512 = "0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA=="; + }; + }; + "@babel/plugin-transform-react-jsx-7.3.0" = { + name = "_at_babel_slash_plugin-transform-react-jsx"; + packageName = "@babel/plugin-transform-react-jsx"; + version = "7.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz"; + sha512 = "a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg=="; + }; + }; + "@babel/plugin-transform-regenerator-7.8.7" = { + name = "_at_babel_slash_plugin-transform-regenerator"; + packageName = "@babel/plugin-transform-regenerator"; + version = "7.8.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz"; + sha512 = "TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA=="; + }; + }; + "@babel/plugin-transform-shorthand-properties-7.8.3" = { + name = "_at_babel_slash_plugin-transform-shorthand-properties"; + packageName = "@babel/plugin-transform-shorthand-properties"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz"; + sha512 = "I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w=="; + }; + }; + "@babel/plugin-transform-spread-7.8.3" = { + name = "_at_babel_slash_plugin-transform-spread"; + packageName = "@babel/plugin-transform-spread"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz"; + sha512 = "CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g=="; + }; + }; + "@babel/plugin-transform-sticky-regex-7.8.3" = { + name = "_at_babel_slash_plugin-transform-sticky-regex"; + packageName = "@babel/plugin-transform-sticky-regex"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz"; + sha512 = "9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw=="; + }; + }; + "@babel/plugin-transform-template-literals-7.8.3" = { + name = "_at_babel_slash_plugin-transform-template-literals"; + packageName = "@babel/plugin-transform-template-literals"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz"; + sha512 = "820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ=="; + }; + }; + "@babel/plugin-transform-typeof-symbol-7.8.4" = { + name = "_at_babel_slash_plugin-transform-typeof-symbol"; + packageName = "@babel/plugin-transform-typeof-symbol"; + version = "7.8.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz"; + sha512 = "2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg=="; + }; + }; + "@babel/plugin-transform-unicode-regex-7.8.3" = { + name = "_at_babel_slash_plugin-transform-unicode-regex"; + packageName = "@babel/plugin-transform-unicode-regex"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz"; + sha512 = "+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw=="; + }; + }; + "@babel/preset-env-7.3.4" = { + name = "_at_babel_slash_preset-env"; + packageName = "@babel/preset-env"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz"; + sha512 = "2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA=="; + }; + }; + "@babel/runtime-7.3.4" = { + name = "_at_babel_slash_runtime"; + packageName = "@babel/runtime"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz"; + sha512 = "IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g=="; + }; + }; + "@babel/runtime-7.9.2" = { + name = "_at_babel_slash_runtime"; + packageName = "@babel/runtime"; + version = "7.9.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz"; + sha512 = "NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q=="; + }; + }; + "@babel/template-7.2.2" = { + name = "_at_babel_slash_template"; + packageName = "@babel/template"; + version = "7.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz"; + sha512 = "zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g=="; + }; + }; + "@babel/template-7.8.6" = { + name = "_at_babel_slash_template"; + packageName = "@babel/template"; + version = "7.8.6"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz"; + sha512 = "zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg=="; + }; + }; + "@babel/traverse-7.3.4" = { + name = "_at_babel_slash_traverse"; + packageName = "@babel/traverse"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz"; + sha512 = "TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ=="; + }; + }; + "@babel/traverse-7.9.5" = { + name = "_at_babel_slash_traverse"; + packageName = "@babel/traverse"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz"; + sha512 = "c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ=="; + }; + }; + "@babel/types-7.3.4" = { + name = "_at_babel_slash_types"; + packageName = "@babel/types"; + version = "7.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz"; + sha512 = "WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ=="; + }; + }; + "@babel/types-7.9.5" = { + name = "_at_babel_slash_types"; + packageName = "@babel/types"; + version = "7.9.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz"; + sha512 = "XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg=="; + }; + }; + "@iarna/toml-2.2.5" = { + name = "_at_iarna_slash_toml"; + packageName = "@iarna/toml"; + version = "2.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz"; + sha512 = "trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg=="; + }; + }; + "@mrmlnc/readdir-enhanced-2.2.1" = { + name = "_at_mrmlnc_slash_readdir-enhanced"; + packageName = "@mrmlnc/readdir-enhanced"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz"; + sha512 = "bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g=="; + }; + }; + "@nodelib/fs.stat-1.1.3" = { + name = "_at_nodelib_slash_fs.stat"; + packageName = "@nodelib/fs.stat"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"; + sha512 = "shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="; + }; + }; + "@parcel/fs-1.11.0" = { + name = "_at_parcel_slash_fs"; + packageName = "@parcel/fs"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz"; + sha512 = "86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA=="; + }; + }; + "@parcel/logger-1.11.1" = { + name = "_at_parcel_slash_logger"; + packageName = "@parcel/logger"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz"; + sha512 = "9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA=="; + }; + }; + "@parcel/utils-1.11.0" = { + name = "_at_parcel_slash_utils"; + packageName = "@parcel/utils"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz"; + sha512 = "cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ=="; + }; + }; + "@parcel/watcher-1.12.1" = { + name = "_at_parcel_slash_watcher"; + packageName = "@parcel/watcher"; + version = "1.12.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz"; + sha512 = "od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA=="; + }; + }; + "@parcel/workers-1.11.0" = { + name = "_at_parcel_slash_workers"; + packageName = "@parcel/workers"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz"; + sha512 = "USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ=="; + }; + }; + "@types/q-1.5.2" = { + name = "_at_types_slash_q"; + packageName = "@types/q"; + version = "1.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz"; + sha512 = "ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw=="; + }; + }; + "abab-2.0.3" = { + name = "abab"; + packageName = "abab"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz"; + sha512 = "tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg=="; + }; + }; + "abbrev-1.1.1" = { + name = "abbrev"; + packageName = "abbrev"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"; + sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="; + }; + }; + "acorn-6.4.1" = { + name = "acorn"; + packageName = "acorn"; + version = "6.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz"; + sha512 = "ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="; + }; + }; + "acorn-7.1.1" = { + name = "acorn"; + packageName = "acorn"; + version = "7.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz"; + sha512 = "add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="; + }; + }; + "acorn-globals-4.3.4" = { + name = "acorn-globals"; + packageName = "acorn-globals"; + version = "4.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz"; + sha512 = "clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A=="; + }; + }; + "acorn-walk-6.2.0" = { + name = "acorn-walk"; + packageName = "acorn-walk"; + version = "6.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz"; + sha512 = "7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="; + }; + }; + "ajv-6.12.2" = { + name = "ajv"; + packageName = "ajv"; + version = "6.12.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz"; + sha512 = "k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ=="; + }; + }; + "alphanum-sort-1.0.2" = { + name = "alphanum-sort"; + packageName = "alphanum-sort"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz"; + sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3"; + }; + }; + "ansi-regex-2.1.1" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + }; + "ansi-regex-3.0.0" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + }; + "ansi-regex-4.1.0" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz"; + sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="; + }; + }; + "ansi-styles-2.2.1" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + }; + "ansi-styles-3.2.1" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "3.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="; + }; + }; + "ansi-to-html-0.6.14" = { + name = "ansi-to-html"; + packageName = "ansi-to-html"; + version = "0.6.14"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz"; + sha512 = "7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA=="; + }; + }; + "anymatch-2.0.0" = { + name = "anymatch"; + packageName = "anymatch"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz"; + sha512 = "5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw=="; + }; + }; + "argparse-1.0.10" = { + name = "argparse"; + packageName = "argparse"; + version = "1.0.10"; + src = fetchurl { + url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"; + sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="; + }; + }; + "arr-diff-4.0.0" = { + name = "arr-diff"; + packageName = "arr-diff"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz"; + sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; + }; + }; + "arr-flatten-1.1.0" = { + name = "arr-flatten"; + packageName = "arr-flatten"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz"; + sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="; + }; + }; + "arr-union-3.1.0" = { + name = "arr-union"; + packageName = "arr-union"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz"; + sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; + }; + }; + "array-equal-1.0.0" = { + name = "array-equal"; + packageName = "array-equal"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz"; + sha1 = "8c2a5ef2472fd9ea742b04c77a75093ba2757c93"; + }; + }; + "array-unique-0.3.2" = { + name = "array-unique"; + packageName = "array-unique"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz"; + sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; + }; + }; + "asn1-0.2.4" = { + name = "asn1"; + packageName = "asn1"; + version = "0.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"; + sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="; + }; + }; + "asn1.js-4.10.1" = { + name = "asn1.js"; + packageName = "asn1.js"; + version = "4.10.1"; + src = fetchurl { + url = "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz"; + sha512 = "p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw=="; + }; + }; + "assert-1.5.0" = { + name = "assert"; + packageName = "assert"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz"; + sha512 = "EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA=="; + }; + }; + "assert-plus-1.0.0" = { + name = "assert-plus"; + packageName = "assert-plus"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + }; + "assign-symbols-1.0.0" = { + name = "assign-symbols"; + packageName = "assign-symbols"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz"; + sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; + }; + }; + "async-each-1.0.3" = { + name = "async-each"; + packageName = "async-each"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz"; + sha512 = "z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="; + }; + }; + "async-limiter-1.0.1" = { + name = "async-limiter"; + packageName = "async-limiter"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz"; + sha512 = "csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="; + }; + }; + "asynckit-0.4.0" = { + name = "asynckit"; + packageName = "asynckit"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + }; + "atob-2.1.2" = { + name = "atob"; + packageName = "atob"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"; + sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="; + }; + }; + "aws-sign2-0.7.0" = { + name = "aws-sign2"; + packageName = "aws-sign2"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + }; + "aws4-1.9.1" = { + name = "aws4"; + packageName = "aws4"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz"; + sha512 = "wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="; + }; + }; + "babel-plugin-dynamic-import-node-2.3.3" = { + name = "babel-plugin-dynamic-import-node"; + packageName = "babel-plugin-dynamic-import-node"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"; + sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ=="; + }; + }; + "babel-runtime-6.26.0" = { + name = "babel-runtime"; + packageName = "babel-runtime"; + version = "6.26.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz"; + sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; + }; + }; + "babel-types-6.26.0" = { + name = "babel-types"; + packageName = "babel-types"; + version = "6.26.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz"; + sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497"; + }; + }; + "babylon-walk-1.0.2" = { + name = "babylon-walk"; + packageName = "babylon-walk"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz"; + sha1 = "3b15a5ddbb482a78b4ce9c01c8ba181702d9d6ce"; + }; + }; + "balanced-match-1.0.0" = { + name = "balanced-match"; + packageName = "balanced-match"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + }; + "base-0.11.2" = { + name = "base"; + packageName = "base"; + version = "0.11.2"; + src = fetchurl { + url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz"; + sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg=="; + }; + }; + "base64-js-1.3.1" = { + name = "base64-js"; + packageName = "base64-js"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz"; + sha512 = "mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="; + }; + }; + "bcrypt-pbkdf-1.0.2" = { + name = "bcrypt-pbkdf"; + packageName = "bcrypt-pbkdf"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + }; + "binary-extensions-1.13.1" = { + name = "binary-extensions"; + packageName = "binary-extensions"; + version = "1.13.1"; + src = fetchurl { + url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz"; + sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="; + }; + }; + "bindings-1.5.0" = { + name = "bindings"; + packageName = "bindings"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"; + sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="; + }; + }; + "bn.js-4.11.8" = { + name = "bn.js"; + packageName = "bn.js"; + version = "4.11.8"; + src = fetchurl { + url = "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz"; + sha512 = "ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="; + }; + }; + "boolbase-1.0.0" = { + name = "boolbase"; + packageName = "boolbase"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"; + sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"; + }; + }; + "brace-expansion-1.1.11" = { + name = "brace-expansion"; + packageName = "brace-expansion"; + version = "1.1.11"; + src = fetchurl { + url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="; + }; + }; + "braces-2.3.2" = { + name = "braces"; + packageName = "braces"; + version = "2.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz"; + sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w=="; + }; + }; + "brfs-1.6.1" = { + name = "brfs"; + packageName = "brfs"; + version = "1.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz"; + sha512 = "OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ=="; + }; + }; + "brorand-1.1.0" = { + name = "brorand"; + packageName = "brorand"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz"; + sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; + }; + }; + "browser-process-hrtime-1.0.0" = { + name = "browser-process-hrtime"; + packageName = "browser-process-hrtime"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"; + sha512 = "9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="; + }; + }; + "browserify-aes-1.2.0" = { + name = "browserify-aes"; + packageName = "browserify-aes"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz"; + sha512 = "+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA=="; + }; + }; + "browserify-cipher-1.0.1" = { + name = "browserify-cipher"; + packageName = "browserify-cipher"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz"; + sha512 = "sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w=="; + }; + }; + "browserify-des-1.0.2" = { + name = "browserify-des"; + packageName = "browserify-des"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz"; + sha512 = "BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A=="; + }; + }; + "browserify-rsa-4.0.1" = { + name = "browserify-rsa"; + packageName = "browserify-rsa"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz"; + sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524"; + }; + }; + "browserify-sign-4.0.4" = { + name = "browserify-sign"; + packageName = "browserify-sign"; + version = "4.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz"; + sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"; + }; + }; + "browserify-zlib-0.2.0" = { + name = "browserify-zlib"; + packageName = "browserify-zlib"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz"; + sha512 = "Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA=="; + }; + }; + "browserslist-4.12.0" = { + name = "browserslist"; + packageName = "browserslist"; + version = "4.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz"; + sha512 = "UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg=="; + }; + }; + "buffer-4.9.2" = { + name = "buffer"; + packageName = "buffer"; + version = "4.9.2"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz"; + sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="; + }; + }; + "buffer-equal-0.0.1" = { + name = "buffer-equal"; + packageName = "buffer-equal"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz"; + sha1 = "91bc74b11ea405bc916bc6aa908faafa5b4aac4b"; + }; + }; + "buffer-from-1.1.1" = { + name = "buffer-from"; + packageName = "buffer-from"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"; + sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="; + }; + }; + "buffer-xor-1.0.3" = { + name = "buffer-xor"; + packageName = "buffer-xor"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz"; + sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9"; + }; + }; + "builtin-status-codes-3.0.0" = { + name = "builtin-status-codes"; + packageName = "builtin-status-codes"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"; + sha1 = "85982878e21b98e1c66425e03d0174788f569ee8"; + }; + }; + "cache-base-1.0.1" = { + name = "cache-base"; + packageName = "cache-base"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz"; + sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ=="; + }; + }; + "call-me-maybe-1.0.1" = { + name = "call-me-maybe"; + packageName = "call-me-maybe"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz"; + sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b"; + }; + }; + "caller-callsite-2.0.0" = { + name = "caller-callsite"; + packageName = "caller-callsite"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz"; + sha1 = "847e0fce0a223750a9a027c54b33731ad3154134"; + }; + }; + "caller-path-2.0.0" = { + name = "caller-path"; + packageName = "caller-path"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz"; + sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4"; + }; + }; + "callsites-2.0.0" = { + name = "callsites"; + packageName = "callsites"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz"; + sha1 = "06eb84f00eea413da86affefacbffb36093b3c50"; + }; + }; + "camelcase-5.3.1" = { + name = "camelcase"; + packageName = "camelcase"; + version = "5.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"; + sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="; + }; + }; + "caniuse-api-3.0.0" = { + name = "caniuse-api"; + packageName = "caniuse-api"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz"; + sha512 = "bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="; + }; + }; + "caniuse-lite-1.0.30001048" = { + name = "caniuse-lite"; + packageName = "caniuse-lite"; + version = "1.0.30001048"; + src = fetchurl { + url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz"; + sha512 = "g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg=="; + }; + }; + "caseless-0.12.0" = { + name = "caseless"; + packageName = "caseless"; + version = "0.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + }; + "chalk-1.1.3" = { + name = "chalk"; + packageName = "chalk"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + }; + "chalk-2.4.2" = { + name = "chalk"; + packageName = "chalk"; + version = "2.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"; + sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="; + }; + }; + "chokidar-2.1.8" = { + name = "chokidar"; + packageName = "chokidar"; + version = "2.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz"; + sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="; + }; + }; + "cipher-base-1.0.4" = { + name = "cipher-base"; + packageName = "cipher-base"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz"; + sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q=="; + }; + }; + "class-utils-0.3.6" = { + name = "class-utils"; + packageName = "class-utils"; + version = "0.3.6"; + src = fetchurl { + url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz"; + sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="; + }; + }; + "cli-cursor-2.1.0" = { + name = "cli-cursor"; + packageName = "cli-cursor"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz"; + sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5"; + }; + }; + "cli-spinners-1.3.1" = { + name = "cli-spinners"; + packageName = "cli-spinners"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz"; + sha512 = "1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg=="; + }; + }; + "cliui-5.0.0" = { + name = "cliui"; + packageName = "cliui"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz"; + sha512 = "PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA=="; + }; + }; + "clone-1.0.4" = { + name = "clone"; + packageName = "clone"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz"; + sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; + }; + }; + "clone-2.1.2" = { + name = "clone"; + packageName = "clone"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz"; + sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f"; + }; + }; + "clones-1.2.0" = { + name = "clones"; + packageName = "clones"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz"; + sha512 = "FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ=="; + }; + }; + "coa-2.0.2" = { + name = "coa"; + packageName = "coa"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz"; + sha512 = "q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA=="; + }; + }; + "collection-visit-1.0.0" = { + name = "collection-visit"; + packageName = "collection-visit"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz"; + sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; + }; + }; + "color-3.1.2" = { + name = "color"; + packageName = "color"; + version = "3.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/color/-/color-3.1.2.tgz"; + sha512 = "vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg=="; + }; + }; + "color-convert-1.9.3" = { + name = "color-convert"; + packageName = "color-convert"; + version = "1.9.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"; + sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="; + }; + }; + "color-name-1.1.3" = { + name = "color-name"; + packageName = "color-name"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + }; + "color-string-1.5.3" = { + name = "color-string"; + packageName = "color-string"; + version = "1.5.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz"; + sha512 = "dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw=="; + }; + }; + "combined-stream-1.0.8" = { + name = "combined-stream"; + packageName = "combined-stream"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"; + sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="; + }; + }; + "command-exists-1.2.9" = { + name = "command-exists"; + packageName = "command-exists"; + version = "1.2.9"; + src = fetchurl { + url = "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz"; + sha512 = "LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="; + }; + }; + "commander-2.20.3" = { + name = "commander"; + packageName = "commander"; + version = "2.20.3"; + src = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"; + sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="; + }; + }; + "component-emitter-1.3.0" = { + name = "component-emitter"; + packageName = "component-emitter"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz"; + sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="; + }; + }; + "concat-map-0.0.1" = { + name = "concat-map"; + packageName = "concat-map"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + }; + "concat-stream-1.6.2" = { + name = "concat-stream"; + packageName = "concat-stream"; + version = "1.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz"; + sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="; + }; + }; + "config-chain-1.1.12" = { + name = "config-chain"; + packageName = "config-chain"; + version = "1.1.12"; + src = fetchurl { + url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz"; + sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA=="; + }; + }; + "console-browserify-1.2.0" = { + name = "console-browserify"; + packageName = "console-browserify"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz"; + sha512 = "ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="; + }; + }; + "constants-browserify-1.0.0" = { + name = "constants-browserify"; + packageName = "constants-browserify"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz"; + sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; + }; + }; + "convert-source-map-1.7.0" = { + name = "convert-source-map"; + packageName = "convert-source-map"; + version = "1.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz"; + sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA=="; + }; + }; + "copy-descriptor-0.1.1" = { + name = "copy-descriptor"; + packageName = "copy-descriptor"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; + sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; + }; + }; + "core-js-2.6.11" = { + name = "core-js"; + packageName = "core-js"; + version = "2.6.11"; + src = fetchurl { + url = "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz"; + sha512 = "5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="; + }; + }; + "core-util-is-1.0.2" = { + name = "core-util-is"; + packageName = "core-util-is"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + }; + "cosmiconfig-5.2.1" = { + name = "cosmiconfig"; + packageName = "cosmiconfig"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz"; + sha512 = "H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA=="; + }; + }; + "create-ecdh-4.0.3" = { + name = "create-ecdh"; + packageName = "create-ecdh"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz"; + sha512 = "GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw=="; + }; + }; + "create-hash-1.2.0" = { + name = "create-hash"; + packageName = "create-hash"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz"; + sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="; + }; + }; + "create-hmac-1.1.7" = { + name = "create-hmac"; + packageName = "create-hmac"; + version = "1.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz"; + sha512 = "MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="; + }; + }; + "cross-spawn-6.0.5" = { + name = "cross-spawn"; + packageName = "cross-spawn"; + version = "6.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"; + sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="; + }; + }; + "crypto-browserify-3.12.0" = { + name = "crypto-browserify"; + packageName = "crypto-browserify"; + version = "3.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz"; + sha512 = "fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg=="; + }; + }; + "css-color-names-0.0.4" = { + name = "css-color-names"; + packageName = "css-color-names"; + version = "0.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz"; + sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0"; + }; + }; + "css-declaration-sorter-4.0.1" = { + name = "css-declaration-sorter"; + packageName = "css-declaration-sorter"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"; + sha512 = "BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA=="; + }; + }; + "css-modules-loader-core-1.1.0" = { + name = "css-modules-loader-core"; + packageName = "css-modules-loader-core"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz"; + sha1 = "5908668294a1becd261ae0a4ce21b0b551f21d16"; + }; + }; + "css-select-2.1.0" = { + name = "css-select"; + packageName = "css-select"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz"; + sha512 = "Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ=="; + }; + }; + "css-select-base-adapter-0.1.1" = { + name = "css-select-base-adapter"; + packageName = "css-select-base-adapter"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"; + sha512 = "jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="; + }; + }; + "css-selector-tokenizer-0.7.2" = { + name = "css-selector-tokenizer"; + packageName = "css-selector-tokenizer"; + version = "0.7.2"; + src = fetchurl { + url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz"; + sha512 = "yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw=="; + }; + }; + "css-tree-1.0.0-alpha.37" = { + name = "css-tree"; + packageName = "css-tree"; + version = "1.0.0-alpha.37"; + src = fetchurl { + url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz"; + sha512 = "DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg=="; + }; + }; + "css-tree-1.0.0-alpha.39" = { + name = "css-tree"; + packageName = "css-tree"; + version = "1.0.0-alpha.39"; + src = fetchurl { + url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz"; + sha512 = "7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA=="; + }; + }; + "css-what-3.2.1" = { + name = "css-what"; + packageName = "css-what"; + version = "3.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz"; + sha512 = "WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw=="; + }; + }; + "cssesc-3.0.0" = { + name = "cssesc"; + packageName = "cssesc"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"; + sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="; + }; + }; + "cssnano-4.1.10" = { + name = "cssnano"; + packageName = "cssnano"; + version = "4.1.10"; + src = fetchurl { + url = "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz"; + sha512 = "5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ=="; + }; + }; + "cssnano-preset-default-4.0.7" = { + name = "cssnano-preset-default"; + packageName = "cssnano-preset-default"; + version = "4.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz"; + sha512 = "x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA=="; + }; + }; + "cssnano-util-get-arguments-4.0.0" = { + name = "cssnano-util-get-arguments"; + packageName = "cssnano-util-get-arguments"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"; + sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f"; + }; + }; + "cssnano-util-get-match-4.0.0" = { + name = "cssnano-util-get-match"; + packageName = "cssnano-util-get-match"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"; + sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d"; + }; + }; + "cssnano-util-raw-cache-4.0.1" = { + name = "cssnano-util-raw-cache"; + packageName = "cssnano-util-raw-cache"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"; + sha512 = "qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA=="; + }; + }; + "cssnano-util-same-parent-4.0.1" = { + name = "cssnano-util-same-parent"; + packageName = "cssnano-util-same-parent"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"; + sha512 = "WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="; + }; + }; + "csso-4.0.3" = { + name = "csso"; + packageName = "csso"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz"; + sha512 = "NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ=="; + }; + }; + "cssom-0.3.8" = { + name = "cssom"; + packageName = "cssom"; + version = "0.3.8"; + src = fetchurl { + url = "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz"; + sha512 = "b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="; + }; + }; + "cssstyle-1.4.0" = { + name = "cssstyle"; + packageName = "cssstyle"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz"; + sha512 = "GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA=="; + }; + }; + "dashdash-1.14.1" = { + name = "dashdash"; + packageName = "dashdash"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + }; + "data-urls-1.1.0" = { + name = "data-urls"; + packageName = "data-urls"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz"; + sha512 = "YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ=="; + }; + }; + "deasync-0.1.19" = { + name = "deasync"; + packageName = "deasync"; + version = "0.1.19"; + src = fetchurl { + url = "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz"; + sha512 = "oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg=="; + }; + }; + "debug-2.6.9" = { + name = "debug"; + packageName = "debug"; + version = "2.6.9"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"; + sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="; + }; + }; + "debug-4.1.1" = { + name = "debug"; + packageName = "debug"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz"; + sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw=="; + }; + }; + "decamelize-1.2.0" = { + name = "decamelize"; + packageName = "decamelize"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + }; + "decode-uri-component-0.2.0" = { + name = "decode-uri-component"; + packageName = "decode-uri-component"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + }; + "deep-is-0.1.3" = { + name = "deep-is"; + packageName = "deep-is"; + version = "0.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + }; + "defaults-1.0.3" = { + name = "defaults"; + packageName = "defaults"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + }; + "define-properties-1.1.3" = { + name = "define-properties"; + packageName = "define-properties"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz"; + sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ=="; + }; + }; + "define-property-0.2.5" = { + name = "define-property"; + packageName = "define-property"; + version = "0.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz"; + sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; + }; + }; + "define-property-1.0.0" = { + name = "define-property"; + packageName = "define-property"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz"; + sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; + }; + }; + "define-property-2.0.2" = { + name = "define-property"; + packageName = "define-property"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz"; + sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ=="; + }; + }; + "delayed-stream-1.0.0" = { + name = "delayed-stream"; + packageName = "delayed-stream"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + }; + "depd-1.1.2" = { + name = "depd"; + packageName = "depd"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + }; + "des.js-1.0.1" = { + name = "des.js"; + packageName = "des.js"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz"; + sha512 = "Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA=="; + }; + }; + "destroy-1.0.4" = { + name = "destroy"; + packageName = "destroy"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + }; + "diffie-hellman-5.0.3" = { + name = "diffie-hellman"; + packageName = "diffie-hellman"; + version = "5.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz"; + sha512 = "kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg=="; + }; + }; + "dom-serializer-0.2.2" = { + name = "dom-serializer"; + packageName = "dom-serializer"; + version = "0.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz"; + sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="; + }; + }; + "domain-browser-1.2.0" = { + name = "domain-browser"; + packageName = "domain-browser"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz"; + sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="; + }; + }; + "domelementtype-1.3.1" = { + name = "domelementtype"; + packageName = "domelementtype"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz"; + sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="; + }; + }; + "domelementtype-2.0.1" = { + name = "domelementtype"; + packageName = "domelementtype"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz"; + sha512 = "5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="; + }; + }; + "domexception-1.0.1" = { + name = "domexception"; + packageName = "domexception"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz"; + sha512 = "raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug=="; + }; + }; + "domhandler-2.4.2" = { + name = "domhandler"; + packageName = "domhandler"; + version = "2.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz"; + sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA=="; + }; + }; + "domutils-1.7.0" = { + name = "domutils"; + packageName = "domutils"; + version = "1.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz"; + sha512 = "Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="; + }; + }; + "dot-prop-5.2.0" = { + name = "dot-prop"; + packageName = "dot-prop"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz"; + sha512 = "uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A=="; + }; + }; + "dotenv-5.0.1" = { + name = "dotenv"; + packageName = "dotenv"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz"; + sha512 = "4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow=="; + }; + }; + "dotenv-expand-4.2.0" = { + name = "dotenv-expand"; + packageName = "dotenv-expand"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz"; + sha1 = "def1f1ca5d6059d24a766e587942c21106ce1275"; + }; + }; + "duplexer2-0.1.4" = { + name = "duplexer2"; + packageName = "duplexer2"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz"; + sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1"; + }; + }; + "ecc-jsbn-0.1.2" = { + name = "ecc-jsbn"; + packageName = "ecc-jsbn"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + }; + "editorconfig-0.15.3" = { + name = "editorconfig"; + packageName = "editorconfig"; + version = "0.15.3"; + src = fetchurl { + url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz"; + sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g=="; + }; + }; + "ee-first-1.1.1" = { + name = "ee-first"; + packageName = "ee-first"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + }; + "electron-to-chromium-1.3.418" = { + name = "electron-to-chromium"; + packageName = "electron-to-chromium"; + version = "1.3.418"; + src = fetchurl { + url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz"; + sha512 = "i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug=="; + }; + }; + "elliptic-6.5.2" = { + name = "elliptic"; + packageName = "elliptic"; + version = "6.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz"; + sha512 = "f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw=="; + }; + }; + "elm-hot-1.1.1" = { + name = "elm-hot"; + packageName = "elm-hot"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz"; + sha512 = "ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA=="; + }; + }; + "emoji-regex-7.0.3" = { + name = "emoji-regex"; + packageName = "emoji-regex"; + version = "7.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz"; + sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="; + }; + }; + "encodeurl-1.0.2" = { + name = "encodeurl"; + packageName = "encodeurl"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + }; + "entities-1.1.2" = { + name = "entities"; + packageName = "entities"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz"; + sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="; + }; + }; + "entities-2.0.0" = { + name = "entities"; + packageName = "entities"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz"; + sha512 = "D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="; + }; + }; + "error-ex-1.3.2" = { + name = "error-ex"; + packageName = "error-ex"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"; + sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="; + }; + }; + "es-abstract-1.17.5" = { + name = "es-abstract"; + packageName = "es-abstract"; + version = "1.17.5"; + src = fetchurl { + url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz"; + sha512 = "BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg=="; + }; + }; + "es-to-primitive-1.2.1" = { + name = "es-to-primitive"; + packageName = "es-to-primitive"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz"; + sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="; + }; + }; + "escape-html-1.0.3" = { + name = "escape-html"; + packageName = "escape-html"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + }; + "escape-string-regexp-1.0.5" = { + name = "escape-string-regexp"; + packageName = "escape-string-regexp"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + }; + "escodegen-1.14.1" = { + name = "escodegen"; + packageName = "escodegen"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz"; + sha512 = "Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ=="; + }; + }; + "escodegen-1.9.1" = { + name = "escodegen"; + packageName = "escodegen"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz"; + sha512 = "6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q=="; + }; + }; + "esprima-3.1.3" = { + name = "esprima"; + packageName = "esprima"; + version = "3.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz"; + sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633"; + }; + }; + "esprima-4.0.1" = { + name = "esprima"; + packageName = "esprima"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"; + sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="; + }; + }; + "estraverse-4.3.0" = { + name = "estraverse"; + packageName = "estraverse"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"; + sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="; + }; + }; + "esutils-2.0.3" = { + name = "esutils"; + packageName = "esutils"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"; + sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="; + }; + }; + "etag-1.8.1" = { + name = "etag"; + packageName = "etag"; + version = "1.8.1"; + src = fetchurl { + url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + }; + "events-3.1.0" = { + name = "events"; + packageName = "events"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/events/-/events-3.1.0.tgz"; + sha512 = "Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="; + }; + }; + "evp_bytestokey-1.0.3" = { + name = "evp_bytestokey"; + packageName = "evp_bytestokey"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"; + sha512 = "/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA=="; + }; + }; + "expand-brackets-2.1.4" = { + name = "expand-brackets"; + packageName = "expand-brackets"; + version = "2.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz"; + sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; + }; + }; + "extend-3.0.2" = { + name = "extend"; + packageName = "extend"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"; + sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="; + }; + }; + "extend-shallow-2.0.1" = { + name = "extend-shallow"; + packageName = "extend-shallow"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz"; + sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; + }; + }; + "extend-shallow-3.0.2" = { + name = "extend-shallow"; + packageName = "extend-shallow"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz"; + sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; + }; + }; + "extglob-2.0.4" = { + name = "extglob"; + packageName = "extglob"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz"; + sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw=="; + }; + }; + "extsprintf-1.3.0" = { + name = "extsprintf"; + packageName = "extsprintf"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + }; + "falafel-2.2.4" = { + name = "falafel"; + packageName = "falafel"; + version = "2.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz"; + sha512 = "0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ=="; + }; + }; + "fast-deep-equal-3.1.1" = { + name = "fast-deep-equal"; + packageName = "fast-deep-equal"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; + sha512 = "8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="; + }; + }; + "fast-glob-2.2.7" = { + name = "fast-glob"; + packageName = "fast-glob"; + version = "2.2.7"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz"; + sha512 = "g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw=="; + }; + }; + "fast-json-stable-stringify-2.1.0" = { + name = "fast-json-stable-stringify"; + packageName = "fast-json-stable-stringify"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; + sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="; + }; + }; + "fast-levenshtein-2.0.6" = { + name = "fast-levenshtein"; + packageName = "fast-levenshtein"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + }; + "fastparse-1.1.2" = { + name = "fastparse"; + packageName = "fastparse"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz"; + sha512 = "483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="; + }; + }; + "file-uri-to-path-1.0.0" = { + name = "file-uri-to-path"; + packageName = "file-uri-to-path"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; + sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="; + }; + }; + "filesize-3.6.1" = { + name = "filesize"; + packageName = "filesize"; + version = "3.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz"; + sha512 = "7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="; + }; + }; + "fill-range-4.0.0" = { + name = "fill-range"; + packageName = "fill-range"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz"; + sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; + }; + }; + "find-elm-dependencies-2.0.2" = { + name = "find-elm-dependencies"; + packageName = "find-elm-dependencies"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz"; + sha512 = "nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ=="; + }; + }; + "find-up-2.1.0" = { + name = "find-up"; + packageName = "find-up"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz"; + sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; + }; + }; + "find-up-3.0.0" = { + name = "find-up"; + packageName = "find-up"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz"; + sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="; + }; + }; + "firstline-1.2.0" = { + name = "firstline"; + packageName = "firstline"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz"; + sha1 = "c9f4886e7f7fbf0afc12d71941dce06b192aea05"; + }; + }; + "for-in-1.0.2" = { + name = "for-in"; + packageName = "for-in"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz"; + sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; + }; + }; + "foreach-2.0.5" = { + name = "foreach"; + packageName = "foreach"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz"; + sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99"; + }; + }; + "forever-agent-0.6.1" = { + name = "forever-agent"; + packageName = "forever-agent"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + }; + "form-data-2.3.3" = { + name = "form-data"; + packageName = "form-data"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz"; + sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="; + }; + }; + "fragment-cache-0.2.1" = { + name = "fragment-cache"; + packageName = "fragment-cache"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz"; + sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; + }; + }; + "fresh-0.5.2" = { + name = "fresh"; + packageName = "fresh"; + version = "0.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + }; + "fs.realpath-1.0.0" = { + name = "fs.realpath"; + packageName = "fs.realpath"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + }; + "fsevents-1.2.12" = { + name = "fsevents"; + packageName = "fsevents"; + version = "1.2.12"; + src = fetchurl { + url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz"; + sha512 = "Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q=="; + }; + }; + "function-bind-1.1.1" = { + name = "function-bind"; + packageName = "function-bind"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"; + sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="; + }; + }; + "get-caller-file-2.0.5" = { + name = "get-caller-file"; + packageName = "get-caller-file"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"; + sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="; + }; + }; + "get-port-3.2.0" = { + name = "get-port"; + packageName = "get-port"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz"; + sha1 = "dd7ce7de187c06c8bf353796ac71e099f0980ebc"; + }; + }; + "get-value-2.0.6" = { + name = "get-value"; + packageName = "get-value"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz"; + sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; + }; + }; + "getpass-0.1.7" = { + name = "getpass"; + packageName = "getpass"; + version = "0.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + }; + "glob-7.1.4" = { + name = "glob"; + packageName = "glob"; + version = "7.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz"; + sha512 = "hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A=="; + }; + }; + "glob-parent-3.1.0" = { + name = "glob-parent"; + packageName = "glob-parent"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz"; + sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; + }; + }; + "glob-to-regexp-0.3.0" = { + name = "glob-to-regexp"; + packageName = "glob-to-regexp"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz"; + sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab"; + }; + }; + "globals-11.12.0" = { + name = "globals"; + packageName = "globals"; + version = "11.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"; + sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="; + }; + }; + "graceful-fs-4.2.3" = { + name = "graceful-fs"; + packageName = "graceful-fs"; + version = "4.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz"; + sha512 = "a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="; + }; + }; + "grapheme-breaker-0.3.2" = { + name = "grapheme-breaker"; + packageName = "grapheme-breaker"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz"; + sha1 = "5b9e6b78c3832452d2ba2bb1cb830f96276410ac"; + }; + }; + "har-schema-2.0.0" = { + name = "har-schema"; + packageName = "har-schema"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + }; + "har-validator-5.1.3" = { + name = "har-validator"; + packageName = "har-validator"; + version = "5.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz"; + sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g=="; + }; + }; + "has-1.0.3" = { + name = "has"; + packageName = "has"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz"; + sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="; + }; + }; + "has-ansi-2.0.0" = { + name = "has-ansi"; + packageName = "has-ansi"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + }; + "has-flag-1.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz"; + sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa"; + }; + }; + "has-flag-3.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + }; + "has-symbols-1.0.1" = { + name = "has-symbols"; + packageName = "has-symbols"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz"; + sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="; + }; + }; + "has-value-0.3.1" = { + name = "has-value"; + packageName = "has-value"; + version = "0.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz"; + sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; + }; + }; + "has-value-1.0.0" = { + name = "has-value"; + packageName = "has-value"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz"; + sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; + }; + }; + "has-values-0.1.4" = { + name = "has-values"; + packageName = "has-values"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz"; + sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; + }; + }; + "has-values-1.0.0" = { + name = "has-values"; + packageName = "has-values"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz"; + sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; + }; + }; + "hash-base-3.0.4" = { + name = "hash-base"; + packageName = "hash-base"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz"; + sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918"; + }; + }; + "hash.js-1.1.7" = { + name = "hash.js"; + packageName = "hash.js"; + version = "1.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz"; + sha512 = "taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="; + }; + }; + "hex-color-regex-1.1.0" = { + name = "hex-color-regex"; + packageName = "hex-color-regex"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz"; + sha512 = "l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="; + }; + }; + "hmac-drbg-1.0.1" = { + name = "hmac-drbg"; + packageName = "hmac-drbg"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz"; + sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1"; + }; + }; + "hsl-regex-1.0.0" = { + name = "hsl-regex"; + packageName = "hsl-regex"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz"; + sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e"; + }; + }; + "hsla-regex-1.0.0" = { + name = "hsla-regex"; + packageName = "hsla-regex"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz"; + sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"; + }; + }; + "html-comment-regex-1.1.2" = { + name = "html-comment-regex"; + packageName = "html-comment-regex"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz"; + sha512 = "P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="; + }; + }; + "html-encoding-sniffer-1.0.2" = { + name = "html-encoding-sniffer"; + packageName = "html-encoding-sniffer"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz"; + sha512 = "71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw=="; + }; + }; + "html-tags-1.2.0" = { + name = "html-tags"; + packageName = "html-tags"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz"; + sha1 = "c78de65b5663aa597989dd2b7ab49200d7e4db98"; + }; + }; + "htmlnano-0.2.5" = { + name = "htmlnano"; + packageName = "htmlnano"; + version = "0.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz"; + sha512 = "X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA=="; + }; + }; + "htmlparser2-3.10.1" = { + name = "htmlparser2"; + packageName = "htmlparser2"; + version = "3.10.1"; + src = fetchurl { + url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz"; + sha512 = "IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ=="; + }; + }; + "http-errors-1.7.3" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.7.3"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"; + sha512 = "ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw=="; + }; + }; + "http-signature-1.2.0" = { + name = "http-signature"; + packageName = "http-signature"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + }; + "https-browserify-1.0.0" = { + name = "https-browserify"; + packageName = "https-browserify"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz"; + sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"; + }; + }; + "iconv-lite-0.4.24" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.4.24"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="; + }; + }; + "icss-replace-symbols-1.1.0" = { + name = "icss-replace-symbols"; + packageName = "icss-replace-symbols"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz"; + sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded"; + }; + }; + "ieee754-1.1.13" = { + name = "ieee754"; + packageName = "ieee754"; + version = "1.1.13"; + src = fetchurl { + url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz"; + sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="; + }; + }; + "import-fresh-2.0.0" = { + name = "import-fresh"; + packageName = "import-fresh"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz"; + sha1 = "d81355c15612d386c61f9ddd3922d4304822a546"; + }; + }; + "indexes-of-1.0.1" = { + name = "indexes-of"; + packageName = "indexes-of"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz"; + sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607"; + }; + }; + "inflight-1.0.6" = { + name = "inflight"; + packageName = "inflight"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + }; + "inherits-2.0.1" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"; + sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; + }; + }; + "inherits-2.0.3" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + }; + "inherits-2.0.4" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"; + sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="; + }; + }; + "ini-1.3.5" = { + name = "ini"; + packageName = "ini"; + version = "1.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz"; + sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="; + }; + }; + "invariant-2.2.4" = { + name = "invariant"; + packageName = "invariant"; + version = "2.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"; + sha512 = "phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="; + }; + }; + "is-absolute-url-2.1.0" = { + name = "is-absolute-url"; + packageName = "is-absolute-url"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz"; + sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"; + }; + }; + "is-absolute-url-3.0.3" = { + name = "is-absolute-url"; + packageName = "is-absolute-url"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz"; + sha512 = "opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="; + }; + }; + "is-accessor-descriptor-0.1.6" = { + name = "is-accessor-descriptor"; + packageName = "is-accessor-descriptor"; + version = "0.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; + sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; + }; + }; + "is-accessor-descriptor-1.0.0" = { + name = "is-accessor-descriptor"; + packageName = "is-accessor-descriptor"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; + sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ=="; + }; + }; + "is-arrayish-0.2.1" = { + name = "is-arrayish"; + packageName = "is-arrayish"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + }; + "is-arrayish-0.3.2" = { + name = "is-arrayish"; + packageName = "is-arrayish"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz"; + sha512 = "eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="; + }; + }; + "is-binary-path-1.0.1" = { + name = "is-binary-path"; + packageName = "is-binary-path"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz"; + sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; + }; + }; + "is-buffer-1.1.6" = { + name = "is-buffer"; + packageName = "is-buffer"; + version = "1.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"; + sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="; + }; + }; + "is-callable-1.1.5" = { + name = "is-callable"; + packageName = "is-callable"; + version = "1.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz"; + sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="; + }; + }; + "is-color-stop-1.1.0" = { + name = "is-color-stop"; + packageName = "is-color-stop"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz"; + sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345"; + }; + }; + "is-data-descriptor-0.1.4" = { + name = "is-data-descriptor"; + packageName = "is-data-descriptor"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; + sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; + }; + }; + "is-data-descriptor-1.0.0" = { + name = "is-data-descriptor"; + packageName = "is-data-descriptor"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; + sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ=="; + }; + }; + "is-date-object-1.0.2" = { + name = "is-date-object"; + packageName = "is-date-object"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz"; + sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="; + }; + }; + "is-descriptor-0.1.6" = { + name = "is-descriptor"; + packageName = "is-descriptor"; + version = "0.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz"; + sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg=="; + }; + }; + "is-descriptor-1.0.2" = { + name = "is-descriptor"; + packageName = "is-descriptor"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz"; + sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg=="; + }; + }; + "is-directory-0.3.1" = { + name = "is-directory"; + packageName = "is-directory"; + version = "0.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz"; + sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1"; + }; + }; + "is-extendable-0.1.1" = { + name = "is-extendable"; + packageName = "is-extendable"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz"; + sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; + }; + }; + "is-extendable-1.0.1" = { + name = "is-extendable"; + packageName = "is-extendable"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz"; + sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="; + }; + }; + "is-extglob-2.1.1" = { + name = "is-extglob"; + packageName = "is-extglob"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + }; + "is-fullwidth-code-point-2.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + }; + "is-glob-3.1.0" = { + name = "is-glob"; + packageName = "is-glob"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz"; + sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; + }; + }; + "is-glob-4.0.1" = { + name = "is-glob"; + packageName = "is-glob"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz"; + sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg=="; + }; + }; + "is-html-1.1.0" = { + name = "is-html"; + packageName = "is-html"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz"; + sha1 = "e04f1c18d39485111396f9a0273eab51af218464"; + }; + }; + "is-number-3.0.0" = { + name = "is-number"; + packageName = "is-number"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz"; + sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; + }; + }; + "is-obj-2.0.0" = { + name = "is-obj"; + packageName = "is-obj"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz"; + sha512 = "drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="; + }; + }; + "is-plain-object-2.0.4" = { + name = "is-plain-object"; + packageName = "is-plain-object"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="; + }; + }; + "is-regex-1.0.5" = { + name = "is-regex"; + packageName = "is-regex"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz"; + sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ=="; + }; + }; + "is-resolvable-1.1.0" = { + name = "is-resolvable"; + packageName = "is-resolvable"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz"; + sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="; + }; + }; + "is-svg-3.0.0" = { + name = "is-svg"; + packageName = "is-svg"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz"; + sha512 = "gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ=="; + }; + }; + "is-symbol-1.0.3" = { + name = "is-symbol"; + packageName = "is-symbol"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz"; + sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ=="; + }; + }; + "is-typedarray-1.0.0" = { + name = "is-typedarray"; + packageName = "is-typedarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + }; + "is-url-1.2.4" = { + name = "is-url"; + packageName = "is-url"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz"; + sha512 = "ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="; + }; + }; + "is-windows-1.0.2" = { + name = "is-windows"; + packageName = "is-windows"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz"; + sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="; + }; + }; + "is-wsl-1.1.0" = { + name = "is-wsl"; + packageName = "is-wsl"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz"; + sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; + }; + }; + "isarray-1.0.0" = { + name = "isarray"; + packageName = "isarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + }; + "isarray-2.0.5" = { + name = "isarray"; + packageName = "isarray"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz"; + sha512 = "xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="; + }; + }; + "isexe-2.0.0" = { + name = "isexe"; + packageName = "isexe"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + }; + "isobject-2.1.0" = { + name = "isobject"; + packageName = "isobject"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz"; + sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; + }; + }; + "isobject-3.0.1" = { + name = "isobject"; + packageName = "isobject"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + }; + "isstream-0.1.2" = { + name = "isstream"; + packageName = "isstream"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + }; + "js-beautify-1.11.0" = { + name = "js-beautify"; + packageName = "js-beautify"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz"; + sha512 = "a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A=="; + }; + }; + "js-levenshtein-1.1.6" = { + name = "js-levenshtein"; + packageName = "js-levenshtein"; + version = "1.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz"; + sha512 = "X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="; + }; + }; + "js-tokens-4.0.0" = { + name = "js-tokens"; + packageName = "js-tokens"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"; + sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="; + }; + }; + "js-yaml-3.13.1" = { + name = "js-yaml"; + packageName = "js-yaml"; + version = "3.13.1"; + src = fetchurl { + url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz"; + sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw=="; + }; + }; + "jsbn-0.1.1" = { + name = "jsbn"; + packageName = "jsbn"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + }; + "jsdom-14.1.0" = { + name = "jsdom"; + packageName = "jsdom"; + version = "14.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz"; + sha512 = "O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng=="; + }; + }; + "jsesc-0.5.0" = { + name = "jsesc"; + packageName = "jsesc"; + version = "0.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz"; + sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d"; + }; + }; + "jsesc-2.5.2" = { + name = "jsesc"; + packageName = "jsesc"; + version = "2.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"; + sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="; + }; + }; + "json-parse-better-errors-1.0.2" = { + name = "json-parse-better-errors"; + packageName = "json-parse-better-errors"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="; + }; + }; + "json-schema-0.2.3" = { + name = "json-schema"; + packageName = "json-schema"; + version = "0.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + }; + "json-schema-traverse-0.4.1" = { + name = "json-schema-traverse"; + packageName = "json-schema-traverse"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="; + }; + }; + "json-stringify-safe-5.0.1" = { + name = "json-stringify-safe"; + packageName = "json-stringify-safe"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + }; + "json5-1.0.1" = { + name = "json5"; + packageName = "json5"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz"; + sha512 = "aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow=="; + }; + }; + "json5-2.1.3" = { + name = "json5"; + packageName = "json5"; + version = "2.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz"; + sha512 = "KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA=="; + }; + }; + "jsprim-1.4.1" = { + name = "jsprim"; + packageName = "jsprim"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + }; + "kind-of-3.2.2" = { + name = "kind-of"; + packageName = "kind-of"; + version = "3.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"; + sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; + }; + }; + "kind-of-4.0.0" = { + name = "kind-of"; + packageName = "kind-of"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz"; + sha1 = "20813df3d712928b207378691a45066fae72dd57"; + }; + }; + "kind-of-5.1.0" = { + name = "kind-of"; + packageName = "kind-of"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz"; + sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="; + }; + }; + "kind-of-6.0.3" = { + name = "kind-of"; + packageName = "kind-of"; + version = "6.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"; + sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="; + }; + }; + "levn-0.3.0" = { + name = "levn"; + packageName = "levn"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + }; + "locate-path-2.0.0" = { + name = "locate-path"; + packageName = "locate-path"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz"; + sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; + }; + }; + "locate-path-3.0.0" = { + name = "locate-path"; + packageName = "locate-path"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz"; + sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="; + }; + }; + "lodash-4.17.15" = { + name = "lodash"; + packageName = "lodash"; + version = "4.17.15"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"; + sha512 = "8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="; + }; + }; + "lodash.clone-4.5.0" = { + name = "lodash.clone"; + packageName = "lodash.clone"; + version = "4.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz"; + sha1 = "195870450f5a13192478df4bc3d23d2dea1907b6"; + }; + }; + "lodash.memoize-4.1.2" = { + name = "lodash.memoize"; + packageName = "lodash.memoize"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"; + sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe"; + }; + }; + "lodash.sortby-4.7.0" = { + name = "lodash.sortby"; + packageName = "lodash.sortby"; + version = "4.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz"; + sha1 = "edd14c824e2cc9c1e0b0a1b42bb5210516a42438"; + }; + }; + "lodash.uniq-4.5.0" = { + name = "lodash.uniq"; + packageName = "lodash.uniq"; + version = "4.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; + sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; + }; + }; + "log-symbols-2.2.0" = { + name = "log-symbols"; + packageName = "log-symbols"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz"; + sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg=="; + }; + }; + "loose-envify-1.4.0" = { + name = "loose-envify"; + packageName = "loose-envify"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"; + sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="; + }; + }; + "lru-cache-4.1.5" = { + name = "lru-cache"; + packageName = "lru-cache"; + version = "4.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz"; + sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="; + }; + }; + "magic-string-0.22.5" = { + name = "magic-string"; + packageName = "magic-string"; + version = "0.22.5"; + src = fetchurl { + url = "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz"; + sha512 = "oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w=="; + }; + }; + "map-cache-0.2.2" = { + name = "map-cache"; + packageName = "map-cache"; + version = "0.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz"; + sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; + }; + }; + "map-visit-1.0.0" = { + name = "map-visit"; + packageName = "map-visit"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz"; + sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; + }; + }; + "md5.js-1.3.5" = { + name = "md5.js"; + packageName = "md5.js"; + version = "1.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz"; + sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="; + }; + }; + "mdn-data-2.0.4" = { + name = "mdn-data"; + packageName = "mdn-data"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz"; + sha512 = "iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA=="; + }; + }; + "mdn-data-2.0.6" = { + name = "mdn-data"; + packageName = "mdn-data"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz"; + sha512 = "rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA=="; + }; + }; + "merge-source-map-1.0.4" = { + name = "merge-source-map"; + packageName = "merge-source-map"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz"; + sha1 = "a5de46538dae84d4114cc5ea02b4772a6346701f"; + }; + }; + "merge2-1.3.0" = { + name = "merge2"; + packageName = "merge2"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz"; + sha512 = "2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw=="; + }; + }; + "micromatch-3.1.10" = { + name = "micromatch"; + packageName = "micromatch"; + version = "3.1.10"; + src = fetchurl { + url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz"; + sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg=="; + }; + }; + "miller-rabin-4.0.1" = { + name = "miller-rabin"; + packageName = "miller-rabin"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz"; + sha512 = "115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA=="; + }; + }; + "mime-1.6.0" = { + name = "mime"; + packageName = "mime"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"; + sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; + }; + }; + "mime-db-1.44.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.44.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz"; + sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="; + }; + }; + "mime-types-2.1.27" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.27"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz"; + sha512 = "JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w=="; + }; + }; + "mimic-fn-1.2.0" = { + name = "mimic-fn"; + packageName = "mimic-fn"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz"; + sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="; + }; + }; + "minimalistic-assert-1.0.1" = { + name = "minimalistic-assert"; + packageName = "minimalistic-assert"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; + sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="; + }; + }; + "minimalistic-crypto-utils-1.0.1" = { + name = "minimalistic-crypto-utils"; + packageName = "minimalistic-crypto-utils"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"; + sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"; + }; + }; + "minimatch-3.0.4" = { + name = "minimatch"; + packageName = "minimatch"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"; + sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; + }; + }; + "minimist-1.2.5" = { + name = "minimist"; + packageName = "minimist"; + version = "1.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"; + sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="; + }; + }; + "mixin-deep-1.3.2" = { + name = "mixin-deep"; + packageName = "mixin-deep"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz"; + sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA=="; + }; + }; + "mkdirp-0.5.5" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "0.5.5"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"; + sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="; + }; + }; + "mkdirp-1.0.4" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"; + sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="; + }; + }; + "ms-2.0.0" = { + name = "ms"; + packageName = "ms"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + }; + "ms-2.1.1" = { + name = "ms"; + packageName = "ms"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"; + sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="; + }; + }; + "ms-2.1.2" = { + name = "ms"; + packageName = "ms"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"; + sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="; + }; + }; + "nan-2.14.1" = { + name = "nan"; + packageName = "nan"; + version = "2.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz"; + sha512 = "isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="; + }; + }; + "nanomatch-1.2.13" = { + name = "nanomatch"; + packageName = "nanomatch"; + version = "1.2.13"; + src = fetchurl { + url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz"; + sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA=="; + }; + }; + "nice-try-1.0.5" = { + name = "nice-try"; + packageName = "nice-try"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"; + sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="; + }; + }; + "node-addon-api-1.7.1" = { + name = "node-addon-api"; + packageName = "node-addon-api"; + version = "1.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz"; + sha512 = "2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ=="; + }; + }; + "node-elm-compiler-5.0.4" = { + name = "node-elm-compiler"; + packageName = "node-elm-compiler"; + version = "5.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz"; + sha512 = "VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg=="; + }; + }; + "node-forge-0.7.6" = { + name = "node-forge"; + packageName = "node-forge"; + version = "0.7.6"; + src = fetchurl { + url = "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz"; + sha512 = "sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw=="; + }; + }; + "node-libs-browser-2.2.1" = { + name = "node-libs-browser"; + packageName = "node-libs-browser"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz"; + sha512 = "h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q=="; + }; + }; + "node-releases-1.1.53" = { + name = "node-releases"; + packageName = "node-releases"; + version = "1.1.53"; + src = fetchurl { + url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz"; + sha512 = "wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ=="; + }; + }; + "nopt-4.0.3" = { + name = "nopt"; + packageName = "nopt"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz"; + sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg=="; + }; + }; + "normalize-html-whitespace-1.0.0" = { + name = "normalize-html-whitespace"; + packageName = "normalize-html-whitespace"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz"; + sha512 = "9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA=="; + }; + }; + "normalize-path-2.1.1" = { + name = "normalize-path"; + packageName = "normalize-path"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz"; + sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; + }; + }; + "normalize-path-3.0.0" = { + name = "normalize-path"; + packageName = "normalize-path"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"; + sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="; + }; + }; + "normalize-url-3.3.0" = { + name = "normalize-url"; + packageName = "normalize-url"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz"; + sha512 = "U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="; + }; + }; + "nth-check-1.0.2" = { + name = "nth-check"; + packageName = "nth-check"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz"; + sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg=="; + }; + }; + "nwsapi-2.2.0" = { + name = "nwsapi"; + packageName = "nwsapi"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz"; + sha512 = "h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="; + }; + }; + "oauth-sign-0.9.0" = { + name = "oauth-sign"; + packageName = "oauth-sign"; + version = "0.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="; + }; + }; + "object-assign-4.1.1" = { + name = "object-assign"; + packageName = "object-assign"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + }; + "object-copy-0.1.0" = { + name = "object-copy"; + packageName = "object-copy"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz"; + sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; + }; + }; + "object-inspect-1.4.1" = { + name = "object-inspect"; + packageName = "object-inspect"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz"; + sha512 = "wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw=="; + }; + }; + "object-inspect-1.7.0" = { + name = "object-inspect"; + packageName = "object-inspect"; + version = "1.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz"; + sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="; + }; + }; + "object-keys-1.1.1" = { + name = "object-keys"; + packageName = "object-keys"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"; + sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="; + }; + }; + "object-visit-1.0.1" = { + name = "object-visit"; + packageName = "object-visit"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz"; + sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; + }; + }; + "object.assign-4.1.0" = { + name = "object.assign"; + packageName = "object.assign"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz"; + sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w=="; + }; + }; + "object.getownpropertydescriptors-2.1.0" = { + name = "object.getownpropertydescriptors"; + packageName = "object.getownpropertydescriptors"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"; + sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg=="; + }; + }; + "object.pick-1.3.0" = { + name = "object.pick"; + packageName = "object.pick"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz"; + sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; + }; + }; + "object.values-1.1.1" = { + name = "object.values"; + packageName = "object.values"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz"; + sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA=="; + }; + }; + "on-finished-2.3.0" = { + name = "on-finished"; + packageName = "on-finished"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + }; + "once-1.4.0" = { + name = "once"; + packageName = "once"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + }; + "onetime-2.0.1" = { + name = "onetime"; + packageName = "onetime"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz"; + sha1 = "067428230fd67443b2794b22bba528b6867962d4"; + }; + }; + "opn-5.5.0" = { + name = "opn"; + packageName = "opn"; + version = "5.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz"; + sha512 = "PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA=="; + }; + }; + "optionator-0.8.3" = { + name = "optionator"; + packageName = "optionator"; + version = "0.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz"; + sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA=="; + }; + }; + "ora-2.1.0" = { + name = "ora"; + packageName = "ora"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz"; + sha512 = "hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA=="; + }; + }; + "os-browserify-0.3.0" = { + name = "os-browserify"; + packageName = "os-browserify"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz"; + sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27"; + }; + }; + "os-homedir-1.0.2" = { + name = "os-homedir"; + packageName = "os-homedir"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + }; + "os-tmpdir-1.0.2" = { + name = "os-tmpdir"; + packageName = "os-tmpdir"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + }; + "osenv-0.1.5" = { + name = "osenv"; + packageName = "osenv"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz"; + sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g=="; + }; + }; + "p-limit-1.3.0" = { + name = "p-limit"; + packageName = "p-limit"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz"; + sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="; + }; + }; + "p-limit-2.3.0" = { + name = "p-limit"; + packageName = "p-limit"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"; + sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="; + }; + }; + "p-locate-2.0.0" = { + name = "p-locate"; + packageName = "p-locate"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz"; + sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; + }; + }; + "p-locate-3.0.0" = { + name = "p-locate"; + packageName = "p-locate"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz"; + sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="; + }; + }; + "p-try-1.0.0" = { + name = "p-try"; + packageName = "p-try"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"; + sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; + }; + }; + "p-try-2.2.0" = { + name = "p-try"; + packageName = "p-try"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"; + sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="; + }; + }; + "pako-0.2.9" = { + name = "pako"; + packageName = "pako"; + version = "0.2.9"; + src = fetchurl { + url = "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz"; + sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75"; + }; + }; + "pako-1.0.11" = { + name = "pako"; + packageName = "pako"; + version = "1.0.11"; + src = fetchurl { + url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"; + sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="; + }; + }; + "parcel-bundler-1.12.3" = { + name = "parcel-bundler"; + packageName = "parcel-bundler"; + version = "1.12.3"; + src = fetchurl { + url = "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz"; + sha512 = "8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A=="; + }; + }; + "parse-asn1-5.1.5" = { + name = "parse-asn1"; + packageName = "parse-asn1"; + version = "5.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz"; + sha512 = "jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ=="; + }; + }; + "parse-json-4.0.0" = { + name = "parse-json"; + packageName = "parse-json"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz"; + sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0"; + }; + }; + "parse5-5.1.0" = { + name = "parse5"; + packageName = "parse5"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz"; + sha512 = "fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="; + }; + }; + "parseurl-1.3.3" = { + name = "parseurl"; + packageName = "parseurl"; + version = "1.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"; + sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="; + }; + }; + "pascalcase-0.1.1" = { + name = "pascalcase"; + packageName = "pascalcase"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz"; + sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; + }; + }; + "path-browserify-0.0.1" = { + name = "path-browserify"; + packageName = "path-browserify"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz"; + sha512 = "BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="; + }; + }; + "path-dirname-1.0.2" = { + name = "path-dirname"; + packageName = "path-dirname"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz"; + sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; + }; + }; + "path-exists-3.0.0" = { + name = "path-exists"; + packageName = "path-exists"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"; + sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; + }; + }; + "path-is-absolute-1.0.1" = { + name = "path-is-absolute"; + packageName = "path-is-absolute"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + }; + "path-key-2.0.1" = { + name = "path-key"; + packageName = "path-key"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"; + sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; + }; + }; + "path-parse-1.0.6" = { + name = "path-parse"; + packageName = "path-parse"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"; + sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="; + }; + }; + "pbkdf2-3.0.17" = { + name = "pbkdf2"; + packageName = "pbkdf2"; + version = "3.0.17"; + src = fetchurl { + url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz"; + sha512 = "U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA=="; + }; + }; + "performance-now-2.1.0" = { + name = "performance-now"; + packageName = "performance-now"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + }; + "physical-cpu-count-2.0.0" = { + name = "physical-cpu-count"; + packageName = "physical-cpu-count"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz"; + sha1 = "18de2f97e4bf7a9551ad7511942b5496f7aba660"; + }; + }; + "pkg-up-2.0.0" = { + name = "pkg-up"; + packageName = "pkg-up"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz"; + sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f"; + }; + }; + "pn-1.1.0" = { + name = "pn"; + packageName = "pn"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz"; + sha512 = "2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="; + }; + }; + "posix-character-classes-0.1.1" = { + name = "posix-character-classes"; + packageName = "posix-character-classes"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; + sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; + }; + }; + "postcss-6.0.1" = { + name = "postcss"; + packageName = "postcss"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz"; + sha1 = "000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2"; + }; + }; + "postcss-6.0.23" = { + name = "postcss"; + packageName = "postcss"; + version = "6.0.23"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz"; + sha512 = "soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag=="; + }; + }; + "postcss-7.0.27" = { + name = "postcss"; + packageName = "postcss"; + version = "7.0.27"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz"; + sha512 = "WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ=="; + }; + }; + "postcss-calc-7.0.2" = { + name = "postcss-calc"; + packageName = "postcss-calc"; + version = "7.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz"; + sha512 = "rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ=="; + }; + }; + "postcss-colormin-4.0.3" = { + name = "postcss-colormin"; + packageName = "postcss-colormin"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz"; + sha512 = "WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw=="; + }; + }; + "postcss-convert-values-4.0.1" = { + name = "postcss-convert-values"; + packageName = "postcss-convert-values"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz"; + sha512 = "Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ=="; + }; + }; + "postcss-discard-comments-4.0.2" = { + name = "postcss-discard-comments"; + packageName = "postcss-discard-comments"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz"; + sha512 = "RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg=="; + }; + }; + "postcss-discard-duplicates-4.0.2" = { + name = "postcss-discard-duplicates"; + packageName = "postcss-discard-duplicates"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz"; + sha512 = "ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ=="; + }; + }; + "postcss-discard-empty-4.0.1" = { + name = "postcss-discard-empty"; + packageName = "postcss-discard-empty"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz"; + sha512 = "B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w=="; + }; + }; + "postcss-discard-overridden-4.0.1" = { + name = "postcss-discard-overridden"; + packageName = "postcss-discard-overridden"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz"; + sha512 = "IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg=="; + }; + }; + "postcss-merge-longhand-4.0.11" = { + name = "postcss-merge-longhand"; + packageName = "postcss-merge-longhand"; + version = "4.0.11"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz"; + sha512 = "alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw=="; + }; + }; + "postcss-merge-rules-4.0.3" = { + name = "postcss-merge-rules"; + packageName = "postcss-merge-rules"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz"; + sha512 = "U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ=="; + }; + }; + "postcss-minify-font-values-4.0.2" = { + name = "postcss-minify-font-values"; + packageName = "postcss-minify-font-values"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz"; + sha512 = "j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg=="; + }; + }; + "postcss-minify-gradients-4.0.2" = { + name = "postcss-minify-gradients"; + packageName = "postcss-minify-gradients"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz"; + sha512 = "qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q=="; + }; + }; + "postcss-minify-params-4.0.2" = { + name = "postcss-minify-params"; + packageName = "postcss-minify-params"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz"; + sha512 = "G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg=="; + }; + }; + "postcss-minify-selectors-4.0.2" = { + name = "postcss-minify-selectors"; + packageName = "postcss-minify-selectors"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz"; + sha512 = "D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g=="; + }; + }; + "postcss-modules-extract-imports-1.1.0" = { + name = "postcss-modules-extract-imports"; + packageName = "postcss-modules-extract-imports"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz"; + sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb"; + }; + }; + "postcss-modules-local-by-default-1.2.0" = { + name = "postcss-modules-local-by-default"; + packageName = "postcss-modules-local-by-default"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz"; + sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069"; + }; + }; + "postcss-modules-scope-1.1.0" = { + name = "postcss-modules-scope"; + packageName = "postcss-modules-scope"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz"; + sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90"; + }; + }; + "postcss-modules-values-1.3.0" = { + name = "postcss-modules-values"; + packageName = "postcss-modules-values"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz"; + sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20"; + }; + }; + "postcss-normalize-charset-4.0.1" = { + name = "postcss-normalize-charset"; + packageName = "postcss-normalize-charset"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz"; + sha512 = "gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g=="; + }; + }; + "postcss-normalize-display-values-4.0.2" = { + name = "postcss-normalize-display-values"; + packageName = "postcss-normalize-display-values"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz"; + sha512 = "3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ=="; + }; + }; + "postcss-normalize-positions-4.0.2" = { + name = "postcss-normalize-positions"; + packageName = "postcss-normalize-positions"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz"; + sha512 = "Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA=="; + }; + }; + "postcss-normalize-repeat-style-4.0.2" = { + name = "postcss-normalize-repeat-style"; + packageName = "postcss-normalize-repeat-style"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz"; + sha512 = "qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q=="; + }; + }; + "postcss-normalize-string-4.0.2" = { + name = "postcss-normalize-string"; + packageName = "postcss-normalize-string"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz"; + sha512 = "RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA=="; + }; + }; + "postcss-normalize-timing-functions-4.0.2" = { + name = "postcss-normalize-timing-functions"; + packageName = "postcss-normalize-timing-functions"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz"; + sha512 = "acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A=="; + }; + }; + "postcss-normalize-unicode-4.0.1" = { + name = "postcss-normalize-unicode"; + packageName = "postcss-normalize-unicode"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz"; + sha512 = "od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg=="; + }; + }; + "postcss-normalize-url-4.0.1" = { + name = "postcss-normalize-url"; + packageName = "postcss-normalize-url"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz"; + sha512 = "p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA=="; + }; + }; + "postcss-normalize-whitespace-4.0.2" = { + name = "postcss-normalize-whitespace"; + packageName = "postcss-normalize-whitespace"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz"; + sha512 = "tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA=="; + }; + }; + "postcss-ordered-values-4.1.2" = { + name = "postcss-ordered-values"; + packageName = "postcss-ordered-values"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz"; + sha512 = "2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw=="; + }; + }; + "postcss-reduce-initial-4.0.3" = { + name = "postcss-reduce-initial"; + packageName = "postcss-reduce-initial"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz"; + sha512 = "gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA=="; + }; + }; + "postcss-reduce-transforms-4.0.2" = { + name = "postcss-reduce-transforms"; + packageName = "postcss-reduce-transforms"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz"; + sha512 = "EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg=="; + }; + }; + "postcss-selector-parser-3.1.2" = { + name = "postcss-selector-parser"; + packageName = "postcss-selector-parser"; + version = "3.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz"; + sha512 = "h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA=="; + }; + }; + "postcss-selector-parser-6.0.2" = { + name = "postcss-selector-parser"; + packageName = "postcss-selector-parser"; + version = "6.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz"; + sha512 = "36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg=="; + }; + }; + "postcss-svgo-4.0.2" = { + name = "postcss-svgo"; + packageName = "postcss-svgo"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz"; + sha512 = "C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw=="; + }; + }; + "postcss-unique-selectors-4.0.1" = { + name = "postcss-unique-selectors"; + packageName = "postcss-unique-selectors"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz"; + sha512 = "+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg=="; + }; + }; + "postcss-value-parser-3.3.1" = { + name = "postcss-value-parser"; + packageName = "postcss-value-parser"; + version = "3.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"; + sha512 = "pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="; + }; + }; + "postcss-value-parser-4.0.3" = { + name = "postcss-value-parser"; + packageName = "postcss-value-parser"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz"; + sha512 = "N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg=="; + }; + }; + "posthtml-0.11.6" = { + name = "posthtml"; + packageName = "posthtml"; + version = "0.11.6"; + src = fetchurl { + url = "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz"; + sha512 = "C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw=="; + }; + }; + "posthtml-0.12.3" = { + name = "posthtml"; + packageName = "posthtml"; + version = "0.12.3"; + src = fetchurl { + url = "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz"; + sha512 = "Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA=="; + }; + }; + "posthtml-parser-0.4.2" = { + name = "posthtml-parser"; + packageName = "posthtml-parser"; + version = "0.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz"; + sha512 = "BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg=="; + }; + }; + "posthtml-render-1.2.2" = { + name = "posthtml-render"; + packageName = "posthtml-render"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz"; + sha512 = "MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ=="; + }; + }; + "prelude-ls-1.1.2" = { + name = "prelude-ls"; + packageName = "prelude-ls"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + }; + "private-0.1.8" = { + name = "private"; + packageName = "private"; + version = "0.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/private/-/private-0.1.8.tgz"; + sha512 = "VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="; + }; + }; + "process-0.11.10" = { + name = "process"; + packageName = "process"; + version = "0.11.10"; + src = fetchurl { + url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz"; + sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182"; + }; + }; + "process-nextick-args-2.0.1" = { + name = "process-nextick-args"; + packageName = "process-nextick-args"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; + sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="; + }; + }; + "proto-list-1.2.4" = { + name = "proto-list"; + packageName = "proto-list"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"; + sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849"; + }; + }; + "pseudomap-1.0.2" = { + name = "pseudomap"; + packageName = "pseudomap"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + }; + "psl-1.8.0" = { + name = "psl"; + packageName = "psl"; + version = "1.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz"; + sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="; + }; + }; + "public-encrypt-4.0.3" = { + name = "public-encrypt"; + packageName = "public-encrypt"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz"; + sha512 = "zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q=="; + }; + }; + "punycode-1.3.2" = { + name = "punycode"; + packageName = "punycode"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"; + sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d"; + }; + }; + "punycode-1.4.1" = { + name = "punycode"; + packageName = "punycode"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + }; + "punycode-2.1.1" = { + name = "punycode"; + packageName = "punycode"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"; + sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="; + }; + }; + "purgecss-1.4.2" = { + name = "purgecss"; + packageName = "purgecss"; + version = "1.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz"; + sha512 = "hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw=="; + }; + }; + "q-1.5.1" = { + name = "q"; + packageName = "q"; + version = "1.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz"; + sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7"; + }; + }; + "qs-6.5.2" = { + name = "qs"; + packageName = "qs"; + version = "6.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"; + sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="; + }; + }; + "querystring-0.2.0" = { + name = "querystring"; + packageName = "querystring"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz"; + sha1 = "b209849203bb25df820da756e747005878521620"; + }; + }; + "querystring-es3-0.2.1" = { + name = "querystring-es3"; + packageName = "querystring-es3"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz"; + sha1 = "9ec61f79049875707d69414596fd907a4d711e73"; + }; + }; + "quote-stream-1.0.2" = { + name = "quote-stream"; + packageName = "quote-stream"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz"; + sha1 = "84963f8c9c26b942e153feeb53aae74652b7e0b2"; + }; + }; + "randombytes-2.1.0" = { + name = "randombytes"; + packageName = "randombytes"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"; + sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="; + }; + }; + "randomfill-1.0.4" = { + name = "randomfill"; + packageName = "randomfill"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz"; + sha512 = "87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw=="; + }; + }; + "range-parser-1.2.1" = { + name = "range-parser"; + packageName = "range-parser"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"; + sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="; + }; + }; + "readable-stream-2.3.7" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "2.3.7"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"; + sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="; + }; + }; + "readable-stream-3.6.0" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"; + sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="; + }; + }; + "readdirp-2.2.1" = { + name = "readdirp"; + packageName = "readdirp"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz"; + sha512 = "1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ=="; + }; + }; + "regenerate-1.4.0" = { + name = "regenerate"; + packageName = "regenerate"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz"; + sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="; + }; + }; + "regenerate-unicode-properties-8.2.0" = { + name = "regenerate-unicode-properties"; + packageName = "regenerate-unicode-properties"; + version = "8.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz"; + sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA=="; + }; + }; + "regenerator-runtime-0.11.1" = { + name = "regenerator-runtime"; + packageName = "regenerator-runtime"; + version = "0.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; + sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="; + }; + }; + "regenerator-runtime-0.12.1" = { + name = "regenerator-runtime"; + packageName = "regenerator-runtime"; + version = "0.12.1"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz"; + sha512 = "odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="; + }; + }; + "regenerator-runtime-0.13.5" = { + name = "regenerator-runtime"; + packageName = "regenerator-runtime"; + version = "0.13.5"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz"; + sha512 = "ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="; + }; + }; + "regenerator-transform-0.14.4" = { + name = "regenerator-transform"; + packageName = "regenerator-transform"; + version = "0.14.4"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz"; + sha512 = "EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw=="; + }; + }; + "regex-not-1.0.2" = { + name = "regex-not"; + packageName = "regex-not"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz"; + sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A=="; + }; + }; + "regexpu-core-4.7.0" = { + name = "regexpu-core"; + packageName = "regexpu-core"; + version = "4.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz"; + sha512 = "TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ=="; + }; + }; + "regjsgen-0.5.1" = { + name = "regjsgen"; + packageName = "regjsgen"; + version = "0.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz"; + sha512 = "5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="; + }; + }; + "regjsparser-0.6.4" = { + name = "regjsparser"; + packageName = "regjsparser"; + version = "0.6.4"; + src = fetchurl { + url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz"; + sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw=="; + }; + }; + "remove-trailing-separator-1.1.0" = { + name = "remove-trailing-separator"; + packageName = "remove-trailing-separator"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; + sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; + }; + }; + "repeat-element-1.1.3" = { + name = "repeat-element"; + packageName = "repeat-element"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz"; + sha512 = "ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="; + }; + }; + "repeat-string-1.6.1" = { + name = "repeat-string"; + packageName = "repeat-string"; + version = "1.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"; + sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; + }; + }; + "request-2.88.2" = { + name = "request"; + packageName = "request"; + version = "2.88.2"; + src = fetchurl { + url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz"; + sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="; + }; + }; + "request-promise-core-1.1.3" = { + name = "request-promise-core"; + packageName = "request-promise-core"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz"; + sha512 = "QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ=="; + }; + }; + "request-promise-native-1.0.8" = { + name = "request-promise-native"; + packageName = "request-promise-native"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz"; + sha512 = "dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ=="; + }; + }; + "require-directory-2.1.1" = { + name = "require-directory"; + packageName = "require-directory"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + }; + "require-main-filename-2.0.0" = { + name = "require-main-filename"; + packageName = "require-main-filename"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"; + sha512 = "NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="; + }; + }; + "resolve-1.17.0" = { + name = "resolve"; + packageName = "resolve"; + version = "1.17.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz"; + sha512 = "ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w=="; + }; + }; + "resolve-from-3.0.0" = { + name = "resolve-from"; + packageName = "resolve-from"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz"; + sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; + }; + }; + "resolve-url-0.2.1" = { + name = "resolve-url"; + packageName = "resolve-url"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz"; + sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; + }; + }; + "restore-cursor-2.0.0" = { + name = "restore-cursor"; + packageName = "restore-cursor"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz"; + sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf"; + }; + }; + "ret-0.1.15" = { + name = "ret"; + packageName = "ret"; + version = "0.1.15"; + src = fetchurl { + url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"; + sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="; + }; + }; + "rgb-regex-1.0.1" = { + name = "rgb-regex"; + packageName = "rgb-regex"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz"; + sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1"; + }; + }; + "rgba-regex-1.0.0" = { + name = "rgba-regex"; + packageName = "rgba-regex"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz"; + sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3"; + }; + }; + "rimraf-2.6.3" = { + name = "rimraf"; + packageName = "rimraf"; + version = "2.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz"; + sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="; + }; + }; + "ripemd160-2.0.2" = { + name = "ripemd160"; + packageName = "ripemd160"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz"; + sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="; + }; + }; + "safe-buffer-5.1.2" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="; + }; + }; + "safe-regex-1.1.0" = { + name = "safe-regex"; + packageName = "safe-regex"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz"; + sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; + }; + }; + "safer-buffer-2.1.2" = { + name = "safer-buffer"; + packageName = "safer-buffer"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; + }; + }; + "safer-eval-1.3.6" = { + name = "safer-eval"; + packageName = "safer-eval"; + version = "1.3.6"; + src = fetchurl { + url = "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz"; + sha512 = "DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw=="; + }; + }; + "sax-1.2.4" = { + name = "sax"; + packageName = "sax"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"; + sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="; + }; + }; + "saxes-3.1.11" = { + name = "saxes"; + packageName = "saxes"; + version = "3.1.11"; + src = fetchurl { + url = "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz"; + sha512 = "Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g=="; + }; + }; + "semver-5.7.1" = { + name = "semver"; + packageName = "semver"; + version = "5.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"; + sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="; + }; + }; + "send-0.17.1" = { + name = "send"; + packageName = "send"; + version = "0.17.1"; + src = fetchurl { + url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz"; + sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg=="; + }; + }; + "serialize-to-js-1.2.2" = { + name = "serialize-to-js"; + packageName = "serialize-to-js"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz"; + sha512 = "mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q=="; + }; + }; + "serve-static-1.14.1" = { + name = "serve-static"; + packageName = "serve-static"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz"; + sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg=="; + }; + }; + "set-blocking-2.0.0" = { + name = "set-blocking"; + packageName = "set-blocking"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + }; + "set-value-2.0.1" = { + name = "set-value"; + packageName = "set-value"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz"; + sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw=="; + }; + }; + "setimmediate-1.0.5" = { + name = "setimmediate"; + packageName = "setimmediate"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz"; + sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285"; + }; + }; + "setprototypeof-1.1.1" = { + name = "setprototypeof"; + packageName = "setprototypeof"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"; + sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="; + }; + }; + "sha.js-2.4.11" = { + name = "sha.js"; + packageName = "sha.js"; + version = "2.4.11"; + src = fetchurl { + url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz"; + sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="; + }; + }; + "shallow-copy-0.0.1" = { + name = "shallow-copy"; + packageName = "shallow-copy"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz"; + sha1 = "415f42702d73d810330292cc5ee86eae1a11a170"; + }; + }; + "shebang-command-1.2.0" = { + name = "shebang-command"; + packageName = "shebang-command"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"; + sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; + }; + }; + "shebang-regex-1.0.0" = { + name = "shebang-regex"; + packageName = "shebang-regex"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz"; + sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; + }; + }; + "sigmund-1.0.1" = { + name = "sigmund"; + packageName = "sigmund"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"; + sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; + }; + }; + "signal-exit-3.0.3" = { + name = "signal-exit"; + packageName = "signal-exit"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz"; + sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="; + }; + }; + "simple-swizzle-0.2.2" = { + name = "simple-swizzle"; + packageName = "simple-swizzle"; + version = "0.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz"; + sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a"; + }; + }; + "snapdragon-0.8.2" = { + name = "snapdragon"; + packageName = "snapdragon"; + version = "0.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz"; + sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg=="; + }; + }; + "snapdragon-node-2.1.1" = { + name = "snapdragon-node"; + packageName = "snapdragon-node"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; + sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw=="; + }; + }; + "snapdragon-util-3.0.1" = { + name = "snapdragon-util"; + packageName = "snapdragon-util"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; + sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ=="; + }; + }; + "source-map-0.5.7" = { + name = "source-map"; + packageName = "source-map"; + version = "0.5.7"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + }; + "source-map-0.6.1" = { + name = "source-map"; + packageName = "source-map"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"; + sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="; + }; + }; + "source-map-resolve-0.5.3" = { + name = "source-map-resolve"; + packageName = "source-map-resolve"; + version = "0.5.3"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; + sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw=="; + }; + }; + "source-map-support-0.5.19" = { + name = "source-map-support"; + packageName = "source-map-support"; + version = "0.5.19"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"; + sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="; + }; + }; + "source-map-url-0.4.0" = { + name = "source-map-url"; + packageName = "source-map-url"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz"; + sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; + }; + }; + "split-string-3.1.0" = { + name = "split-string"; + packageName = "split-string"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz"; + sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw=="; + }; + }; + "sprintf-js-1.0.3" = { + name = "sprintf-js"; + packageName = "sprintf-js"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + }; + "sshpk-1.16.1" = { + name = "sshpk"; + packageName = "sshpk"; + version = "1.16.1"; + src = fetchurl { + url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"; + sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg=="; + }; + }; + "stable-0.1.8" = { + name = "stable"; + packageName = "stable"; + version = "0.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz"; + sha512 = "ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="; + }; + }; + "static-eval-2.0.5" = { + name = "static-eval"; + packageName = "static-eval"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz"; + sha512 = "nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA=="; + }; + }; + "static-extend-0.1.2" = { + name = "static-extend"; + packageName = "static-extend"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz"; + sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; + }; + }; + "static-module-2.2.5" = { + name = "static-module"; + packageName = "static-module"; + version = "2.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz"; + sha512 = "D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ=="; + }; + }; + "statuses-1.5.0" = { + name = "statuses"; + packageName = "statuses"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + }; + "stealthy-require-1.1.1" = { + name = "stealthy-require"; + packageName = "stealthy-require"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz"; + sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b"; + }; + }; + "stream-browserify-2.0.2" = { + name = "stream-browserify"; + packageName = "stream-browserify"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz"; + sha512 = "nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg=="; + }; + }; + "stream-http-2.8.3" = { + name = "stream-http"; + packageName = "stream-http"; + version = "2.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz"; + sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw=="; + }; + }; + "string-width-3.1.0" = { + name = "string-width"; + packageName = "string-width"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz"; + sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w=="; + }; + }; + "string.prototype.trimend-1.0.1" = { + name = "string.prototype.trimend"; + packageName = "string.prototype.trimend"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz"; + sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g=="; + }; + }; + "string.prototype.trimleft-2.1.2" = { + name = "string.prototype.trimleft"; + packageName = "string.prototype.trimleft"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz"; + sha512 = "gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw=="; + }; + }; + "string.prototype.trimright-2.1.2" = { + name = "string.prototype.trimright"; + packageName = "string.prototype.trimright"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz"; + sha512 = "ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg=="; + }; + }; + "string.prototype.trimstart-1.0.1" = { + name = "string.prototype.trimstart"; + packageName = "string.prototype.trimstart"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz"; + sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw=="; + }; + }; + "string_decoder-1.1.1" = { + name = "string_decoder"; + packageName = "string_decoder"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"; + sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="; + }; + }; + "strip-ansi-3.0.1" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + }; + "strip-ansi-4.0.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + }; + "strip-ansi-5.2.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz"; + sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="; + }; + }; + "stylehacks-4.0.3" = { + name = "stylehacks"; + packageName = "stylehacks"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz"; + sha512 = "7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g=="; + }; + }; + "supports-color-2.0.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + }; + "supports-color-3.2.3" = { + name = "supports-color"; + packageName = "supports-color"; + version = "3.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz"; + sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"; + }; + }; + "supports-color-5.5.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "5.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"; + sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="; + }; + }; + "supports-color-6.1.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "6.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz"; + sha512 = "qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ=="; + }; + }; + "svgo-1.3.2" = { + name = "svgo"; + packageName = "svgo"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz"; + sha512 = "yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw=="; + }; + }; + "symbol-tree-3.2.4" = { + name = "symbol-tree"; + packageName = "symbol-tree"; + version = "3.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz"; + sha512 = "9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="; + }; + }; + "temp-0.9.0" = { + name = "temp"; + packageName = "temp"; + version = "0.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz"; + sha512 = "YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ=="; + }; + }; + "terser-3.17.0" = { + name = "terser"; + packageName = "terser"; + version = "3.17.0"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz"; + sha512 = "/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ=="; + }; + }; + "terser-4.6.12" = { + name = "terser"; + packageName = "terser"; + version = "4.6.12"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz"; + sha512 = "fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww=="; + }; + }; + "through2-2.0.5" = { + name = "through2"; + packageName = "through2"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz"; + sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="; + }; + }; + "timers-browserify-2.0.11" = { + name = "timers-browserify"; + packageName = "timers-browserify"; + version = "2.0.11"; + src = fetchurl { + url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz"; + sha512 = "60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ=="; + }; + }; + "timsort-0.3.0" = { + name = "timsort"; + packageName = "timsort"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz"; + sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4"; + }; + }; + "tiny-inflate-1.0.3" = { + name = "tiny-inflate"; + packageName = "tiny-inflate"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz"; + sha512 = "pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="; + }; + }; + "to-arraybuffer-1.0.1" = { + name = "to-arraybuffer"; + packageName = "to-arraybuffer"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; + sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; + }; + }; + "to-fast-properties-1.0.3" = { + name = "to-fast-properties"; + packageName = "to-fast-properties"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz"; + sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47"; + }; + }; + "to-fast-properties-2.0.0" = { + name = "to-fast-properties"; + packageName = "to-fast-properties"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; + sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e"; + }; + }; + "to-object-path-0.3.0" = { + name = "to-object-path"; + packageName = "to-object-path"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz"; + sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; + }; + }; + "to-regex-3.0.2" = { + name = "to-regex"; + packageName = "to-regex"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz"; + sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw=="; + }; + }; + "to-regex-range-2.1.1" = { + name = "to-regex-range"; + packageName = "to-regex-range"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz"; + sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; + }; + }; + "toidentifier-1.0.0" = { + name = "toidentifier"; + packageName = "toidentifier"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"; + sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="; + }; + }; + "tough-cookie-2.5.0" = { + name = "tough-cookie"; + packageName = "tough-cookie"; + version = "2.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"; + sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="; + }; + }; + "tr46-1.0.1" = { + name = "tr46"; + packageName = "tr46"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz"; + sha1 = "a8b13fd6bfd2489519674ccde55ba3693b706d09"; + }; + }; + "trim-right-1.0.1" = { + name = "trim-right"; + packageName = "trim-right"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz"; + sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003"; + }; + }; + "tty-browserify-0.0.0" = { + name = "tty-browserify"; + packageName = "tty-browserify"; + version = "0.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz"; + sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6"; + }; + }; + "tunnel-agent-0.6.0" = { + name = "tunnel-agent"; + packageName = "tunnel-agent"; + version = "0.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + }; + "tweetnacl-0.14.5" = { + name = "tweetnacl"; + packageName = "tweetnacl"; + version = "0.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + }; + "type-check-0.3.2" = { + name = "type-check"; + packageName = "type-check"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + }; + "typedarray-0.0.6" = { + name = "typedarray"; + packageName = "typedarray"; + version = "0.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + }; + "uncss-0.17.3" = { + name = "uncss"; + packageName = "uncss"; + version = "0.17.3"; + src = fetchurl { + url = "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz"; + sha512 = "ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog=="; + }; + }; + "unicode-canonical-property-names-ecmascript-1.0.4" = { + name = "unicode-canonical-property-names-ecmascript"; + packageName = "unicode-canonical-property-names-ecmascript"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"; + sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="; + }; + }; + "unicode-match-property-ecmascript-1.0.4" = { + name = "unicode-match-property-ecmascript"; + packageName = "unicode-match-property-ecmascript"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz"; + sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg=="; + }; + }; + "unicode-match-property-value-ecmascript-1.2.0" = { + name = "unicode-match-property-value-ecmascript"; + packageName = "unicode-match-property-value-ecmascript"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz"; + sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="; + }; + }; + "unicode-property-aliases-ecmascript-1.1.0" = { + name = "unicode-property-aliases-ecmascript"; + packageName = "unicode-property-aliases-ecmascript"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz"; + sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="; + }; + }; + "unicode-trie-0.3.1" = { + name = "unicode-trie"; + packageName = "unicode-trie"; + version = "0.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz"; + sha1 = "d671dddd89101a08bac37b6a5161010602052085"; + }; + }; + "union-value-1.0.1" = { + name = "union-value"; + packageName = "union-value"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz"; + sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg=="; + }; + }; + "uniq-1.0.1" = { + name = "uniq"; + packageName = "uniq"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz"; + sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; + }; + }; + "uniqs-2.0.0" = { + name = "uniqs"; + packageName = "uniqs"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz"; + sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02"; + }; + }; + "unquote-1.1.1" = { + name = "unquote"; + packageName = "unquote"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz"; + sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544"; + }; + }; + "unset-value-1.0.0" = { + name = "unset-value"; + packageName = "unset-value"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz"; + sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; + }; + }; + "upath-1.2.0" = { + name = "upath"; + packageName = "upath"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz"; + sha512 = "aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="; + }; + }; + "uri-js-4.2.2" = { + name = "uri-js"; + packageName = "uri-js"; + version = "4.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz"; + sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ=="; + }; + }; + "urix-0.1.0" = { + name = "urix"; + packageName = "urix"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz"; + sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; + }; + }; + "url-0.11.0" = { + name = "url"; + packageName = "url"; + version = "0.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz"; + sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"; + }; + }; + "use-3.1.1" = { + name = "use"; + packageName = "use"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz"; + sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="; + }; + }; + "util-0.10.3" = { + name = "util"; + packageName = "util"; + version = "0.10.3"; + src = fetchurl { + url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz"; + sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9"; + }; + }; + "util-0.11.1" = { + name = "util"; + packageName = "util"; + version = "0.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/util/-/util-0.11.1.tgz"; + sha512 = "HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ=="; + }; + }; + "util-deprecate-1.0.2" = { + name = "util-deprecate"; + packageName = "util-deprecate"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + }; + "util.promisify-1.0.1" = { + name = "util.promisify"; + packageName = "util.promisify"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz"; + sha512 = "g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA=="; + }; + }; + "uuid-3.4.0" = { + name = "uuid"; + packageName = "uuid"; + version = "3.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"; + sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="; + }; + }; + "v8-compile-cache-2.1.0" = { + name = "v8-compile-cache"; + packageName = "v8-compile-cache"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz"; + sha512 = "usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g=="; + }; + }; + "vendors-1.0.4" = { + name = "vendors"; + packageName = "vendors"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz"; + sha512 = "/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w=="; + }; + }; + "verror-1.10.0" = { + name = "verror"; + packageName = "verror"; + version = "1.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + }; + "vlq-0.2.3" = { + name = "vlq"; + packageName = "vlq"; + version = "0.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz"; + sha512 = "DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow=="; + }; + }; + "vm-browserify-1.1.2" = { + name = "vm-browserify"; + packageName = "vm-browserify"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz"; + sha512 = "2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="; + }; + }; + "w3c-hr-time-1.0.2" = { + name = "w3c-hr-time"; + packageName = "w3c-hr-time"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz"; + sha512 = "z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ=="; + }; + }; + "w3c-xmlserializer-1.1.2" = { + name = "w3c-xmlserializer"; + packageName = "w3c-xmlserializer"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz"; + sha512 = "p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg=="; + }; + }; + "wcwidth-1.0.1" = { + name = "wcwidth"; + packageName = "wcwidth"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz"; + sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"; + }; + }; + "webidl-conversions-4.0.2" = { + name = "webidl-conversions"; + packageName = "webidl-conversions"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz"; + sha512 = "YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="; + }; + }; + "whatwg-encoding-1.0.5" = { + name = "whatwg-encoding"; + packageName = "whatwg-encoding"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz"; + sha512 = "b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw=="; + }; + }; + "whatwg-mimetype-2.3.0" = { + name = "whatwg-mimetype"; + packageName = "whatwg-mimetype"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz"; + sha512 = "M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="; + }; + }; + "whatwg-url-7.1.0" = { + name = "whatwg-url"; + packageName = "whatwg-url"; + version = "7.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz"; + sha512 = "WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="; + }; + }; + "which-1.3.1" = { + name = "which"; + packageName = "which"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz"; + sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="; + }; + }; + "which-module-2.0.0" = { + name = "which-module"; + packageName = "which-module"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz"; + sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; + }; + }; + "word-wrap-1.2.3" = { + name = "word-wrap"; + packageName = "word-wrap"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"; + sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="; + }; + }; + "wrap-ansi-5.1.0" = { + name = "wrap-ansi"; + packageName = "wrap-ansi"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz"; + sha512 = "QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q=="; + }; + }; + "wrappy-1.0.2" = { + name = "wrappy"; + packageName = "wrappy"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + }; + "ws-5.2.2" = { + name = "ws"; + packageName = "ws"; + version = "5.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz"; + sha512 = "jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA=="; + }; + }; + "ws-6.2.1" = { + name = "ws"; + packageName = "ws"; + version = "6.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz"; + sha512 = "GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA=="; + }; + }; + "xml-name-validator-3.0.0" = { + name = "xml-name-validator"; + packageName = "xml-name-validator"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz"; + sha512 = "A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="; + }; + }; + "xmlchars-2.2.0" = { + name = "xmlchars"; + packageName = "xmlchars"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz"; + sha512 = "JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="; + }; + }; + "xtend-4.0.2" = { + name = "xtend"; + packageName = "xtend"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"; + sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="; + }; + }; + "y18n-4.0.0" = { + name = "y18n"; + packageName = "y18n"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz"; + sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="; + }; + }; + "yallist-2.1.2" = { + name = "yallist"; + packageName = "yallist"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + }; + "yargs-14.2.3" = { + name = "yargs"; + packageName = "yargs"; + version = "14.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz"; + sha512 = "ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg=="; + }; + }; + "yargs-parser-15.0.1" = { + name = "yargs-parser"; + packageName = "yargs-parser"; + version = "15.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz"; + sha512 = "0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw=="; + }; + }; + }; + args = { + name = "codenamesgreen"; + packageName = "codenamesgreen"; + version = "1.0.0"; + src = let + upstream = fetchFromGitHub { + owner = "jbowens"; + repo = "codenamesgreen"; + rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b"; + sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0"; + }; + in + runCommand "codenamesgreen-src" {} '' + cp -a ${upstream} $out + chmod -R u+w $out + cd $out + patch -p1 < ${./codenames.patch} + patch -p1 < ${./immae-assets.patch} + ''; + dependencies = [ + sources."@babel/code-frame-7.0.0" + (sources."@babel/core-7.3.4" // { + dependencies = [ + sources."json5-2.1.3" + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/generator-7.3.4" // { + dependencies = [ + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/helper-annotate-as-pure-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-builder-react-jsx-7.9.0" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + sources."@babel/helper-create-regexp-features-plugin-7.8.8" + (sources."@babel/helper-define-map-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-explode-assignable-expression-7.8.3" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/generator-7.9.5" + sources."@babel/parser-7.9.4" + sources."@babel/traverse-7.9.5" + sources."@babel/types-7.9.5" + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/helper-function-name-7.9.5" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/parser-7.9.4" + sources."@babel/template-7.8.6" + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-get-function-arity-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-hoist-variables-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-member-expression-to-functions-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-module-imports-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-module-transforms-7.9.0" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/parser-7.9.4" + sources."@babel/template-7.8.6" + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-optimise-call-expression-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + sources."@babel/helper-plugin-utils-7.8.3" + sources."@babel/helper-regex-7.8.3" + (sources."@babel/helper-remap-async-to-generator-7.8.3" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/generator-7.9.5" + sources."@babel/parser-7.9.4" + sources."@babel/template-7.8.6" + sources."@babel/traverse-7.9.5" + sources."@babel/types-7.9.5" + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/helper-replace-supers-7.8.6" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/generator-7.9.5" + sources."@babel/parser-7.9.4" + sources."@babel/traverse-7.9.5" + sources."@babel/types-7.9.5" + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/helper-simple-access-7.8.3" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/parser-7.9.4" + sources."@babel/template-7.8.6" + sources."@babel/types-7.9.5" + ]; + }) + (sources."@babel/helper-split-export-declaration-7.8.3" // { + dependencies = [ + sources."@babel/types-7.9.5" + ]; + }) + sources."@babel/helper-validator-identifier-7.9.5" + (sources."@babel/helper-wrap-function-7.8.3" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/generator-7.9.5" + sources."@babel/parser-7.9.4" + sources."@babel/template-7.8.6" + sources."@babel/traverse-7.9.5" + sources."@babel/types-7.9.5" + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/helpers-7.9.2" // { + dependencies = [ + sources."@babel/code-frame-7.8.3" + sources."@babel/generator-7.9.5" + sources."@babel/parser-7.9.4" + sources."@babel/template-7.8.6" + sources."@babel/traverse-7.9.5" + sources."@babel/types-7.9.5" + sources."source-map-0.5.7" + ]; + }) + sources."@babel/highlight-7.9.0" + sources."@babel/parser-7.3.4" + sources."@babel/plugin-proposal-async-generator-functions-7.8.3" + sources."@babel/plugin-proposal-json-strings-7.8.3" + sources."@babel/plugin-proposal-object-rest-spread-7.9.5" + sources."@babel/plugin-proposal-optional-catch-binding-7.8.3" + sources."@babel/plugin-proposal-unicode-property-regex-7.8.8" + sources."@babel/plugin-syntax-async-generators-7.8.4" + sources."@babel/plugin-syntax-flow-7.8.3" + sources."@babel/plugin-syntax-json-strings-7.8.3" + sources."@babel/plugin-syntax-jsx-7.8.3" + sources."@babel/plugin-syntax-object-rest-spread-7.8.3" + sources."@babel/plugin-syntax-optional-catch-binding-7.8.3" + sources."@babel/plugin-transform-arrow-functions-7.8.3" + sources."@babel/plugin-transform-async-to-generator-7.8.3" + sources."@babel/plugin-transform-block-scoped-functions-7.8.3" + sources."@babel/plugin-transform-block-scoping-7.8.3" + sources."@babel/plugin-transform-classes-7.9.5" + sources."@babel/plugin-transform-computed-properties-7.8.3" + sources."@babel/plugin-transform-destructuring-7.9.5" + sources."@babel/plugin-transform-dotall-regex-7.8.3" + sources."@babel/plugin-transform-duplicate-keys-7.8.3" + sources."@babel/plugin-transform-exponentiation-operator-7.8.3" + sources."@babel/plugin-transform-flow-strip-types-7.3.4" + sources."@babel/plugin-transform-for-of-7.9.0" + sources."@babel/plugin-transform-function-name-7.8.3" + sources."@babel/plugin-transform-literals-7.8.3" + sources."@babel/plugin-transform-modules-amd-7.9.0" + sources."@babel/plugin-transform-modules-commonjs-7.2.0" + sources."@babel/plugin-transform-modules-systemjs-7.9.0" + sources."@babel/plugin-transform-modules-umd-7.9.0" + sources."@babel/plugin-transform-named-capturing-groups-regex-7.8.3" + sources."@babel/plugin-transform-new-target-7.8.3" + sources."@babel/plugin-transform-object-super-7.8.3" + sources."@babel/plugin-transform-parameters-7.9.5" + sources."@babel/plugin-transform-react-jsx-7.3.0" + sources."@babel/plugin-transform-regenerator-7.8.7" + sources."@babel/plugin-transform-shorthand-properties-7.8.3" + sources."@babel/plugin-transform-spread-7.8.3" + sources."@babel/plugin-transform-sticky-regex-7.8.3" + sources."@babel/plugin-transform-template-literals-7.8.3" + sources."@babel/plugin-transform-typeof-symbol-7.8.4" + sources."@babel/plugin-transform-unicode-regex-7.8.3" + sources."@babel/preset-env-7.3.4" + (sources."@babel/runtime-7.3.4" // { + dependencies = [ + sources."regenerator-runtime-0.12.1" + ]; + }) + sources."@babel/template-7.2.2" + sources."@babel/traverse-7.3.4" + sources."@babel/types-7.3.4" + sources."@iarna/toml-2.2.5" + sources."@mrmlnc/readdir-enhanced-2.2.1" + sources."@nodelib/fs.stat-1.1.3" + sources."@parcel/fs-1.11.0" + sources."@parcel/logger-1.11.1" + sources."@parcel/utils-1.11.0" + sources."@parcel/watcher-1.12.1" + sources."@parcel/workers-1.11.0" + sources."@types/q-1.5.2" + sources."abab-2.0.3" + sources."abbrev-1.1.1" + sources."acorn-7.1.1" + (sources."acorn-globals-4.3.4" // { + dependencies = [ + sources."acorn-6.4.1" + ]; + }) + sources."acorn-walk-6.2.0" + sources."ajv-6.12.2" + sources."alphanum-sort-1.0.2" + sources."ansi-regex-3.0.0" + sources."ansi-styles-3.2.1" + (sources."ansi-to-html-0.6.14" // { + dependencies = [ + sources."entities-1.1.2" + ]; + }) + (sources."anymatch-2.0.0" // { + dependencies = [ + sources."normalize-path-2.1.1" + ]; + }) + sources."argparse-1.0.10" + sources."arr-diff-4.0.0" + sources."arr-flatten-1.1.0" + sources."arr-union-3.1.0" + sources."array-equal-1.0.0" + sources."array-unique-0.3.2" + sources."asn1-0.2.4" + sources."asn1.js-4.10.1" + (sources."assert-1.5.0" // { + dependencies = [ + sources."inherits-2.0.1" + sources."util-0.10.3" + ]; + }) + sources."assert-plus-1.0.0" + sources."assign-symbols-1.0.0" + sources."async-each-1.0.3" + sources."async-limiter-1.0.1" + sources."asynckit-0.4.0" + sources."atob-2.1.2" + sources."aws-sign2-0.7.0" + sources."aws4-1.9.1" + sources."babel-plugin-dynamic-import-node-2.3.3" + (sources."babel-runtime-6.26.0" // { + dependencies = [ + sources."regenerator-runtime-0.11.1" + ]; + }) + (sources."babel-types-6.26.0" // { + dependencies = [ + sources."to-fast-properties-1.0.3" + ]; + }) + sources."babylon-walk-1.0.2" + sources."balanced-match-1.0.0" + (sources."base-0.11.2" // { + dependencies = [ + sources."define-property-1.0.0" + sources."is-accessor-descriptor-1.0.0" + sources."is-data-descriptor-1.0.0" + sources."is-descriptor-1.0.2" + ]; + }) + sources."base64-js-1.3.1" + sources."bcrypt-pbkdf-1.0.2" + sources."binary-extensions-1.13.1" + sources."bindings-1.5.0" + sources."bn.js-4.11.8" + sources."boolbase-1.0.0" + sources."brace-expansion-1.1.11" + (sources."braces-2.3.2" // { + dependencies = [ + sources."extend-shallow-2.0.1" + ]; + }) + sources."brfs-1.6.1" + sources."brorand-1.1.0" + sources."browser-process-hrtime-1.0.0" + sources."browserify-aes-1.2.0" + sources."browserify-cipher-1.0.1" + sources."browserify-des-1.0.2" + sources."browserify-rsa-4.0.1" + sources."browserify-sign-4.0.4" + (sources."browserify-zlib-0.2.0" // { + dependencies = [ + sources."pako-1.0.11" + ]; + }) + sources."browserslist-4.12.0" + sources."buffer-4.9.2" + sources."buffer-equal-0.0.1" + sources."buffer-from-1.1.1" + sources."buffer-xor-1.0.3" + sources."builtin-status-codes-3.0.0" + sources."cache-base-1.0.1" + sources."call-me-maybe-1.0.1" + sources."caller-callsite-2.0.0" + sources."caller-path-2.0.0" + sources."callsites-2.0.0" + sources."camelcase-5.3.1" + sources."caniuse-api-3.0.0" + sources."caniuse-lite-1.0.30001048" + sources."caseless-0.12.0" + (sources."chalk-2.4.2" // { + dependencies = [ + sources."supports-color-5.5.0" + ]; + }) + (sources."chokidar-2.1.8" // { + dependencies = [ + sources."fsevents-1.2.12" + ]; + }) + sources."cipher-base-1.0.4" + (sources."class-utils-0.3.6" // { + dependencies = [ + sources."define-property-0.2.5" + ]; + }) + sources."cli-cursor-2.1.0" + sources."cli-spinners-1.3.1" + (sources."cliui-5.0.0" // { + dependencies = [ + sources."ansi-regex-4.1.0" + sources."strip-ansi-5.2.0" + ]; + }) + sources."clone-2.1.2" + sources."clones-1.2.0" + sources."coa-2.0.2" + sources."collection-visit-1.0.0" + sources."color-3.1.2" + sources."color-convert-1.9.3" + sources."color-name-1.1.3" + sources."color-string-1.5.3" + sources."combined-stream-1.0.8" + sources."command-exists-1.2.9" + sources."commander-2.20.3" + sources."component-emitter-1.3.0" + sources."concat-map-0.0.1" + sources."concat-stream-1.6.2" + sources."config-chain-1.1.12" + sources."console-browserify-1.2.0" + sources."constants-browserify-1.0.0" + sources."convert-source-map-1.7.0" + sources."copy-descriptor-0.1.1" + sources."core-js-2.6.11" + sources."core-util-is-1.0.2" + sources."cosmiconfig-5.2.1" + sources."create-ecdh-4.0.3" + sources."create-hash-1.2.0" + sources."create-hmac-1.1.7" + sources."cross-spawn-6.0.5" + sources."crypto-browserify-3.12.0" + sources."css-color-names-0.0.4" + sources."css-declaration-sorter-4.0.1" + (sources."css-modules-loader-core-1.1.0" // { + dependencies = [ + sources."ansi-regex-2.1.1" + sources."ansi-styles-2.2.1" + (sources."chalk-1.1.3" // { + dependencies = [ + sources."supports-color-2.0.0" + ]; + }) + sources."has-flag-1.0.0" + sources."postcss-6.0.1" + sources."source-map-0.5.7" + sources."strip-ansi-3.0.1" + sources."supports-color-3.2.3" + ]; + }) + sources."css-select-2.1.0" + sources."css-select-base-adapter-0.1.1" + sources."css-selector-tokenizer-0.7.2" + sources."css-tree-1.0.0-alpha.37" + sources."css-what-3.2.1" + sources."cssesc-3.0.0" + sources."cssnano-4.1.10" + sources."cssnano-preset-default-4.0.7" + sources."cssnano-util-get-arguments-4.0.0" + sources."cssnano-util-get-match-4.0.0" + sources."cssnano-util-raw-cache-4.0.1" + sources."cssnano-util-same-parent-4.0.1" + (sources."csso-4.0.3" // { + dependencies = [ + sources."css-tree-1.0.0-alpha.39" + sources."mdn-data-2.0.6" + ]; + }) + sources."cssom-0.3.8" + sources."cssstyle-1.4.0" + sources."dashdash-1.14.1" + sources."data-urls-1.1.0" + sources."deasync-0.1.19" + sources."debug-4.1.1" + sources."decamelize-1.2.0" + sources."decode-uri-component-0.2.0" + sources."deep-is-0.1.3" + (sources."defaults-1.0.3" // { + dependencies = [ + sources."clone-1.0.4" + ]; + }) + sources."define-properties-1.1.3" + (sources."define-property-2.0.2" // { + dependencies = [ + sources."is-accessor-descriptor-1.0.0" + sources."is-data-descriptor-1.0.0" + sources."is-descriptor-1.0.2" + ]; + }) + sources."delayed-stream-1.0.0" + sources."depd-1.1.2" + sources."des.js-1.0.1" + sources."destroy-1.0.4" + sources."diffie-hellman-5.0.3" + (sources."dom-serializer-0.2.2" // { + dependencies = [ + sources."domelementtype-2.0.1" + ]; + }) + sources."domain-browser-1.2.0" + sources."domelementtype-1.3.1" + sources."domexception-1.0.1" + sources."domhandler-2.4.2" + sources."domutils-1.7.0" + sources."dot-prop-5.2.0" + sources."dotenv-5.0.1" + sources."dotenv-expand-4.2.0" + sources."duplexer2-0.1.4" + sources."ecc-jsbn-0.1.2" + sources."editorconfig-0.15.3" + sources."ee-first-1.1.1" + sources."electron-to-chromium-1.3.418" + sources."elliptic-6.5.2" + sources."elm-hot-1.1.1" + sources."emoji-regex-7.0.3" + sources."encodeurl-1.0.2" + sources."entities-2.0.0" + sources."error-ex-1.3.2" + sources."es-abstract-1.17.5" + sources."es-to-primitive-1.2.1" + sources."escape-html-1.0.3" + sources."escape-string-regexp-1.0.5" + (sources."escodegen-1.9.1" // { + dependencies = [ + sources."esprima-3.1.3" + ]; + }) + sources."esprima-4.0.1" + sources."estraverse-4.3.0" + sources."esutils-2.0.3" + sources."etag-1.8.1" + sources."events-3.1.0" + sources."evp_bytestokey-1.0.3" + (sources."expand-brackets-2.1.4" // { + dependencies = [ + sources."debug-2.6.9" + sources."define-property-0.2.5" + sources."extend-shallow-2.0.1" + sources."ms-2.0.0" + ]; + }) + sources."extend-3.0.2" + (sources."extend-shallow-3.0.2" // { + dependencies = [ + sources."is-extendable-1.0.1" + ]; + }) + (sources."extglob-2.0.4" // { + dependencies = [ + sources."define-property-1.0.0" + sources."extend-shallow-2.0.1" + sources."is-accessor-descriptor-1.0.0" + sources."is-data-descriptor-1.0.0" + sources."is-descriptor-1.0.2" + ]; + }) + sources."extsprintf-1.3.0" + (sources."falafel-2.2.4" // { + dependencies = [ + sources."isarray-2.0.5" + ]; + }) + sources."fast-deep-equal-3.1.1" + sources."fast-glob-2.2.7" + sources."fast-json-stable-stringify-2.1.0" + sources."fast-levenshtein-2.0.6" + sources."fastparse-1.1.2" + sources."file-uri-to-path-1.0.0" + sources."filesize-3.6.1" + (sources."fill-range-4.0.0" // { + dependencies = [ + sources."extend-shallow-2.0.1" + ]; + }) + sources."find-elm-dependencies-2.0.2" + sources."find-up-2.1.0" + sources."firstline-1.2.0" + sources."for-in-1.0.2" + sources."foreach-2.0.5" + sources."forever-agent-0.6.1" + sources."form-data-2.3.3" + sources."fragment-cache-0.2.1" + sources."fresh-0.5.2" + sources."fs.realpath-1.0.0" + sources."function-bind-1.1.1" + sources."get-caller-file-2.0.5" + sources."get-port-3.2.0" + sources."get-value-2.0.6" + sources."getpass-0.1.7" + sources."glob-7.1.4" + (sources."glob-parent-3.1.0" // { + dependencies = [ + sources."is-glob-3.1.0" + ]; + }) + sources."glob-to-regexp-0.3.0" + sources."globals-11.12.0" + sources."graceful-fs-4.2.3" + sources."grapheme-breaker-0.3.2" + sources."har-schema-2.0.0" + sources."har-validator-5.1.3" + sources."has-1.0.3" + (sources."has-ansi-2.0.0" // { + dependencies = [ + sources."ansi-regex-2.1.1" + ]; + }) + sources."has-flag-3.0.0" + sources."has-symbols-1.0.1" + sources."has-value-1.0.0" + (sources."has-values-1.0.0" // { + dependencies = [ + sources."kind-of-4.0.0" + ]; + }) + sources."hash-base-3.0.4" + sources."hash.js-1.1.7" + sources."hex-color-regex-1.1.0" + sources."hmac-drbg-1.0.1" + sources."hsl-regex-1.0.0" + sources."hsla-regex-1.0.0" + sources."html-comment-regex-1.1.2" + sources."html-encoding-sniffer-1.0.2" + sources."html-tags-1.2.0" + (sources."htmlnano-0.2.5" // { + dependencies = [ + sources."posthtml-0.12.3" + sources."terser-4.6.12" + ]; + }) + (sources."htmlparser2-3.10.1" // { + dependencies = [ + sources."entities-1.1.2" + sources."readable-stream-3.6.0" + ]; + }) + sources."http-errors-1.7.3" + sources."http-signature-1.2.0" + sources."https-browserify-1.0.0" + sources."iconv-lite-0.4.24" + sources."icss-replace-symbols-1.1.0" + sources."ieee754-1.1.13" + sources."import-fresh-2.0.0" + sources."indexes-of-1.0.1" + sources."inflight-1.0.6" + sources."inherits-2.0.4" + sources."ini-1.3.5" + sources."invariant-2.2.4" + sources."is-absolute-url-2.1.0" + (sources."is-accessor-descriptor-0.1.6" // { + dependencies = [ + sources."kind-of-3.2.2" + ]; + }) + sources."is-arrayish-0.2.1" + sources."is-binary-path-1.0.1" + sources."is-buffer-1.1.6" + sources."is-callable-1.1.5" + sources."is-color-stop-1.1.0" + (sources."is-data-descriptor-0.1.4" // { + dependencies = [ + sources."kind-of-3.2.2" + ]; + }) + sources."is-date-object-1.0.2" + (sources."is-descriptor-0.1.6" // { + dependencies = [ + sources."kind-of-5.1.0" + ]; + }) + sources."is-directory-0.3.1" + sources."is-extendable-0.1.1" + sources."is-extglob-2.1.1" + sources."is-fullwidth-code-point-2.0.0" + sources."is-glob-4.0.1" + sources."is-html-1.1.0" + (sources."is-number-3.0.0" // { + dependencies = [ + sources."kind-of-3.2.2" + ]; + }) + sources."is-obj-2.0.0" + sources."is-plain-object-2.0.4" + sources."is-regex-1.0.5" + sources."is-resolvable-1.1.0" + sources."is-svg-3.0.0" + sources."is-symbol-1.0.3" + sources."is-typedarray-1.0.0" + sources."is-url-1.2.4" + sources."is-windows-1.0.2" + sources."is-wsl-1.1.0" + sources."isarray-1.0.0" + sources."isexe-2.0.0" + sources."isobject-3.0.1" + sources."isstream-0.1.2" + (sources."js-beautify-1.11.0" // { + dependencies = [ + sources."mkdirp-1.0.4" + ]; + }) + sources."js-levenshtein-1.1.6" + sources."js-tokens-4.0.0" + sources."js-yaml-3.13.1" + sources."jsbn-0.1.1" + (sources."jsdom-14.1.0" // { + dependencies = [ + sources."acorn-6.4.1" + sources."escodegen-1.14.1" + sources."ws-6.2.1" + ]; + }) + sources."jsesc-2.5.2" + sources."json-parse-better-errors-1.0.2" + sources."json-schema-0.2.3" + sources."json-schema-traverse-0.4.1" + sources."json-stringify-safe-5.0.1" + sources."json5-1.0.1" + sources."jsprim-1.4.1" + sources."kind-of-6.0.3" + sources."levn-0.3.0" + sources."locate-path-2.0.0" + sources."lodash-4.17.15" + sources."lodash.clone-4.5.0" + sources."lodash.memoize-4.1.2" + sources."lodash.sortby-4.7.0" + sources."lodash.uniq-4.5.0" + sources."log-symbols-2.2.0" + sources."loose-envify-1.4.0" + sources."lru-cache-4.1.5" + sources."magic-string-0.22.5" + sources."map-cache-0.2.2" + sources."map-visit-1.0.0" + sources."md5.js-1.3.5" + sources."mdn-data-2.0.4" + (sources."merge-source-map-1.0.4" // { + dependencies = [ + sources."source-map-0.5.7" + ]; + }) + sources."merge2-1.3.0" + sources."micromatch-3.1.10" + sources."miller-rabin-4.0.1" + sources."mime-1.6.0" + sources."mime-db-1.44.0" + sources."mime-types-2.1.27" + sources."mimic-fn-1.2.0" + sources."minimalistic-assert-1.0.1" + sources."minimalistic-crypto-utils-1.0.1" + sources."minimatch-3.0.4" + sources."minimist-1.2.5" + (sources."mixin-deep-1.3.2" // { + dependencies = [ + sources."is-extendable-1.0.1" + ]; + }) + sources."mkdirp-0.5.5" + sources."ms-2.1.2" + sources."nan-2.14.1" + sources."nanomatch-1.2.13" + sources."nice-try-1.0.5" + sources."node-addon-api-1.7.1" + sources."node-elm-compiler-5.0.4" + sources."node-forge-0.7.6" + (sources."node-libs-browser-2.2.1" // { + dependencies = [ + sources."punycode-1.4.1" + ]; + }) + sources."node-releases-1.1.53" + sources."nopt-4.0.3" + sources."normalize-html-whitespace-1.0.0" + sources."normalize-path-3.0.0" + sources."normalize-url-3.3.0" + sources."nth-check-1.0.2" + sources."nwsapi-2.2.0" + sources."oauth-sign-0.9.0" + sources."object-assign-4.1.1" + (sources."object-copy-0.1.0" // { + dependencies = [ + sources."define-property-0.2.5" + sources."kind-of-3.2.2" + ]; + }) + sources."object-inspect-1.7.0" + sources."object-keys-1.1.1" + sources."object-visit-1.0.1" + sources."object.assign-4.1.0" + sources."object.getownpropertydescriptors-2.1.0" + sources."object.pick-1.3.0" + sources."object.values-1.1.1" + sources."on-finished-2.3.0" + sources."once-1.4.0" + sources."onetime-2.0.1" + sources."opn-5.5.0" + sources."optionator-0.8.3" + sources."ora-2.1.0" + sources."os-browserify-0.3.0" + sources."os-homedir-1.0.2" + sources."os-tmpdir-1.0.2" + sources."osenv-0.1.5" + sources."p-limit-1.3.0" + sources."p-locate-2.0.0" + sources."p-try-1.0.0" + sources."pako-0.2.9" + (sources."parcel-bundler-1.12.3" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + sources."parse-asn1-5.1.5" + sources."parse-json-4.0.0" + sources."parse5-5.1.0" + sources."parseurl-1.3.3" + sources."pascalcase-0.1.1" + sources."path-browserify-0.0.1" + sources."path-dirname-1.0.2" + sources."path-exists-3.0.0" + sources."path-is-absolute-1.0.1" + sources."path-key-2.0.1" + sources."path-parse-1.0.6" + sources."pbkdf2-3.0.17" + sources."performance-now-2.1.0" + sources."physical-cpu-count-2.0.0" + sources."pkg-up-2.0.0" + sources."pn-1.1.0" + sources."posix-character-classes-0.1.1" + sources."postcss-7.0.27" + sources."postcss-calc-7.0.2" + (sources."postcss-colormin-4.0.3" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-convert-values-4.0.1" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + sources."postcss-discard-comments-4.0.2" + sources."postcss-discard-duplicates-4.0.2" + sources."postcss-discard-empty-4.0.1" + sources."postcss-discard-overridden-4.0.1" + (sources."postcss-merge-longhand-4.0.11" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-merge-rules-4.0.3" // { + dependencies = [ + sources."postcss-selector-parser-3.1.2" + ]; + }) + (sources."postcss-minify-font-values-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-minify-gradients-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-minify-params-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-minify-selectors-4.0.2" // { + dependencies = [ + sources."postcss-selector-parser-3.1.2" + ]; + }) + (sources."postcss-modules-extract-imports-1.1.0" // { + dependencies = [ + sources."postcss-6.0.23" + sources."supports-color-5.5.0" + ]; + }) + (sources."postcss-modules-local-by-default-1.2.0" // { + dependencies = [ + sources."postcss-6.0.23" + sources."supports-color-5.5.0" + ]; + }) + (sources."postcss-modules-scope-1.1.0" // { + dependencies = [ + sources."postcss-6.0.23" + sources."supports-color-5.5.0" + ]; + }) + (sources."postcss-modules-values-1.3.0" // { + dependencies = [ + sources."postcss-6.0.23" + sources."supports-color-5.5.0" + ]; + }) + sources."postcss-normalize-charset-4.0.1" + (sources."postcss-normalize-display-values-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-positions-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-repeat-style-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-string-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-timing-functions-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-unicode-4.0.1" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-url-4.0.1" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-normalize-whitespace-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + (sources."postcss-ordered-values-4.1.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + sources."postcss-reduce-initial-4.0.3" + (sources."postcss-reduce-transforms-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + sources."postcss-selector-parser-6.0.2" + (sources."postcss-svgo-4.0.2" // { + dependencies = [ + sources."postcss-value-parser-3.3.1" + ]; + }) + sources."postcss-unique-selectors-4.0.1" + sources."postcss-value-parser-4.0.3" + sources."posthtml-0.11.6" + sources."posthtml-parser-0.4.2" + sources."posthtml-render-1.2.2" + sources."prelude-ls-1.1.2" + sources."private-0.1.8" + sources."process-0.11.10" + sources."process-nextick-args-2.0.1" + sources."proto-list-1.2.4" + sources."pseudomap-1.0.2" + sources."psl-1.8.0" + sources."public-encrypt-4.0.3" + sources."punycode-2.1.1" + sources."purgecss-1.4.2" + sources."q-1.5.1" + sources."qs-6.5.2" + sources."querystring-0.2.0" + sources."querystring-es3-0.2.1" + sources."quote-stream-1.0.2" + sources."randombytes-2.1.0" + sources."randomfill-1.0.4" + sources."range-parser-1.2.1" + sources."readable-stream-2.3.7" + sources."readdirp-2.2.1" + sources."regenerate-1.4.0" + sources."regenerate-unicode-properties-8.2.0" + sources."regenerator-runtime-0.13.5" + (sources."regenerator-transform-0.14.4" // { + dependencies = [ + sources."@babel/runtime-7.9.2" + ]; + }) + sources."regex-not-1.0.2" + sources."regexpu-core-4.7.0" + sources."regjsgen-0.5.1" + (sources."regjsparser-0.6.4" // { + dependencies = [ + sources."jsesc-0.5.0" + ]; + }) + sources."remove-trailing-separator-1.1.0" + sources."repeat-element-1.1.3" + sources."repeat-string-1.6.1" + sources."request-2.88.2" + sources."request-promise-core-1.1.3" + sources."request-promise-native-1.0.8" + sources."require-directory-2.1.1" + sources."require-main-filename-2.0.0" + sources."resolve-1.17.0" + sources."resolve-from-3.0.0" + sources."resolve-url-0.2.1" + sources."restore-cursor-2.0.0" + sources."ret-0.1.15" + sources."rgb-regex-1.0.1" + sources."rgba-regex-1.0.0" + sources."rimraf-2.6.3" + sources."ripemd160-2.0.2" + sources."safe-buffer-5.1.2" + sources."safe-regex-1.1.0" + sources."safer-buffer-2.1.2" + sources."safer-eval-1.3.6" + sources."sax-1.2.4" + sources."saxes-3.1.11" + sources."semver-5.7.1" + (sources."send-0.17.1" // { + dependencies = [ + (sources."debug-2.6.9" // { + dependencies = [ + sources."ms-2.0.0" + ]; + }) + sources."ms-2.1.1" + ]; + }) + sources."serialize-to-js-1.2.2" + sources."serve-static-1.14.1" + sources."set-blocking-2.0.0" + (sources."set-value-2.0.1" // { + dependencies = [ + sources."extend-shallow-2.0.1" + ]; + }) + sources."setimmediate-1.0.5" + sources."setprototypeof-1.1.1" + sources."sha.js-2.4.11" + sources."shallow-copy-0.0.1" + sources."shebang-command-1.2.0" + sources."shebang-regex-1.0.0" + sources."sigmund-1.0.1" + sources."signal-exit-3.0.3" + (sources."simple-swizzle-0.2.2" // { + dependencies = [ + sources."is-arrayish-0.3.2" + ]; + }) + (sources."snapdragon-0.8.2" // { + dependencies = [ + sources."debug-2.6.9" + sources."define-property-0.2.5" + sources."extend-shallow-2.0.1" + sources."ms-2.0.0" + sources."source-map-0.5.7" + ]; + }) + (sources."snapdragon-node-2.1.1" // { + dependencies = [ + sources."define-property-1.0.0" + sources."is-accessor-descriptor-1.0.0" + sources."is-data-descriptor-1.0.0" + sources."is-descriptor-1.0.2" + ]; + }) + (sources."snapdragon-util-3.0.1" // { + dependencies = [ + sources."kind-of-3.2.2" + ]; + }) + sources."source-map-0.6.1" + sources."source-map-resolve-0.5.3" + sources."source-map-support-0.5.19" + sources."source-map-url-0.4.0" + sources."split-string-3.1.0" + sources."sprintf-js-1.0.3" + sources."sshpk-1.16.1" + sources."stable-0.1.8" + (sources."static-eval-2.0.5" // { + dependencies = [ + sources."escodegen-1.14.1" + ]; + }) + (sources."static-extend-0.1.2" // { + dependencies = [ + sources."define-property-0.2.5" + ]; + }) + (sources."static-module-2.2.5" // { + dependencies = [ + sources."object-inspect-1.4.1" + ]; + }) + sources."statuses-1.5.0" + sources."stealthy-require-1.1.1" + sources."stream-browserify-2.0.2" + sources."stream-http-2.8.3" + (sources."string-width-3.1.0" // { + dependencies = [ + sources."ansi-regex-4.1.0" + sources."strip-ansi-5.2.0" + ]; + }) + sources."string.prototype.trimend-1.0.1" + sources."string.prototype.trimleft-2.1.2" + sources."string.prototype.trimright-2.1.2" + sources."string.prototype.trimstart-1.0.1" + sources."string_decoder-1.1.1" + sources."strip-ansi-4.0.0" + (sources."stylehacks-4.0.3" // { + dependencies = [ + sources."postcss-selector-parser-3.1.2" + ]; + }) + sources."supports-color-6.1.0" + sources."svgo-1.3.2" + sources."symbol-tree-3.2.4" + sources."temp-0.9.0" + sources."terser-3.17.0" + sources."through2-2.0.5" + sources."timers-browserify-2.0.11" + sources."timsort-0.3.0" + sources."tiny-inflate-1.0.3" + sources."to-arraybuffer-1.0.1" + sources."to-fast-properties-2.0.0" + (sources."to-object-path-0.3.0" // { + dependencies = [ + sources."kind-of-3.2.2" + ]; + }) + sources."to-regex-3.0.2" + sources."to-regex-range-2.1.1" + sources."toidentifier-1.0.0" + sources."tough-cookie-2.5.0" + sources."tr46-1.0.1" + sources."trim-right-1.0.1" + sources."tty-browserify-0.0.0" + sources."tunnel-agent-0.6.0" + sources."tweetnacl-0.14.5" + sources."type-check-0.3.2" + sources."typedarray-0.0.6" + (sources."uncss-0.17.3" // { + dependencies = [ + sources."is-absolute-url-3.0.3" + ]; + }) + sources."unicode-canonical-property-names-ecmascript-1.0.4" + sources."unicode-match-property-ecmascript-1.0.4" + sources."unicode-match-property-value-ecmascript-1.2.0" + sources."unicode-property-aliases-ecmascript-1.1.0" + sources."unicode-trie-0.3.1" + sources."union-value-1.0.1" + sources."uniq-1.0.1" + sources."uniqs-2.0.0" + sources."unquote-1.1.1" + (sources."unset-value-1.0.0" // { + dependencies = [ + (sources."has-value-0.3.1" // { + dependencies = [ + sources."isobject-2.1.0" + ]; + }) + sources."has-values-0.1.4" + ]; + }) + sources."upath-1.2.0" + sources."uri-js-4.2.2" + sources."urix-0.1.0" + (sources."url-0.11.0" // { + dependencies = [ + sources."punycode-1.3.2" + ]; + }) + sources."use-3.1.1" + (sources."util-0.11.1" // { + dependencies = [ + sources."inherits-2.0.3" + ]; + }) + sources."util-deprecate-1.0.2" + sources."util.promisify-1.0.1" + sources."uuid-3.4.0" + sources."v8-compile-cache-2.1.0" + sources."vendors-1.0.4" + sources."verror-1.10.0" + sources."vlq-0.2.3" + sources."vm-browserify-1.1.2" + sources."w3c-hr-time-1.0.2" + sources."w3c-xmlserializer-1.1.2" + sources."wcwidth-1.0.1" + sources."webidl-conversions-4.0.2" + sources."whatwg-encoding-1.0.5" + sources."whatwg-mimetype-2.3.0" + sources."whatwg-url-7.1.0" + sources."which-1.3.1" + sources."which-module-2.0.0" + sources."word-wrap-1.2.3" + (sources."wrap-ansi-5.1.0" // { + dependencies = [ + sources."ansi-regex-4.1.0" + sources."strip-ansi-5.2.0" + ]; + }) + sources."wrappy-1.0.2" + sources."ws-5.2.2" + sources."xml-name-validator-3.0.0" + sources."xmlchars-2.2.0" + sources."xtend-4.0.2" + sources."y18n-4.0.0" + sources."yallist-2.1.2" + (sources."yargs-14.2.3" // { + dependencies = [ + sources."find-up-3.0.0" + sources."locate-path-3.0.0" + sources."p-limit-2.3.0" + sources."p-locate-3.0.0" + sources."p-try-2.2.0" + ]; + }) + sources."yargs-parser-15.0.1" + ]; + buildInputs = globalBuildInputs; + meta = { + license = "MIT"; + }; + production = false; + bypassCache = true; + reconstructLock = false; + }; +in +{ + args = args; + sources = sources; + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; +} diff --git a/systems/eldiron/websites/games/codenames/registry.dat b/systems/eldiron/websites/games/codenames/registry.dat new file mode 100644 index 0000000..a8585a8 Binary files /dev/null and b/systems/eldiron/websites/games/codenames/registry.dat differ diff --git a/systems/eldiron/websites/games/codenames/shell.nix b/systems/eldiron/websites/games/codenames/shell.nix new file mode 100644 index 0000000..053696b --- /dev/null +++ b/systems/eldiron/websites/games/codenames/shell.nix @@ -0,0 +1,50 @@ +{ pkgs ? import <nixpkgs> {} }: with pkgs; +let + greenapid = callPackage ./greenapid.nix {}; + frontend = callPackage ./frontend.nix {}; + nginx_conf = writeText "nginx.conf" '' + pid ./nginx.pid; + error_log stderr; + daemon off; + events { + } + http { + include ${mailcap}/etc/nginx/mime.types; + server { + listen 0.0.0.0:8081; + listen [::]:8081; + location /api/ { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://127.0.0.1:8080/; + } + location / { + root ${frontend}; + try_files $uri $uri/ /index.html; + } + } + } + ''; +in +pkgs.mkShell { + buildInputs = [ + greenapid + frontend + python2 + nginx + ]; + shellHook = '' + greenapid & + pid=$! + + finish() { + kill $pid; + } + + trap finish EXIT + + nginx -c ${nginx_conf} -p ./nginx/ + exit + ''; +} diff --git a/systems/eldiron/websites/games/codenames/wordlists/french.txt b/systems/eldiron/websites/games/codenames/wordlists/french.txt new file mode 100644 index 0000000..462ddc4 --- /dev/null +++ b/systems/eldiron/websites/games/codenames/wordlists/french.txt @@ -0,0 +1,694 @@ +ACCIDENT +ACHAT +ACNÉ +ACTION +ADOLESCENT +AFRIQUE +AIGUILLE +ALLUMER +ALPES +ALPHABET +ALTITUDE +AMÉRIQUE +AMI +AMOUR +AMPOULE +ANNIVERSAIRE +APPÉTIT +ARAIGNÉE +ARBRE +ARC +ARC-EN-CIEL +ARGENT +ARME +ARMÉE +ASCENSEUR +ASIE +ASSIS +ASTRONAUTE +ATCHOUM +ATHLÈTE +ATLANTIDE +AUBE +AUSTRALIE +AVEC +AVENTURE +AVION +AVOCAT +BAC +BAGUETTE +BAIN +BAISER +BALAI +BALLE +BALLON +BAMBOU +BANANE +BANNIR +BARBE +BARRIÈRE +BAS +BASKET +BATEAU +BÂTON +BATTERIE +BÉBÉ +BEETHOVEN +BÊTE +BIBERON +BIÈRE +BLANC +BLÉ +BLEU +BOB +BOISSON +BOÎTE +BOMBE +BONBON +BONNET +BORD +BORDEAUX +BOTTE +BOUE +BOUGIE +BOULE +BOUTEILLE +BOUTON +BRANCHE +BRAS +BRAVO +BRETAGNE +BRISE +BROSSE +BRUIT +BRUME +BRUN +BÛCHE +BULLE +BUREAU +BUT +CABANE +CABINE +CACHER +CADEAU +CAFARD +CAFÉ +CAISSE +CALCULER +CALME +CAMÉRA +CAMION +CAMPING +CANADA +CANARD +CANETTE +CANINE +CAP +CAPITALISME +CAR +CAROTTE +CARRÉ +CARTE +CARTON +CASQUE +CASSER +CASSETTE +CAUCHEMAR +CAUSE +CEINTURE +CELLULE +CERCLE +CHAÎNE +CHAIR +CHAISE +CHAMP +CHAMPION +CHANT +CHAPEAU +CHARBON +CHARGE +CHASSE +CHAT +CHÂTEAU +CHAUD +CHAUSSURE +CHAUVE +CHEF +CHEMISE +CHÊNE +CHER +CHEVAL +CHEVALIER +CHEVEU +CHIEN +CHIFFRE +CHINE +CHOCOLAT +CHÔMAGE +CIEL +CIL +CINÉMA +CIRE +CIRQUE +CITRON +CLÉ +CLOU +CLOWN +COACH +COCCINELLE +CODE +CŒUR +COL +COLLE +COLLINE +COLONNE +CÔNE +CONFORT +CONTINU +CONTRE +CONVERSATION +COPAIN +COQ +COQUILLAGE +CORBEAU +CORDE +CORPS +CÔTE +COUDE +COULOIR +COUP +COUR +COURANT +COURRIER +COURS +COURSE +COURT +COUTEAU +COUVERT +COUVERTURE +COWBOY +CRAC +CRAYON +CRÈME +CRITIQUE +CROCHET +CROIX +CROÛTE +CUILLÈRE +CUIR +CUISINE +CULOTTE +CYCLE +DARD +DÉ +DEBOUT +DÉFAUT +DEHORS +DÉMOCRATIE +DENT +DENTISTE +DESSIN +DEVOIR +DIAMANT +DICTIONNAIRE +DIEU +DINOSAURE +DISCOURS +DISQUE +DIX +DOCTEUR +DOIGT +DOMINO +DORMIR +DROIT +EAU +ÉCHEC +ÉCHELLE +ÉCLAIR +ÉCOLE +ÉCRAN +ÉCRASER +ÉCRIT +ÉGLISE +ÉGOUT +ÉLECTRICITÉ +ÉLÉPHANT +ÉLÈVE +ELFE +EMPREINTE +ENCEINTE +ÉPICE +ÉPINE +ERREUR +ESPACE +ESPION +ESSENCE +ÉTAT +ÉTÉ +ÉTOILE +ÉTRANGER +ÉVENTAIL +ÉVOLUTION +EXPLOSION +EXTENSION +FACE +FAN +FARCE +FATIGUE +FAUTEUIL +FEMME +FENÊTRE +FER +FÊTE +FEU +FEUILLE +FIDÈLE +FIL +FILLE +FLAMME +FLÈCHE +FLEUR +FLEUVE +FOND +FOOTBALL +FORÊT +FORGER +FOUDRE +FOUET +FOUR +FOURMI +FROID +FROMAGE +FRONT +FRUIT +FUIR +FUTUR +GARÇON +GÂTEAU +GAUCHE +GAZ +GAZON +GEL +GENOU +GLACE +GOMME +GORGE +GOUTTE +GRAND +GRÈCE +GRENOUILLE +GRIPPE +GRIS +GROS +GROUPE +GUITARE +HASARD +HAUT +HÉLICOPTÈRE +HERBE +HEUREUX +HISTOIRE +HIVER +HÔTEL +HUGO +HUILE +HUMIDE +HUMOUR +INDICE +INTERNET +INVITER +ITALIE +JACQUES +JAMBE +JAMBON +JARDIN +JAUNE +JEAN +JEANNE +JET +JEU +JOGGING +JOUR +JOURNAL +JUPITER +KILO +KIWI +LAINE +LAIT +LANGUE +LAPIN +LATIN +LAVER +LECTEUR +LÉGER +LENT +LETTRE +LIEN +LIGNE +LINGE +LION +LIT +LIVRE +LOI +LONG +LOUIS +LOUP +LUMIÈRE +LUNDI +LUNE +LUNETTE +MACHINE +MACHO +MAIN +MAISON +MAÎTRESSE +MAL +MALADIE +MAMAN +MAMMOUTH +MANGER +MARAIS +MARC +MARCHE +MARIAGE +MARIE +MARIÉE +MARQUE +MARSEILLE +MASSE +MER +MESSE +MÈTRE +MÉTRO +MIAOU +MICRO +MIEUX +MILLE +MINE +MIROIR +MODERNE +MOITIÉ +MONDE +MONSTRE +MONTAGNE +MONTRE +MORT +MOTEUR +MOTO +MOU +MOUCHE +MOULIN +MOUSTACHE +MOUTON +MUR +MUSCLE +MUSIQUE +MYSTÈRE +NAGE +NATURE +NEIGE +NEUTRE +NEW YORK +NEZ +NID +NINJA +NIVEAU +NOËL +NŒUD +NOIR +NOUS +NUAGE +NUIT +NUMÉRO +ŒIL +ŒUF +OISEAU +OLYMPIQUE +OMBRE +ONGLE +OR +ORAL +ORANGE +ORDINATEUR +ORDRE +ORDURE +OREILLE +ORGANE +ORGUEIL +OURS +OUTIL +OUVERT +OVALE +PAIN +PALAIS +PANNEAU +PANTALON +PANTIN +PAPA +PAPIER +PAPILLON +PARADIS +PARC +PARIS +PAROLE +PARTIE +PASSE +PÂTE +PATIN +PATTE +PAUL +PAYER +PÊCHE +PEINTURE +PENDULE +PENSER +PERSONNE +PETIT +PEUR +PHILOSOPHE +PHOTO +PHRASE +PIANO +PIÈCE +PIED +PIERRE +PILE +PILOTE +PINCE +PIOCHE +PION +PIRATE +PIRE +PISCINE +PLACE +PLAFOND +PLAGE +PLAIE +PLAN +PLANCHE +PLANÈTE +PLANTE +PLASTIQUE +PLAT +PLOMB +PLONGER +PLUIE +POCHE +POÈTE +POIDS +POING +POINT +POIVRE +POLICE +POLITIQUE +POLLEN +POLO +POMME +POMPE +PONT +POPULATION +PORT +PORTE +PORTEFEUILLE +POSITIF +POSTE +POUBELLE +POULE +POUPÉE +POUSSER +POUSSIÈRE +POUVOIR +PRÉHISTOIRE +PREMIER +PRÉSENT +PRESSE +PRIER +PRINCESSE +PRISE +PRIVÉ +PROFESSEUR +PSYCHOLOGIE +PUBLIC +PULL +PUNK +PUZZLE +PYJAMA +QUATRE +QUINZE +RACE +RADIO +RAISIN +RAP +RAYÉ +RAYON +RÉFLÉCHIR +REINE +REPAS +REPTILE +REQUIN +RÊVE +RICHE +RIDEAU +RIEN +RIRE +ROBINET +ROCHE +ROI +ROND +ROSE +ROUE +ROUGE +ROUILLE +ROUX +RUSSIE +SABLE +SABRE +SAC +SAIN +SAISON +SALE +SALLE +SALUT +SAMU +SANDWICH +SANG +SAPIN +SATELLITE +SAUMON +SAUT +SAVOIR +SCHTROUMPF +SCIENCE +SCOUT +SEC +SEINE +SEL +SEPT +SERPENT +SERRER +SEXE +SHAMPOOING +SIÈCLE +SIÈGE +SIESTE +SILHOUETTE +SIRÈNE +SKI +SOLEIL +SOMMEIL +SON +SONNER +SORCIÈRE +SOURD +SOURIS +SPORT +STAR +STATION +STYLO +SUR +SURFACE +SUSHI +SWING +TABLEAU +TACHE +TAILLE +TANTE +TAPIS +TARD +TAXI +TÉLÉPHONE +TÉLÉVISION +TEMPLE +TEMPS +TENNIS +TÊTE +THÉ +TIGRE +TINTIN +TISSU +TITRE +TOAST +TOILETTE +TOKYO +TOMBE +TON +TOP +TOUCHE +TOUJOURS +TOUR +TOURNOI +TOUT +TRACE +TRAIN +TRAÎNER +TRANSPORT +TRAVAIL +TRÉSOR +TRIANGLE +TRISTE +TRÔNE +TROUPEAU +TSAR +TUBE +TUER +TUPPERWARE +TUYAU +TWITTER +TYPE +UNIVERSITÉ +VACHE +VAGUE +VAISSELLE +VALEUR +VER +VERDICT +VERRE +VERS +VERT +VESTE +VIANDE +VIDE +VIE +VIEUX +VILLE +VIN +VINGT +VIOLON +VIPÈRE +VISION +VITE +VIVE +VŒU +VOILE +VOISIN +VOITURE +VOL +VOLUME +VOTE +VOULOIR +VOYAGE +ZEN +ZÉRO +ZODIAQUE +ZONE +ZOO diff --git a/systems/eldiron/websites/games/terraforming-mars/default.nix b/systems/eldiron/websites/games/terraforming-mars/default.nix new file mode 100644 index 0000000..e90e72f --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/default.nix @@ -0,0 +1,75 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.myServices.websites.games.terraforming-mars; + terraforming-mars = pkgs.callPackage ./terraforming-mars.nix {}; +in +{ + options.myServices.websites.games.terraforming-mars.enable = lib.mkEnableOption "Enable Terraforming mars game"; + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.games.subdomains.terraforming-mars = with config.myServices.dns.helpers; + ips servers.eldiron.ips.main; + myServices.chatonsProperties.services.terraforming-mars = { + file.datetime = "2022-08-27T14:20:00"; + service = { + name = "Terraforming Mars"; + description = "Terraforming Mars Boardgame"; + website = "https://terraforming-mars.games.immae.eu/"; + logo = "https://terraforming-mars.games.immae.eu/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Terraforming Mars"; + website = "https://github.com/terraforming-mars/terraforming-mars"; + license.url = "https://github.com/terraforming-mars/terraforming-mars/blob/main/LICENSE"; + license.name = "GNU General Public License v3.0"; + version = "unversionned"; + source.url = "https://github.com/terraforming-mars/terraforming-mars"; + }; + }; + systemd.services.terraforming-mars = { + path = [ pkgs.nodejs_16 pkgs.bashInteractive ]; + description = "Terraforming mars game"; + wantedBy = [ "multi-user.target" ]; + script = '' + export PORT=/run/terraforming-mars/socket.sock + export NODE_ENV=production + mkdir -p /var/lib/terraforming-mars/db + npm run start + ''; + postStart = '' + sleep 5; + chown :wwwrun /run/terraforming-mars/socket.sock + chmod g+w /run/terraforming-mars/socket.sock + ''; + environment.NPM_CONFIG_LOGS_DIR = "%S/terraforming-mars/npm_logs"; + environment.NPM_CONFIG_CACHE = "%S/terraforming-mars/npm_cache"; + serviceConfig = { + User = "terraformingmars"; + DynamicUser = true; + SupplementaryGroups = [ "wwwrun" ]; + Type = "simple"; + WorkingDirectory = terraforming-mars; + RuntimeDirectory = "terraforming-mars"; + StateDirectory = "terraforming-mars"; + }; + }; + + security.acme.certs.games.extraDomainNames = [ "terraforming-mars.games.immae.eu" ]; + security.acme.certs.games.domain = "games.immae.eu"; + services.websites.env.tools.vhostConfs.games_terraforming-mars = { + certName = "games"; + hosts = [ "terraforming-mars.games.immae.eu" ]; + root = null; + extraConfig = [ + '' + ProxyPass / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/ + ProxyPassReverse / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/ + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch b/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch new file mode 100644 index 0000000..684a7df --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch @@ -0,0 +1,13 @@ +diff --git a/assets/index.html b/assets/index.html +index 220192834..d77a0fc80 100644 +--- a/assets/index.html ++++ b/assets/index.html +@@ -2,7 +2,7 @@ + <html> + <head> + <link +- href="https://fonts.googleapis.com/css?family=Ubuntu&display=swap" ++ href="https://assets.immae.eu/fonts/Ubuntu_swap/font.css" + rel="stylesheet" + /> + <link rel="stylesheet" type="text/css" media="all" href="/styles.css" /> diff --git a/systems/eldiron/websites/games/terraforming-mars/node-packages.nix b/systems/eldiron/websites/games/terraforming-mars/node-packages.nix new file mode 100644 index 0000000..e5fac49 --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/node-packages.nix @@ -0,0 +1,4353 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? [], src}: + +let + sources = { + "@babel/code-frame-7.12.13" = { + name = "_at_babel_slash_code-frame"; + packageName = "@babel/code-frame"; + version = "7.12.13"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz"; + sha512 = "HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g=="; + }; + }; + "@babel/helper-validator-identifier-7.12.11" = { + name = "_at_babel_slash_helper-validator-identifier"; + packageName = "@babel/helper-validator-identifier"; + version = "7.12.11"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz"; + sha512 = "np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="; + }; + }; + "@babel/highlight-7.13.10" = { + name = "_at_babel_slash_highlight"; + packageName = "@babel/highlight"; + version = "7.13.10"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz"; + sha512 = "5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg=="; + }; + }; + "@discoveryjs/json-ext-0.5.2" = { + name = "_at_discoveryjs_slash_json-ext"; + packageName = "@discoveryjs/json-ext"; + version = "0.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz"; + sha512 = "HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg=="; + }; + }; + "@nodelib/fs.scandir-2.1.4" = { + name = "_at_nodelib_slash_fs.scandir"; + packageName = "@nodelib/fs.scandir"; + version = "2.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz"; + sha512 = "33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA=="; + }; + }; + "@nodelib/fs.stat-2.0.4" = { + name = "_at_nodelib_slash_fs.stat"; + packageName = "@nodelib/fs.stat"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz"; + sha512 = "IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q=="; + }; + }; + "@nodelib/fs.walk-1.2.6" = { + name = "_at_nodelib_slash_fs.walk"; + packageName = "@nodelib/fs.walk"; + version = "1.2.6"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz"; + sha512 = "8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow=="; + }; + }; + "@types/eslint-7.2.10" = { + name = "_at_types_slash_eslint"; + packageName = "@types/eslint"; + version = "7.2.10"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz"; + sha512 = "kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ=="; + }; + }; + "@types/eslint-scope-3.7.0" = { + name = "_at_types_slash_eslint-scope"; + packageName = "@types/eslint-scope"; + version = "3.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz"; + sha512 = "O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw=="; + }; + }; + "@types/estree-0.0.46" = { + name = "_at_types_slash_estree"; + packageName = "@types/estree"; + version = "0.0.46"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz"; + sha512 = "laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg=="; + }; + }; + "@types/json-schema-7.0.7" = { + name = "_at_types_slash_json-schema"; + packageName = "@types/json-schema"; + version = "7.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz"; + sha512 = "cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA=="; + }; + }; + "@types/node-10.17.58" = { + name = "_at_types_slash_node"; + packageName = "@types/node"; + version = "10.17.58"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/node/-/node-10.17.58.tgz"; + sha512 = "Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w=="; + }; + }; + "@types/pg-7.14.11" = { + name = "_at_types_slash_pg"; + packageName = "@types/pg"; + version = "7.14.11"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/pg/-/pg-7.14.11.tgz"; + sha512 = "EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA=="; + }; + }; + "@types/sqlite3-3.1.7" = { + name = "_at_types_slash_sqlite3"; + packageName = "@types/sqlite3"; + version = "3.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.7.tgz"; + sha512 = "8FHV/8Uzd7IwdHm5mvmF2Aif4aC/gjrt4axWD9SmfaxITnOjtOhCbOSTuqv/VbH1uq0QrwlaTj9aTz3gmR6u4w=="; + }; + }; + "@typescript-eslint/eslint-plugin-4.22.0" = { + name = "_at_typescript-eslint_slash_eslint-plugin"; + packageName = "@typescript-eslint/eslint-plugin"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz"; + sha512 = "U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA=="; + }; + }; + "@typescript-eslint/experimental-utils-4.22.0" = { + name = "_at_typescript-eslint_slash_experimental-utils"; + packageName = "@typescript-eslint/experimental-utils"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz"; + sha512 = "xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg=="; + }; + }; + "@typescript-eslint/parser-4.22.0" = { + name = "_at_typescript-eslint_slash_parser"; + packageName = "@typescript-eslint/parser"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.0.tgz"; + sha512 = "z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q=="; + }; + }; + "@typescript-eslint/scope-manager-4.22.0" = { + name = "_at_typescript-eslint_slash_scope-manager"; + packageName = "@typescript-eslint/scope-manager"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz"; + sha512 = "OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q=="; + }; + }; + "@typescript-eslint/types-4.22.0" = { + name = "_at_typescript-eslint_slash_types"; + packageName = "@typescript-eslint/types"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz"; + sha512 = "sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA=="; + }; + }; + "@typescript-eslint/typescript-estree-4.22.0" = { + name = "_at_typescript-eslint_slash_typescript-estree"; + packageName = "@typescript-eslint/typescript-estree"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz"; + sha512 = "TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg=="; + }; + }; + "@typescript-eslint/visitor-keys-4.22.0" = { + name = "_at_typescript-eslint_slash_visitor-keys"; + packageName = "@typescript-eslint/visitor-keys"; + version = "4.22.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz"; + sha512 = "nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw=="; + }; + }; + "@webassemblyjs/ast-1.11.0" = { + name = "_at_webassemblyjs_slash_ast"; + packageName = "@webassemblyjs/ast"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz"; + sha512 = "kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg=="; + }; + }; + "@webassemblyjs/floating-point-hex-parser-1.11.0" = { + name = "_at_webassemblyjs_slash_floating-point-hex-parser"; + packageName = "@webassemblyjs/floating-point-hex-parser"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz"; + sha512 = "Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA=="; + }; + }; + "@webassemblyjs/helper-api-error-1.11.0" = { + name = "_at_webassemblyjs_slash_helper-api-error"; + packageName = "@webassemblyjs/helper-api-error"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz"; + sha512 = "baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w=="; + }; + }; + "@webassemblyjs/helper-buffer-1.11.0" = { + name = "_at_webassemblyjs_slash_helper-buffer"; + packageName = "@webassemblyjs/helper-buffer"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz"; + sha512 = "u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA=="; + }; + }; + "@webassemblyjs/helper-numbers-1.11.0" = { + name = "_at_webassemblyjs_slash_helper-numbers"; + packageName = "@webassemblyjs/helper-numbers"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz"; + sha512 = "DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ=="; + }; + }; + "@webassemblyjs/helper-wasm-bytecode-1.11.0" = { + name = "_at_webassemblyjs_slash_helper-wasm-bytecode"; + packageName = "@webassemblyjs/helper-wasm-bytecode"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz"; + sha512 = "MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA=="; + }; + }; + "@webassemblyjs/helper-wasm-section-1.11.0" = { + name = "_at_webassemblyjs_slash_helper-wasm-section"; + packageName = "@webassemblyjs/helper-wasm-section"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz"; + sha512 = "3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew=="; + }; + }; + "@webassemblyjs/ieee754-1.11.0" = { + name = "_at_webassemblyjs_slash_ieee754"; + packageName = "@webassemblyjs/ieee754"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz"; + sha512 = "KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA=="; + }; + }; + "@webassemblyjs/leb128-1.11.0" = { + name = "_at_webassemblyjs_slash_leb128"; + packageName = "@webassemblyjs/leb128"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz"; + sha512 = "aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g=="; + }; + }; + "@webassemblyjs/utf8-1.11.0" = { + name = "_at_webassemblyjs_slash_utf8"; + packageName = "@webassemblyjs/utf8"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz"; + sha512 = "A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw=="; + }; + }; + "@webassemblyjs/wasm-edit-1.11.0" = { + name = "_at_webassemblyjs_slash_wasm-edit"; + packageName = "@webassemblyjs/wasm-edit"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz"; + sha512 = "JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ=="; + }; + }; + "@webassemblyjs/wasm-gen-1.11.0" = { + name = "_at_webassemblyjs_slash_wasm-gen"; + packageName = "@webassemblyjs/wasm-gen"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz"; + sha512 = "BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ=="; + }; + }; + "@webassemblyjs/wasm-opt-1.11.0" = { + name = "_at_webassemblyjs_slash_wasm-opt"; + packageName = "@webassemblyjs/wasm-opt"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz"; + sha512 = "tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg=="; + }; + }; + "@webassemblyjs/wasm-parser-1.11.0" = { + name = "_at_webassemblyjs_slash_wasm-parser"; + packageName = "@webassemblyjs/wasm-parser"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz"; + sha512 = "6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw=="; + }; + }; + "@webassemblyjs/wast-printer-1.11.0" = { + name = "_at_webassemblyjs_slash_wast-printer"; + packageName = "@webassemblyjs/wast-printer"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz"; + sha512 = "Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ=="; + }; + }; + "@webpack-cli/configtest-1.0.2" = { + name = "_at_webpack-cli_slash_configtest"; + packageName = "@webpack-cli/configtest"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz"; + sha512 = "3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA=="; + }; + }; + "@webpack-cli/info-1.2.3" = { + name = "_at_webpack-cli_slash_info"; + packageName = "@webpack-cli/info"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz"; + sha512 = "lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q=="; + }; + }; + "@webpack-cli/serve-1.3.1" = { + name = "_at_webpack-cli_slash_serve"; + packageName = "@webpack-cli/serve"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz"; + sha512 = "0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw=="; + }; + }; + "@xtuc/ieee754-1.2.0" = { + name = "_at_xtuc_slash_ieee754"; + packageName = "@xtuc/ieee754"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz"; + sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="; + }; + }; + "@xtuc/long-4.2.2" = { + name = "_at_xtuc_slash_long"; + packageName = "@xtuc/long"; + version = "4.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz"; + sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="; + }; + }; + "abbrev-1.1.1" = { + name = "abbrev"; + packageName = "abbrev"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"; + sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="; + }; + }; + "acorn-7.4.1" = { + name = "acorn"; + packageName = "acorn"; + version = "7.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"; + sha512 = "nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="; + }; + }; + "acorn-8.1.1" = { + name = "acorn"; + packageName = "acorn"; + version = "8.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz"; + sha512 = "xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g=="; + }; + }; + "acorn-jsx-5.3.1" = { + name = "acorn-jsx"; + packageName = "acorn-jsx"; + version = "5.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz"; + sha512 = "K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng=="; + }; + }; + "ajv-6.12.6" = { + name = "ajv"; + packageName = "ajv"; + version = "6.12.6"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"; + sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="; + }; + }; + "ajv-keywords-3.5.2" = { + name = "ajv-keywords"; + packageName = "ajv-keywords"; + version = "3.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz"; + sha512 = "5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="; + }; + }; + "ansi-colors-4.1.1" = { + name = "ansi-colors"; + packageName = "ansi-colors"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"; + sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="; + }; + }; + "ansi-escapes-4.3.2" = { + name = "ansi-escapes"; + packageName = "ansi-escapes"; + version = "4.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"; + sha512 = "gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="; + }; + }; + "ansi-regex-2.1.1" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + }; + "ansi-regex-3.0.0" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + }; + "ansi-regex-4.1.0" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz"; + sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="; + }; + }; + "ansi-regex-5.0.0" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz"; + sha512 = "bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="; + }; + }; + "ansi-styles-3.2.1" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "3.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="; + }; + }; + "ansi-styles-4.3.0" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"; + sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="; + }; + }; + "aproba-1.2.0" = { + name = "aproba"; + packageName = "aproba"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz"; + sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="; + }; + }; + "are-we-there-yet-1.1.5" = { + name = "are-we-there-yet"; + packageName = "are-we-there-yet"; + version = "1.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; + sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w=="; + }; + }; + "argparse-1.0.10" = { + name = "argparse"; + packageName = "argparse"; + version = "1.0.10"; + src = fetchurl { + url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"; + sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="; + }; + }; + "array-union-2.1.0" = { + name = "array-union"; + packageName = "array-union"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"; + sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="; + }; + }; + "asn1-0.2.4" = { + name = "asn1"; + packageName = "asn1"; + version = "0.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"; + sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="; + }; + }; + "assert-plus-1.0.0" = { + name = "assert-plus"; + packageName = "assert-plus"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + }; + "astral-regex-1.0.0" = { + name = "astral-regex"; + packageName = "astral-regex"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz"; + sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="; + }; + }; + "asynckit-0.4.0" = { + name = "asynckit"; + packageName = "asynckit"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + }; + "aws-sign2-0.7.0" = { + name = "aws-sign2"; + packageName = "aws-sign2"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + }; + "aws4-1.11.0" = { + name = "aws4"; + packageName = "aws4"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz"; + sha512 = "xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="; + }; + }; + "balanced-match-1.0.2" = { + name = "balanced-match"; + packageName = "balanced-match"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"; + sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="; + }; + }; + "bcrypt-pbkdf-1.0.2" = { + name = "bcrypt-pbkdf"; + packageName = "bcrypt-pbkdf"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + }; + "block-stream-0.0.9" = { + name = "block-stream"; + packageName = "block-stream"; + version = "0.0.9"; + src = fetchurl { + url = "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz"; + sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a"; + }; + }; + "brace-expansion-1.1.11" = { + name = "brace-expansion"; + packageName = "brace-expansion"; + version = "1.1.11"; + src = fetchurl { + url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="; + }; + }; + "braces-3.0.2" = { + name = "braces"; + packageName = "braces"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"; + sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="; + }; + }; + "browserslist-4.16.4" = { + name = "browserslist"; + packageName = "browserslist"; + version = "4.16.4"; + src = fetchurl { + url = "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz"; + sha512 = "d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ=="; + }; + }; + "buffer-from-1.1.1" = { + name = "buffer-from"; + packageName = "buffer-from"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"; + sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="; + }; + }; + "buffer-writer-2.0.0" = { + name = "buffer-writer"; + packageName = "buffer-writer"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz"; + sha512 = "a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="; + }; + }; + "callsites-3.1.0" = { + name = "callsites"; + packageName = "callsites"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"; + sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="; + }; + }; + "caniuse-lite-1.0.30001209" = { + name = "caniuse-lite"; + packageName = "caniuse-lite"; + version = "1.0.30001209"; + src = fetchurl { + url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001209.tgz"; + sha512 = "2Ktt4OeRM7EM/JaOZjuLzPYAIqmbwQMNnYbgooT+icoRGrKOyAxA1xhlnotBD1KArRSPsuJp3TdYcZYrL7qNxA=="; + }; + }; + "caseless-0.12.0" = { + name = "caseless"; + packageName = "caseless"; + version = "0.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + }; + "chalk-2.4.2" = { + name = "chalk"; + packageName = "chalk"; + version = "2.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"; + sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="; + }; + }; + "chalk-4.1.0" = { + name = "chalk"; + packageName = "chalk"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz"; + sha512 = "qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A=="; + }; + }; + "chardet-0.7.0" = { + name = "chardet"; + packageName = "chardet"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"; + sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="; + }; + }; + "chownr-1.1.4" = { + name = "chownr"; + packageName = "chownr"; + version = "1.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"; + sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="; + }; + }; + "chrome-trace-event-1.0.3" = { + name = "chrome-trace-event"; + packageName = "chrome-trace-event"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"; + sha512 = "p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="; + }; + }; + "cli-cursor-3.1.0" = { + name = "cli-cursor"; + packageName = "cli-cursor"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz"; + sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="; + }; + }; + "cli-width-3.0.0" = { + name = "cli-width"; + packageName = "cli-width"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz"; + sha512 = "FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="; + }; + }; + "clone-deep-4.0.1" = { + name = "clone-deep"; + packageName = "clone-deep"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz"; + sha512 = "neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ=="; + }; + }; + "code-point-at-1.1.0" = { + name = "code-point-at"; + packageName = "code-point-at"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"; + sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; + }; + }; + "color-convert-1.9.3" = { + name = "color-convert"; + packageName = "color-convert"; + version = "1.9.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"; + sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="; + }; + }; + "color-convert-2.0.1" = { + name = "color-convert"; + packageName = "color-convert"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"; + sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="; + }; + }; + "color-name-1.1.3" = { + name = "color-name"; + packageName = "color-name"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + }; + "color-name-1.1.4" = { + name = "color-name"; + packageName = "color-name"; + version = "1.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"; + sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="; + }; + }; + "colorette-1.2.2" = { + name = "colorette"; + packageName = "colorette"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz"; + sha512 = "MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="; + }; + }; + "combined-stream-1.0.8" = { + name = "combined-stream"; + packageName = "combined-stream"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"; + sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="; + }; + }; + "commander-2.20.3" = { + name = "commander"; + packageName = "commander"; + version = "2.20.3"; + src = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"; + sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="; + }; + }; + "commander-7.2.0" = { + name = "commander"; + packageName = "commander"; + version = "7.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz"; + sha512 = "QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="; + }; + }; + "compression-webpack-plugin-7.1.2" = { + name = "compression-webpack-plugin"; + packageName = "compression-webpack-plugin"; + version = "7.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-7.1.2.tgz"; + sha512 = "9DKNW6ILLjx+bNBoviHDgLx6swBhWWH9ApClC9sTH2NoFfQM47BapQfovCm9zjD9v1uZwInF5a925FB9ErGQeQ=="; + }; + }; + "concat-map-0.0.1" = { + name = "concat-map"; + packageName = "concat-map"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + }; + "config-chain-1.1.12" = { + name = "config-chain"; + packageName = "config-chain"; + version = "1.1.12"; + src = fetchurl { + url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz"; + sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA=="; + }; + }; + "console-control-strings-1.1.0" = { + name = "console-control-strings"; + packageName = "console-control-strings"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"; + sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; + }; + }; + "console-stamp-3.0.0-rc4.2" = { + name = "console-stamp"; + packageName = "console-stamp"; + version = "3.0.0-rc4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.0-rc4.2.tgz"; + sha512 = "ncGYdZsfDbBYYiaPXr9NHfZbSSkoVzYyh8nHji9/3ovw35Jn4ozo0btcirtfIznXT4xNgBQW+IyTVLISnNumdQ=="; + }; + }; + "copy-anything-2.0.3" = { + name = "copy-anything"; + packageName = "copy-anything"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz"; + sha512 = "GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ=="; + }; + }; + "core-util-is-1.0.2" = { + name = "core-util-is"; + packageName = "core-util-is"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + }; + "cross-spawn-6.0.5" = { + name = "cross-spawn"; + packageName = "cross-spawn"; + version = "6.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"; + sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="; + }; + }; + "cross-spawn-7.0.3" = { + name = "cross-spawn"; + packageName = "cross-spawn"; + version = "7.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"; + sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="; + }; + }; + "dashdash-1.14.1" = { + name = "dashdash"; + packageName = "dashdash"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + }; + "dateformat-3.0.3" = { + name = "dateformat"; + packageName = "dateformat"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz"; + sha512 = "jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="; + }; + }; + "de-indent-1.0.2" = { + name = "de-indent"; + packageName = "de-indent"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz"; + sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d"; + }; + }; + "debug-3.2.7" = { + name = "debug"; + packageName = "debug"; + version = "3.2.7"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"; + sha512 = "CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="; + }; + }; + "debug-4.3.1" = { + name = "debug"; + packageName = "debug"; + version = "4.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"; + sha512 = "doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="; + }; + }; + "deep-extend-0.6.0" = { + name = "deep-extend"; + packageName = "deep-extend"; + version = "0.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"; + sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="; + }; + }; + "deep-is-0.1.3" = { + name = "deep-is"; + packageName = "deep-is"; + version = "0.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + }; + "delayed-stream-1.0.0" = { + name = "delayed-stream"; + packageName = "delayed-stream"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + }; + "delegates-1.0.0" = { + name = "delegates"; + packageName = "delegates"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"; + sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; + }; + }; + "detect-libc-1.0.3" = { + name = "detect-libc"; + packageName = "detect-libc"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"; + sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; + }; + }; + "dialog-polyfill-0.5.6" = { + name = "dialog-polyfill"; + packageName = "dialog-polyfill"; + version = "0.5.6"; + src = fetchurl { + url = "https://registry.npmjs.org/dialog-polyfill/-/dialog-polyfill-0.5.6.tgz"; + sha512 = "ZbVDJI9uvxPAKze6z146rmfUZjBqNEwcnFTVamQzXH+svluiV7swmVIGr7miwADgfgt1G2JQIytypM9fbyhX4w=="; + }; + }; + "dir-glob-3.0.1" = { + name = "dir-glob"; + packageName = "dir-glob"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"; + sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="; + }; + }; + "doctrine-3.0.0" = { + name = "doctrine"; + packageName = "doctrine"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"; + sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="; + }; + }; + "dotenv-8.2.0" = { + name = "dotenv"; + packageName = "dotenv"; + version = "8.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz"; + sha512 = "8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="; + }; + }; + "ecc-jsbn-0.1.2" = { + name = "ecc-jsbn"; + packageName = "ecc-jsbn"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + }; + "editorconfig-0.15.3" = { + name = "editorconfig"; + packageName = "editorconfig"; + version = "0.15.3"; + src = fetchurl { + url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz"; + sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g=="; + }; + }; + "electron-to-chromium-1.3.717" = { + name = "electron-to-chromium"; + packageName = "electron-to-chromium"; + version = "1.3.717"; + src = fetchurl { + url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz"; + sha512 = "OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ=="; + }; + }; + "emoji-regex-7.0.3" = { + name = "emoji-regex"; + packageName = "emoji-regex"; + version = "7.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz"; + sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="; + }; + }; + "emoji-regex-8.0.0" = { + name = "emoji-regex"; + packageName = "emoji-regex"; + version = "8.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"; + sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="; + }; + }; + "enhanced-resolve-5.7.0" = { + name = "enhanced-resolve"; + packageName = "enhanced-resolve"; + version = "5.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz"; + sha512 = "6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw=="; + }; + }; + "enquirer-2.3.6" = { + name = "enquirer"; + packageName = "enquirer"; + version = "2.3.6"; + src = fetchurl { + url = "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz"; + sha512 = "yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="; + }; + }; + "envinfo-7.8.1" = { + name = "envinfo"; + packageName = "envinfo"; + version = "7.8.1"; + src = fetchurl { + url = "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz"; + sha512 = "/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw=="; + }; + }; + "errno-0.1.8" = { + name = "errno"; + packageName = "errno"; + version = "0.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz"; + sha512 = "dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A=="; + }; + }; + "es-module-lexer-0.4.1" = { + name = "es-module-lexer"; + packageName = "es-module-lexer"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz"; + sha512 = "ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA=="; + }; + }; + "escalade-3.1.1" = { + name = "escalade"; + packageName = "escalade"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"; + sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="; + }; + }; + "escape-string-regexp-1.0.5" = { + name = "escape-string-regexp"; + packageName = "escape-string-regexp"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + }; + "eslint-6.8.0" = { + name = "eslint"; + packageName = "eslint"; + version = "6.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz"; + sha512 = "K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig=="; + }; + }; + "eslint-config-google-0.14.0" = { + name = "eslint-config-google"; + packageName = "eslint-config-google"; + version = "0.14.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz"; + sha512 = "WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw=="; + }; + }; + "eslint-plugin-vue-6.2.2" = { + name = "eslint-plugin-vue"; + packageName = "eslint-plugin-vue"; + version = "6.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz"; + sha512 = "Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ=="; + }; + }; + "eslint-scope-5.1.1" = { + name = "eslint-scope"; + packageName = "eslint-scope"; + version = "5.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz"; + sha512 = "2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="; + }; + }; + "eslint-utils-1.4.3" = { + name = "eslint-utils"; + packageName = "eslint-utils"; + version = "1.4.3"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz"; + sha512 = "fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q=="; + }; + }; + "eslint-utils-2.1.0" = { + name = "eslint-utils"; + packageName = "eslint-utils"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz"; + sha512 = "w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="; + }; + }; + "eslint-visitor-keys-1.3.0" = { + name = "eslint-visitor-keys"; + packageName = "eslint-visitor-keys"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"; + sha512 = "6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="; + }; + }; + "eslint-visitor-keys-2.0.0" = { + name = "eslint-visitor-keys"; + packageName = "eslint-visitor-keys"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz"; + sha512 = "QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ=="; + }; + }; + "espree-6.2.1" = { + name = "espree"; + packageName = "espree"; + version = "6.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz"; + sha512 = "ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw=="; + }; + }; + "esprima-4.0.1" = { + name = "esprima"; + packageName = "esprima"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"; + sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="; + }; + }; + "esquery-1.4.0" = { + name = "esquery"; + packageName = "esquery"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz"; + sha512 = "cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w=="; + }; + }; + "esrecurse-4.3.0" = { + name = "esrecurse"; + packageName = "esrecurse"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"; + sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="; + }; + }; + "estraverse-4.3.0" = { + name = "estraverse"; + packageName = "estraverse"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"; + sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="; + }; + }; + "estraverse-5.2.0" = { + name = "estraverse"; + packageName = "estraverse"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz"; + sha512 = "BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="; + }; + }; + "esutils-2.0.3" = { + name = "esutils"; + packageName = "esutils"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"; + sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="; + }; + }; + "events-3.3.0" = { + name = "events"; + packageName = "events"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/events/-/events-3.3.0.tgz"; + sha512 = "mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="; + }; + }; + "execa-5.0.0" = { + name = "execa"; + packageName = "execa"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz"; + sha512 = "ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ=="; + }; + }; + "extend-3.0.2" = { + name = "extend"; + packageName = "extend"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"; + sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="; + }; + }; + "external-editor-3.1.0" = { + name = "external-editor"; + packageName = "external-editor"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz"; + sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="; + }; + }; + "extsprintf-1.3.0" = { + name = "extsprintf"; + packageName = "extsprintf"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + }; + "fast-deep-equal-3.1.3" = { + name = "fast-deep-equal"; + packageName = "fast-deep-equal"; + version = "3.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"; + sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="; + }; + }; + "fast-glob-3.2.5" = { + name = "fast-glob"; + packageName = "fast-glob"; + version = "3.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz"; + sha512 = "2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg=="; + }; + }; + "fast-json-stable-stringify-2.1.0" = { + name = "fast-json-stable-stringify"; + packageName = "fast-json-stable-stringify"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; + sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="; + }; + }; + "fast-levenshtein-2.0.6" = { + name = "fast-levenshtein"; + packageName = "fast-levenshtein"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + }; + "fastest-levenshtein-1.0.12" = { + name = "fastest-levenshtein"; + packageName = "fastest-levenshtein"; + version = "1.0.12"; + src = fetchurl { + url = "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz"; + sha512 = "On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow=="; + }; + }; + "fastq-1.11.0" = { + name = "fastq"; + packageName = "fastq"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz"; + sha512 = "7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g=="; + }; + }; + "figures-3.2.0" = { + name = "figures"; + packageName = "figures"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz"; + sha512 = "yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="; + }; + }; + "file-entry-cache-5.0.1" = { + name = "file-entry-cache"; + packageName = "file-entry-cache"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz"; + sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g=="; + }; + }; + "fill-range-7.0.1" = { + name = "fill-range"; + packageName = "fill-range"; + version = "7.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"; + sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="; + }; + }; + "find-up-4.1.0" = { + name = "find-up"; + packageName = "find-up"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"; + sha512 = "PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="; + }; + }; + "flat-cache-2.0.1" = { + name = "flat-cache"; + packageName = "flat-cache"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz"; + sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA=="; + }; + }; + "flatted-2.0.2" = { + name = "flatted"; + packageName = "flatted"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz"; + sha512 = "r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="; + }; + }; + "forever-agent-0.6.1" = { + name = "forever-agent"; + packageName = "forever-agent"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + }; + "form-data-2.3.3" = { + name = "form-data"; + packageName = "form-data"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz"; + sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="; + }; + }; + "fs-minipass-1.2.7" = { + name = "fs-minipass"; + packageName = "fs-minipass"; + version = "1.2.7"; + src = fetchurl { + url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz"; + sha512 = "GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA=="; + }; + }; + "fs.realpath-1.0.0" = { + name = "fs.realpath"; + packageName = "fs.realpath"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + }; + "fstream-1.0.12" = { + name = "fstream"; + packageName = "fstream"; + version = "1.0.12"; + src = fetchurl { + url = "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz"; + sha512 = "WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg=="; + }; + }; + "function-bind-1.1.1" = { + name = "function-bind"; + packageName = "function-bind"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"; + sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="; + }; + }; + "functional-red-black-tree-1.0.1" = { + name = "functional-red-black-tree"; + packageName = "functional-red-black-tree"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"; + sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"; + }; + }; + "gauge-2.7.4" = { + name = "gauge"; + packageName = "gauge"; + version = "2.7.4"; + src = fetchurl { + url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz"; + sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; + }; + }; + "get-stream-6.0.1" = { + name = "get-stream"; + packageName = "get-stream"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz"; + sha512 = "ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="; + }; + }; + "getpass-0.1.7" = { + name = "getpass"; + packageName = "getpass"; + version = "0.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + }; + "glob-7.1.6" = { + name = "glob"; + packageName = "glob"; + version = "7.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"; + sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA=="; + }; + }; + "glob-parent-5.1.2" = { + name = "glob-parent"; + packageName = "glob-parent"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"; + sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="; + }; + }; + "glob-to-regexp-0.4.1" = { + name = "glob-to-regexp"; + packageName = "glob-to-regexp"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz"; + sha512 = "lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="; + }; + }; + "globals-12.4.0" = { + name = "globals"; + packageName = "globals"; + version = "12.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz"; + sha512 = "BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg=="; + }; + }; + "globby-11.0.3" = { + name = "globby"; + packageName = "globby"; + version = "11.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz"; + sha512 = "ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg=="; + }; + }; + "graceful-fs-4.2.6" = { + name = "graceful-fs"; + packageName = "graceful-fs"; + version = "4.2.6"; + src = fetchurl { + url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"; + sha512 = "nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="; + }; + }; + "har-schema-2.0.0" = { + name = "har-schema"; + packageName = "har-schema"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + }; + "har-validator-5.1.5" = { + name = "har-validator"; + packageName = "har-validator"; + version = "5.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz"; + sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w=="; + }; + }; + "has-1.0.3" = { + name = "has"; + packageName = "has"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz"; + sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="; + }; + }; + "has-flag-3.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + }; + "has-flag-4.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"; + sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="; + }; + }; + "has-unicode-2.0.1" = { + name = "has-unicode"; + packageName = "has-unicode"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"; + sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; + }; + }; + "he-1.2.0" = { + name = "he"; + packageName = "he"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz"; + sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="; + }; + }; + "http-signature-1.2.0" = { + name = "http-signature"; + packageName = "http-signature"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + }; + "human-signals-2.1.0" = { + name = "human-signals"; + packageName = "human-signals"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"; + sha512 = "B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="; + }; + }; + "iconv-lite-0.4.24" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.4.24"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="; + }; + }; + "ignore-4.0.6" = { + name = "ignore"; + packageName = "ignore"; + version = "4.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"; + sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="; + }; + }; + "ignore-5.1.8" = { + name = "ignore"; + packageName = "ignore"; + version = "5.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz"; + sha512 = "BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="; + }; + }; + "ignore-walk-3.0.3" = { + name = "ignore-walk"; + packageName = "ignore-walk"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz"; + sha512 = "m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw=="; + }; + }; + "image-size-0.5.5" = { + name = "image-size"; + packageName = "image-size"; + version = "0.5.5"; + src = fetchurl { + url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz"; + sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"; + }; + }; + "import-fresh-3.3.0" = { + name = "import-fresh"; + packageName = "import-fresh"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"; + sha512 = "veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="; + }; + }; + "import-local-3.0.2" = { + name = "import-local"; + packageName = "import-local"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz"; + sha512 = "vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA=="; + }; + }; + "imurmurhash-0.1.4" = { + name = "imurmurhash"; + packageName = "imurmurhash"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + }; + "inflight-1.0.6" = { + name = "inflight"; + packageName = "inflight"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + }; + "inherits-2.0.4" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"; + sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="; + }; + }; + "ini-1.3.8" = { + name = "ini"; + packageName = "ini"; + version = "1.3.8"; + src = fetchurl { + url = "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"; + sha512 = "JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="; + }; + }; + "inquirer-7.3.3" = { + name = "inquirer"; + packageName = "inquirer"; + version = "7.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz"; + sha512 = "JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA=="; + }; + }; + "interpret-2.2.0" = { + name = "interpret"; + packageName = "interpret"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz"; + sha512 = "Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw=="; + }; + }; + "is-core-module-2.2.0" = { + name = "is-core-module"; + packageName = "is-core-module"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz"; + sha512 = "XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ=="; + }; + }; + "is-extglob-2.1.1" = { + name = "is-extglob"; + packageName = "is-extglob"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + }; + "is-fullwidth-code-point-1.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; + sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; + }; + }; + "is-fullwidth-code-point-2.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + }; + "is-fullwidth-code-point-3.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"; + sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="; + }; + }; + "is-glob-4.0.1" = { + name = "is-glob"; + packageName = "is-glob"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz"; + sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg=="; + }; + }; + "is-number-7.0.0" = { + name = "is-number"; + packageName = "is-number"; + version = "7.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"; + sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="; + }; + }; + "is-plain-object-2.0.4" = { + name = "is-plain-object"; + packageName = "is-plain-object"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="; + }; + }; + "is-stream-2.0.0" = { + name = "is-stream"; + packageName = "is-stream"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz"; + sha512 = "XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="; + }; + }; + "is-typedarray-1.0.0" = { + name = "is-typedarray"; + packageName = "is-typedarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + }; + "is-what-3.14.1" = { + name = "is-what"; + packageName = "is-what"; + version = "3.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz"; + sha512 = "sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA=="; + }; + }; + "isarray-1.0.0" = { + name = "isarray"; + packageName = "isarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + }; + "isexe-2.0.0" = { + name = "isexe"; + packageName = "isexe"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + }; + "isobject-3.0.1" = { + name = "isobject"; + packageName = "isobject"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + }; + "isstream-0.1.2" = { + name = "isstream"; + packageName = "isstream"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + }; + "jest-worker-26.6.2" = { + name = "jest-worker"; + packageName = "jest-worker"; + version = "26.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz"; + sha512 = "KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ=="; + }; + }; + "js-beautify-1.13.13" = { + name = "js-beautify"; + packageName = "js-beautify"; + version = "1.13.13"; + src = fetchurl { + url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.13.tgz"; + sha512 = "oH+nc0U5mOAqX8M5JO1J0Pw/7Q35sAdOsM5W3i87pir9Ntx6P/5Gx1xLNoK+MGyvHk4rqqRCE4Oq58H6xl2W7A=="; + }; + }; + "js-tokens-4.0.0" = { + name = "js-tokens"; + packageName = "js-tokens"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"; + sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="; + }; + }; + "js-yaml-3.14.1" = { + name = "js-yaml"; + packageName = "js-yaml"; + version = "3.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz"; + sha512 = "okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="; + }; + }; + "jsbn-0.1.1" = { + name = "jsbn"; + packageName = "jsbn"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + }; + "json-parse-better-errors-1.0.2" = { + name = "json-parse-better-errors"; + packageName = "json-parse-better-errors"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="; + }; + }; + "json-schema-0.2.3" = { + name = "json-schema"; + packageName = "json-schema"; + version = "0.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + }; + "json-schema-traverse-0.4.1" = { + name = "json-schema-traverse"; + packageName = "json-schema-traverse"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="; + }; + }; + "json-stable-stringify-without-jsonify-1.0.1" = { + name = "json-stable-stringify-without-jsonify"; + packageName = "json-stable-stringify-without-jsonify"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"; + sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651"; + }; + }; + "json-stringify-safe-5.0.1" = { + name = "json-stringify-safe"; + packageName = "json-stringify-safe"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + }; + "jsprim-1.4.1" = { + name = "jsprim"; + packageName = "jsprim"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + }; + "kind-of-6.0.3" = { + name = "kind-of"; + packageName = "kind-of"; + version = "6.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"; + sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="; + }; + }; + "less-3.13.1" = { + name = "less"; + packageName = "less"; + version = "3.13.1"; + src = fetchurl { + url = "https://registry.npmjs.org/less/-/less-3.13.1.tgz"; + sha512 = "SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw=="; + }; + }; + "levn-0.3.0" = { + name = "levn"; + packageName = "levn"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + }; + "loader-runner-4.2.0" = { + name = "loader-runner"; + packageName = "loader-runner"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz"; + sha512 = "92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw=="; + }; + }; + "locate-path-5.0.0" = { + name = "locate-path"; + packageName = "locate-path"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"; + sha512 = "t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="; + }; + }; + "lodash-4.17.21" = { + name = "lodash"; + packageName = "lodash"; + version = "4.17.21"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"; + sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="; + }; + }; + "lru-cache-4.1.5" = { + name = "lru-cache"; + packageName = "lru-cache"; + version = "4.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz"; + sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="; + }; + }; + "lru-cache-6.0.0" = { + name = "lru-cache"; + packageName = "lru-cache"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"; + sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="; + }; + }; + "make-dir-2.1.0" = { + name = "make-dir"; + packageName = "make-dir"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz"; + sha512 = "LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA=="; + }; + }; + "merge-stream-2.0.0" = { + name = "merge-stream"; + packageName = "merge-stream"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"; + sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="; + }; + }; + "merge2-1.4.1" = { + name = "merge2"; + packageName = "merge2"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"; + sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="; + }; + }; + "micromatch-4.0.4" = { + name = "micromatch"; + packageName = "micromatch"; + version = "4.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz"; + sha512 = "pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg=="; + }; + }; + "mime-1.6.0" = { + name = "mime"; + packageName = "mime"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"; + sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; + }; + }; + "mime-db-1.47.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.47.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz"; + sha512 = "QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="; + }; + }; + "mime-types-2.1.30" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.30"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz"; + sha512 = "crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg=="; + }; + }; + "mimic-fn-2.1.0" = { + name = "mimic-fn"; + packageName = "mimic-fn"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"; + sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="; + }; + }; + "minimatch-3.0.4" = { + name = "minimatch"; + packageName = "minimatch"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"; + sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; + }; + }; + "minimist-1.2.5" = { + name = "minimist"; + packageName = "minimist"; + version = "1.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"; + sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="; + }; + }; + "minipass-2.9.0" = { + name = "minipass"; + packageName = "minipass"; + version = "2.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz"; + sha512 = "wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg=="; + }; + }; + "minizlib-1.3.3" = { + name = "minizlib"; + packageName = "minizlib"; + version = "1.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz"; + sha512 = "6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q=="; + }; + }; + "mkdirp-0.5.5" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "0.5.5"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"; + sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="; + }; + }; + "mkdirp-1.0.4" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"; + sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="; + }; + }; + "mnemonist-0.38.3" = { + name = "mnemonist"; + packageName = "mnemonist"; + version = "0.38.3"; + src = fetchurl { + url = "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz"; + sha512 = "2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw=="; + }; + }; + "ms-2.1.2" = { + name = "ms"; + packageName = "ms"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"; + sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="; + }; + }; + "mute-stream-0.0.8" = { + name = "mute-stream"; + packageName = "mute-stream"; + version = "0.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"; + sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="; + }; + }; + "native-request-1.0.8" = { + name = "native-request"; + packageName = "native-request"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz"; + sha512 = "vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag=="; + }; + }; + "natural-compare-1.4.0" = { + name = "natural-compare"; + packageName = "natural-compare"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"; + sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"; + }; + }; + "needle-2.6.0" = { + name = "needle"; + packageName = "needle"; + version = "2.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz"; + sha512 = "KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg=="; + }; + }; + "neo-async-2.6.2" = { + name = "neo-async"; + packageName = "neo-async"; + version = "2.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"; + sha512 = "Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="; + }; + }; + "nice-try-1.0.5" = { + name = "nice-try"; + packageName = "nice-try"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"; + sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="; + }; + }; + "node-addon-api-3.1.0" = { + name = "node-addon-api"; + packageName = "node-addon-api"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz"; + sha512 = "flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw=="; + }; + }; + "node-gyp-3.8.0" = { + name = "node-gyp"; + packageName = "node-gyp"; + version = "3.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz"; + sha512 = "3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA=="; + }; + }; + "node-pre-gyp-0.11.0" = { + name = "node-pre-gyp"; + packageName = "node-pre-gyp"; + version = "0.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz"; + sha512 = "TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q=="; + }; + }; + "node-releases-1.1.71" = { + name = "node-releases"; + packageName = "node-releases"; + version = "1.1.71"; + src = fetchurl { + url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz"; + sha512 = "zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg=="; + }; + }; + "nopt-3.0.6" = { + name = "nopt"; + packageName = "nopt"; + version = "3.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz"; + sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9"; + }; + }; + "nopt-4.0.3" = { + name = "nopt"; + packageName = "nopt"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz"; + sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg=="; + }; + }; + "nopt-5.0.0" = { + name = "nopt"; + packageName = "nopt"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"; + sha512 = "Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="; + }; + }; + "npm-bundled-1.1.1" = { + name = "npm-bundled"; + packageName = "npm-bundled"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz"; + sha512 = "gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA=="; + }; + }; + "npm-normalize-package-bin-1.0.1" = { + name = "npm-normalize-package-bin"; + packageName = "npm-normalize-package-bin"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"; + sha512 = "EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="; + }; + }; + "npm-packlist-1.4.8" = { + name = "npm-packlist"; + packageName = "npm-packlist"; + version = "1.4.8"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz"; + sha512 = "5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A=="; + }; + }; + "npm-run-path-4.0.1" = { + name = "npm-run-path"; + packageName = "npm-run-path"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz"; + sha512 = "S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="; + }; + }; + "npmlog-4.1.2" = { + name = "npmlog"; + packageName = "npmlog"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz"; + sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg=="; + }; + }; + "number-is-nan-1.0.1" = { + name = "number-is-nan"; + packageName = "number-is-nan"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"; + sha1 = "097b602b53422a522c1afb8790318336941a011d"; + }; + }; + "oauth-sign-0.9.0" = { + name = "oauth-sign"; + packageName = "oauth-sign"; + version = "0.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="; + }; + }; + "object-assign-4.1.1" = { + name = "object-assign"; + packageName = "object-assign"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + }; + "obliterator-1.6.1" = { + name = "obliterator"; + packageName = "obliterator"; + version = "1.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz"; + sha512 = "9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="; + }; + }; + "once-1.4.0" = { + name = "once"; + packageName = "once"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + }; + "onetime-5.1.2" = { + name = "onetime"; + packageName = "onetime"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz"; + sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="; + }; + }; + "optionator-0.8.3" = { + name = "optionator"; + packageName = "optionator"; + version = "0.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz"; + sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA=="; + }; + }; + "os-homedir-1.0.2" = { + name = "os-homedir"; + packageName = "os-homedir"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + }; + "os-tmpdir-1.0.2" = { + name = "os-tmpdir"; + packageName = "os-tmpdir"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + }; + "osenv-0.1.5" = { + name = "osenv"; + packageName = "osenv"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz"; + sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g=="; + }; + }; + "p-limit-2.3.0" = { + name = "p-limit"; + packageName = "p-limit"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"; + sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="; + }; + }; + "p-limit-3.1.0" = { + name = "p-limit"; + packageName = "p-limit"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"; + sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="; + }; + }; + "p-locate-4.1.0" = { + name = "p-locate"; + packageName = "p-locate"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"; + sha512 = "R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="; + }; + }; + "p-try-2.2.0" = { + name = "p-try"; + packageName = "p-try"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"; + sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="; + }; + }; + "packet-reader-1.0.0" = { + name = "packet-reader"; + packageName = "packet-reader"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz"; + sha512 = "HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="; + }; + }; + "parent-module-1.0.1" = { + name = "parent-module"; + packageName = "parent-module"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"; + sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="; + }; + }; + "path-exists-4.0.0" = { + name = "path-exists"; + packageName = "path-exists"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"; + sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="; + }; + }; + "path-is-absolute-1.0.1" = { + name = "path-is-absolute"; + packageName = "path-is-absolute"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + }; + "path-key-2.0.1" = { + name = "path-key"; + packageName = "path-key"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"; + sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; + }; + }; + "path-key-3.1.1" = { + name = "path-key"; + packageName = "path-key"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"; + sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="; + }; + }; + "path-parse-1.0.6" = { + name = "path-parse"; + packageName = "path-parse"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"; + sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="; + }; + }; + "path-type-4.0.0" = { + name = "path-type"; + packageName = "path-type"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"; + sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="; + }; + }; + "performance-now-2.1.0" = { + name = "performance-now"; + packageName = "performance-now"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + }; + "pg-8.6.0" = { + name = "pg"; + packageName = "pg"; + version = "8.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz"; + sha512 = "qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ=="; + }; + }; + "pg-connection-string-2.5.0" = { + name = "pg-connection-string"; + packageName = "pg-connection-string"; + version = "2.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz"; + sha512 = "r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="; + }; + }; + "pg-int8-1.0.1" = { + name = "pg-int8"; + packageName = "pg-int8"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz"; + sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="; + }; + }; + "pg-pool-3.3.0" = { + name = "pg-pool"; + packageName = "pg-pool"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz"; + sha512 = "0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg=="; + }; + }; + "pg-protocol-1.5.0" = { + name = "pg-protocol"; + packageName = "pg-protocol"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz"; + sha512 = "muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="; + }; + }; + "pg-types-2.2.0" = { + name = "pg-types"; + packageName = "pg-types"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz"; + sha512 = "qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="; + }; + }; + "pgpass-1.0.4" = { + name = "pgpass"; + packageName = "pgpass"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz"; + sha512 = "YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w=="; + }; + }; + "picomatch-2.2.3" = { + name = "picomatch"; + packageName = "picomatch"; + version = "2.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz"; + sha512 = "KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg=="; + }; + }; + "pify-4.0.1" = { + name = "pify"; + packageName = "pify"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"; + sha512 = "uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="; + }; + }; + "pkg-dir-4.2.0" = { + name = "pkg-dir"; + packageName = "pkg-dir"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz"; + sha512 = "HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="; + }; + }; + "postgres-array-2.0.0" = { + name = "postgres-array"; + packageName = "postgres-array"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz"; + sha512 = "VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="; + }; + }; + "postgres-bytea-1.0.0" = { + name = "postgres-bytea"; + packageName = "postgres-bytea"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz"; + sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35"; + }; + }; + "postgres-date-1.0.7" = { + name = "postgres-date"; + packageName = "postgres-date"; + version = "1.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz"; + sha512 = "suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="; + }; + }; + "postgres-interval-1.2.0" = { + name = "postgres-interval"; + packageName = "postgres-interval"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz"; + sha512 = "9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="; + }; + }; + "prelude-ls-1.1.2" = { + name = "prelude-ls"; + packageName = "prelude-ls"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + }; + "process-nextick-args-2.0.1" = { + name = "process-nextick-args"; + packageName = "process-nextick-args"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; + sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="; + }; + }; + "progress-2.0.3" = { + name = "progress"; + packageName = "progress"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz"; + sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="; + }; + }; + "proto-list-1.2.4" = { + name = "proto-list"; + packageName = "proto-list"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"; + sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849"; + }; + }; + "prr-1.0.1" = { + name = "prr"; + packageName = "prr"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz"; + sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; + }; + }; + "pseudomap-1.0.2" = { + name = "pseudomap"; + packageName = "pseudomap"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + }; + "psl-1.8.0" = { + name = "psl"; + packageName = "psl"; + version = "1.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz"; + sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="; + }; + }; + "punycode-2.1.1" = { + name = "punycode"; + packageName = "punycode"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"; + sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="; + }; + }; + "qs-6.5.2" = { + name = "qs"; + packageName = "qs"; + version = "6.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"; + sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="; + }; + }; + "queue-microtask-1.2.3" = { + name = "queue-microtask"; + packageName = "queue-microtask"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"; + sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="; + }; + }; + "randombytes-2.1.0" = { + name = "randombytes"; + packageName = "randombytes"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"; + sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="; + }; + }; + "rc-1.2.8" = { + name = "rc"; + packageName = "rc"; + version = "1.2.8"; + src = fetchurl { + url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"; + sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="; + }; + }; + "readable-stream-2.3.7" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "2.3.7"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"; + sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="; + }; + }; + "readable-stream-3.6.0" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"; + sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="; + }; + }; + "rechoir-0.7.0" = { + name = "rechoir"; + packageName = "rechoir"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz"; + sha512 = "ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q=="; + }; + }; + "regexpp-2.0.1" = { + name = "regexpp"; + packageName = "regexpp"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz"; + sha512 = "lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="; + }; + }; + "regexpp-3.1.0" = { + name = "regexpp"; + packageName = "regexpp"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz"; + sha512 = "ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q=="; + }; + }; + "request-2.88.2" = { + name = "request"; + packageName = "request"; + version = "2.88.2"; + src = fetchurl { + url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz"; + sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="; + }; + }; + "resolve-1.20.0" = { + name = "resolve"; + packageName = "resolve"; + version = "1.20.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz"; + sha512 = "wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A=="; + }; + }; + "resolve-cwd-3.0.0" = { + name = "resolve-cwd"; + packageName = "resolve-cwd"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz"; + sha512 = "OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="; + }; + }; + "resolve-from-4.0.0" = { + name = "resolve-from"; + packageName = "resolve-from"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"; + sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="; + }; + }; + "resolve-from-5.0.0" = { + name = "resolve-from"; + packageName = "resolve-from"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"; + sha512 = "qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="; + }; + }; + "restore-cursor-3.1.0" = { + name = "restore-cursor"; + packageName = "restore-cursor"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz"; + sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="; + }; + }; + "reusify-1.0.4" = { + name = "reusify"; + packageName = "reusify"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"; + sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="; + }; + }; + "rimraf-2.6.3" = { + name = "rimraf"; + packageName = "rimraf"; + version = "2.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz"; + sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="; + }; + }; + "run-async-2.4.1" = { + name = "run-async"; + packageName = "run-async"; + version = "2.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz"; + sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="; + }; + }; + "run-parallel-1.2.0" = { + name = "run-parallel"; + packageName = "run-parallel"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"; + sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="; + }; + }; + "rxjs-6.6.7" = { + name = "rxjs"; + packageName = "rxjs"; + version = "6.6.7"; + src = fetchurl { + url = "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz"; + sha512 = "hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="; + }; + }; + "safe-buffer-5.1.2" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="; + }; + }; + "safe-buffer-5.2.1" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"; + sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="; + }; + }; + "safer-buffer-2.1.2" = { + name = "safer-buffer"; + packageName = "safer-buffer"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; + }; + }; + "sax-1.2.4" = { + name = "sax"; + packageName = "sax"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"; + sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="; + }; + }; + "schema-utils-3.0.0" = { + name = "schema-utils"; + packageName = "schema-utils"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz"; + sha512 = "6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA=="; + }; + }; + "semver-5.3.0" = { + name = "semver"; + packageName = "semver"; + version = "5.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"; + sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"; + }; + }; + "semver-5.7.1" = { + name = "semver"; + packageName = "semver"; + version = "5.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"; + sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="; + }; + }; + "semver-6.3.0" = { + name = "semver"; + packageName = "semver"; + version = "6.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"; + sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="; + }; + }; + "semver-7.3.5" = { + name = "semver"; + packageName = "semver"; + version = "7.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"; + sha512 = "PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="; + }; + }; + "serialize-javascript-5.0.1" = { + name = "serialize-javascript"; + packageName = "serialize-javascript"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz"; + sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA=="; + }; + }; + "set-blocking-2.0.0" = { + name = "set-blocking"; + packageName = "set-blocking"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + }; + "shallow-clone-3.0.1" = { + name = "shallow-clone"; + packageName = "shallow-clone"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz"; + sha512 = "/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA=="; + }; + }; + "shebang-command-1.2.0" = { + name = "shebang-command"; + packageName = "shebang-command"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"; + sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; + }; + }; + "shebang-command-2.0.0" = { + name = "shebang-command"; + packageName = "shebang-command"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"; + sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="; + }; + }; + "shebang-regex-1.0.0" = { + name = "shebang-regex"; + packageName = "shebang-regex"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz"; + sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; + }; + }; + "shebang-regex-3.0.0" = { + name = "shebang-regex"; + packageName = "shebang-regex"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"; + sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="; + }; + }; + "sigmund-1.0.1" = { + name = "sigmund"; + packageName = "sigmund"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"; + sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; + }; + }; + "signal-exit-3.0.3" = { + name = "signal-exit"; + packageName = "signal-exit"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz"; + sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="; + }; + }; + "slash-3.0.0" = { + name = "slash"; + packageName = "slash"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"; + sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="; + }; + }; + "slice-ansi-2.1.0" = { + name = "slice-ansi"; + packageName = "slice-ansi"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz"; + sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ=="; + }; + }; + "source-list-map-2.0.1" = { + name = "source-list-map"; + packageName = "source-list-map"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz"; + sha512 = "qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="; + }; + }; + "source-map-0.6.1" = { + name = "source-map"; + packageName = "source-map"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"; + sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="; + }; + }; + "source-map-0.7.3" = { + name = "source-map"; + packageName = "source-map"; + version = "0.7.3"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz"; + sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="; + }; + }; + "source-map-support-0.5.19" = { + name = "source-map-support"; + packageName = "source-map-support"; + version = "0.5.19"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"; + sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="; + }; + }; + "spectre.css-0.5.9" = { + name = "spectre.css"; + packageName = "spectre.css"; + version = "0.5.9"; + src = fetchurl { + url = "https://registry.npmjs.org/spectre.css/-/spectre.css-0.5.9.tgz"; + sha512 = "9jUqwZmCnvflrxFGcK+ize43TvjwDjqMwZPVubEtSIHzvinH0TBUESm1LcOJx3Ur7bdPaeOHQIjOqBl1Y5kLFw=="; + }; + }; + "split2-3.2.2" = { + name = "split2"; + packageName = "split2"; + version = "3.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz"; + sha512 = "9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg=="; + }; + }; + "sprintf-js-1.0.3" = { + name = "sprintf-js"; + packageName = "sprintf-js"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + }; + "sqlite3-5.0.2" = { + name = "sqlite3"; + packageName = "sqlite3"; + version = "5.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz"; + sha512 = "1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA=="; + }; + }; + "sshpk-1.16.1" = { + name = "sshpk"; + packageName = "sshpk"; + version = "1.16.1"; + src = fetchurl { + url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"; + sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg=="; + }; + }; + "string-width-1.0.2" = { + name = "string-width"; + packageName = "string-width"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"; + sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; + }; + }; + "string-width-2.1.1" = { + name = "string-width"; + packageName = "string-width"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"; + sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="; + }; + }; + "string-width-3.1.0" = { + name = "string-width"; + packageName = "string-width"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz"; + sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w=="; + }; + }; + "string-width-4.2.2" = { + name = "string-width"; + packageName = "string-width"; + version = "4.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz"; + sha512 = "XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA=="; + }; + }; + "string_decoder-1.1.1" = { + name = "string_decoder"; + packageName = "string_decoder"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"; + sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="; + }; + }; + "string_decoder-1.3.0" = { + name = "string_decoder"; + packageName = "string_decoder"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"; + sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="; + }; + }; + "strip-ansi-3.0.1" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + }; + "strip-ansi-4.0.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + }; + "strip-ansi-5.2.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz"; + sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="; + }; + }; + "strip-ansi-6.0.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz"; + sha512 = "AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w=="; + }; + }; + "strip-final-newline-2.0.0" = { + name = "strip-final-newline"; + packageName = "strip-final-newline"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"; + sha512 = "BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="; + }; + }; + "strip-json-comments-2.0.1" = { + name = "strip-json-comments"; + packageName = "strip-json-comments"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; + sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; + }; + }; + "strip-json-comments-3.1.1" = { + name = "strip-json-comments"; + packageName = "strip-json-comments"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"; + sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="; + }; + }; + "supports-color-5.5.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "5.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"; + sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="; + }; + }; + "supports-color-7.2.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "7.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"; + sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="; + }; + }; + "table-5.4.6" = { + name = "table"; + packageName = "table"; + version = "5.4.6"; + src = fetchurl { + url = "https://registry.npmjs.org/table/-/table-5.4.6.tgz"; + sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug=="; + }; + }; + "tapable-2.2.0" = { + name = "tapable"; + packageName = "tapable"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz"; + sha512 = "FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw=="; + }; + }; + "tar-2.2.2" = { + name = "tar"; + packageName = "tar"; + version = "2.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz"; + sha512 = "FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA=="; + }; + }; + "tar-4.4.13" = { + name = "tar"; + packageName = "tar"; + version = "4.4.13"; + src = fetchurl { + url = "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz"; + sha512 = "w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA=="; + }; + }; + "terser-5.6.1" = { + name = "terser"; + packageName = "terser"; + version = "5.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz"; + sha512 = "yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw=="; + }; + }; + "terser-webpack-plugin-5.1.1" = { + name = "terser-webpack-plugin"; + packageName = "terser-webpack-plugin"; + version = "5.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz"; + sha512 = "5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q=="; + }; + }; + "text-table-0.2.0" = { + name = "text-table"; + packageName = "text-table"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + }; + "through-2.3.8" = { + name = "through"; + packageName = "through"; + version = "2.3.8"; + src = fetchurl { + url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + }; + "tmp-0.0.33" = { + name = "tmp"; + packageName = "tmp"; + version = "0.0.33"; + src = fetchurl { + url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz"; + sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="; + }; + }; + "to-regex-range-5.0.1" = { + name = "to-regex-range"; + packageName = "to-regex-range"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"; + sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="; + }; + }; + "tough-cookie-2.5.0" = { + name = "tough-cookie"; + packageName = "tough-cookie"; + version = "2.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"; + sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="; + }; + }; + "tslib-1.14.1" = { + name = "tslib"; + packageName = "tslib"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"; + sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="; + }; + }; + "tsutils-3.21.0" = { + name = "tsutils"; + packageName = "tsutils"; + version = "3.21.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"; + sha512 = "mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="; + }; + }; + "tunnel-agent-0.6.0" = { + name = "tunnel-agent"; + packageName = "tunnel-agent"; + version = "0.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + }; + "tweetnacl-0.14.5" = { + name = "tweetnacl"; + packageName = "tweetnacl"; + version = "0.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + }; + "type-check-0.3.2" = { + name = "type-check"; + packageName = "type-check"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + }; + "type-fest-0.21.3" = { + name = "type-fest"; + packageName = "type-fest"; + version = "0.21.3"; + src = fetchurl { + url = "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"; + sha512 = "t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="; + }; + }; + "type-fest-0.8.1" = { + name = "type-fest"; + packageName = "type-fest"; + version = "0.8.1"; + src = fetchurl { + url = "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"; + sha512 = "4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="; + }; + }; + "typescript-4.2.4" = { + name = "typescript"; + packageName = "typescript"; + version = "4.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz"; + sha512 = "V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg=="; + }; + }; + "uri-js-4.4.1" = { + name = "uri-js"; + packageName = "uri-js"; + version = "4.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"; + sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="; + }; + }; + "util-deprecate-1.0.2" = { + name = "util-deprecate"; + packageName = "util-deprecate"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + }; + "uuid-3.4.0" = { + name = "uuid"; + packageName = "uuid"; + version = "3.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"; + sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="; + }; + }; + "v8-compile-cache-2.3.0" = { + name = "v8-compile-cache"; + packageName = "v8-compile-cache"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz"; + sha512 = "l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="; + }; + }; + "verror-1.10.0" = { + name = "verror"; + packageName = "verror"; + version = "1.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + }; + "vue-2.6.10" = { + name = "vue"; + packageName = "vue"; + version = "2.6.10"; + src = fetchurl { + url = "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz"; + sha512 = "ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="; + }; + }; + "vue-eslint-parser-7.6.0" = { + name = "vue-eslint-parser"; + packageName = "vue-eslint-parser"; + version = "7.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz"; + sha512 = "QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA=="; + }; + }; + "vue-template-compiler-2.6.10" = { + name = "vue-template-compiler"; + packageName = "vue-template-compiler"; + version = "2.6.10"; + src = fetchurl { + url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz"; + sha512 = "jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg=="; + }; + }; + "watchpack-2.1.1" = { + name = "watchpack"; + packageName = "watchpack"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz"; + sha512 = "Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw=="; + }; + }; + "webpack-5.33.2" = { + name = "webpack"; + packageName = "webpack"; + version = "5.33.2"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack/-/webpack-5.33.2.tgz"; + sha512 = "X4b7F1sYBmJx8mlh2B7mV5szEkE0jYNJ2y3akgAP0ERi0vLCG1VvdsIxt8lFd4st6SUy0lf7W0CCQS566MBpJg=="; + }; + }; + "webpack-cli-4.6.0" = { + name = "webpack-cli"; + packageName = "webpack-cli"; + version = "4.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz"; + sha512 = "9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA=="; + }; + }; + "webpack-merge-5.7.3" = { + name = "webpack-merge"; + packageName = "webpack-merge"; + version = "5.7.3"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz"; + sha512 = "6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA=="; + }; + }; + "webpack-sources-2.2.0" = { + name = "webpack-sources"; + packageName = "webpack-sources"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz"; + sha512 = "bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w=="; + }; + }; + "which-1.3.1" = { + name = "which"; + packageName = "which"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz"; + sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="; + }; + }; + "which-2.0.2" = { + name = "which"; + packageName = "which"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz"; + sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="; + }; + }; + "wide-align-1.1.3" = { + name = "wide-align"; + packageName = "wide-align"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz"; + sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA=="; + }; + }; + "wildcard-2.0.0" = { + name = "wildcard"; + packageName = "wildcard"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz"; + sha512 = "JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw=="; + }; + }; + "word-wrap-1.2.3" = { + name = "word-wrap"; + packageName = "word-wrap"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"; + sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="; + }; + }; + "wrappy-1.0.2" = { + name = "wrappy"; + packageName = "wrappy"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + }; + "write-1.0.3" = { + name = "write"; + packageName = "write"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/write/-/write-1.0.3.tgz"; + sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig=="; + }; + }; + "xtend-4.0.2" = { + name = "xtend"; + packageName = "xtend"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"; + sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="; + }; + }; + "yallist-2.1.2" = { + name = "yallist"; + packageName = "yallist"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + }; + "yallist-3.1.1" = { + name = "yallist"; + packageName = "yallist"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"; + sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="; + }; + }; + "yallist-4.0.0" = { + name = "yallist"; + packageName = "yallist"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"; + sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="; + }; + }; + "yocto-queue-0.1.0" = { + name = "yocto-queue"; + packageName = "yocto-queue"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"; + sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="; + }; + }; + }; + args = { + name = "terraforming-mars"; + packageName = "terraforming-mars"; + version = "1.0.0"; + inherit src; + dependencies = [ + sources."@babel/code-frame-7.12.13" + sources."@babel/helper-validator-identifier-7.12.11" + sources."@babel/highlight-7.13.10" + sources."@discoveryjs/json-ext-0.5.2" + sources."@nodelib/fs.scandir-2.1.4" + sources."@nodelib/fs.stat-2.0.4" + sources."@nodelib/fs.walk-1.2.6" + sources."@types/eslint-7.2.10" + sources."@types/eslint-scope-3.7.0" + sources."@types/estree-0.0.46" + sources."@types/json-schema-7.0.7" + sources."@types/node-10.17.58" + sources."@types/pg-7.14.11" + sources."@types/sqlite3-3.1.7" + sources."@typescript-eslint/eslint-plugin-4.22.0" + sources."@typescript-eslint/experimental-utils-4.22.0" + sources."@typescript-eslint/parser-4.22.0" + sources."@typescript-eslint/scope-manager-4.22.0" + sources."@typescript-eslint/types-4.22.0" + sources."@typescript-eslint/typescript-estree-4.22.0" + sources."@typescript-eslint/visitor-keys-4.22.0" + sources."@webassemblyjs/ast-1.11.0" + sources."@webassemblyjs/floating-point-hex-parser-1.11.0" + sources."@webassemblyjs/helper-api-error-1.11.0" + sources."@webassemblyjs/helper-buffer-1.11.0" + sources."@webassemblyjs/helper-numbers-1.11.0" + sources."@webassemblyjs/helper-wasm-bytecode-1.11.0" + sources."@webassemblyjs/helper-wasm-section-1.11.0" + sources."@webassemblyjs/ieee754-1.11.0" + sources."@webassemblyjs/leb128-1.11.0" + sources."@webassemblyjs/utf8-1.11.0" + sources."@webassemblyjs/wasm-edit-1.11.0" + sources."@webassemblyjs/wasm-gen-1.11.0" + sources."@webassemblyjs/wasm-opt-1.11.0" + sources."@webassemblyjs/wasm-parser-1.11.0" + sources."@webassemblyjs/wast-printer-1.11.0" + sources."@webpack-cli/configtest-1.0.2" + sources."@webpack-cli/info-1.2.3" + sources."@webpack-cli/serve-1.3.1" + sources."@xtuc/ieee754-1.2.0" + sources."@xtuc/long-4.2.2" + sources."abbrev-1.1.1" + sources."acorn-7.4.1" + sources."acorn-jsx-5.3.1" + sources."ajv-6.12.6" + sources."ajv-keywords-3.5.2" + sources."ansi-colors-4.1.1" + (sources."ansi-escapes-4.3.2" // { + dependencies = [ + sources."type-fest-0.21.3" + ]; + }) + sources."ansi-regex-4.1.0" + sources."ansi-styles-3.2.1" + sources."aproba-1.2.0" + (sources."are-we-there-yet-1.1.5" // { + dependencies = [ + sources."readable-stream-2.3.7" + sources."string_decoder-1.1.1" + ]; + }) + sources."argparse-1.0.10" + sources."array-union-2.1.0" + sources."asn1-0.2.4" + sources."assert-plus-1.0.0" + sources."astral-regex-1.0.0" + sources."asynckit-0.4.0" + sources."aws-sign2-0.7.0" + sources."aws4-1.11.0" + sources."balanced-match-1.0.2" + sources."bcrypt-pbkdf-1.0.2" + sources."block-stream-0.0.9" + sources."brace-expansion-1.1.11" + sources."braces-3.0.2" + sources."browserslist-4.16.4" + sources."buffer-from-1.1.1" + sources."buffer-writer-2.0.0" + sources."callsites-3.1.0" + sources."caniuse-lite-1.0.30001209" + sources."caseless-0.12.0" + sources."chalk-2.4.2" + sources."chardet-0.7.0" + sources."chownr-1.1.4" + sources."chrome-trace-event-1.0.3" + sources."cli-cursor-3.1.0" + sources."cli-width-3.0.0" + (sources."clone-deep-4.0.1" // { + dependencies = [ + sources."kind-of-6.0.3" + ]; + }) + sources."code-point-at-1.1.0" + sources."color-convert-1.9.3" + sources."color-name-1.1.3" + sources."colorette-1.2.2" + sources."combined-stream-1.0.8" + sources."commander-2.20.3" + sources."compression-webpack-plugin-7.1.2" + sources."concat-map-0.0.1" + sources."config-chain-1.1.12" + sources."console-control-strings-1.1.0" + sources."console-stamp-3.0.0-rc4.2" + sources."copy-anything-2.0.3" + sources."core-util-is-1.0.2" + (sources."cross-spawn-6.0.5" // { + dependencies = [ + sources."semver-5.7.1" + ]; + }) + sources."dashdash-1.14.1" + sources."dateformat-3.0.3" + sources."de-indent-1.0.2" + sources."debug-4.3.1" + sources."deep-extend-0.6.0" + sources."deep-is-0.1.3" + sources."delayed-stream-1.0.0" + sources."delegates-1.0.0" + sources."detect-libc-1.0.3" + sources."dialog-polyfill-0.5.6" + sources."dir-glob-3.0.1" + sources."doctrine-3.0.0" + sources."dotenv-8.2.0" + sources."ecc-jsbn-0.1.2" + (sources."editorconfig-0.15.3" // { + dependencies = [ + sources."semver-5.7.1" + ]; + }) + sources."electron-to-chromium-1.3.717" + sources."emoji-regex-8.0.0" + sources."enhanced-resolve-5.7.0" + sources."enquirer-2.3.6" + sources."envinfo-7.8.1" + sources."errno-0.1.8" + sources."es-module-lexer-0.4.1" + sources."escalade-3.1.1" + sources."escape-string-regexp-1.0.5" + (sources."eslint-6.8.0" // { + dependencies = [ + sources."eslint-utils-1.4.3" + sources."eslint-visitor-keys-1.3.0" + sources."regexpp-2.0.1" + sources."semver-6.3.0" + ]; + }) + sources."eslint-config-google-0.14.0" + (sources."eslint-plugin-vue-6.2.2" // { + dependencies = [ + sources."semver-5.7.1" + ]; + }) + sources."eslint-scope-5.1.1" + (sources."eslint-utils-2.1.0" // { + dependencies = [ + sources."eslint-visitor-keys-1.3.0" + ]; + }) + sources."eslint-visitor-keys-2.0.0" + (sources."espree-6.2.1" // { + dependencies = [ + sources."eslint-visitor-keys-1.3.0" + ]; + }) + sources."esprima-4.0.1" + (sources."esquery-1.4.0" // { + dependencies = [ + sources."estraverse-5.2.0" + ]; + }) + (sources."esrecurse-4.3.0" // { + dependencies = [ + sources."estraverse-5.2.0" + ]; + }) + sources."estraverse-4.3.0" + sources."esutils-2.0.3" + sources."events-3.3.0" + (sources."execa-5.0.0" // { + dependencies = [ + sources."cross-spawn-7.0.3" + sources."is-stream-2.0.0" + sources."path-key-3.1.1" + sources."shebang-command-2.0.0" + sources."shebang-regex-3.0.0" + sources."which-2.0.2" + ]; + }) + sources."extend-3.0.2" + sources."external-editor-3.1.0" + sources."extsprintf-1.3.0" + sources."fast-deep-equal-3.1.3" + sources."fast-glob-3.2.5" + sources."fast-json-stable-stringify-2.1.0" + sources."fast-levenshtein-2.0.6" + sources."fastest-levenshtein-1.0.12" + sources."fastq-1.11.0" + sources."figures-3.2.0" + sources."file-entry-cache-5.0.1" + sources."fill-range-7.0.1" + sources."flat-cache-2.0.1" + sources."flatted-2.0.2" + sources."forever-agent-0.6.1" + sources."form-data-2.3.3" + sources."fs-minipass-1.2.7" + sources."fs.realpath-1.0.0" + sources."fstream-1.0.12" + sources."function-bind-1.1.1" + sources."functional-red-black-tree-1.0.1" + (sources."gauge-2.7.4" // { + dependencies = [ + sources."ansi-regex-2.1.1" + sources."is-fullwidth-code-point-1.0.0" + sources."string-width-1.0.2" + sources."strip-ansi-3.0.1" + ]; + }) + sources."get-stream-6.0.1" + sources."getpass-0.1.7" + sources."glob-7.1.6" + sources."glob-parent-5.1.2" + sources."glob-to-regexp-0.4.1" + sources."globals-12.4.0" + (sources."globby-11.0.3" // { + dependencies = [ + sources."ignore-5.1.8" + ]; + }) + sources."graceful-fs-4.2.6" + sources."har-schema-2.0.0" + sources."har-validator-5.1.5" + sources."has-1.0.3" + sources."has-flag-3.0.0" + sources."has-unicode-2.0.1" + sources."he-1.2.0" + sources."http-signature-1.2.0" + sources."human-signals-2.1.0" + sources."iconv-lite-0.4.24" + sources."ignore-4.0.6" + sources."ignore-walk-3.0.3" + sources."image-size-0.5.5" + sources."import-fresh-3.3.0" + (sources."import-local-3.0.2" // { + dependencies = [ + sources."find-up-4.1.0" + sources."locate-path-5.0.0" + sources."p-limit-2.3.0" + sources."p-locate-4.1.0" + sources."pkg-dir-4.2.0" + ]; + }) + sources."imurmurhash-0.1.4" + sources."inflight-1.0.6" + sources."inherits-2.0.4" + sources."ini-1.3.8" + (sources."inquirer-7.3.3" // { + dependencies = [ + sources."ansi-regex-5.0.0" + sources."ansi-styles-4.3.0" + sources."chalk-4.1.0" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."has-flag-4.0.0" + sources."strip-ansi-6.0.0" + sources."supports-color-7.2.0" + ]; + }) + sources."interpret-2.2.0" + sources."is-core-module-2.2.0" + sources."is-extglob-2.1.1" + sources."is-fullwidth-code-point-3.0.0" + sources."is-glob-4.0.1" + sources."is-number-7.0.0" + sources."is-plain-object-2.0.4" + sources."is-typedarray-1.0.0" + sources."is-what-3.14.1" + sources."isarray-1.0.0" + sources."isexe-2.0.0" + sources."isobject-3.0.1" + sources."isstream-0.1.2" + (sources."jest-worker-26.6.2" // { + dependencies = [ + sources."has-flag-4.0.0" + sources."supports-color-7.2.0" + ]; + }) + (sources."js-beautify-1.13.13" // { + dependencies = [ + sources."mkdirp-1.0.4" + ]; + }) + sources."js-tokens-4.0.0" + sources."js-yaml-3.14.1" + sources."jsbn-0.1.1" + sources."json-parse-better-errors-1.0.2" + sources."json-schema-0.2.3" + sources."json-schema-traverse-0.4.1" + sources."json-stable-stringify-without-jsonify-1.0.1" + sources."json-stringify-safe-5.0.1" + sources."jsprim-1.4.1" + sources."less-3.13.1" + sources."levn-0.3.0" + sources."loader-runner-4.2.0" + sources."lodash-4.17.21" + sources."lru-cache-4.1.5" + (sources."make-dir-2.1.0" // { + dependencies = [ + sources."semver-5.7.1" + ]; + }) + sources."merge-stream-2.0.0" + sources."merge2-1.4.1" + sources."micromatch-4.0.4" + sources."mime-1.6.0" + sources."mime-db-1.47.0" + sources."mime-types-2.1.30" + sources."mimic-fn-2.1.0" + sources."minimatch-3.0.4" + sources."minimist-1.2.5" + (sources."minipass-2.9.0" // { + dependencies = [ + sources."yallist-3.1.1" + ]; + }) + sources."minizlib-1.3.3" + sources."mkdirp-0.5.5" + sources."mnemonist-0.38.3" + sources."ms-2.1.2" + sources."mute-stream-0.0.8" + sources."native-request-1.0.8" + sources."natural-compare-1.4.0" + (sources."needle-2.6.0" // { + dependencies = [ + sources."debug-3.2.7" + ]; + }) + sources."neo-async-2.6.2" + sources."nice-try-1.0.5" + sources."node-addon-api-3.1.0" + (sources."node-gyp-3.8.0" // { + dependencies = [ + sources."nopt-3.0.6" + sources."semver-5.3.0" + ]; + }) + (sources."node-pre-gyp-0.11.0" // { + dependencies = [ + sources."nopt-4.0.3" + sources."semver-5.7.1" + sources."tar-4.4.13" + sources."yallist-3.1.1" + ]; + }) + sources."node-releases-1.1.71" + sources."nopt-5.0.0" + sources."npm-bundled-1.1.1" + sources."npm-normalize-package-bin-1.0.1" + sources."npm-packlist-1.4.8" + (sources."npm-run-path-4.0.1" // { + dependencies = [ + sources."path-key-3.1.1" + ]; + }) + sources."npmlog-4.1.2" + sources."number-is-nan-1.0.1" + sources."oauth-sign-0.9.0" + sources."object-assign-4.1.1" + sources."obliterator-1.6.1" + sources."once-1.4.0" + sources."onetime-5.1.2" + sources."optionator-0.8.3" + sources."os-homedir-1.0.2" + sources."os-tmpdir-1.0.2" + sources."osenv-0.1.5" + sources."p-limit-3.1.0" + sources."p-try-2.2.0" + sources."packet-reader-1.0.0" + sources."parent-module-1.0.1" + sources."path-exists-4.0.0" + sources."path-is-absolute-1.0.1" + sources."path-key-2.0.1" + sources."path-parse-1.0.6" + sources."path-type-4.0.0" + sources."performance-now-2.1.0" + sources."pg-8.6.0" + sources."pg-connection-string-2.5.0" + sources."pg-int8-1.0.1" + sources."pg-pool-3.3.0" + sources."pg-protocol-1.5.0" + sources."pg-types-2.2.0" + sources."pgpass-1.0.4" + sources."picomatch-2.2.3" + sources."pify-4.0.1" + sources."postgres-array-2.0.0" + sources."postgres-bytea-1.0.0" + sources."postgres-date-1.0.7" + sources."postgres-interval-1.2.0" + sources."prelude-ls-1.1.2" + sources."process-nextick-args-2.0.1" + sources."progress-2.0.3" + sources."proto-list-1.2.4" + sources."prr-1.0.1" + sources."pseudomap-1.0.2" + sources."psl-1.8.0" + sources."punycode-2.1.1" + sources."qs-6.5.2" + sources."queue-microtask-1.2.3" + sources."randombytes-2.1.0" + (sources."rc-1.2.8" // { + dependencies = [ + sources."strip-json-comments-2.0.1" + ]; + }) + sources."readable-stream-3.6.0" + sources."rechoir-0.7.0" + sources."regexpp-3.1.0" + (sources."request-2.88.2" // { + dependencies = [ + sources."tough-cookie-2.5.0" + ]; + }) + sources."resolve-1.20.0" + (sources."resolve-cwd-3.0.0" // { + dependencies = [ + sources."resolve-from-5.0.0" + ]; + }) + sources."resolve-from-4.0.0" + sources."restore-cursor-3.1.0" + sources."reusify-1.0.4" + sources."rimraf-2.6.3" + sources."run-async-2.4.1" + sources."run-parallel-1.2.0" + sources."rxjs-6.6.7" + sources."safe-buffer-5.1.2" + sources."safer-buffer-2.1.2" + sources."sax-1.2.4" + sources."schema-utils-3.0.0" + (sources."semver-7.3.5" // { + dependencies = [ + sources."lru-cache-6.0.0" + sources."yallist-4.0.0" + ]; + }) + sources."serialize-javascript-5.0.1" + sources."set-blocking-2.0.0" + (sources."shallow-clone-3.0.1" // { + dependencies = [ + sources."kind-of-6.0.3" + ]; + }) + sources."shebang-command-1.2.0" + sources."shebang-regex-1.0.0" + sources."sigmund-1.0.1" + sources."signal-exit-3.0.3" + sources."slash-3.0.0" + (sources."slice-ansi-2.1.0" // { + dependencies = [ + sources."is-fullwidth-code-point-2.0.0" + ]; + }) + sources."source-list-map-2.0.1" + sources."source-map-0.6.1" + sources."source-map-support-0.5.19" + sources."spectre.css-0.5.9" + sources."split2-3.2.2" + sources."sprintf-js-1.0.3" + sources."sqlite3-5.0.2" + sources."sshpk-1.16.1" + (sources."string-width-4.2.2" // { + dependencies = [ + sources."ansi-regex-5.0.0" + sources."strip-ansi-6.0.0" + ]; + }) + (sources."string_decoder-1.3.0" // { + dependencies = [ + sources."safe-buffer-5.2.1" + ]; + }) + sources."strip-ansi-5.2.0" + sources."strip-final-newline-2.0.0" + sources."strip-json-comments-3.1.1" + sources."supports-color-5.5.0" + (sources."table-5.4.6" // { + dependencies = [ + sources."emoji-regex-7.0.3" + sources."is-fullwidth-code-point-2.0.0" + sources."string-width-3.1.0" + ]; + }) + sources."tapable-2.2.0" + sources."tar-2.2.2" + (sources."terser-5.6.1" // { + dependencies = [ + sources."source-map-0.7.3" + ]; + }) + sources."terser-webpack-plugin-5.1.1" + sources."text-table-0.2.0" + sources."through-2.3.8" + sources."tmp-0.0.33" + sources."to-regex-range-5.0.1" + sources."tslib-1.14.1" + sources."tsutils-3.21.0" + sources."tunnel-agent-0.6.0" + sources."tweetnacl-0.14.5" + sources."type-check-0.3.2" + sources."type-fest-0.8.1" + sources."typescript-4.2.4" + sources."uri-js-4.4.1" + sources."util-deprecate-1.0.2" + sources."uuid-3.4.0" + sources."v8-compile-cache-2.3.0" + sources."verror-1.10.0" + sources."vue-2.6.10" + (sources."vue-eslint-parser-7.6.0" // { + dependencies = [ + sources."eslint-visitor-keys-1.3.0" + ]; + }) + sources."vue-template-compiler-2.6.10" + sources."watchpack-2.1.1" + (sources."webpack-5.33.2" // { + dependencies = [ + sources."acorn-8.1.1" + ]; + }) + (sources."webpack-cli-4.6.0" // { + dependencies = [ + sources."commander-7.2.0" + ]; + }) + sources."webpack-merge-5.7.3" + sources."webpack-sources-2.2.0" + sources."which-1.3.1" + (sources."wide-align-1.1.3" // { + dependencies = [ + sources."ansi-regex-3.0.0" + sources."is-fullwidth-code-point-2.0.0" + sources."string-width-2.1.1" + sources."strip-ansi-4.0.0" + ]; + }) + sources."wildcard-2.0.0" + sources."word-wrap-1.2.3" + sources."wrappy-1.0.2" + sources."write-1.0.3" + sources."xtend-4.0.2" + sources."yallist-2.1.2" + sources."yocto-queue-0.1.0" + ]; + buildInputs = globalBuildInputs; + meta = { + description = "Terraforming Mars Game"; + homepage = "https://github.com/bafolts/terraforming-mars#readme"; + license = "ISC"; + }; + production = true; + bypassCache = true; + reconstructLock = false; + }; +in +{ + args = args; + sources = sources; + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; +} diff --git a/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix b/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix new file mode 100644 index 0000000..f190221 --- /dev/null +++ b/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix @@ -0,0 +1,39 @@ +{ fetchgit, runCommand, callPackage, mylibs, nodePackages, nodejs_16, git }: +let + source = fetchgit { + url = "https://github.com/bafolts/terraforming-mars"; + rev = "25b3f80e276cc0c1fc283a78b6ae94b13c545ab6"; + sha256 = "03xcwvxv2mlmswngklzqp3lf30hgkvdilqq7p1z4h8xmy50cy12k"; + leaveDotGit = true; + fetchSubmodules = true; + }; + patchedSource = runCommand "patch-source" {} '' + cp -r ${source} $out + chmod -R u+w $out + sed -i -e 's/"lockfileVersion": 2,/"lockfileVersion": 1,/' $out/package-lock.json + ''; + packages = callPackage ./node-packages.nix { + src = patchedSource; + nodeEnv = callPackage mylibs.nodeEnv { nodejs = nodejs_16; }; + globalBuildInputs = [ nodejs_16.pkgs.node-pre-gyp ]; + }; + terraforming-mars = runCommand "terraforming-mars" { + buildInputs = [ nodejs_16 git ]; + } '' + cp -r ${source} ./source + chmod -R u+w source + cd source + patch -p1 < ${./immae-assets.patch} + ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules . + # See https://stackoverflow.com/questions/74548318/how-to-resolve-error-error0308010cdigital-envelope-routinesunsupported-no + export NODE_OPTIONS=--openssl-legacy-provider + npm run build + mkdir $out + cp -a build $out/ + cp -a assets $out/ + cp package.json $out/ + ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules $out + ln -s /var/lib/terraforming-mars/db $out/db + ''; +in + terraforming-mars diff --git a/systems/eldiron/websites/git/cgit_js.html b/systems/eldiron/websites/git/cgit_js.html new file mode 100644 index 0000000..4101071 --- /dev/null +++ b/systems/eldiron/websites/git/cgit_js.html @@ -0,0 +1,16 @@ +<script src="https://assets.immae.eu/jquery/3.5.1/jquery.min.js"></script> +<script type="application/javascript"> + $(document).ready(function() { + const linksObject = { + "/github/fretlink": "Fretlink Open-source Github forks", + "/github": "Github forks", + "/perso/Denise": "Denise", + "/perso/Immae": "Immae", + } + function toRow(href, name) { + return `<a href='/cgit${href}'>${name}</a>`; + } + const links = Object.keys(linksObject).map(function(k) { return toRow(k, linksObject[k]); }).join(""); + $("table.tabs a.active[href='/cgit/']").after(links); + }); +</script> diff --git a/systems/eldiron/websites/git/default.nix b/systems/eldiron/websites/git/default.nix new file mode 100644 index 0000000..46ba34d --- /dev/null +++ b/systems/eldiron/websites/git/default.nix @@ -0,0 +1,98 @@ +{ lib, pkgs, config, ... }: +let + mantisbt = pkgs.callPackage ./mantisbt.nix { + mantisbt_2 = pkgs.webapps-mantisbt_2; + mantisbt_2-plugins = pkgs.webapps-mantisbt_2-plugins; + env = config.myEnv.tools.mantisbt; + inherit config; + }; + gitweb = pkgs.callPackage ./gitweb.nix { + gitoliteDir = config.myServices.gitolite.gitoliteDir; + }; + + cfg = config.myServices.websites.tools.git; +in { + options.myServices.websites.tools.git = { + enable = lib.mkEnableOption "enable git's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.chatonsProperties.services.mantisbt = { + file.datetime = "2022-08-21T10:08:00"; + service = { + name = "MantisBT"; + description = "Mantis Bug Tracker"; + website = "https://git.immae.eu/mantisbt"; + logo = "https://git.immae.eu/mantisbt/images/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://www.immae.eu/docs/forge-logicielle.html"; + }; + software = { + name = "MantisBT"; + website = "https://mantisbt.org/"; + license.url = "https://opensource.org/licenses/gpl-license"; + license.name = "GNU General Public License"; + version = mantisbt.webRoot.version; + source.url = "https://github.com/mantisbt/mantisbt"; + modules = mantisbt.webRoot.pluginNames; + }; + }; + secrets.keys = mantisbt.keys; + services.websites.env.tools.modules = + gitweb.apache.modules ++ + mantisbt.apache.modules; + + security.acme.certs.eldiron.extraDomainNames = [ "git.immae.eu" ]; + services.websites.env.tools.vhostConfs.git = { + certName = "eldiron"; + hosts = ["git.immae.eu" ]; + root = gitweb.apache.root; + extraConfig = [ + gitweb.apache.vhostConf + (mantisbt.apache.vhostConf config.services.phpfpm.pools.mantisbt.socket) + '' + RewriteEngine on + RewriteCond %{REQUEST_URI} ^/releases + RewriteRule /releases(.*) https://release.immae.eu$1 [P,L] + '' + ]; + }; + services.phpfpm.pools = { + mantisbt = { + user = config.services.websites.env.tools.user; + group = config.services.websites.env.tools.group; + settings = mantisbt.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "gitweb website is running on git.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "git.immae.eu" "/cgit" "<title>Immae’s git"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Git"; + _webstatus_url = "https://git.immae.eu/"; + } + + { + service_description = "mantisbt website is running on git.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "git.immae.eu" "/mantisbt/" "<title>My View - MantisBT"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Mantisbt"; + _webstatus_url = "https://git.immae.eu/mantisbt"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/git/gitweb.nix b/systems/eldiron/websites/git/gitweb.nix new file mode 100644 index 0000000..40f99e0 --- /dev/null +++ b/systems/eldiron/websites/git/gitweb.nix @@ -0,0 +1,124 @@ +{ gitweb, writeText, stdenv, coreutils, writeScript, gitolite, git, cgit, gitoliteDir, mailcap, highlight }: +rec { + varDir = gitoliteDir; + config = writeText "gitweb.conf" '' + $git_temp = "/tmp"; + + # The directories where your projects are. Must not end with a + # slash. + $projectroot = "${varDir}/repositories"; + + $projects_list = "${varDir}/projects.list"; + $strict_export = "true"; + + # Base URLs for links displayed in the web interface. + our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu); + + $feature{'blame'}{'default'} = [1]; + $feature{'avatar'}{'default'} = ['gravatar']; + $feature{'highlight'}{'default'} = [1]; + + @stylesheets = ("gitweb-theme/gitweb.css"); + $logo = "gitweb-theme/git-logo.png"; + $favicon = "gitweb-theme/git-favicon.png"; + $javascript = "gitweb-theme/gitweb.js"; + $logo_url = "https://git.immae.eu/"; + $projects_list_group_categories = "true"; + $projects_list_description_width = 60; + $project_list_default_category = "__Others__"; + $highlight_bin = "${highlight}/bin/highlight"; + ''; + aboutFilter = writeScript "about-filter.sh" '' + #!${stdenv.shell} + + if [ -f "$CGIT_REPO_PATH/README.html" ]; then + cat "$CGIT_REPO_PATH/README.html" + else + ${cgit}/lib/cgit/filters/about-formatting.sh "$@" + fi + ''; + cgitConfig = writeText "cgitrc" '' + css=/cgit-css/cgit.css + logo=/cgit-css/cgit.png + favicon=/cgit-css/favicon.ico + head-include=${./cgit_js.html} + + root-title=Immae’s git + root-desc=To go back to the old interface: https://git.immae.eu/?old + readme=:README.md + readme=:readme.md + readme=:README + readme=:DOCUMENTATION.md + about-filter=${aboutFilter} + #${cgit}/lib/cgit/filters/about-formatting.sh + source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py + + enable-blame=1 + enable-index-links=1 + enable-commit-graph=1 + enable-log-filecount=1 + enable-log-linecount=1 + + enable-html-serving=1 + # Allow using gitweb.* keys + enable-git-config=1 + + side-by-side-diffs=1 + snapshots=tar.gz tar.zst zip + mimetype-file=${mailcap}/etc/mime.types + + section=__Others__ + clone-url=ssh://gitolite@git.immae.eu/$CGIT_REPO_URL https://git.immae.eu/$CGIT_REPO_URL + #section-from-path=1 + project-list=${varDir}/projects.list + scan-path=${varDir}/repositories + ''; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "cgid" ]; + root = gitweb; + vhostConf = '' + SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/ + ScriptAliasMatch \ + "(?x)^/(.*/(HEAD | \ + info/refs | \ + objects/(info/[^/]+ | \ + [0-9a-f]{2}/[0-9a-f]{38} | \ + pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ + git-(upload|receive)-pack))$" \ + ${git}/libexec/git-core/git-http-backend/$1 + + <Directory "${git}/libexec/git-core"> + Require all granted + </Directory> + <Directory "${root}"> + DirectoryIndex gitweb.cgi + Require all granted + AllowOverride None + Options ExecCGI FollowSymLinks + <Files gitweb.cgi> + SetHandler cgi-script + SetEnv GITWEB_CONFIG "${config}" + </Files> + </Directory> + + SetEnv CGIT_CONFIG ${cgitConfig} + ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/" + Alias /cgit-css "${cgit}/cgit" + <Directory "${cgit}/cgit/"> + AllowOverride None + Options ExecCGI FollowSymlinks + Require all granted + </Directory> + + RewriteEngine On + RewriteCond %{QUERY_STRING} ^$ + RewriteRule ^/?$ /cgit [L,R=302] + + RewriteCond %{REQUEST_URI} ^(.*)(\.git)?/?$ + RewriteCond ${varDir}/repositories/%1.git/HEAD -f + RewriteRule ^(.+)$ /cgit$1 [L,R=302] + ''; + }; +} diff --git a/systems/eldiron/websites/git/mantisbt.nix b/systems/eldiron/websites/git/mantisbt.nix new file mode 100644 index 0000000..3bd78e1 --- /dev/null +++ b/systems/eldiron/websites/git/mantisbt.nix @@ -0,0 +1,86 @@ +{ env, mantisbt_2, mantisbt_2-plugins, config }: +rec { + keys."webapps/tools-mantisbt" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + <?php + $g_hostname = '${env.postgresql.socket}'; + $g_db_username = '${env.postgresql.user}'; + $g_db_password = '${env.postgresql.password}'; + $g_database_name = '${env.postgresql.database}'; + $g_db_type = 'pgsql'; + $g_crypto_master_salt = '${env.master_salt}'; + $g_allow_signup = OFF; + $g_allow_anonymous_login = ON; + $g_anonymous_account = 'anonymous'; + + $g_phpMailer_method = PHPMAILER_METHOD_SENDMAIL; + $g_smtp_host = 'localhost'; + $g_smtp_username = '''; + $g_smtp_password = '''; + $g_webmaster_email = 'mantisbt@tools.immae.eu'; + $g_from_email = 'mantisbt@tools.immae.eu'; + $g_return_path_email = 'mantisbt@tools.immae.eu'; + $g_from_name = 'Mantis Bug Tracker at git.immae.eu'; + $g_email_receive_own = ON; + # --- LDAP --- + $g_login_method = LDAP; + $g_ldap_protocol_version = 3; + $g_ldap_server = 'ldaps://${env.ldap.host}:636'; + $g_ldap_root_dn = 'ou=users,${env.ldap.base}'; + $g_ldap_bind_dn = '${env.ldap.dn}'; + $g_ldap_bind_passwd = '${env.ldap.password}'; + $g_use_ldap_email = ON; + $g_use_ldap_realname = ON; + $g_ldap_uid_field = 'uid'; + $g_ldap_realname_field = 'cn'; + $g_ldap_organization = '${env.ldap.filter}'; + ''; + }; + webRoot = (mantisbt_2.override { mantis_config = config.secrets.fullPaths."webapps/tools-mantisbt"; }).withPlugins (p: [p.slack p.source-integration]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /mantisbt "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + Options FollowSymlinks + Require all granted + </Directory> + <Directory "${root}/admin"> + #Reenable during upgrade + Require all denied + </Directory> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot config.secrets.fullPaths."webapps/tools-mantisbt" ] + ++ webRoot.plugins); + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + "php_admin_value[upload_max_filesize]" = "5000000"; + + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:MantisBT:'"; + }; + }; +} diff --git a/systems/eldiron/websites/im/default.nix b/systems/eldiron/websites/im/default.nix new file mode 100644 index 0000000..7755a5c --- /dev/null +++ b/systems/eldiron/websites/im/default.nix @@ -0,0 +1,118 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.myServices.websites.tools.im; + converseVersion = "9.1.1"; + www = pkgs.runCommand "www" {} '' + cp -a ${./www} $out + substituteInPlace $out/converse.html --replace {{converseVersion}} ${converseVersion} + ''; +in +{ + options.myServices.websites.tools.im = { + enable = lib.mkEnableOption "enable im website"; + }; + + config = lib.mkIf cfg.enable { + myServices.chatonsProperties.services.converse = { + file.datetime = "2022-08-21T19:20:00"; + service = { + name = "Converse"; + description = "A free and open-source XMPP chat client in your browser"; + website = "https://im.immae.fr/converse"; + logo = "https://conversejs.org/docs/html/_static/favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "FREE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Converse"; + website = "https://conversejs.org/"; + license.name = "Mozilla Public License 2.0"; + license.url = "https://github.com/conversejs/converse.js/blob/master/LICENSE"; + version = "9.1.1"; + source.url = "https://github.com/conversejs/converse.js"; + }; + }; + myServices.chatonsProperties.services.weechat-bridge = { + file.datetime = "2022-08-21T19:20:00"; + service = { + name = "Weechat bridge"; + description = "WeeChat web frontend"; + website = "https://im.immae.fr/glowing-bear"; + logo = "https://im.immae.fr/glowing-bear/assets/img/glowing_bear_128x128.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE" "FREE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Glowing bear"; + website = "https://www.ejabberd.im/"; + license.name = "GNU General Public License v3.0"; + license.url = "https://github.com/processone/ejabberd"; + version = pkgs.glowing-bear.version; + source.url = "https://github.com/glowing-bear/glowing-bear"; + }; + }; + myServices.chatonsProperties.services.xmpp = { + file.datetime = "2022-08-21T19:20:00"; + service = { + name = "XMPP"; + description = "Universal messaging standard"; + website = "https://im.immae.fr/"; + logo = "https://xmpp.org/favicon-32x32.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "ejabberd"; + website = "https://www.ejabberd.im/"; + license.url = "https://github.com/processone/ejabberd/blob/master/COPYING"; + license.name = "GNU GENERAL PUBLIC LICENSE Version 2"; + version = pkgs.ejabberd.version; + source.url = "https://github.com/processone/ejabberd"; + modules = "converse"; + }; + }; + security.acme.certs.eldiron.extraDomainNames = [ "im.immae.fr" ]; + services.websites.env.tools.vhostConfs.im = { + certName = "eldiron"; + hosts = ["im.immae.fr"]; + root = www; + extraConfig = [ + '' + Alias /glowing-bear ${pkgs.glowing-bear} + Alias /converse ${www}/converse.html + ProxyPreserveHost On + <Location "/bosh"> + ProxyPass http://localhost:5280/bosh + ProxyPassReverse http://localhost:5280/bosh + </Location> + <Location "/ws"> + ProxyPass ws://localhost:5280/ws + </Location> + ProxyPass /upload http://localhost:5280/upload + ProxyPassReverse /upload http://localhost:5280/upload + ProxyPass /admin http://localhost:5280/admin + ProxyPassReverse /admin http://localhost:5280/admin + ProxyPass /api http://localhost:5280/api + ProxyPassReverse /api http://localhost:5280/api + <Directory ${pkgs.glowing-bear}> + AllowOverride none + Require all granted + </Directory> + <Directory ${www}> + Require all granted + AllowOverride none + </Directory> + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/im/www/converse.html b/systems/eldiron/websites/im/www/converse.html new file mode 100644 index 0000000..4ca451d --- /dev/null +++ b/systems/eldiron/websites/im/www/converse.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <title>Converse + + + + + + + + + + + + + + + + + + diff --git a/systems/eldiron/websites/im/www/index.html b/systems/eldiron/websites/im/www/index.html new file mode 100644 index 0000000..90c5458 --- /dev/null +++ b/systems/eldiron/websites/im/www/index.html @@ -0,0 +1,47 @@ + + + + + + Instant messaging configuration (Jabber/XMPP) + + + +

+ Pre-configured clients: +

+

+

+ Technical details: +

    +
  • HTTP-bind/BOSH access (XEP-0124 / XEP-0206): https://im.immae.fr/bosh
  • +
  • WS access (RFC 7395): wss://im.immae.fr/ws
  • +
+

+ + diff --git a/systems/eldiron/websites/immae/matrix/client b/systems/eldiron/websites/immae/matrix/client new file mode 100644 index 0000000..89136a0 --- /dev/null +++ b/systems/eldiron/websites/immae/matrix/client @@ -0,0 +1,11 @@ +{ + "m.homeserver": { + "base_url": "https://immae.ems.host" + }, + "m.identity_server": { + "base_url": "https://vector.im" + }, + "org.matrix.msc3575.proxy": { + "url": "https://immae.ems.host" + } +} diff --git a/systems/eldiron/websites/immae/matrix/server b/systems/eldiron/websites/immae/matrix/server new file mode 100644 index 0000000..449155a --- /dev/null +++ b/systems/eldiron/websites/immae/matrix/server @@ -0,0 +1,3 @@ +{ + "m.server": "immae.ems.host:443" +} diff --git a/systems/eldiron/websites/immae/production.nix b/systems/eldiron/websites/immae/production.nix new file mode 100644 index 0000000..e4060ba --- /dev/null +++ b/systems/eldiron/websites/immae/production.nix @@ -0,0 +1,107 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.immae.production; + varDir = "/var/lib/buildbot/outputs/immae/blog"; + historyDir = "/var/lib/buildbot/outputs/immae/history"; + docsDir = "/var/lib/buildbot/outputs/immae/docs/"; +in { + options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website"; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains = with config.myServices.dns.helpers; + { + www = ips servers.eldiron.ips.production; + matrix.CNAME = [ "immae.element.io." ]; + }; + services.webstats.sites = [ { name = "www.immae.eu"; } ]; + + security.acme.certs.immae.domain = "www.immae.eu"; + security.acme.certs.immae.extraDomainNames = [ "immae.eu" ]; + services.websites.env.production.bindMounts."${varDir}" = {}; + services.websites.env.production.bindMounts."${docsDir}" = {}; + services.websites.env.production.bindMounts."${historyDir}" = {}; + services.websites.env.production.vhostConfs.immae_production = { + certName = "immae"; + hosts = [ "www.immae.eu" "immae.eu" ]; + root = varDir; + extraConfig = [ + '' + Use Stats www.immae.eu + Header always set Strict-Transport-Security "max-age=31536000" + + + Header always set Referrer-Policy "strict-origin-when-cross-origin" + RequestHeader set X-Forwarded-Proto "https" + + RewriteRule ^(.*)$ https://mastodon.immae.eu%{REQUEST_URI} [QSA,L] + + + RewriteEngine On + RewriteCond "%{REQUEST_URI}" "!^/.well-known/(webfinger|host-meta)" + RewriteCond "%{HTTP_HOST}" "!^www\.immae\.eu$" [NC] + RewriteRule ^(.+)$ https://www.immae.eu$1 [R=302,L] + + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + + Alias /.well-known/matrix ${./matrix} + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + Header always set Access-Control-Allow-Origin "*" + + + Alias /docs ${docsDir} + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + + Alias /eurl ${./sarl} + Alias /eurl ${./sarl} + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + + Alias /history ${historyDir} + + DirectoryIndex index.html + AllowOverride None + Require all granted + + + Alias /.well-known/chatonsinfos ${config.myServices.chatonsProperties.propertiesPath} + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "blog website is running on immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "www.immae.eu" "/blog/" "egrep -ri TODO /etc"]; + + servicegroups = "webstatus-websites"; + _webstatus_name = "Immae’s Blog"; + _webstatus_url = "https://www.immae.eu/blog"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/immae/release.nix b/systems/eldiron/websites/immae/release.nix new file mode 100644 index 0000000..4882bac --- /dev/null +++ b/systems/eldiron/websites/immae/release.nix @@ -0,0 +1,40 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.immae.release; + varDir = "/var/lib/ftp/release.immae.eu"; +in { + options.myServices.websites.immae.release.enable = lib.mkEnableOption "enable Release' website"; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.release = with config.myServices.dns.helpers; + ips servers.eldiron.ips.production; + services.webstats.sites = [ { name = "release.immae.eu"; } ]; + + security.acme.certs.immae.extraDomainNames = [ "release.immae.eu" ]; + services.websites.env.production.vhostConfs.immae_release = { + certName = "immae"; + hosts = [ "release.immae.eu" ]; + root = varDir; + extraConfig = [ + '' + Use Stats release.immae.eu + + Use Apaxy "${varDir}" "title .duplicity-ignore" + + Use LDAPConnect + Options Indexes + AllowOverride All + Require all granted + + + + Use LDAPConnect + Options Indexes FollowSymlinks + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt b/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt new file mode 100644 index 0000000..671534c --- /dev/null +++ b/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDyzCCArOgAwIBAgIUXNW7Lmte+fa5YxI7Gdznl7ZaLPIwDQYJKoZIhvcNAQEL +BQAwdTELMAkGA1UEBhMCRlIxGDAWBgNVBAgMD0FscGVzLU1hcml0aW1lczEPMA0G +A1UEBwwGR3Jhc3NlMRUwEwYDVQQKDAxJbW1hZUV1IEVVUkwxJDAiBgkqhkiG9w0B +CQEWFWNvbnRhY3RAbWFpbC5pbW1hZS5ldTAeFw0yMTAxMTkwMDI5MDlaFw0yMjAx +MTkwMDI5MDlaMHUxCzAJBgNVBAYTAkZSMRgwFgYDVQQIDA9BbHBlcy1NYXJpdGlt +ZXMxDzANBgNVBAcMBkdyYXNzZTEVMBMGA1UECgwMSW1tYWVFdSBFVVJMMSQwIgYJ +KoZIhvcNAQkBFhVjb250YWN0QG1haWwuaW1tYWUuZXUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDeyWKvTu2kuJ2HSgRzZZL6yFNHUXGgcl/q8vlRKFI4 +P0yHwcEwDCaCXquqS09WN99H55aNTjHfnu70dZXogyWHGk4vlaUkGiUoCAYK5tFU +34fzpZuInhBL8nRY0pRV4H2t02jQMyiYowZXTqR86BRocbXZ4TY5EwD/hlrH6iDc +pIlC7cVnWV4J5qXX9fXALbpXseD9PF0/y2tP5dM658jBL9KdW1PqlPGudvB44Z+a +pE8XCXF9PGrVBNN7aPmizOb42scx/2XghX1DYCikiUf8m+FGjidxGlXmj4B6Dukp +b7RxdkY7p97svH91uMQuUvDW5d93ZiatHNeYuAl8yI39AgMBAAGjUzBRMB0GA1Ud +DgQWBBSgsFwzEybKyLF/Bkuz7FA5SwfwPTAfBgNVHSMEGDAWgBSgsFwzEybKyLF/ +Bkuz7FA5SwfwPTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDX +Wij/gDT+7N/pSSVWImiYoe+/KsAJd0TLs39GJkvW0114RXKINYNU8exNY7rKMVCl +TKePEevSo5CCartNfLXGIr3uqPlR+V3XF6KmyMSiB6k+GukoUtUg2Bp7ESGlpZXi +wkHYclk0NIzxWyUrzNdflxu3gPU278qFMbUIlbdWNsHtrLbpHypelPQ+IaEbNoWV +Q+M8Vg6ifsDmhp7TqFXpIoGa6CIxXuknDOidBpeE9kPjVu0kKrjXQULirNl3eEe6 +H1XUQ7lSdt/l3N1cHTj70x2xIi6fdwPQRqhXILrIuST+C0wpPiqPCv1rfcwh0PvU +mZVZ/+83y3Zuo9lVqkbB +-----END CERTIFICATE----- diff --git a/systems/eldiron/websites/kanboard/farm.nix b/systems/eldiron/websites/kanboard/farm.nix new file mode 100644 index 0000000..a70d0d6 --- /dev/null +++ b/systems/eldiron/websites/kanboard/farm.nix @@ -0,0 +1,183 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.tools.kanboard.farm; + apacheUser = config.services.websites.env.tools.user; + apacheGroup = config.services.websites.env.tools.group; + toVardir = name: "/var/lib/kanboard_farm/${name}"; + varDirs = lib.mapAttrsToList (name: v: toVardir name) cfg.instances; + toPhpBaseDir = name: [ rootDir (toVardir name) ]; + phpBaseDir = builtins.concatStringsSep ":" (lib.unique (lib.flatten (lib.mapAttrsToList (name: v: toPhpBaseDir name) cfg.instances))); + rootDir = pkgs.kanboard; + + toVhost = name: '' + Alias /${name} "${rootDir}" + + SetEnv DATA_DIR "${toVardir name}" + SetEnv MAIL_FROM "kanboard@tools.immae.eu" + + ''; + toCustomVhost = name: lib.optionalAttrs (cfg.instances."${name}".customHost != null) { + "kanboard_farm_${name}" = { + certName = "eldiron"; + hosts = [cfg.instances."${name}".customHost]; + root = null; + extraConfig = [ + '' + Alias / "${rootDir}" + + SetEnv DATA_DIR "${toVardir name}" + SetEnv MAIL_FROM "kanboard@tools.immae.eu" + + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${config.services.phpfpm.pools.kanboard_farm.socket}|fcgi://localhost" + + + + Require all denied + + '' + ]; + }; + }; + customHosts = lib.filter (n: n != null) (map (n: cfg.instances."${n}".customHost) (builtins.attrNames cfg.instances)); + customVhosts = lib.foldl (o: n: o // n) {} (map toCustomVhost (builtins.attrNames cfg.instances)); + phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [all.redis]); +in +{ + options.myServices.tools.kanboard.farm = { + instances = lib.mkOption { + description = "Instances names for the kanboard Farm"; + default = {}; + type = lib.types.attrsOf (lib.types.submodule { + options = { + customHost = lib.mkOption { + description = "Custom host to use for the kanboard instance"; + default = null; + type = lib.types.nullOr lib.types.str; + }; + }; + }); + }; + vhosts = lib.mkOption { + description = "Instance vhosts configs"; + readOnly = true; + type = lib.types.attrsOf lib.types.str; + default = lib.mapAttrs (name: v: toVhost name) cfg.instances; + }; + }; + + config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) { + myServices.dns.zones."immae.eu".subdomains.kanboard = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.kanboard = { + file.datetime = "2022-08-21T19:40:00"; + hosting = { + name = "Kanboard"; + description = "Kanban project management software"; + website = "https://tools.immae.eu/kanboard"; + logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.kanboard = { + file.datetime = "2022-08-21T19:40:00"; + service = { + name = "Kanboard"; + description = "Kanban project management software"; + website = "https://tools.immae.eu/kanboard"; + logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Kanboard"; + website = "https://kanboard.org/"; + license.url = "https://github.com/kanboard/kanboard/blob/main/LICENSE"; + license.name = "MIT License"; + version = pkgs.kanboard.version; + source.url = "https://github.com/kanboard/kanboard"; + }; + }; + system.activationScripts.kanboard_farm_vardirs = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${builtins.concatStringsSep " " varDirs} + ''; + }; + services.phpfpm.pools.kanboard_farm = { + user = apacheUser; + group = apacheGroup; + settings = let + instanceNb = builtins.length (builtins.attrNames cfg.instances); + in { + "listen.owner" = apacheUser; + "listen.group" = apacheGroup; + "pm" = "dynamic"; + "pm.max_children" = builtins.toString (60 * instanceNb); + "pm.start_servers" = builtins.toString (2 * instanceNb); + "pm.min_spare_servers" = builtins.toString (2 * instanceNb); + "pm.max_spare_servers" = builtins.toString (3 * instanceNb); + "pm.process_idle_timeout" = "60"; + + "php_admin_value[output_buffering]" = "0"; + "php_admin_value[max_execution_time]" = "1800"; + "php_admin_value[zend_extension]" = "opcache"; + "php_value[apcu.enable_cli]" = "1"; + "php_value[apcu.enabled]" = "1"; + #already enabled by default? + #"php_value[opcache.enable]" = "1"; + "php_value[opcache.enable_cli]" = "1"; + "php_value[opcache.interned_strings_buffer]" = "8"; + "php_value[opcache.max_accelerated_files]" = "10000"; + "php_value[opcache.memory_consumption]" = "128"; + "php_value[opcache.save_comments]" = "1"; + "php_value[opcache.revalidate_freq]" = "1"; + "php_admin_value[memory_limit]" = "512M"; + + "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${phpBaseDir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:KanboardFarm:'"; + }; + inherit phpPackage; + }; + security.acme.certs.eldiron.extraDomainNames = customHosts ++ [ "kanboard.immae.eu" ]; + services.websites.env.tools.vhostConfs = { + kanboard = { + certName = "eldiron"; + hosts = ["kanboard.immae.eu"]; + root = null; + extraConfig = [ + '' + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${config.services.phpfpm.pools.kanboard_farm.socket}|fcgi://localhost" + + + + Require all denied + + '' + ] ++ builtins.attrValues cfg.vhosts; + }; + } // customVhosts; + }; +} diff --git a/systems/eldiron/websites/mail/default.nix b/systems/eldiron/websites/mail/default.nix new file mode 100644 index 0000000..0a0342b --- /dev/null +++ b/systems/eldiron/websites/mail/default.nix @@ -0,0 +1,141 @@ +{ lib, pkgs, config, ... }: +let + roundcubemail = pkgs.callPackage ./roundcubemail.nix { + roundcubemail = pkgs.webapps-roundcubemail; + env = config.myEnv.tools.roundcubemail; + inherit config; + }; + rainloop = pkgs.callPackage ./rainloop.nix { + rainloop = pkgs.rainloop-community; + }; + cfg = config.myServices.websites.tools.email; + pcfg = config.services.phpfpm.pools; +in +{ + options.myServices.websites.tools.email = { + enable = lib.mkEnableOption "enable email website"; + }; + + imports = [ + ./mta-sts.nix + ]; + + config = lib.mkIf cfg.enable { + #myServices.chatonsProperties.services.mail-rainloop = { + # file.datetime = "2022-08-22T00:30:00"; + # service = { + # name = "Rainloop"; + # description = "Simple, modern & fast web-based email client"; + # website = "https://mail.immae.eu/rainloop"; + # logo = "https://www.rainloop.net/static/img/logo-16x16.png"; + # status.level = "ERROR"; + # status.description = "Stopped due to CVE-2022-29360"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "Rainloop"; + # website = "https://www.rainloop.net/"; + # license.url = "https://www.rainloop.net/licensing/"; + # license.name = "GNU Affero General Public License v3.0"; + # version = rainloop.webRoot.version; + # source.url = "https://github.com/RainLoop/rainloop-webmail"; + # }; + #}; + #myServices.chatonsProperties.services.mail-roundcube = { + # file.datetime = "2022-08-22T00:30:00"; + # service = { + # name = "Roundcube"; + # description = "The Roundcube Webmail suite"; + # website = "https://mail.immae.eu/roundcube"; + # logo = "https://mail.immae.eu/roundcube/skins/elastic/images/favicon.ico"; + # status.level = "OK"; + # status.description = "OK"; + # registration."" = ["MEMBER" "CLIENT"]; + # registration.load = "OPEN"; + # install.type = "PACKAGE"; + # }; + # software = { + # name = "Roundcube"; + # website = "https://roundcube.net/"; + # license.url = "https://github.com/roundcube/roundcubemail/blob/master/LICENSE"; + # license.name = "GNU General Public License v3.0"; + # version = roundcubemail.webRoot.version; + # source.url = "https://github.com/roundcube/roundcubemail"; + # modules = map (a: a.pluginName) roundcubemail.webRoot.plugins ++ map (a: a.skinName) roundcubemail.webRoot.skins; + # }; + #}; + + myServices.dns.zones."immae.eu".subdomains.mail = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + secrets.keys = roundcubemail.keys; + + services.websites.env.tools.modules = + [ "proxy_fcgi" ] + ++ rainloop.apache.modules + ++ roundcubemail.apache.modules; + + security.acme.certs.mail.extraDomainNames = [ "mail.immae.eu" ]; + services.websites.env.tools.vhostConfs.mail = { + certName = "mail"; + hosts = ["mail.immae.eu"]; + root = ./www; + extraConfig = [ + (rainloop.apache.vhostConf pcfg.rainloop.socket) + (roundcubemail.apache.vhostConf pcfg.roundcubemail.socket) + '' + + Require all granted + Options -Indexes + + '' + ]; + }; + systemd.services = { + phpfpm-rainloop = { + after = lib.mkAfter rainloop.phpFpm.serviceDeps; + wants = rainloop.phpFpm.serviceDeps; + }; + phpfpm-roundcubemail = { + after = lib.mkAfter roundcubemail.phpFpm.serviceDeps; + wants = roundcubemail.phpFpm.serviceDeps; + }; + }; + + services.phpfpm.pools.roundcubemail = { + user = "wwwrun"; + group = "wwwrun"; + settings = roundcubemail.phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + '' + date.timezone = 'CET' + ''; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.imagick all.redis ]); + }; + services.phpfpm.pools.rainloop = { + user = "wwwrun"; + group = "wwwrun"; + settings = rainloop.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + system.activationScripts = { + roundcubemail = roundcubemail.activationScript; + rainloop = rainloop.activationScript; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "roundcube website is running on mail.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "mail.immae.eu" "/roundcube/" "Roundcube"]; + + servicegroups = "webstatus-webapps,webstatus-email"; + _webstatus_name = "Roundcube"; + _webstatus_url = "https://mail.immae.eu/roundcube/"; + } + ]; + }; + +} diff --git a/systems/eldiron/websites/mail/mta-sts.nix b/systems/eldiron/websites/mail/mta-sts.nix new file mode 100644 index 0000000..2438702 --- /dev/null +++ b/systems/eldiron/websites/mail/mta-sts.nix @@ -0,0 +1,42 @@ +{ lib, pkgs, config, ... }: +let + getDomains = p: lib.mapAttrsToList (n: v: v) (lib.filterAttrs (n: v: v.receive) p.emailPolicies); + bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones; + domains = lib.flatten (builtins.attrValues bydomain); + mxes = lib.mapAttrsToList + (n: v: v.mx.subdomain) + (lib.attrsets.filterAttrs (n: v: v.mx.enable) config.myEnv.servers); + file = d: pkgs.writeText "mta-sts-${d.fqdn}.txt" ( + builtins.concatStringsSep "\r\n" ([ "version: STSv1" "mode: testing" ] + ++ (map (v: "mx: ${v}.${d.domain}") mxes) + ++ [ "max_age: 604800" ] + )); + root = pkgs.runCommand "mta-sts_root" {} '' + mkdir -p $out + ${builtins.concatStringsSep "\n" (map (d: + "cp ${file d} $out/${d.fqdn}.txt" + ) domains)} + ''; + cfg = config.myServices.websites.tools.email; +in +{ + config = lib.mkIf cfg.enable { + security.acme.certs.mail.extraDomainNames = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains; + services.websites.env.tools.vhostConfs.mta_sts = { + certName = "mail"; + hosts = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains; + root = root; + extraConfig = [ + '' + RewriteEngine on + RewriteCond %{HTTP_HOST} ^mta-sts.(.*)$ + RewriteRule ^/.well-known/mta-sts.txt$ %{DOCUMENT_ROOT}/%1.txt [L] + <Directory ${root}> + Require all granted + Options -Indexes + </Directory> + '' + ]; + }; + }; +} diff --git a/systems/eldiron/websites/mail/rainloop.nix b/systems/eldiron/websites/mail/rainloop.nix new file mode 100644 index 0000000..f821005 --- /dev/null +++ b/systems/eldiron/websites/mail/rainloop.nix @@ -0,0 +1,54 @@ +{ lib, rainloop, writeText, stdenv, fetchurl }: +rec { + varDir = "/var/lib/rainloop"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/data + ''; + }; + webRoot = rainloop.override { dataPath = "${varDir}/data"; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /rainloop "${root}" + <Directory "${root}"> + DirectoryIndex index.php + AllowOverride All + Options -FollowSymlinks + Require all denied + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + + <DirectoryMatch "${root}/data"> + Require all denied + </DirectoryMatch> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "RainloopPHPSESSID"; + "php_admin_value[upload_max_filesize]" = "200M"; + "php_admin_value[post_max_size]" = "200M"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Rainloop:'"; + }; + }; +} diff --git a/systems/eldiron/websites/mail/roundcubemail.nix b/systems/eldiron/websites/mail/roundcubemail.nix new file mode 100644 index 0000000..21a10fe --- /dev/null +++ b/systems/eldiron/websites/mail/roundcubemail.nix @@ -0,0 +1,119 @@ +{ env, roundcubemail, apacheHttpd, config }: +rec { + varDir = "/var/lib/roundcubemail"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/cache ${varDir}/logs + ''; + }; + keys."webapps/tools-roundcube" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = + let + psql_url = with env.postgresql; "pgsql://${user}:${password}@unix(${socket}:${port})/${database}"; + in '' + <?php + $config['db_dsnw'] = '${psql_url}'; + $config['default_host'] = 'ssl://imap.immae.eu'; + $config['username_domain'] = array( + "imap.immae.eu" => "mail.immae.eu" + ); + $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false)); + $config['smtp_server'] = 'tls://smtp.immae.eu'; + $config['smtp_port'] = '587'; + $config['managesieve_host'] = 'imap.immae.eu'; + $config['managesieve_port'] = '4190'; + $config['managesieve_usetls'] = true; + $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false)); + + $config['imap_cache'] = 'db'; + $config['messages_cache'] = 'db'; + + $config['support_url'] = '''; + + $config['des_key'] = '${env.secret}'; + + $config['skin'] = 'elastic'; + $config['plugins'] = array( + 'attachment_reminder', + 'emoticons', + 'filesystem_attachments', + 'hide_blockquote', + 'identicon', + 'identity_select', + 'jqueryui', + 'markasjunk', + 'managesieve', + 'newmail_notifier', + 'vcard_attachments', + 'zipdownload', + + 'automatic_addressbook', + 'message_highlight', + 'carddav', + // Ne marche pas ?: 'ident_switch', + // Ne marche pas ?: 'thunderbird_labels', + ); + + $config['language'] = 'fr_FR'; + + $config['drafts_mbox'] = 'Drafts'; + $config['junk_mbox'] = 'Junk'; + $config['sent_mbox'] = 'Sent'; + $config['trash_mbox'] = 'Trash'; + $config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'); + $config['draft_autosave'] = 60; + $config['enable_installer'] = false; + $config['log_driver'] = 'file'; + $config['temp_dir'] = '${varDir}/cache'; + $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; + ''; + keyDependencies = [ apacheHttpd ]; + }; + webRoot = (roundcubemail.override { roundcube_config = config.secrets.fullPaths."webapps/tools-roundcube"; }).withPlugins (p: [ p.automatic_addressbook p.carddav p.contextmenu p.contextmenu_folder p.html5_notifier p.ident_switch p.message_highlight p.thunderbird_labels ]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /roundcube "${root}" + <Directory "${root}"> + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot config.secrets.fullPaths."webapps/tools-roundcube" varDir ] + ++ webRoot.plugins + ++ webRoot.skins); + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "RoundcubemailPHPSESSID"; + "php_admin_value[upload_max_filesize]" = "200M"; + "php_admin_value[post_max_size]" = "200M"; + "php_admin_value[open_basedir]" = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Roundcubemail:'"; + }; + }; +} diff --git a/systems/eldiron/websites/mail/www/index.html b/systems/eldiron/websites/mail/www/index.html new file mode 100644 index 0000000..88b0ebd --- /dev/null +++ b/systems/eldiron/websites/mail/www/index.html @@ -0,0 +1,74 @@ +<!doctype html> +<html lang="fr"> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>E-mail configuration + + + +

+ Email configuration. For automatic configuration in your smart e-mail + client, use login@mail.immae.eu. If it + doesn’t work, the details are there: +

    +
  • IMAP: imap.immae.eu +
      +
    • No unencrypted access
    • +
    • STARTTLS: 143
    • +
    • SSL: 993
    • +
    +
  • +
  • POP3: pop3.immae.eu +
      +
    • No unencrypted access
    • +
    • STARTTLS: 110
    • +
    • SSL: 995
    • +
    +
  • +
  • SMTP: smtp.immae.eu +
      +
    • No unencrypted access
    • +
    • STARTTLS: 587
    • +
    • SSL: 465
    • +
    +
  • +
  • Sieve: imap.immae.eu +
      +
    • No unencrypted access
    • +
    • STARTTLS: 4190
    • +
    +
  • +
+

+

Webmails: +

+

+ + + diff --git a/systems/eldiron/websites/mastodon/default.nix b/systems/eldiron/websites/mastodon/default.nix new file mode 100644 index 0000000..603fc9e --- /dev/null +++ b/systems/eldiron/websites/mastodon/default.nix @@ -0,0 +1,174 @@ +{ lib, pkgs, config, ... }: +let + env = config.myEnv.tools.mastodon; + root = "${mcfg.workdir}/public/"; + cfg = config.myServices.websites.tools.mastodon; + mcfg = config.immaeServices.mastodon; +in { + options.myServices.websites.tools.mastodon = { + enable = lib.mkEnableOption "enable mastodon's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.mastodon = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.mastodon = { + file.datetime = "2022-08-21T19:50:00"; + service = { + name = "Mastodon"; + description = "Your self-hosted, globally interconnected microblogging community"; + website = "https://mastodon.immae.eu/"; + logo = "https://mastodon.immae.eu/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Mastodon"; + website = "https://joinmastodon.org/"; + license.url = "https://github.com/tootsuite/mastodon/blob/master/LICENSE"; + license.name = "GNU General Public License v3.0"; + version = mcfg.package.version; + source.url = "https://github.com/tootsuite/mastodon"; + }; + }; + secrets.keys."webapps/tools-mastodon" = { + user = "mastodon"; + group = "mastodon"; + permissions = "0400"; + text = '' + REDIS_HOST=${env.redis.host} + REDIS_PORT=${env.redis.port} + REDIS_DB=${env.redis.db} + DB_HOST=${env.postgresql.socket} + DB_USER=${env.postgresql.user} + DB_NAME=${env.postgresql.database} + DB_PASS=${env.postgresql.password} + DB_PORT=${env.postgresql.port} + + LOCAL_DOMAIN=mastodon.immae.eu + LOCAL_HTTPS=true + ALTERNATE_DOMAINS=immae.eu + + PAPERCLIP_SECRET=${env.paperclip_secret} + SECRET_KEY_BASE=${env.secret_key_base} + OTP_SECRET=${env.otp_secret} + + VAPID_PRIVATE_KEY=${env.vapid.private} + VAPID_PUBLIC_KEY=${env.vapid.public} + + SMTP_DELIVERY_METHOD=sendmail + SMTP_FROM_ADDRESS=mastodon@tools.immae.eu + SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" + PAPERCLIP_ROOT_PATH=${mcfg.dataDir} + + STREAMING_CLUSTER_NUM=1 + + RAILS_LOG_LEVEL=warn + + # LDAP authentication (optional) + LDAP_ENABLED=true + LDAP_HOST=${env.ldap.host} + LDAP_PORT=636 + LDAP_METHOD=simple_tls + LDAP_BASE="${env.ldap.base}" + LDAP_BIND_DN="${env.ldap.dn}" + LDAP_PASSWORD="${env.ldap.password}" + LDAP_UID="uid" + LDAP_SEARCH_FILTER="${env.ldap.filter}" + ''; + }; + immaeServices.mastodon = { + enable = true; + configFile = config.secrets.fullPaths."webapps/tools-mastodon"; + socketsPrefix = "live_immae"; + dataDir = "/var/lib/mastodon_immae"; + }; + services.filesWatcher.mastodon-streaming = { + restart = true; + paths = [ mcfg.configFile ]; + }; + services.filesWatcher.mastodon-web = { + restart = true; + paths = [ mcfg.configFile ]; + }; + services.filesWatcher.mastodon-sidekiq = { + restart = true; + paths = [ mcfg.configFile ]; + }; + + + services.websites.env.tools.modules = [ + "headers" "proxy" "proxy_wstunnel" "proxy_http" + ]; + security.acme.certs.eldiron.extraDomainNames = [ "mastodon.immae.eu" ]; + services.websites.env.tools.vhostConfs.mastodon = { + certName = "eldiron"; + hosts = ["mastodon.immae.eu" ]; + root = root; + extraConfig = [ '' + Header always set Referrer-Policy "strict-origin-when-cross-origin" + Header always set Strict-Transport-Security "max-age=31536000" + + + Header always set Cache-Control "public, max-age=31536000, immutable" + Require all granted + + + ProxyPreserveHost On + RequestHeader set X-Forwarded-Proto "https" + + RewriteEngine On + + RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L] + RewriteRule ^/api/v1/streaming/public$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/public [P,NE,QSA,L] + RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L] + RewriteCond %{REQUEST_URI} !/500.html + RewriteCond %{REQUEST_URI} !/sw.js + RewriteCond %{REQUEST_URI} !/embed.js + RewriteCond %{REQUEST_URI} !/robots.txt + RewriteCond %{REQUEST_URI} !/manifest.json + RewriteCond %{REQUEST_URI} !/browserconfig.xml + RewriteCond %{REQUEST_URI} !/mask-icon.svg + RewriteCond %{REQUEST_URI} !^(/.*\.(png|ico|gif)$) + RewriteCond %{REQUEST_URI} !^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge) + RewriteRule ^/(.*)$ unix:///run/mastodon/live_immae_puma.sock|http://mastodon.immae.eu/$1 [P,NE,QSA,L] + ProxyPassReverse / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ + + Alias /system ${mcfg.dataDir} + + + Require all granted + Options -MultiViews + + + + Require all granted + Options -MultiViews +FollowSymlinks + + + ErrorDocument 500 /500.html + ErrorDocument 501 /500.html + ErrorDocument 502 /500.html + ErrorDocument 503 /500.html + ErrorDocument 504 /500.html + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "mastodon website is running on mastodon.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "mastodon.immae.eu" "/" "Mastodon"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Mastodon"; + _webstatus_url = "https://mastodon.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/mgoblin/default.nix b/systems/eldiron/websites/mgoblin/default.nix new file mode 100644 index 0000000..f276c62 --- /dev/null +++ b/systems/eldiron/websites/mgoblin/default.nix @@ -0,0 +1,173 @@ +{ lib, pkgs, config, mediagoblin, ... }: +let + env = config.myEnv.tools.mediagoblin; + cfg = config.myServices.websites.tools.mediagoblin; + mcfg = config.services.mediagoblin; +in { + options.myServices.websites.tools.mediagoblin = { + enable = lib.mkEnableOption "enable mediagoblin's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.mgoblin = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.mediagoblin = { + file.datetime = "2022-08-21T20:00:00"; + service = { + name = "Mediagoblin"; + description = "MediaGoblin is a free software media publishing platform that anyone can run"; + website = "https://mgoblin.immae.eu/"; + logo = "https://mgoblin.immae.eu/mgoblin_static/images/goblin.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Mediagoblin"; + website = "https://mediagoblin.org/"; + license.url = "http://www.gnu.org/licenses/agpl.html"; + license.name = "GNU Affero General Public License"; + version = mcfg.package.version; + source.url = "https://git.savannah.gnu.org/git/mediagoblin.git"; + modules = map (a: a.pluginName) mcfg.package.plugins; + }; + }; + secrets.keys."webapps/tools-mediagoblin" = { + user = "mediagoblin"; + group = "mediagoblin"; + permissions = "0400"; + text = + let + psql_url = with env.postgresql; "postgresql://${user}:${password}@:${port}/${database}?host=${socket}"; + redis_url = with env.redis; "redis+socket://${socket}?virtual_host=${db}"; + in + '' + [DEFAULT] + data_basedir = "${mcfg.dataDir}" + + [mediagoblin] + direct_remote_path = /mgoblin_static/ + email_sender_address = "mediagoblin@tools.immae.eu" + + #sql_engine = sqlite:///%(data_basedir)s/mediagoblin.db + sql_engine = ${psql_url} + + email_debug_mode = false + allow_registration = false + allow_reporting = true + + theme = airymodified + + user_privilege_scheme = "uploader,commenter,reporter" + + # We need to redefine them here since we override data_basedir + # cf /usr/share/webapps/mediagoblin/mediagoblin/config_spec.ini + workbench_path = %(data_basedir)s/media/workbench + crypto_path = %(data_basedir)s/crypto + theme_install_dir = %(data_basedir)s/themes/ + theme_linked_assets_dir = %(data_basedir)s/theme_static/ + plugin_linked_assets_dir = %(data_basedir)s/plugin_static/ + + [storage:queuestore] + base_dir = %(data_basedir)s/media/queue + + [storage:publicstore] + base_dir = %(data_basedir)s/media/public + base_url = /mgoblin_media/ + + [celery] + CELERY_RESULT_DBURI = ${redis_url} + BROKER_URL = ${redis_url} + CELERYD_CONCURRENCY = 1 + + [plugins] + [[mediagoblin.plugins.geolocation]] + [[mediagoblin.plugins.ldap]] + [[[immae.eu]]] + LDAP_SERVER_URI = 'ldaps://${env.ldap.host}:636' + LDAP_SEARCH_BASE = '${env.ldap.base}' + LDAP_BIND_DN = '${env.ldap.dn}' + LDAP_BIND_PW = '${env.ldap.password}' + LDAP_SEARCH_FILTER = '${env.ldap.filter}' + EMAIL_SEARCH_FIELD = 'mail' + [[mediagoblin.plugins.basicsearch]] + [[mediagoblin.plugins.piwigo]] + [[mediagoblin.plugins.processing_info]] + [[mediagoblin.media_types.image]] + [[mediagoblin.media_types.video]] + ''; + }; + + users.users.mediagoblin.extraGroups = [ "keys" ]; + + services.mediagoblin = { + enable = true; + package = mediagoblin.withPlugins (p: [p.basicsearch]); + configFile = config.secrets.fullPaths."webapps/tools-mediagoblin"; + }; + services.filesWatcher.mediagoblin-web = { + restart = true; + paths = [ mcfg.configFile ]; + }; + services.filesWatcher.mediagoblin-celeryd = { + restart = true; + paths = [ mcfg.configFile ]; + }; + + services.websites.env.tools.modules = [ + "proxy" "proxy_http" + ]; + users.users.wwwrun.extraGroups = [ "mediagoblin" ]; + security.acme.certs.eldiron.extraDomainNames = [ "mgoblin.immae.eu" ]; + services.websites.env.tools.vhostConfs.mgoblin = { + certName = "eldiron"; + hosts = ["mgoblin.immae.eu" ]; + root = null; + extraConfig = [ '' + Alias /mgoblin_media ${mcfg.dataDir}/media/public + + Options -Indexes +FollowSymLinks +MultiViews +Includes + Require all granted + + + Alias /theme_static ${mcfg.dataDir}/theme_static + + Options -Indexes +FollowSymLinks +MultiViews +Includes + Require all granted + + + Alias /plugin_static ${mcfg.dataDir}/plugin_static + + Options -Indexes +FollowSymLinks +MultiViews +Includes + Require all granted + + + ProxyPreserveHost on + ProxyVia On + ProxyRequests Off + ProxyPass /mgoblin_media ! + ProxyPass /theme_static ! + ProxyPass /plugin_static ! + ProxyPassMatch ^/.well-known/acme-challenge ! + ProxyPass / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/ + ProxyPassReverse / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/ + '' ]; + }; + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "mediagoblin website is running on mgoblin.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "mgoblin.immae.eu" "/" "GNU MediaGoblin"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Mediagoblin"; + _webstatus_url = "https://mgoblin.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/moomin.txt b/systems/eldiron/websites/moomin.txt new file mode 100644 index 0000000..036fb1c --- /dev/null +++ b/systems/eldiron/websites/moomin.txt @@ -0,0 +1,16 @@ +⠀⠀⠀⠀⠀⠀⠀⢠⢦⡀⠀⡰⣩⠃ +⠀⠀⠀⠀⠀⠀⠀⠘⣄⠙⠍⠁⠙⠦⡀ +⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⡠⠄⠔⠊⠉⠒⠒⠒⢄ +⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠆ +⠀⠀⢠⢤⠜⡆⠀⢸⠀⠰⣄⠀⠀⠀⠀⠀⠀⠀⣠⠎ +⠀⠀⠱⠤⡁⠈⠑⠇⠀⠀⠀⠉⠒⠤⠤⠄⢖⠊⠀⡐⠧⣄⣀ +⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡉⠀⣀⣨⡷ +⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢱⠜⠁ +⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣸⠱⡀ +⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⣣ +⠀⠀⠀⠀⠀⠀⠀⠑⣄⠀⠀⠀⠀⠀⠀⠀⢀⣠⣀⠴⠊⠁ +⠰⢍⢒⢄⠀⠀⠀⠀⢸⢳⢆⠀⠀⠀⠰⡖⠋⠁ +⠀⠳⠴⣙⢄⠀⢀⡠⣣⠃⠈⠑⢤⡄⠀⡸⠂ +⠀⠀⠀⠀⠑⠋⠓⠊⠁⠀⠀⠀⠓⠒⠉ +Credentials: https://twitter.com/thingskatedid/status/1278274012754309120 +Credentials: https://gist.github.com/katef/09581d7c84eddf784508fa430f6ef47a diff --git a/systems/eldiron/websites/nossl/index.html b/systems/eldiron/websites/nossl/index.html new file mode 100644 index 0000000..4401a80 --- /dev/null +++ b/systems/eldiron/websites/nossl/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> + <head> + <title>No SSL site + + +

No SSL on this site

+

Use for wifi networks with login page that doesn't work well with + https.

+ + diff --git a/systems/eldiron/websites/peertube/default.nix b/systems/eldiron/websites/peertube/default.nix new file mode 100644 index 0000000..0ebe4e7 --- /dev/null +++ b/systems/eldiron/websites/peertube/default.nix @@ -0,0 +1,147 @@ +{ lib, pkgs, config, ... }: +let + env = config.myEnv.tools.peertube; + cfg = config.myServices.websites.tools.peertube; + pcfg = config.immaeServices.peertube; +in { + options.myServices.websites.tools.peertube = { + enable = lib.mkEnableOption "enable Peertube's website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.peertube = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.hostings.peertube = { + file.datetime = "2022-08-21T20:00:00"; + hosting = { + name = "Peertube"; + description = "Free software to take back control of your videos"; + website = "https://peertube.immae.eu/"; + logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + myServices.chatonsProperties.services.peertube = { + file.datetime = "2022-08-21T20:00:00"; + service = { + name = "Peertube"; + description = "Free software to take back control of your videos"; + website = "https://peertube.immae.eu/"; + logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Peertube"; + website = "https://joinpeertube.org/"; + license.url = "https://github.com/Chocobozzz/PeerTube/blob/develop/LICENSE"; + license.name = "GNU Affero General Public License"; + version = pcfg.package.version; + source.url = "https://github.com/Chocobozzz/PeerTube"; + }; + }; + immaeServices.peertube = { + enable = true; + configFile = config.secrets.fullPaths."webapps/tools-peertube"; + }; + users.users.peertube.extraGroups = [ "keys" ]; + + secrets.keys."webapps/tools-peertube" = { + user = "peertube"; + group = "peertube"; + permissions = "0640"; + text = '' + listen: + hostname: 'localhost' + port: ${toString config.myEnv.ports.peertube} + webserver: + https: true + hostname: 'peertube.immae.eu' + port: 443 + database: + hostname: '${env.postgresql.socket}' + port: 5432 + suffix: '_prod' + username: '${env.postgresql.user}' + password: '${env.postgresql.password}' + pool: + max: 5 + redis: + socket: '${env.redis.socket}' + auth: null + db: ${env.redis.db} + smtp: + transport: sendmail + sendmail: '/run/wrappers/bin/sendmail' + from_address: 'peertube@tools.immae.eu' + storage: + tmp: '${pcfg.dataDir}/storage/tmp/' + avatars: '${pcfg.dataDir}/storage/avatars/' + videos: '${pcfg.dataDir}/storage/videos/' + streaming_playlists: '${pcfg.dataDir}/storage/streaming-playlists/' + redundancy: '${pcfg.dataDir}/storage/videos/' + logs: '${pcfg.dataDir}/storage/logs/' + previews: '${pcfg.dataDir}/storage/previews/' + thumbnails: '${pcfg.dataDir}/storage/thumbnails/' + torrents: '${pcfg.dataDir}/storage/torrents/' + captions: '${pcfg.dataDir}/storage/captions/' + cache: '${pcfg.dataDir}/storage/cache/' + plugins: '${pcfg.dataDir}/storage/plugins/' + client_overrides: '${pcfg.dataDir}/storage/client-overrides/' + ''; + }; + + services.websites.env.tools.modules = [ + "headers" "proxy" "proxy_http" "proxy_wstunnel" + ]; + services.filesWatcher.peertube = { + restart = true; + paths = [ pcfg.configFile ]; + }; + + security.acme.certs.eldiron.extraDomainNames = [ "peertube.immae.eu" ]; + services.websites.env.tools.vhostConfs.peertube = { + certName = "eldiron"; + hosts = [ "peertube.immae.eu" ]; + root = null; + extraConfig = [ '' + RewriteEngine On + + RewriteCond %{REQUEST_URI} ^/socket.io [NC] + RewriteCond %{QUERY_STRING} transport=websocket [NC] + RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L] + + RewriteCond %{REQUEST_URI} ^/tracker/socket [NC] + RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L] + + ProxyPass / http://localhost:${toString env.listenPort}/ + ProxyPassReverse / http://localhost:${toString env.listenPort}/ + + ProxyPreserveHost On + RequestHeader set X-Real-IP %{REMOTE_ADDR}s + '' ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = [ "http" ]; + myServices.monitoring.fromMasterObjects.service = [ + { + service_description = "peertube website is running on peertube.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "peertube.immae.eu" "/" "Immae’s PeerTube"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Peertube"; + _webstatus_url = "https://peertube.immae.eu/"; + } + ]; + }; +} diff --git a/systems/eldiron/websites/performance/default.nix b/systems/eldiron/websites/performance/default.nix new file mode 100644 index 0000000..23f754a --- /dev/null +++ b/systems/eldiron/websites/performance/default.nix @@ -0,0 +1,93 @@ +{ pkgs, lib, config, ... }: +let + env = config.myEnv.tools.status_engine; + package = pkgs.status-engine-interface.override({ config_file = config.secrets.fullPaths."status_engine_ui"; }); + apacheRoot = "${package}/public"; + cfg = config.myServices.websites.tools.performance; +in +{ + options.myServices.websites.tools.performance = { + enable = lib.mkEnableOption "Enable performance website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.performance = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + secrets.keys = { + status_engine_ui = { + permissions = "0400"; + user = "wwwrun"; + group = "wwwrun"; + text = '' + allow_anonymous: 0 + anonymous_can_submit_commands: 0 + urls_without_login: + - login + - loginstate + auth_type: ldap + ldap_server: ${env.ldap.host} + ldap_use_ssl: 1 + ldap_port: 636 + ldap_bind_dn: ${env.ldap.dn} + ldap_bind_password: ${env.ldap.password} + ldap_base_dn: ${env.ldap.base} + ldap_filter: "${env.ldap.filter}" + ldap_attribute: + - memberOf + use_crate: 0 + use_mysql: 1 + mysql: + host: 127.0.0.1 + port: ${builtins.toString env.mysql.port} + username: ${env.mysql.user} + password: ${env.mysql.password} + database: ${env.mysql.database} + display_perfdata: 1 + perfdata_backend: mysql + ''; + }; + }; + + services.websites.env.tools.modules = [ "proxy_fcgi" ]; + + security.acme.certs.eldiron.extraDomainNames = [ "performance.immae.eu" ]; + services.websites.env.tools.vhostConfs.performance = { + certName = "eldiron"; + hosts = [ "performance.immae.eu" ]; + root = apacheRoot; + extraConfig = [ + '' + <Directory ${apacheRoot}> + DirectoryIndex index.html + AllowOverride None + Require all granted + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${config.services.phpfpm.pools.status_engine.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + ]; + }; + + services.phpfpm.pools.status_engine = { + user = "wwwrun"; + group = "wwwrun"; + settings = { + "listen.owner" = "wwwrun"; + "listen.group" = "wwwrun"; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "10"; + + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:StatusEngine:'"; + "php_admin_value[open_basedir]" = "${package}:/tmp:${config.secrets.fullPaths."status_engine_ui"}"; + }; + phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + + }; +} diff --git a/systems/eldiron/websites/stats/default.nix b/systems/eldiron/websites/stats/default.nix new file mode 100644 index 0000000..665010b --- /dev/null +++ b/systems/eldiron/websites/stats/default.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.myServices.websites.tools.stats; + myCfg = config.myEnv.tools.umami; +in +{ + options.myServices.websites.tools.stats.enable = lib.mkEnableOption "Enable stats site"; + config = lib.mkIf cfg.enable { + secrets.keys = { + "uami/env" = { + permission = "0400"; + text = '' + PORT=${toString myCfg.listenPort} + HOSTNAME=127.0.0.1 + DATABASE_URL=postgresql://${myCfg.postgresql.user}:${myCfg.postgresql.password}@localhost:${myCfg.postgresql.port}/${myCfg.postgresql.database}?sslmode=disable&host=${myCfg.postgresql.socket} + HASH_SALT=${myCfg.hashSalt} + ''; + }; + }; + + security.acme.certs.eldiron.extraDomainNames = [ "stats.immae.eu" ]; + services.websites.env.tools.vhostConfs.stats = { + certName = "eldiron"; + hosts = [ "stats.immae.eu" ]; + root = null; + extraConfig = [ + '' + ProxyPass / http://localhost:${toString myCfg.listenPort}/ + ProxyPassReverse / http://localhost:${toString myCfg.listenPort}/ + ProxyPreserveHost On + '' + ]; + }; + systemd.services.umami = { + description = "Umami service"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + wants = [ "postgresql.service" ]; + path = [ pkgs.nodejs pkgs.bashInteractive ]; + serviceConfig = { + Type = "simple"; + User = "umami"; + Group = "umami"; + DynamicUser = true; + SupplementaryGroups = [ "keys" ]; + ExecStart = "${pkgs.umami}/bin/umami"; + EnvironmentFile = config.secrets.fullPaths."umami/env"; + }; + }; + }; +} diff --git a/systems/eldiron/websites/tools/adminer.nix b/systems/eldiron/websites/tools/adminer.nix new file mode 100644 index 0000000..5e865b1 --- /dev/null +++ b/systems/eldiron/websites/tools/adminer.nix @@ -0,0 +1,83 @@ +{ config, webapps-adminer, php82, lib, forcePhpSocket ? null }: +rec { + webRoot = webapps-adminer; + phpFpm = rec { + user = apache.user; + group = apache.group; + phpPackage = let + #mysqli_pam = php81.extensions.mysqli.overrideAttrs(old: { + # configureFlags = [ "--with-mysqli=${libmysqlclient_pam.dev}/bin/mysql_config" "--with-mysql-sock=/run/mysqld/mysqld.sock" ]; + #}); + in + php82.withExtensions ({ enabled, all }: [all.mysqli all.redis all.pgsql]); + settings = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "5"; + "pm.process_idle_timeout" = "60"; + #"php_admin_flag[log_errors]" = "on"; + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "AdminerPHPSESSID"; + "php_admin_value[open_basedir]" = "${webRoot}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Adminer:'"; + }; + }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /adminer ${webRoot} + <Directory ${webRoot}> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${if forcePhpSocket != null then forcePhpSocket else socket}|fcgi://localhost" + </FilesMatch> + + Use LDAPConnect + Require ldap-group cn=users,cn=mysql,cn=pam,ou=services,dc=immae,dc=eu + Require ldap-group cn=users,cn=postgresql,cn=pam,ou=services,dc=immae,dc=eu + </Directory> + ''; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "adminer website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https_auth" "tools.immae.eu" "/adminer/" "www.adminerevo.org"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Adminer"; + _webstatus_url = "https://tools.immae.eu/adminer/"; + } + ]; + + chatonsProperties = { + published = false; + file.datetime = "2023-08-21T15:20:00"; + service = { + name = "Adminer"; + description = "Database management in a single PHP file"; + website = "https://tools.immae.eu/adminer/"; + logo = "https://tools.immae.eu/adminer/?file=favicon.ico"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Adminer"; + website = "https://docs.adminerevo.org/"; + license.url = "https://github.com/adminerevo/adminerevo/blob/main/readme.md"; + license.name = "Apache License 2.0 or GPL 2"; + version = webRoot.version; + source.url = "https://github.com/adminerevo/adminerevo/"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/default.nix b/systems/eldiron/websites/tools/default.nix new file mode 100644 index 0000000..4d9e3c1 --- /dev/null +++ b/systems/eldiron/websites/tools/default.nix @@ -0,0 +1,547 @@ +{ lib, pkgs, config, mypackages-lib, grocy, ... }: +let + composerEnv = mypackages-lib.composerEnv; + adminer = pkgs.callPackage ./adminer.nix { inherit config; }; + ympd = pkgs.callPackage ./ympd.nix { + env = config.myEnv.tools.ympd; + inherit config; + }; + ttrss = pkgs.callPackage ./ttrss.nix { + ttrss = pkgs.webapps-ttrss; + ttrss-plugins = pkgs.webapps-ttrss-plugins; + env = config.myEnv.tools.ttrss; + php = pkgs.php72; + inherit config; + }; + kanboard = pkgs.callPackage ./kanboard.nix { + inherit config; + env = config.myEnv.tools.kanboard; + }; + wallabag = pkgs.callPackage ./wallabag.nix { + wallabag = pkgs.webapps-wallabag.override { + composerEnv = composerEnv.override { + php = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]); + }; + }; + env = config.myEnv.tools.wallabag; + inherit config; + }; + yourls = pkgs.callPackage ./yourls.nix { + yourls = pkgs.webapps-yourls; + yourls-plugins = pkgs.webapps-yourls-plugins; + env = config.myEnv.tools.yourls; + inherit config; + }; + rompr = pkgs.callPackage ./rompr.nix { + rompr = pkgs.webapps-rompr; + env = config.myEnv.tools.rompr; + inherit config; + }; + shaarli = pkgs.callPackage ./shaarli.nix { + env = config.myEnv.tools.shaarli; + inherit config; + }; + dokuwiki = pkgs.callPackage ./dokuwiki.nix { + dokuwiki = pkgs.webapps-dokuwiki; + dokuwiki-plugins = pkgs.webapps-dokuwiki-plugins; + inherit config; + }; + ldap = pkgs.callPackage ./ldap.nix { + phpldapadmin = pkgs.webapps-phpldapadmin; + env = config.myEnv.tools.phpldapadmin; + inherit config; + }; + grocy' = pkgs.callPackage ./grocy.nix { + grocy = grocy.override { composerEnv = composerEnv.override { php = pkgs.php72; }; }; + }; + phpbb = pkgs.callPackage ./phpbb.nix { + phpbb = (pkgs.webapps-phpbb.withLangs (l: [ l.fr ])).withExts (e: [ + e.alfredoramos.markdown e.davidiq.mailinglist e.dmzx.mchat + e.empteintesduweb.monitoranswers e.lr94.autosubscribe + e.phpbbmodders.adduser ]); + }; + webhooks-bin-env = pkgs.buildEnv { + name = "webhook-env"; + paths = [ pkgs.apprise ]; + pathsToLink = [ "/bin" ]; + }; + webhooks = pkgs.callPackage ./webhooks.nix { + env = config.myEnv.tools.webhooks; + binEnv = webhooks-bin-env; + }; + dmarc-reports = pkgs.callPackage ./dmarc_reports.nix { + env = config.myEnv.tools.dmarc_reports; + inherit config; + }; + + landing = pkgs.callPackage ./landing.nix { }; + + cfg = config.myServices.websites.tools.tools; + pcfg = config.services.phpfpm.pools; +in { + options.myServices.websites.tools.tools = { + enable = lib.mkEnableOption "enable tools website"; + }; + + config = lib.mkIf cfg.enable { + # Services needing to send e-mails + myServices.dns.zones."immae.eu".emailPolicies."tools".receive = true; + myServices.dns.zones."immae.eu".subdomains = + with config.myServices.dns.helpers; + { + outils = ips servers.eldiron.ips.main; + tools = lib.mkMerge [ + (mailCommon "immae.eu") + mailSend + (ips servers.eldiron.ips.main) + ]; + }; + + myServices.chatonsProperties.services = { + adminer = adminer.chatonsProperties; + dokuwiki = dokuwiki.chatonsProperties; + shaarli = shaarli.chatonsProperties; + ttrss = ttrss.chatonsProperties; + wallabag = wallabag.chatonsProperties; + paste = { + file.datetime = "2022-08-22T00:15:00"; + service = { + name = "Paste"; + description = "A simple paster script with syntax highlight"; + website = "https://tools.immae.eu/paste/"; + logo = "https://assets.immae.eu/logo.jpg"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + guide.user = "https://tools.immae.eu/paste/"; + }; + software = { + name = "Paste"; + website = "https://tools.immae.eu/paste/"; + license.url = "https://tools.immae.eu/paste/license"; + license.name = "MIT License"; + version = "Unversioned"; + source.url = "https://tools.immae.eu/paste/abcd123/py"; + }; + }; + }; + myServices.chatonsProperties.hostings = { + dokuwiki = dokuwiki.chatonsHostingProperties; + phpbb = phpbb.chatonsHostingProperties; + }; + secrets.keys = + kanboard.keys + // ldap.keys + // shaarli.keys + // ttrss.keys + // wallabag.keys + // yourls.keys + // dmarc-reports.keys + // webhooks.keys + // ({ "webapps/tools-landing-sql-rw" = { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = let + env = config.myEnv.tools.landing; + in '' + SetEnv PGUSER "${env.postgresql.user}" + SetEnv PGPASSWORD "${env.postgresql.password}" + SetEnv PGDATABASE "${env.postgresql.database}" + SetEnv PGHOST "${env.postgresql.socket}" + ''; + }; }); + services.websites.env.tools.modules = + [ "proxy_fcgi" ] + ++ adminer.apache.modules + ++ ympd.apache.modules + ++ ttrss.apache.modules + ++ wallabag.apache.modules + ++ yourls.apache.modules + ++ rompr.apache.modules + ++ shaarli.apache.modules + ++ dokuwiki.apache.modules + ++ dmarc-reports.apache.modules + ++ phpbb.apache.modules + ++ ldap.apache.modules + ++ kanboard.apache.modules; + + myServices.dns.zones."immae.dev" = with config.myServices.dns.helpers; { + subdomains.tools = ips servers.eldiron.ips.integration; + }; + security.acme.certs.integration.domain = "tools.immae.dev"; + services.websites.env.integration.vhostConfs.devtools = { + certName = "integration"; + hosts = [ "tools.immae.dev" ]; + root = "/var/lib/ftp/immae/devtools"; + extraConfig = [ + '' + Use Apaxy "/var/lib/ftp/immae/devtools" "title" + Timeout 600 + ProxyTimeout 600 + Header always set Content-Security-Policy-Report-Only "${config.myEnv.tools.csp_reports.policies.inline}" + <Directory "/var/lib/ftp/immae/devtools"> + DirectoryIndex index.php index.htm index.html + AllowOverride all + Require all granted + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${pcfg.devtools.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + ]; + }; + + + security.acme.certs.eldiron.extraDomainNames = [ "outils.immae.eu" "tools.immae.eu" ]; + services.websites.env.tools.vhostConfs.tools = { + certName = "eldiron"; + hosts = ["tools.immae.eu" ]; + root = landing; + extraConfig = [ + '' + RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1 + RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1 + RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse + + <Directory "${landing}"> + Include ${config.secrets.fullPaths."webapps/tools-landing-sql-rw"} + DirectoryIndex index.html + AllowOverride None + Require all granted + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + (adminer.apache.vhostConf pcfg.adminer.socket) + ympd.apache.vhostConf + (ttrss.apache.vhostConf pcfg.ttrss.socket) + (wallabag.apache.vhostConf pcfg.wallabag.socket) + (yourls.apache.vhostConf pcfg.yourls.socket) + (rompr.apache.vhostConf pcfg.rompr.socket) + (shaarli.apache.vhostConf pcfg.shaarli.socket) + (dokuwiki.apache.vhostConf pcfg.dokuwiki.socket) + (ldap.apache.vhostConf pcfg.ldap.socket) + (kanboard.apache.vhostConf pcfg.kanboard.socket) + (grocy'.apache.vhostConf pcfg.grocy.socket) + (phpbb.apache.vhostConf pcfg.phpbb.socket) + (dmarc-reports.apache.vhostConf pcfg.dmarc-reports.socket) + '' + <Location "/paste/"> + ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ + ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ + ProxyPreserveHost on + </Location> + <Location "/paste"> + ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ + ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ + ProxyPreserveHost on + </Location> + + <Location "/ntfy/"> + SetEnv proxy-nokeepalive 1 + SetEnv proxy-sendchunked 1 + LimitRequestBody 102400 + + RewriteEngine On + + # FIXME: why is landing prefixed in the url? + RewriteCond %{HTTP:Upgrade} websocket [NC] + RewriteCond %{HTTP:Connection} upgrade [NC] + RewriteRule ^(${landing}/ntfy)?/?(.*) unix:///run/ntfy/ntfy.sock|ws://tools.immae.eu/$2 [P,NE,QSA,L] + + RewriteRule ^(${landing}/ntfy)?/?(.*) unix:///run/ntfy/ntfy.sock|http://tools.immae.eu/$2 [P,NE,QSA,L] + </Location> + Alias /BIP39 /var/lib/buildbot/outputs/immae/bip39 + <Directory "/var/lib/buildbot/outputs/immae/bip39"> + DirectoryIndex index.html + AllowOverride None + Require all granted + </Directory> + + Alias /webhooks ${config.secrets.fullPaths."webapps/webhooks"} + <Directory "${config.secrets.fullPaths."webapps/webhooks"}"> + Options -Indexes + DirectoryIndex index.php + Require all granted + AllowOverride None + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost" + </FilesMatch> + </Directory> + '' + ]; + }; + + services.websites.env.tools.vhostConfs.outils = { + certName = "eldiron"; + hosts = [ "outils.immae.eu" ]; + root = null; + extraConfig = [ + '' + RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1 + + RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1 + + RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1 + RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1 + + RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1 + RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1 + RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1 + RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1 + + RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1 + + RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1 + + RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse + + RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1 + + RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1 + '' + ]; + }; + + systemd.services = { + phpfpm-dokuwiki = { + after = lib.mkAfter dokuwiki.phpFpm.serviceDeps; + wants = dokuwiki.phpFpm.serviceDeps; + }; + phpfpm-phpbb = { + after = lib.mkAfter phpbb.phpFpm.serviceDeps; + wants = phpbb.phpFpm.serviceDeps; + }; + phpfpm-kanboard = { + after = lib.mkAfter kanboard.phpFpm.serviceDeps; + wants = kanboard.phpFpm.serviceDeps; + }; + phpfpm-ldap = { + after = lib.mkAfter ldap.phpFpm.serviceDeps; + wants = ldap.phpFpm.serviceDeps; + }; + phpfpm-shaarli = { + after = lib.mkAfter shaarli.phpFpm.serviceDeps; + wants = shaarli.phpFpm.serviceDeps; + }; + phpfpm-ttrss = { + after = lib.mkAfter ttrss.phpFpm.serviceDeps; + wants = ttrss.phpFpm.serviceDeps; + }; + phpfpm-wallabag = { + after = lib.mkAfter wallabag.phpFpm.serviceDeps; + wants = wallabag.phpFpm.serviceDeps; + preStart = lib.mkAfter wallabag.phpFpm.preStart; + }; + phpfpm-yourls = { + after = lib.mkAfter yourls.phpFpm.serviceDeps; + wants = yourls.phpFpm.serviceDeps; + }; + ntfy = { + description = "send push notifications to your phone or desktop via scripts from any computer"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.ntfy-sh}/bin/ntfy serve --listen-http '' --listen-unix %t/ntfy/ntfy.sock --cache-file %S/ntfy/cache.db --cache-duration 120h --behind-proxy --attachment-cache-dir %S/ntfy/attachments --base-url https://tools.immae.eu/ntfy"; + Type = "simple"; + WorkingDirectory = "%S/ntfy"; + RuntimeDirectory = "ntfy"; + StateDirectory = "ntfy"; + User = "wwwrun"; + }; + }; + ympd = { + description = "Standalone MPD Web GUI written in C"; + wantedBy = [ "multi-user.target" ]; + script = '' + export MPD_PASSWORD=$(cat ${config.secrets.fullPaths."mpd"}) + ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody + ''; + }; + tt-rss = { + description = "Tiny Tiny RSS feeds update daemon"; + serviceConfig = { + User = "wwwrun"; + ExecStart = "${pkgs.php72}/bin/php ${ttrss.webRoot}/update.php --daemon"; + StandardOutput = "syslog"; + StandardError = "syslog"; + PermissionsStartOnly = true; + }; + + wantedBy = [ "multi-user.target" ]; + requires = ["postgresql.service"]; + after = ["network.target" "postgresql.service"]; + }; + }; + + services.filesWatcher.ympd = { + restart = true; + paths = [ config.secrets.fullPaths."mpd" ]; + }; + + services.phpfpm.pools = { + tools = { + user = "wwwrun"; + group = "wwwrun"; + settings = { + "listen.owner" = "wwwrun"; + "listen.group" = "wwwrun"; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "10"; + + "php_admin_value[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Tools:'"; + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "ToolsPHPSESSID"; + "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" [ + "/run/wrappers/bin/sendmail" landing "/tmp" + config.secrets.fullPaths."webapps/webhooks" + "${webhooks-bin-env}/bin" + ]; + }; + phpEnv = { + CONTACT_EMAIL = config.myEnv.tools.contact; + }; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]); + }; + devtools = { + user = "wwwrun"; + group = "wwwrun"; + settings = { + "listen.owner" = "wwwrun"; + "listen.group" = "wwwrun"; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "10"; + + "php_admin_value[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Devtools:'"; + "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:/var/lib/ftp/immae/devtools:/tmp"; + }; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.mysqli all.sqlite3 all.redis all.apcu all.opcache ]); + }; + adminer = adminer.phpFpm; + ttrss = { + user = "wwwrun"; + group = "wwwrun"; + settings = ttrss.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + wallabag = { + user = "wwwrun"; + group = "wwwrun"; + settings = wallabag.phpFpm.pool; + phpPackage = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy all.redis]); + }; + yourls = { + user = "wwwrun"; + group = "wwwrun"; + settings = yourls.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + rompr = { + user = "wwwrun"; + group = "wwwrun"; + settings = rompr.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + shaarli = { + user = "wwwrun"; + group = "wwwrun"; + settings = shaarli.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + dmarc-reports = { + user = "wwwrun"; + group = "wwwrun"; + settings = dmarc-reports.phpFpm.pool; + phpEnv = dmarc-reports.phpFpm.phpEnv; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + dokuwiki = { + user = "wwwrun"; + group = "wwwrun"; + settings = dokuwiki.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + phpbb = { + user = "wwwrun"; + group = "wwwrun"; + settings = phpbb.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + ldap = { + user = "wwwrun"; + group = "wwwrun"; + settings = ldap.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + kanboard = { + user = "wwwrun"; + group = "wwwrun"; + settings = kanboard.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + grocy = { + user = "wwwrun"; + group = "wwwrun"; + settings = grocy'.phpFpm.pool; + phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]); + }; + }; + + system.activationScripts = { + grocy = grocy'.activationScript; + ttrss = ttrss.activationScript; + wallabag = wallabag.activationScript; + rompr = rompr.activationScript; + shaarli = shaarli.activationScript; + dokuwiki = dokuwiki.activationScript; + phpbb = phpbb.activationScript; + kanboard = kanboard.activationScript; + }; + + services.websites.env.tools.watchPaths = [ + config.secrets.fullPaths."webapps/tools-shaarli" + ]; + services.filesWatcher.phpfpm-wallabag = { + restart = true; + paths = [ config.secrets.fullPaths."webapps/tools-wallabag" ]; + }; + + myServices.monitoring.fromMasterActivatedPlugins = lib.mkMerge [ + ttrss.monitoringPlugins + rompr.monitoringPlugins + wallabag.monitoringPlugins + yourls.monitoringPlugins + ympd.monitoringPlugins + dokuwiki.monitoringPlugins + shaarli.monitoringPlugins + ldap.monitoringPlugins + adminer.monitoringPlugins + ]; + myServices.monitoring.fromMasterObjects = lib.mkMerge [ + ttrss.monitoringObjects + rompr.monitoringObjects + wallabag.monitoringObjects + yourls.monitoringObjects + ympd.monitoringObjects + dokuwiki.monitoringObjects + shaarli.monitoringObjects + ldap.monitoringObjects + adminer.monitoringObjects + ]; + }; +} + diff --git a/systems/eldiron/websites/tools/dmarc_reports.nix b/systems/eldiron/websites/tools/dmarc_reports.nix new file mode 100644 index 0000000..8b3aa99 --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports.nix @@ -0,0 +1,61 @@ +{ env, config }: +rec { + keys."webapps/tools-dmarc-reports.php" = { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + <?php + $dbhost = "${env.mysql.host}"; + $dbname = "${env.mysql.database}"; + $dbuser = "${env.mysql.user}"; + $dbpass = "${env.mysql.password}"; + $dbport = "${builtins.toString env.mysql.port}"; + $anonymous_key = "${env.anonymous_key}"; + ?> + ''; + }; + webRoot = ./dmarc_reports; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /dmarc-reports "${root}" + <Directory "${root}"> + DirectoryIndex index.html + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride None + Options +FollowSymlinks + + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + Use LDAPConnect + Require all granted + Require ldap-attribute uid=immae + </Directory> + ''; + }; + phpFpm = rec { + basedir = builtins.concatStringsSep ":" + [ webRoot config.secrets.fullPaths."webapps/tools-dmarc-reports.php" ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:DmarcReports:'"; + # Needed to avoid clashes in browser cookies (same domain) + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + }; + phpEnv = { + SECRETS_FILE = config.secrets.fullPaths."webapps/tools-dmarc-reports.php"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/dmarc_reports/api.php b/systems/eldiron/websites/tools/dmarc_reports/api.php new file mode 100644 index 0000000..850f9ce --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/api.php @@ -0,0 +1,122 @@ +<?php + +require(getenv("SECRETS_FILE")); + +$response = array( + "status" => "ok", +); +$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname, $dbport); + +function error_die($text, $number) { + http_response_code("500"); + $message = array( + "status" => "error", + "message" => $text, + "code" => $number + ); + + die(json_encode($message)); +} + +$anonymous = isset($_GET['anonymous']) && $_GET['anonymous']; +function maybe_anonymize($string, $long = false) { + global $anonymous_key; + global $anonymous; + if ($anonymous) { + if ($long) { + return md5($anonymous_key . ":" . $string); + } else { + return substr(md5($anonymous_key . ":" . $string), 0, 6); + } + } else { + return $string; + } +} + +if (!$anonymous && (!isset($_SERVER['HTTP_AUTHORIZATION']) || $_SERVER['HTTP_AUTHORIZATION'] === "")) { + header('WWW-Authenticate: Basic realm="Immae"'); + header('HTTP/1.0 401 Unauthorized'); + echo "You need to be authenticated to access private information"; + exit; +} + +if ($mysqli->connect_errno) { + error_die($mysqli->connect_error, $mysqli->connect_errno); +} + +if (!isset($_GET['serial'])) { + $response["domains"] = array(); + $query = $mysqli->query("SELECT DISTINCT domain FROM `report` ORDER BY domain"); + if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } + while($row = $query->fetch_assoc()) { + $response["domains"][] = maybe_anonymize($row['domain']); + } + + $response["orgs"] = array(); + $query = $mysqli->query("SELECT DISTINCT org FROM `report` ORDER BY org"); + if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } + while($row = $query->fetch_assoc()) { + $response["orgs"][] = maybe_anonymize($row['org']); + } + + $response["dates"] = array(); + $query = $mysqli->query("SELECT DISTINCT DISTINCT year(mindate) as year, month(mindate) as month FROM `report` ORDER BY year DESC,month DESC"); + if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } + while($row = $query->fetch_assoc()) { + $response["dates"][] = sprintf( "%'.04d-%'.02d", $row['year'], $row['month'] ); + } + + $response["summaries"] = array(); + if (isset($_GET['errors_only'])) { + $where = " WHERE (spfresult != 'pass' or dkimresult != 'pass')"; + } else { + $where = ""; + } + + $sql = "SELECT report.* , sum(rptrecord.rcount) AS rcount, MIN(rptrecord.dkimresult) AS dkimresult, MIN(rptrecord.spfresult) AS spfresult FROM report LEFT JOIN (SELECT rcount, COALESCE(dkimresult, 'neutral') AS dkimresult, COALESCE(spfresult, 'neutral') AS spfresult, serial FROM rptrecord) AS rptrecord ON report.serial = rptrecord.serial$where GROUP BY serial ORDER BY mindate ASC, maxdate ASC, org"; + $query = $mysqli->query($sql); + if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } + while($row = $query->fetch_assoc()) { + $wanted_keys = array( + 'domain', 'org', 'reportid', 'mindate', 'maxdate', 'rcount', 'serial', 'policy_adkim', 'policy_aspf', 'policy_none', 'policy_sp', 'policy_pct', 'spfresult', 'dkimresult' + ); + $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1')); + $row["domain"] = maybe_anonymize($row["domain"]); + $row["org"] = maybe_anonymize($row["org"]); + $row["reportid"] = maybe_anonymize($row["reportid"], true); + $response["summaries"][] = $row; + } +} else { + $response["rptrecord"] = []; + $sql = $mysqli->prepare("SELECT * FROM rptrecord where serial = ?"); + $sql->bind_param("s", $_GET["serial"]); + $sql->execute(); + $query = $sql->get_result(); + if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } + while($row = $query->fetch_assoc()) { + if ($row['ip']) { + $ip = long2ip($row['ip']); + $host = gethostbyaddr($ip); + } elseif ( $row['ip6'] ) { + $ip = inet_ntop($row['ip6']); + $host = gethostbyaddr($ip); + } else { + $ip = "-"; + $host = "-"; + } + $wanted_keys = array( + 'ip', 'host', 'rcount', 'disposition', 'reason', 'dkimdomain', 'dkimresult', 'spfdomain', 'spfresult' + ); + $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1')); + $row['ip'] = maybe_anonymize($ip); + $row['host'] = maybe_anonymize($host); + $row['dkimdomain'] = maybe_anonymize($row['dkimdomain']); + $row['spfdomain'] = maybe_anonymize($row['spfdomain']); + $response["rptrecord"][] = $row; + } +} + +header("Content-Type: application/json"); + +echo json_encode($response, JSON_PRETTY_PRINT); +?> diff --git a/systems/eldiron/websites/tools/dmarc_reports/app.js b/systems/eldiron/websites/tools/dmarc_reports/app.js new file mode 100644 index 0000000..8e8a6c4 --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/app.js @@ -0,0 +1,103 @@ +const app = new Vue({ + el: '#app', + data: { + info: null, + summaries: null, + selectedSummary: null, + filterGreen: true, + filterDomain: null, + filterOrg: null, + //filterDate: (new Date()).toISOString().substring(0, 7), + filterDate: null, + reverse: true, + anonymous: true, + }, + created: async function () { + let that = this; + + if ('anonymous' in localStorage) { + this.anonymous = JSON.parse(localStorage.anonymous); + } + this.fetchAll(); + }, + methods: { + fetchAll: async function() { + try { + this.info = await this.getInfo(); + this.summaries = this.info.summaries; + } catch (error) { + this.info = null; + this.summaries = null; + } + }, + toggleAnonymous: function() { + this.anonymous = !this.anonymous; + localStorage.anonymous = this.anonymous; + this.fetchAll(); + }, + filtered: function () { + let that = this; + let filtered = this.summaries.filter(function (summary) { + return (!that.filterGreen || that.getColor(summary) !== "lime") + && (!that.filterDomain || summary.domain === that.filterDomain) + && (!that.filterOrg || summary.org === that.filterOrg) + && (!that.filterDate || that.inDates(summary)); + }); + if (this.reverse) { + return filtered.reverse(); + } else { + return filtered; + } + }, + toggle: async function(summary) { + if (this.selectedSummary && this.selectedSummary.serial === summary.serial) { + this.selectedSummary = null; + } else { + if (!summary.details) { + summary.details = await this.getDetails(summary.serial); + } + this.selectedSummary = summary; + } + }, + inDates: function(summary) { + if (!this.filterDate) { return true; } + + let mindate = (new Date(summary.mindate)).toISOString().substring(0, 7); + let maxdate = (new Date(summary.maxdate)).toISOString().substring(0, 7); + + return mindate === this.filterDate || maxdate === this.filterDate; + }, + printDate: function (date) { + return (new Date(date)).toISOString().replace("T", " ").replace(/\..*Z$/, " UTC"); + }, + getColor: function (element) { + if (element.dkimresult === "fail" && element.spfresult === "fail") { + return "red"; + } else if (element.dkimresult === "fail" || element.spfresult === "fail") { + return "orange"; + } else if (element.dkimresult === "pass" && element.spfresult === "pass") { + return "lime"; + } else { + return "yellow"; + } + }, + getInfo: function (event) { + let anonymous = this.anonymous ? "anonymous=1" : ""; + return fetch(`api.php?${anonymous}`).then(function (response) { + if (response.status != 200) { return; } + return response.text().then(function (body) { + return JSON.parse(body); + }); + }); + }, + getDetails: function (serial) { + let anonymous = this.anonymous ? "&anonymous=1" : ""; + return fetch(`api.php?serial=${serial}${anonymous}`).then(function (response) { + if (response.status != 200) { return; } + return response.text().then(function (body) { + return JSON.parse(body); + }); + }); + } + } +}); diff --git a/systems/eldiron/websites/tools/dmarc_reports/default.css b/systems/eldiron/websites/tools/dmarc_reports/default.css new file mode 100644 index 0000000..9e0c63f --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/default.css @@ -0,0 +1,130 @@ +h1 { + text-align: center; +} + +p.warninginfo { + text-align: center; +} + +table.reportlist { + margin: 2em auto 2em auto; + border-collapse: collapse; + clear: both; +} + +table.reportlist td, table.reportlist th { + padding:3px; +} + +table.reportlist thead { + border-top: 1px solid grey; + border-bottom: 1px solid grey; + +} +table.reportlist tbody tr:first-child td { + padding-top: 10px; +} +table.reportlist tr.sum { + border-top: 1px solid grey; +} +table.reportlist tr.selected { + background-color: lightgrey; +} +.reportdesc { + font-weight: bold; + width: 90%; + margin-left: auto; + margin-right: auto; +} + +tr.summaryrow { + cursor: pointer; +} + +tr.summaryrow:hover, tr.summaryrow.selected { + background-color: lightgray; + border-left: 1px solid lightgray; +} + +td.reportcell { + border-bottom: 1px solid lightgray; + border-left: 1px solid lightgray; + border-right: 1px solid lightgray; +} + +table.reportdata { + margin: 0px auto 0px auto; + border-collapse: separate; + border-spacing: 2px; +} + +table.reportdata tr th, table.reportdata tr td { + text-align: center; + padding: 3px; +} + +table.reportdata tr.red { + background-color: #FF0000; +} + +table.reportdata tr.orange { + background-color: #FFA500; +} + +table.reportdata tr.lime { + background-color: #00FF00; +} + +table.reportdata tr.yellow { + background-color: #FFFF00; +} + +.optionblock { + background: lightgrey; + padding: 0.4em; + float: right; + margin: auto 2em 1em auto; + white-space: nowrap; +} + +.optionlabel { + font-weight: bold; + float: left; clear: left; + margin-right: 1em; +} + +.options { + font-size: 70%; + text-align: right; + border: none; + width: 97%; + padding: 0.4em; +} + +.center { + text-align:center; +} + +.circle_lime:before { + content: ' \25CF'; + font-size: 25px; + color: #00FF00; +} + +.circle_red:before { + content: ' \25CF'; + font-size: 25px; + color: #FF0000; +} + +.circle_yellow:before { + content: ' \25CF'; + font-size: 25px; + color: #FFFF00; +} + +.circle_orange:before { + content: ' \25CF'; + font-size: 25px; + color: #FFA500; +} diff --git a/systems/eldiron/websites/tools/dmarc_reports/index.html b/systems/eldiron/websites/tools/dmarc_reports/index.html new file mode 100644 index 0000000..0afc82f --- /dev/null +++ b/systems/eldiron/websites/tools/dmarc_reports/index.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="robots" content="noindex"> + <title>Dmarc reports + + + + +
+
+
+ Anonymize + + +
+ +
+ +

DMARC Reports

+

+ No information could be fetched. If in non-anonymous mode you need to be logged-in +

+ + + + + + + + + + + + + + + +
Start DateEnd DateDomainReporting OrganizationReport IDMessages
+
+ + + + + + diff --git a/systems/eldiron/websites/tools/dokuwiki.nix b/systems/eldiron/websites/tools/dokuwiki.nix new file mode 100644 index 0000000..813c426 --- /dev/null +++ b/systems/eldiron/websites/tools/dokuwiki.nix @@ -0,0 +1,106 @@ +{ lib, stdenv, dokuwiki, dokuwiki-plugins, config }: +rec { + varDir = "/var/lib/dokuwiki"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + if [ ! -d ${varDir} ]; then + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/animals + cp -a ${webRoot}/conf.dist ${varDir}/conf + cp -a ${webRoot}/data.dist ${varDir}/data + cp -a ${webRoot}/ + chown -R ${apache.user}:${apache.user} ${varDir}/config ${varDir}/data + chmod -R 755 ${varDir}/config ${varDir}/data + fi + ''; + }; + chatonsHostingProperties = { + file.datetime = "2022-08-21T22:50:00"; + hosting = { + name = "Dokuwiki"; + description = "DokuWiki is a simple to use and highly versatile Open Source wiki software"; + website = "https://tools.immae.eu/dokuwiki/"; + logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "Dokuwiki"; + description = "DokuWiki is a simple to use and highly versatile Open Source wiki software"; + website = "https://tools.immae.eu/dokuwiki/"; + logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Dokuwiki"; + website = "https://www.dokuwiki.org/dokuwiki"; + license.url = "http://www.gnu.org/licenses/gpl-2.0.html"; + license.name = "GNU General Public License Version 2"; + version = webRoot.version; + source.url = "https://download.dokuwiki.org/"; + modules = map (a: a.pluginName) webRoot.plugins; + }; + }; + webRoot = dokuwiki.withPlugins (p: [ p.farmer p.todo ]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /dokuwiki "${root}" + + DirectoryIndex index.php + + SetHandler "proxy:unix:${socket}|fcgi://localhost" + + + AllowOverride All + Options +FollowSymlinks + Require all granted + + ''; + }; + phpFpm = rec { + serviceDeps = [ "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot varDir ] ++ webRoot.plugins); + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "DokuwikiPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Dokuwiki:'"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "dokuwiki website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/dokuwiki/" "start"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Dokuwiki"; + _webstatus_url = "https://tools.immae.eu/dokuwiki/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/grocy.nix b/systems/eldiron/websites/tools/grocy.nix new file mode 100644 index 0000000..96e18a3 --- /dev/null +++ b/systems/eldiron/websites/tools/grocy.nix @@ -0,0 +1,48 @@ +{ lib, stdenv, grocy }: +rec { + varDir = "/var/lib/grocy"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data + ''; + }; + webRoot = grocy.webRoot; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /grocy "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + Options +FollowSymlinks + Require all granted + </Directory> + ''; + }; + phpFpm = rec { + basedir = builtins.concatStringsSep ":" ( + [ grocy grocy.yarnModules varDir ]); + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "grocyPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Grocy:'"; + }; + }; +} + diff --git a/systems/eldiron/websites/tools/kanboard.nix b/systems/eldiron/websites/tools/kanboard.nix new file mode 100644 index 0000000..db39ecd --- /dev/null +++ b/systems/eldiron/websites/tools/kanboard.nix @@ -0,0 +1,81 @@ +{ env, kanboard, config }: +rec { + varDir = "/var/lib/kanboard"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data + install -TDm644 ${webRoot}/dataold/.htaccess ${varDir}/data/.htaccess + install -TDm644 ${webRoot}/dataold/web.config ${varDir}/data/web.config + ''; + }; + keys."webapps/tools-kanboard" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + SetEnv MAIL_FROM "kanboard@tools.immae.eu" + + SetEnv DB_DRIVER "postgres" + SetEnv DB_USERNAME "${env.postgresql.user}" + SetEnv DB_PASSWORD "${env.postgresql.password}" + SetEnv DB_HOSTNAME "${env.postgresql.socket}" + SetEnv DB_NAME "${env.postgresql.database}" + + SetEnv DATA_DIR "${varDir}" + SetEnv LDAP_AUTH "true" + SetEnv LDAP_SERVER "${env.ldap.host}" + SetEnv LDAP_START_TLS "true" + + SetEnv LDAP_BIND_TYPE "proxy" + SetEnv LDAP_USERNAME "${env.ldap.dn}" + SetEnv LDAP_PASSWORD "${env.ldap.password}" + SetEnv LDAP_USER_BASE_DN "${env.ldap.base}" + SetEnv LDAP_USER_FILTER "${env.ldap.filter}" + SetEnv LDAP_GROUP_ADMIN_DN "${env.ldap.admin_dn}" + ''; + }; + webRoot = kanboard; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /kanboard "${root}" + <Location /kanboard> + Include ${config.secrets.fullPaths."webapps/tools-kanboard"} + </Location> + <Directory "${root}"> + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + <DirectoryMatch "${root}/data"> + Require all denied + </DirectoryMatch> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "KanboardPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Kanboard:'"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/landing.nix b/systems/eldiron/websites/tools/landing.nix new file mode 100644 index 0000000..f5d851e --- /dev/null +++ b/systems/eldiron/websites/tools/landing.nix @@ -0,0 +1,38 @@ +{ stdenv, yarn2nix-moretea, nodejs_16 }: +let + source = builtins.fetchGit { + url = "https://git.immae.eu/github/bastienwirtz/homer.git"; + ref = "gitolite_local/local_changes"; + rev = "bb60c5b869931f305f15c5bfa9cdb3f68702f01f"; + narHash = "sha256-xBIBUJhQ7KPY0d92pW9ErA9OvGafWcxyuGkbHShF4Bs="; + }; + yarnModules = yarn2nix-moretea.mkYarnModules rec { + nodejs = nodejs_16; + name = "landing"; + pname = name; + version = "v1.0.0"; + packageJSON = "${source}/package.json"; + yarnLock = "${source}/yarn.lock"; + yarnNix = ./landing/yarn-packages.nix; + }; +in + stdenv.mkDerivation rec { + pname = "landing"; + version = "v1.0.0"; + src = source; + + buildInputs = [ yarnModules yarn2nix-moretea.yarn ]; + configurePhase = '' + ln -s ${yarnModules}/node_modules . + ''; + buildPhase = '' + # See https://stackoverflow.com/questions/74548318/how-to-resolve-error-error0308010cdigital-envelope-routinesunsupported-no + export NODE_OPTIONS=--openssl-legacy-provider + yarn build + ''; + installPhase = '' + cp -a dist $out + cp ${./landing}/*.php $out/ + ln -s service-worker.js $out/worker.js + ''; + } diff --git a/systems/eldiron/websites/tools/landing/ldap_password.php b/systems/eldiron/websites/tools/landing/ldap_password.php new file mode 100644 index 0000000..efb4f57 --- /dev/null +++ b/systems/eldiron/websites/tools/landing/ldap_password.php @@ -0,0 +1,170 @@ +<?php + +/** + * LDAP PHP Change Password Webpage + * @author: Matt Rude <http://mattrude.com> + * @website: http://technology.mattrude.com/2010/11/ldap-php-change-password-webpage/ + * + * + * GNU GENERAL PUBLIC LICENSE + * Version 2, June 1991 + * + * Copyright (C) 1989, 1991 Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Everyone is permitted to copy and distribute verbatim copies + * of this license document, but changing it is not allowed. + */ + +$message = array(); +$message_css = ""; + +function changePasswordLDAP($con, $user_dn, $newPassword){ + global $message; + $salt = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',4)),0,4); + $encoded_newPassword = "{SSHA}" . base64_encode(pack("H*", sha1($newPassword.$salt)).$salt); + + $entry = array(); + $entry["userPassword"] = "$encoded_newPassword"; + + if (ldap_modify($con,$user_dn,$entry) === false){ + $error = ldap_error($con); + $errno = ldap_errno($con); + $message[] = "$errno - $error"; + return false; + } else { + return true; + } +} + +function changePasswordSQL($user_realm, $newPassword) { + global $message; + + foreach(["PGUSER", "PGPASSWORD", "PGDATABASE", "PGHOST"] as $k) { + if (isset($_SERVER[$k]) && !isset($_ENV[$k])) { + putenv("${k}=" . $_SERVER[$k]); + } + } + $con = pg_connect(""); + $result = pg_query_params($con, "WITH newsalt as (SELECT gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( $1 || (SELECT * FROM newsalt), 'sha1'), 'hex'), mechanism = 'SSHA', salt = (SELECT * FROM newsalt) where login || '@' || realm = $2", array($newPassword, $user_realm)); + if (!$result) { + $message[] = "Error when accessing database"; + return false; + } else { + return true; + } +} + +function changePassword($user,$oldPassword,$newPassword,$newPasswordCnf){ + global $message; + global $message_css; + + $server = "ldaps://ldap.immae.eu"; + + error_reporting(0); + $con = ldap_connect($server); + ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3); + + $user_dn = "uid=$user,ou=users,dc=immae,dc=eu"; + + if (ldap_bind($con, $user_dn, $oldPassword) === false) { + $user_dn = "uid=$user,ou=group_users,dc=immae,dc=eu"; + if (ldap_bind($con, $user_dn, $oldPassword) === false) { + $message[] = "Error E101 - Current Username or Password is wrong."; + return false; + } + } + if ($newPassword != $newPasswordCnf ) { + $message[] = "Error E102 - Your New passwords do not match!"; + return false; + } + if (strlen($newPassword) < 6 ) { + $message[] = "Error E103 - Your new password is too short.<br/>Your password must be at least 6 characters long."; + return false; + } + + $user_search = ldap_search($con,"dc=immae,dc=eu","(uid=$user)"); + $auth_entry = ldap_first_entry($con, $user_search); + + $mail_address = ldap_get_values($con, $auth_entry, "mail")[0]; + $first_name = ldap_get_values($con, $auth_entry, "givenName")[0]; + $existing_password = ldap_get_values($con, $auth_entry, "userPassword")[0]; + if (substr($existing_password, 0, 6) == "{SASL}") { + $result = changePasswordSQL(substr($existing_password, 6), $newPassword); + } else { + $result = changePasswordLDAP($con, $user_dn, $newPassword); + } + + if (!$result) { + $message[] = "E201 - Your password cannot be changed, please contact the administrator."; + } else { + $message_css = "yes"; + mail($mail_address,"Password change notice","Dear $first_name, +Your password on https://tools.immae.eu/ldap_password.php for account $user was just changed. +If you did not make this change, please contact me. +If you were the one who changed your password, you may disregard this message. + +Thanks +-- +Immae / Ismaël", "From: " . getenv("CONTACT_EMAIL")); + $message[] = "The password for $user has been changed.<br/>An informational email has been sent to $mail_address.<br/>Your new password is now fully active."; + } +} + +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<title>Password Change Page + + + + + + +
+
+

Password Change Page

+'; + changePassword($_POST['username'],$_POST['oldPassword'],$_POST['newPassword1'],$_POST['newPassword2']); + global $message_css; + if ($message_css == "yes") { + echo '
'; + } else { + echo '
'; + $message[] = "Your password was not changed."; + } + foreach ( $message as $one ) { echo "

$one

"; } + ?>
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+ + diff --git a/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php b/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php new file mode 100644 index 0000000..85ed973 --- /dev/null +++ b/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php @@ -0,0 +1,343 @@ + + + + ImmaeEu Account + + + + + + +
+

Gestion des clés SSH

+ $row["id"], + 'apps' => json_decode($row["usage"]), + 'public_key' => $row["key"], + 'comment' => $row["comment"], + ); + } + + pg_close($pg); + return $keys; +} + +function saveKeys($keys) +{ + if (!isset($_SESSION["login"])) { + return false; + } + $pg = connectPg(); + $existingIds = pg_fetch_all_columns(pg_query_params($pg, "SELECT id FROM ldap_users_ssh_keys WHERE realm = 'immae' AND login = $1", array($_SESSION["login"]))); + foreach ($keys as $key) { + if (isset($key["id"])) { + unset($existingIds[array_search($key["id"],$existingIds)]); + pg_query_params($pg, "UPDATE ldap_users_ssh_keys SET key = $2, usage = ARRAY(SELECT * FROM json_array_elements_text($3))::ldap_users_ssh_key_usage[], comment = $4 WHERE id = $5 AND login = $1 AND realm = 'immae'", array($_SESSION["login"], $key["public_key"], json_encode($key["apps"]), $key["comment"], $key["id"])); + } else { + pg_query_params($pg, "INSERT INTO ldap_users_ssh_keys (login,realm,key,usage,comment) values ($1,'immae',$2,ARRAY(SELECT * FROM json_array_elements_text($3))::ldap_users_ssh_key_usage[],$4)", array($_SESSION["login"], $key["public_key"], json_encode($key["apps"]), $key["comment"])); + } + } + foreach ($existingIds as $removedKeyId) { + pg_query_params($pg, "DELETE FROM ldap_users_ssh_keys WHERE login = $1 AND realm = 'immae' AND id = $2", array($_SESSION["login"], $removedKeyId)); + } +} + + +// Script +if (isset($_POST['deconnexion'])) { + $_SESSION = []; +} + +if (isset($_POST['sauvegarder'])) { + $editedKeys = []; + $errors = false; + $keysToSave = []; + foreach($_POST['keys'] as $id => $key) { + $editedKeys[$id] = $key; + if (!checkSshKey($key['public_key'])) { + $editedKeys[$id]['error'] = true; + $errors = true; + } + + if (!isset($key['apps'])) { + $editedKeys[$id]['apps'] = $key['apps'] = []; + + } + foreach ($key['apps'] as $app) { + if (!in_array($app, apps)) { + die("integrity"); + } + } + + if (!isset($editedKeys[$id]['error']) || $editedKeys[$id]['error'] !== true) { + $keysToSave[] = $key; + } + } + + if (!$errors) { + $successSave = saveKeys($keysToSave); + } +} + +$loginErrors = ""; +if (isset($_POST['login'])) { + if (empty($_POST['username']) || empty($_POST['password'])) { + $loginErrors = "Le nom d'utilisateur et le mot de passe sont requis."; + } elseif (!checkLogin($_POST['username'], $_POST['password'])) { + $loginErrors = "Identifiants incorrects."; + } else { + $_SESSION['login'] = $_POST['username']; + } +} + +if (isUserLogged()) : + $keys = isset($editedKeys) ? $editedKeys : getKeys(); +?> +

Connecté en tant que

+ +
+ +
+ + +

Clés enregistrées avec succès.

+ + +
+ + + $sshKey) : + ?> + + + + + + + + + + + + + + + + + + + +
Description
>">
+ + + +
+ + +
+ + +
+

Login

+ + +

+ + + + + + + + + +
+ +
+ + + + diff --git a/systems/eldiron/websites/tools/landing/myip.php b/systems/eldiron/websites/tools/landing/myip.php new file mode 100644 index 0000000..9ec1c6c --- /dev/null +++ b/systems/eldiron/websites/tools/landing/myip.php @@ -0,0 +1 @@ + diff --git a/systems/eldiron/websites/tools/landing/node-packages.nix b/systems/eldiron/websites/tools/landing/node-packages.nix new file mode 100644 index 0000000..9ebf254 --- /dev/null +++ b/systems/eldiron/websites/tools/landing/node-packages.nix @@ -0,0 +1,130 @@ +# This file has been generated by node2nix 1.8.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, src, globalBuildInputs ? []}: + +let + sources = { + "@fortawesome/fontawesome-free-5.13.1" = { + name = "_at_fortawesome_slash_fontawesome-free"; + packageName = "@fortawesome/fontawesome-free"; + version = "5.13.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz"; + sha512 = "D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw=="; + }; + }; + "argparse-1.0.10" = { + name = "argparse"; + packageName = "argparse"; + version = "1.0.10"; + src = fetchurl { + url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"; + sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="; + }; + }; + "bulma-0.8.2" = { + name = "bulma"; + packageName = "bulma"; + version = "0.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/bulma/-/bulma-0.8.2.tgz"; + sha512 = "vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA=="; + }; + }; + "core-js-3.6.5" = { + name = "core-js"; + packageName = "core-js"; + version = "3.6.5"; + src = fetchurl { + url = "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz"; + sha512 = "vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="; + }; + }; + "esprima-4.0.1" = { + name = "esprima"; + packageName = "esprima"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"; + sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="; + }; + }; + "js-yaml-3.14.0" = { + name = "js-yaml"; + packageName = "js-yaml"; + version = "3.14.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz"; + sha512 = "/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="; + }; + }; + "lodash.merge-4.6.2" = { + name = "lodash.merge"; + packageName = "lodash.merge"; + version = "4.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"; + sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="; + }; + }; + "register-service-worker-1.7.1" = { + name = "register-service-worker"; + packageName = "register-service-worker"; + version = "1.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.1.tgz"; + sha512 = "IdTfUZ4u8iJL8o1w8es8l6UMGPmkwHolUdT+UmM1UypC80IB4KbpuIlvwWVj8UDS7eJwkEYRcKRgfRX+oTmJsw=="; + }; + }; + "sprintf-js-1.0.3" = { + name = "sprintf-js"; + packageName = "sprintf-js"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + }; + "vue-2.6.11" = { + name = "vue"; + packageName = "vue"; + version = "2.6.11"; + src = fetchurl { + url = "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz"; + sha512 = "VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ=="; + }; + }; + }; + args = { + name = "homer"; + packageName = "homer"; + version = "20.06.1"; + inherit src; + dependencies = [ + sources."@fortawesome/fontawesome-free-5.13.1" + sources."argparse-1.0.10" + sources."bulma-0.8.2" + sources."core-js-3.6.5" + sources."esprima-4.0.1" + sources."js-yaml-3.14.0" + sources."lodash.merge-4.6.2" + sources."register-service-worker-1.7.1" + sources."sprintf-js-1.0.3" + sources."vue-2.6.11" + ]; + buildInputs = globalBuildInputs; + meta = { + license = "Apache-2.0"; + }; + production = true; + bypassCache = true; + reconstructLock = true; + }; +in +{ + args = args; + sources = sources; + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; +} diff --git a/systems/eldiron/websites/tools/landing/yarn-packages.nix b/systems/eldiron/websites/tools/landing/yarn-packages.nix new file mode 100644 index 0000000..9621c3e --- /dev/null +++ b/systems/eldiron/websites/tools/landing/yarn-packages.nix @@ -0,0 +1,9357 @@ +{ fetchurl, fetchgit, linkFarm, runCommandNoCC, gnutar }: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + { + name = "_babel_code_frame___code_frame_7.10.1.tgz"; + path = fetchurl { + name = "_babel_code_frame___code_frame_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz"; + sha1 = "d5481c5095daa1c57e16e54c6f9198443afb49ff"; + }; + } + { + name = "_babel_compat_data___compat_data_7.10.1.tgz"; + path = fetchurl { + name = "_babel_compat_data___compat_data_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz"; + sha1 = "b1085ffe72cd17bf2c0ee790fc09f9626011b2db"; + }; + } + { + name = "_babel_core___core_7.10.2.tgz"; + path = fetchurl { + name = "_babel_core___core_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz"; + sha1 = "bd6786046668a925ac2bd2fd95b579b92a23b36a"; + }; + } + { + name = "_babel_generator___generator_7.10.2.tgz"; + path = fetchurl { + name = "_babel_generator___generator_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz"; + sha1 = "0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9"; + }; + } + { + name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz"; + sha1 = "f6d08acc6f70bbd59b436262553fb2e259a1a268"; + }; + } + { + name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz"; + sha1 = "0ec7d9be8174934532661f87783eb18d72290059"; + }; + } + { + name = "_babel_helper_compilation_targets___helper_compilation_targets_7.10.2.tgz"; + path = fetchurl { + name = "_babel_helper_compilation_targets___helper_compilation_targets_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz"; + sha1 = "a17d9723b6e2c750299d2a14d4637c76936d8285"; + }; + } + { + name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.10.2.tgz"; + path = fetchurl { + name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz"; + sha1 = "7474295770f217dbcf288bf7572eb213db46ee67"; + }; + } + { + name = "_babel_helper_create_regexp_features_plugin___helper_create_regexp_features_plugin_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_create_regexp_features_plugin___helper_create_regexp_features_plugin_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz"; + sha1 = "1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd"; + }; + } + { + name = "_babel_helper_define_map___helper_define_map_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_define_map___helper_define_map_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz"; + sha1 = "5e69ee8308648470dd7900d159c044c10285221d"; + }; + } + { + name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz"; + sha1 = "e9d76305ee1162ca467357ae25df94f179af2b7e"; + }; + } + { + name = "_babel_helper_function_name___helper_function_name_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_function_name___helper_function_name_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz"; + sha1 = "92bd63829bfc9215aca9d9defa85f56b539454f4"; + }; + } + { + name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz"; + sha1 = "7303390a81ba7cb59613895a192b93850e373f7d"; + }; + } + { + name = "_babel_helper_hoist_variables___helper_hoist_variables_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_hoist_variables___helper_hoist_variables_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz"; + sha1 = "7e77c82e5dcae1ebf123174c385aaadbf787d077"; + }; + } + { + name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz"; + sha1 = "432967fd7e12a4afef66c4687d4ca22bc0456f15"; + }; + } + { + name = "_babel_helper_module_imports___helper_module_imports_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_module_imports___helper_module_imports_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz"; + sha1 = "dd331bd45bccc566ce77004e9d05fe17add13876"; + }; + } + { + name = "_babel_helper_module_transforms___helper_module_transforms_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_module_transforms___helper_module_transforms_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz"; + sha1 = "24e2f08ee6832c60b157bb0936c86bef7210c622"; + }; + } + { + name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz"; + sha1 = "b4a1f2561870ce1247ceddb02a3860fa96d72543"; + }; + } + { + name = "_babel_helper_plugin_utils___helper_plugin_utils_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_plugin_utils___helper_plugin_utils_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz"; + sha1 = "ec5a5cf0eec925b66c60580328b122c01230a127"; + }; + } + { + name = "_babel_helper_regex___helper_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_regex___helper_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz"; + sha1 = "021cf1a7ba99822f993222a001cc3fec83255b96"; + }; + } + { + name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz"; + sha1 = "bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432"; + }; + } + { + name = "_babel_helper_replace_supers___helper_replace_supers_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_replace_supers___helper_replace_supers_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz"; + sha1 = "ec6859d20c5d8087f6a2dc4e014db7228975f13d"; + }; + } + { + name = "_babel_helper_simple_access___helper_simple_access_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_simple_access___helper_simple_access_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz"; + sha1 = "08fb7e22ace9eb8326f7e3920a1c2052f13d851e"; + }; + } + { + name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz"; + sha1 = "c6f4be1cbc15e3a868e4c64a17d5d31d754da35f"; + }; + } + { + name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz"; + sha1 = "5770b0c1a826c4f53f5ede5e153163e0318e94b5"; + }; + } + { + name = "_babel_helper_wrap_function___helper_wrap_function_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helper_wrap_function___helper_wrap_function_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz"; + sha1 = "956d1310d6696257a7afd47e4c42dfda5dfcedc9"; + }; + } + { + name = "_babel_helpers___helpers_7.10.1.tgz"; + path = fetchurl { + name = "_babel_helpers___helpers_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz"; + sha1 = "a6827b7cb975c9d9cef5fd61d919f60d8844a973"; + }; + } + { + name = "_babel_highlight___highlight_7.10.1.tgz"; + path = fetchurl { + name = "_babel_highlight___highlight_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz"; + sha1 = "841d098ba613ba1a427a2b383d79e35552c38ae0"; + }; + } + { + name = "_babel_parser___parser_7.10.2.tgz"; + path = fetchurl { + name = "_babel_parser___parser_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz"; + sha1 = "871807f10442b92ff97e4783b9b54f6a0ca812d0"; + }; + } + { + name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz"; + sha1 = "6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55"; + }; + } + { + name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz"; + sha1 = "046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01"; + }; + } + { + name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz"; + sha1 = "9373c2d8db45345c6e30452ad77b469758e5c8f7"; + }; + } + { + name = "_babel_plugin_proposal_dynamic_import___plugin_proposal_dynamic_import_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_dynamic_import___plugin_proposal_dynamic_import_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz"; + sha1 = "e36979dc1dc3b73f6d6816fc4951da2363488ef0"; + }; + } + { + name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz"; + sha1 = "b1e691ee24c651b5a5e32213222b2379734aff09"; + }; + } + { + name = "_babel_plugin_proposal_nullish_coalescing_operator___plugin_proposal_nullish_coalescing_operator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_nullish_coalescing_operator___plugin_proposal_nullish_coalescing_operator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz"; + sha1 = "02dca21673842ff2fe763ac253777f235e9bbf78"; + }; + } + { + name = "_babel_plugin_proposal_numeric_separator___plugin_proposal_numeric_separator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_numeric_separator___plugin_proposal_numeric_separator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz"; + sha1 = "a9a38bc34f78bdfd981e791c27c6fdcec478c123"; + }; + } + { + name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz"; + sha1 = "cba44908ac9f142650b4a65b8aa06bf3478d5fb6"; + }; + } + { + name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz"; + sha1 = "c9f86d99305f9fa531b568ff5ab8c964b8b223d2"; + }; + } + { + name = "_babel_plugin_proposal_optional_chaining___plugin_proposal_optional_chaining_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_optional_chaining___plugin_proposal_optional_chaining_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz"; + sha1 = "15f5d6d22708629451a91be28f8facc55b0e818c"; + }; + } + { + name = "_babel_plugin_proposal_private_methods___plugin_proposal_private_methods_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_private_methods___plugin_proposal_private_methods_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz"; + sha1 = "ed85e8058ab0fe309c3f448e5e1b73ca89cdb598"; + }; + } + { + name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz"; + sha1 = "dc04feb25e2dd70c12b05d680190e138fa2c0c6f"; + }; + } + { + name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.8.4.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.8.4.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"; + sha1 = "a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"; + }; + } + { + name = "_babel_plugin_syntax_class_properties___plugin_syntax_class_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_class_properties___plugin_syntax_class_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz"; + sha1 = "d5bc0645913df5b17ad7eda0fa2308330bde34c5"; + }; + } + { + name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz"; + sha1 = "16b869c4beafc9a442565147bda7ce0967bd4f13"; + }; + } + { + name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz"; + sha1 = "62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"; + }; + } + { + name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"; + sha1 = "01ca21b668cd8218c9e640cb6dd88c5412b2c96a"; + }; + } + { + name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz"; + sha1 = "0ae371134a42b91d5418feb3c8c8d43e1565d2da"; + }; + } + { + name = "_babel_plugin_syntax_nullish_coalescing_operator___plugin_syntax_nullish_coalescing_operator_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_nullish_coalescing_operator___plugin_syntax_nullish_coalescing_operator_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"; + sha1 = "167ed70368886081f74b5c36c65a88c03b66d1a9"; + }; + } + { + name = "_babel_plugin_syntax_numeric_separator___plugin_syntax_numeric_separator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_numeric_separator___plugin_syntax_numeric_separator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz"; + sha1 = "25761ee7410bc8cf97327ba741ee94e4a61b7d99"; + }; + } + { + name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"; + sha1 = "60e225edcbd98a640332a2e72dd3e66f1af55871"; + }; + } + { + name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"; + sha1 = "6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"; + }; + } + { + name = "_babel_plugin_syntax_optional_chaining___plugin_syntax_optional_chaining_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_optional_chaining___plugin_syntax_optional_chaining_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"; + sha1 = "4f69c2ab95167e0180cd5336613f8c5788f7d48a"; + }; + } + { + name = "_babel_plugin_syntax_top_level_await___plugin_syntax_top_level_await_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_top_level_await___plugin_syntax_top_level_await_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz"; + sha1 = "8b8733f8c57397b3eaa47ddba8841586dcaef362"; + }; + } + { + name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz"; + sha1 = "cb5ee3a36f0863c06ead0b409b4cc43a889b295b"; + }; + } + { + name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz"; + sha1 = "e5153eb1a3e028f79194ed8a7a4bf55f862b2062"; + }; + } + { + name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz"; + sha1 = "146856e756d54b20fff14b819456b3e01820b85d"; + }; + } + { + name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz"; + sha1 = "47092d89ca345811451cd0dc5d91605982705d5e"; + }; + } + { + name = "_babel_plugin_transform_classes___plugin_transform_classes_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_classes___plugin_transform_classes_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz"; + sha1 = "6e11dd6c4dfae70f540480a4702477ed766d733f"; + }; + } + { + name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz"; + sha1 = "59aa399064429d64dce5cf76ef9b90b7245ebd07"; + }; + } + { + name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz"; + sha1 = "abd58e51337815ca3a22a336b85f62b998e71907"; + }; + } + { + name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz"; + sha1 = "920b9fec2d78bb57ebb64a644d5c2ba67cc104ee"; + }; + } + { + name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz"; + sha1 = "c900a793beb096bc9d4d0a9d0cde19518ffc83b9"; + }; + } + { + name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz"; + sha1 = "279c3116756a60dd6e6f5e488ba7957db9c59eb3"; + }; + } + { + name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz"; + sha1 = "ff01119784eb0ee32258e8646157ba2501fcfda5"; + }; + } + { + name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz"; + sha1 = "4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d"; + }; + } + { + name = "_babel_plugin_transform_literals___plugin_transform_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_literals___plugin_transform_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz"; + sha1 = "5794f8da82846b22e4e6631ea1658bce708eb46a"; + }; + } + { + name = "_babel_plugin_transform_member_expression_literals___plugin_transform_member_expression_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_member_expression_literals___plugin_transform_member_expression_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz"; + sha1 = "90347cba31bca6f394b3f7bd95d2bbfd9fce2f39"; + }; + } + { + name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz"; + sha1 = "65950e8e05797ebd2fe532b96e19fc5482a1d52a"; + }; + } + { + name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz"; + sha1 = "d5ff4b4413ed97ffded99961056e1fb980fb9301"; + }; + } + { + name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz"; + sha1 = "9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6"; + }; + } + { + name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz"; + sha1 = "ea080911ffc6eb21840a5197a39ede4ee67b1595"; + }; + } + { + name = "_babel_plugin_transform_named_capturing_groups_regex___plugin_transform_named_capturing_groups_regex_7.8.3.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_named_capturing_groups_regex___plugin_transform_named_capturing_groups_regex_7.8.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz"; + sha1 = "a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"; + }; + } + { + name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz"; + sha1 = "6ee41a5e648da7632e22b6fb54012e87f612f324"; + }; + } + { + name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz"; + sha1 = "2e3016b0adbf262983bf0d5121d676a5ed9c4fde"; + }; + } + { + name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz"; + sha1 = "b25938a3c5fae0354144a720b07b32766f683ddd"; + }; + } + { + name = "_babel_plugin_transform_property_literals___plugin_transform_property_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_property_literals___plugin_transform_property_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz"; + sha1 = "cffc7315219230ed81dc53e4625bf86815b6050d"; + }; + } + { + name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz"; + sha1 = "10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490"; + }; + } + { + name = "_babel_plugin_transform_reserved_words___plugin_transform_reserved_words_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_reserved_words___plugin_transform_reserved_words_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz"; + sha1 = "0fc1027312b4d1c3276a57890c8ae3bcc0b64a86"; + }; + } + { + name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz"; + sha1 = "fd1887f749637fb2ed86dc278e79eb41df37f4b1"; + }; + } + { + name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz"; + sha1 = "e8b54f238a1ccbae482c4dce946180ae7b3143f3"; + }; + } + { + name = "_babel_plugin_transform_spread___plugin_transform_spread_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_spread___plugin_transform_spread_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz"; + sha1 = "0c6d618a0c4461a274418460a28c9ccf5239a7c8"; + }; + } + { + name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz"; + sha1 = "90fc89b7526228bed9842cff3588270a7a393b00"; + }; + } + { + name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz"; + sha1 = "914c7b7f4752c570ea00553b4284dad8070e8628"; + }; + } + { + name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz"; + sha1 = "60c0239b69965d166b80a84de7315c1bc7e0bb0e"; + }; + } + { + name = "_babel_plugin_transform_unicode_escapes___plugin_transform_unicode_escapes_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_unicode_escapes___plugin_transform_unicode_escapes_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz"; + sha1 = "add0f8483dab60570d9e03cecef6c023aa8c9940"; + }; + } + { + name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.10.1.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz"; + sha1 = "6b58f2aea7b68df37ac5025d9c88752443a6b43f"; + }; + } + { + name = "_babel_preset_env___preset_env_7.10.2.tgz"; + path = fetchurl { + name = "_babel_preset_env___preset_env_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz"; + sha1 = "715930f2cf8573b0928005ee562bed52fb65fdfb"; + }; + } + { + name = "_babel_preset_modules___preset_modules_0.1.3.tgz"; + path = fetchurl { + name = "_babel_preset_modules___preset_modules_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz"; + sha1 = "13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"; + }; + } + { + name = "_babel_runtime___runtime_7.10.2.tgz"; + path = fetchurl { + name = "_babel_runtime___runtime_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz"; + sha1 = "d103f21f2602497d38348a32e008637d506db839"; + }; + } + { + name = "_babel_template___template_7.10.1.tgz"; + path = fetchurl { + name = "_babel_template___template_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz"; + sha1 = "e167154a94cb5f14b28dc58f5356d2162f539811"; + }; + } + { + name = "_babel_traverse___traverse_7.10.1.tgz"; + path = fetchurl { + name = "_babel_traverse___traverse_7.10.1.tgz"; + url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz"; + sha1 = "bbcef3031e4152a6c0b50147f4958df54ca0dd27"; + }; + } + { + name = "_babel_types___types_7.10.2.tgz"; + path = fetchurl { + name = "_babel_types___types_7.10.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz"; + sha1 = "30283be31cad0dbf6fb00bd40641ca0ea675172d"; + }; + } + { + name = "_fortawesome_fontawesome_free___fontawesome_free_5.13.0.tgz"; + path = fetchurl { + name = "_fortawesome_fontawesome_free___fontawesome_free_5.13.0.tgz"; + url = "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz"; + sha1 = "fcb113d1aca4b471b709e8c9c168674fbd6e06d9"; + }; + } + { + name = "_hapi_address___address_2.1.4.tgz"; + path = fetchurl { + name = "_hapi_address___address_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz"; + sha1 = "5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"; + }; + } + { + name = "_hapi_bourne___bourne_1.3.2.tgz"; + path = fetchurl { + name = "_hapi_bourne___bourne_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz"; + sha1 = "0a7095adea067243ce3283e1b56b8a8f453b242a"; + }; + } + { + name = "_hapi_hoek___hoek_8.5.1.tgz"; + path = fetchurl { + name = "_hapi_hoek___hoek_8.5.1.tgz"; + url = "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz"; + sha1 = "fde96064ca446dec8c55a8c2f130957b070c6e06"; + }; + } + { + name = "_hapi_joi___joi_15.1.1.tgz"; + path = fetchurl { + name = "_hapi_joi___joi_15.1.1.tgz"; + url = "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz"; + sha1 = "c675b8a71296f02833f8d6d243b34c57b8ce19d7"; + }; + } + { + name = "_hapi_topo___topo_3.1.6.tgz"; + path = fetchurl { + name = "_hapi_topo___topo_3.1.6.tgz"; + url = "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz"; + sha1 = "68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"; + }; + } + { + name = "_intervolga_optimize_cssnano_plugin___optimize_cssnano_plugin_1.0.6.tgz"; + path = fetchurl { + name = "_intervolga_optimize_cssnano_plugin___optimize_cssnano_plugin_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz"; + sha1 = "be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8"; + }; + } + { + name = "_mrmlnc_readdir_enhanced___readdir_enhanced_2.2.1.tgz"; + path = fetchurl { + name = "_mrmlnc_readdir_enhanced___readdir_enhanced_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz"; + sha1 = "524af240d1a360527b730475ecfa1344aa540dde"; + }; + } + { + name = "_nodelib_fs.stat___fs.stat_1.1.3.tgz"; + path = fetchurl { + name = "_nodelib_fs.stat___fs.stat_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"; + sha1 = "2b5a3ab3f918cca48a8c754c08168e3f03eba61b"; + }; + } + { + name = "_soda_friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.1.tgz"; + path = fetchurl { + name = "_soda_friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.1.tgz"; + url = "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz"; + sha1 = "706f64bcb4a8b9642b48ae3ace444c70334d615d"; + }; + } + { + name = "_soda_get_current_script___get_current_script_1.0.1.tgz"; + path = fetchurl { + name = "_soda_get_current_script___get_current_script_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.1.tgz"; + sha1 = "f4afffcb36e069a801d5339c90499601c47a2516"; + }; + } + { + name = "_types_color_name___color_name_1.1.1.tgz"; + path = fetchurl { + name = "_types_color_name___color_name_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz"; + sha1 = "1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"; + }; + } + { + name = "_types_glob___glob_7.1.2.tgz"; + path = fetchurl { + name = "_types_glob___glob_7.1.2.tgz"; + url = "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz"; + sha1 = "06ca26521353a545d94a0adc74f38a59d232c987"; + }; + } + { + name = "_types_json_schema___json_schema_7.0.4.tgz"; + path = fetchurl { + name = "_types_json_schema___json_schema_7.0.4.tgz"; + url = "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz"; + sha1 = "38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"; + }; + } + { + name = "_types_minimatch___minimatch_3.0.3.tgz"; + path = fetchurl { + name = "_types_minimatch___minimatch_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz"; + sha1 = "3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"; + }; + } + { + name = "_types_node___node_14.0.11.tgz"; + path = fetchurl { + name = "_types_node___node_14.0.11.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-14.0.11.tgz"; + sha1 = "61d4886e2424da73b7b25547f59fdcb534c165a3"; + }; + } + { + name = "_types_normalize_package_data___normalize_package_data_2.4.0.tgz"; + path = fetchurl { + name = "_types_normalize_package_data___normalize_package_data_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz"; + sha1 = "e486d0d97396d79beedd0a6e33f4534ff6b4973e"; + }; + } + { + name = "_types_q___q_1.5.4.tgz"; + path = fetchurl { + name = "_types_q___q_1.5.4.tgz"; + url = "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz"; + sha1 = "15925414e0ad2cd765bfef58842f7e26a7accb24"; + }; + } + { + name = "_vue_babel_helper_vue_jsx_merge_props___babel_helper_vue_jsx_merge_props_1.0.0.tgz"; + path = fetchurl { + name = "_vue_babel_helper_vue_jsx_merge_props___babel_helper_vue_jsx_merge_props_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz"; + sha1 = "048fe579958da408fb7a8b2a3ec050b50a661040"; + }; + } + { + name = "_vue_babel_plugin_transform_vue_jsx___babel_plugin_transform_vue_jsx_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_plugin_transform_vue_jsx___babel_plugin_transform_vue_jsx_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz"; + sha1 = "c0a3e6efc022e75e4247b448a8fc6b86f03e91c0"; + }; + } + { + name = "_vue_babel_preset_app___babel_preset_app_4.4.1.tgz"; + path = fetchurl { + name = "_vue_babel_preset_app___babel_preset_app_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.4.1.tgz"; + sha1 = "97c6796183cd0abf96a17297dc335c4c702fd8c4"; + }; + } + { + name = "_vue_babel_preset_jsx___babel_preset_jsx_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_preset_jsx___babel_preset_jsx_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz"; + sha1 = "2e169eb4c204ea37ca66c2ea85a880bfc99d4f20"; + }; + } + { + name = "_vue_babel_sugar_functional_vue___babel_sugar_functional_vue_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_functional_vue___babel_sugar_functional_vue_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz"; + sha1 = "f7e24fba09e6f1ee70104560a8808057555f1a9a"; + }; + } + { + name = "_vue_babel_sugar_inject_h___babel_sugar_inject_h_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_inject_h___babel_sugar_inject_h_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz"; + sha1 = "8a5276b6d8e2ed16ffc8078aad94236274e6edf0"; + }; + } + { + name = "_vue_babel_sugar_v_model___babel_sugar_v_model_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_v_model___babel_sugar_v_model_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz"; + sha1 = "1ff6fd1b800223fc9cb1e84dceb5e52d737a8192"; + }; + } + { + name = "_vue_babel_sugar_v_on___babel_sugar_v_on_1.1.2.tgz"; + path = fetchurl { + name = "_vue_babel_sugar_v_on___babel_sugar_v_on_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz"; + sha1 = "b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b"; + }; + } + { + name = "_vue_cli_overlay___cli_overlay_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_overlay___cli_overlay_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.4.1.tgz"; + sha1 = "f1f51f31f7a00d371e9a5b5a941525184475bf8b"; + }; + } + { + name = "_vue_cli_plugin_babel___cli_plugin_babel_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_babel___cli_plugin_babel_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.1.tgz"; + sha1 = "2c6e969fe51f1b4b211bea84afb7cad18240f70f"; + }; + } + { + name = "_vue_cli_plugin_eslint___cli_plugin_eslint_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_eslint___cli_plugin_eslint_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.1.tgz"; + sha1 = "e39d6517da6de231195d227f995f495e2958a74a"; + }; + } + { + name = "_vue_cli_plugin_pwa___cli_plugin_pwa_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_pwa___cli_plugin_pwa_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-4.4.1.tgz"; + sha1 = "e7bc010bc78cfaf74968c11fb332f3abc1ef298d"; + }; + } + { + name = "_vue_cli_plugin_router___cli_plugin_router_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_router___cli_plugin_router_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.4.1.tgz"; + sha1 = "07d09df0f4bea816e637da814f578b808f1f93b2"; + }; + } + { + name = "_vue_cli_plugin_vuex___cli_plugin_vuex_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_plugin_vuex___cli_plugin_vuex_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.1.tgz"; + sha1 = "98d18fc5d36fa6e0d1fc2ecaeea37aa965564f19"; + }; + } + { + name = "_vue_cli_service___cli_service_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_service___cli_service_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.4.1.tgz"; + sha1 = "b26a435d8c953bc7efaf7b784c9835c1415bcf1c"; + }; + } + { + name = "_vue_cli_shared_utils___cli_shared_utils_4.4.1.tgz"; + path = fetchurl { + name = "_vue_cli_shared_utils___cli_shared_utils_4.4.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.1.tgz"; + sha1 = "930304ade5a9f9bf0d2fd67d9305cad83d04aae1"; + }; + } + { + name = "_vue_component_compiler_utils___component_compiler_utils_3.1.2.tgz"; + path = fetchurl { + name = "_vue_component_compiler_utils___component_compiler_utils_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz"; + sha1 = "8213a5ff3202f9f2137fe55370f9e8b9656081c3"; + }; + } + { + name = "_vue_eslint_config_prettier___eslint_config_prettier_6.0.0.tgz"; + path = fetchurl { + name = "_vue_eslint_config_prettier___eslint_config_prettier_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz"; + sha1 = "ad5912b308f4ae468458e02a2b05db0b9d246700"; + }; + } + { + name = "_vue_preload_webpack_plugin___preload_webpack_plugin_1.1.1.tgz"; + path = fetchurl { + name = "_vue_preload_webpack_plugin___preload_webpack_plugin_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz"; + sha1 = "18723530d304f443021da2292d6ec9502826104a"; + }; + } + { + name = "_vue_web_component_wrapper___web_component_wrapper_1.2.0.tgz"; + path = fetchurl { + name = "_vue_web_component_wrapper___web_component_wrapper_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz"; + sha1 = "bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1"; + }; + } + { + name = "_webassemblyjs_ast___ast_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_ast___ast_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz"; + sha1 = "bd850604b4042459a5a41cd7d338cbed695ed964"; + }; + } + { + name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz"; + sha1 = "3c3d3b271bddfc84deb00f71344438311d52ffb4"; + }; + } + { + name = "_webassemblyjs_helper_api_error___helper_api_error_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_api_error___helper_api_error_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz"; + sha1 = "203f676e333b96c9da2eeab3ccef33c45928b6a2"; + }; + } + { + name = "_webassemblyjs_helper_buffer___helper_buffer_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_buffer___helper_buffer_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz"; + sha1 = "a1442d269c5feb23fcbc9ef759dac3547f29de00"; + }; + } + { + name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz"; + sha1 = "647f8892cd2043a82ac0c8c5e75c36f1d9159f27"; + }; + } + { + name = "_webassemblyjs_helper_fsm___helper_fsm_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_fsm___helper_fsm_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz"; + sha1 = "c05256b71244214671f4b08ec108ad63b70eddb8"; + }; + } + { + name = "_webassemblyjs_helper_module_context___helper_module_context_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_module_context___helper_module_context_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz"; + sha1 = "25d8884b76839871a08a6c6f806c3979ef712f07"; + }; + } + { + name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz"; + sha1 = "4fed8beac9b8c14f8c58b70d124d549dd1fe5790"; + }; + } + { + name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz"; + sha1 = "5a4138d5a6292ba18b04c5ae49717e4167965346"; + }; + } + { + name = "_webassemblyjs_ieee754___ieee754_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_ieee754___ieee754_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz"; + sha1 = "15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"; + }; + } + { + name = "_webassemblyjs_leb128___leb128_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_leb128___leb128_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz"; + sha1 = "f19ca0b76a6dc55623a09cffa769e838fa1e1c95"; + }; + } + { + name = "_webassemblyjs_utf8___utf8_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_utf8___utf8_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz"; + sha1 = "04d33b636f78e6a6813227e82402f7637b6229ab"; + }; + } + { + name = "_webassemblyjs_wasm_edit___wasm_edit_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_edit___wasm_edit_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz"; + sha1 = "3fe6d79d3f0f922183aa86002c42dd256cfee9cf"; + }; + } + { + name = "_webassemblyjs_wasm_gen___wasm_gen_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_gen___wasm_gen_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz"; + sha1 = "50bc70ec68ded8e2763b01a1418bf43491a7a49c"; + }; + } + { + name = "_webassemblyjs_wasm_opt___wasm_opt_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_opt___wasm_opt_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz"; + sha1 = "2211181e5b31326443cc8112eb9f0b9028721a61"; + }; + } + { + name = "_webassemblyjs_wasm_parser___wasm_parser_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_parser___wasm_parser_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz"; + sha1 = "9d48e44826df4a6598294aa6c87469d642fff65e"; + }; + } + { + name = "_webassemblyjs_wast_parser___wast_parser_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wast_parser___wast_parser_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz"; + sha1 = "3031115d79ac5bd261556cecc3fa90a3ef451914"; + }; + } + { + name = "_webassemblyjs_wast_printer___wast_printer_1.9.0.tgz"; + path = fetchurl { + name = "_webassemblyjs_wast_printer___wast_printer_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz"; + sha1 = "4935d54c85fef637b00ce9f52377451d00d47899"; + }; + } + { + name = "_xtuc_ieee754___ieee754_1.2.0.tgz"; + path = fetchurl { + name = "_xtuc_ieee754___ieee754_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"; + sha1 = "eef014a3145ae477a1cbc00cd1e552336dceb790"; + }; + } + { + name = "_xtuc_long___long_4.2.2.tgz"; + path = fetchurl { + name = "_xtuc_long___long_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz"; + sha1 = "d291c6a4e97989b5c61d9acf396ae4fe133a718d"; + }; + } + { + name = "accepts___accepts_1.3.7.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.7.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz"; + sha1 = "531bc726517a3b2b41f850021c6cc15eaab507cd"; + }; + } + { + name = "acorn_jsx___acorn_jsx_5.2.0.tgz"; + path = fetchurl { + name = "acorn_jsx___acorn_jsx_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz"; + sha1 = "4c66069173d6fdd68ed85239fc256226182b2ebe"; + }; + } + { + name = "acorn_walk___acorn_walk_7.1.1.tgz"; + path = fetchurl { + name = "acorn_walk___acorn_walk_7.1.1.tgz"; + url = "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz"; + sha1 = "345f0dffad5c735e7373d2fec9a1023e6a44b83e"; + }; + } + { + name = "acorn___acorn_6.4.1.tgz"; + path = fetchurl { + name = "acorn___acorn_6.4.1.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz"; + sha1 = "531e58ba3f51b9dacb9a6646ca4debf5b14ca474"; + }; + } + { + name = "acorn___acorn_7.2.0.tgz"; + path = fetchurl { + name = "acorn___acorn_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz"; + sha1 = "17ea7e40d7c8640ff54a694c889c26f31704effe"; + }; + } + { + name = "address___address_1.1.2.tgz"; + path = fetchurl { + name = "address___address_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz"; + sha1 = "bf1116c9c758c51b7a933d296b72c221ed9428b6"; + }; + } + { + name = "aggregate_error___aggregate_error_3.0.1.tgz"; + path = fetchurl { + name = "aggregate_error___aggregate_error_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz"; + sha1 = "db2fe7246e536f40d9b5442a39e117d7dd6a24e0"; + }; + } + { + name = "ajv_errors___ajv_errors_1.0.1.tgz"; + path = fetchurl { + name = "ajv_errors___ajv_errors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz"; + sha1 = "f35986aceb91afadec4102fbd85014950cefa64d"; + }; + } + { + name = "ajv_keywords___ajv_keywords_3.4.1.tgz"; + path = fetchurl { + name = "ajv_keywords___ajv_keywords_3.4.1.tgz"; + url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz"; + sha1 = "ef916e271c64ac12171fd8384eaae6b2345854da"; + }; + } + { + name = "ajv___ajv_6.12.2.tgz"; + path = fetchurl { + name = "ajv___ajv_6.12.2.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz"; + sha1 = "c629c5eced17baf314437918d2da88c99d5958cd"; + }; + } + { + name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; + path = fetchurl { + name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"; + sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3"; + }; + } + { + name = "ansi_colors___ansi_colors_3.2.4.tgz"; + path = fetchurl { + name = "ansi_colors___ansi_colors_3.2.4.tgz"; + url = "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz"; + sha1 = "e3a3da4bfbae6c86a9c285625de124a234026fbf"; + }; + } + { + name = "ansi_escapes___ansi_escapes_4.3.1.tgz"; + path = fetchurl { + name = "ansi_escapes___ansi_escapes_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz"; + sha1 = "a5c47cc43181f1f38ffd7076837700d395522a61"; + }; + } + { + name = "ansi_html___ansi_html_0.0.7.tgz"; + path = fetchurl { + name = "ansi_html___ansi_html_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"; + sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e"; + }; + } + { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + } + { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + } + { + name = "ansi_regex___ansi_regex_4.1.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz"; + sha1 = "8b9f8f08cf1acb843756a839ca8c7e3168c51997"; + }; + } + { + name = "ansi_regex___ansi_regex_5.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz"; + sha1 = "388539f55179bf39339c81af30a654d69f87cb75"; + }; + } + { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + } + { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d"; + }; + } + { + name = "ansi_styles___ansi_styles_4.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz"; + sha1 = "90ae75c424d008d2624c5bf29ead3177ebfcf359"; + }; + } + { + name = "any_promise___any_promise_1.3.0.tgz"; + path = fetchurl { + name = "any_promise___any_promise_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz"; + sha1 = "abc6afeedcea52e809cdc0376aed3ce39635d17f"; + }; + } + { + name = "anymatch___anymatch_2.0.0.tgz"; + path = fetchurl { + name = "anymatch___anymatch_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"; + sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"; + }; + } + { + name = "anymatch___anymatch_3.1.1.tgz"; + path = fetchurl { + name = "anymatch___anymatch_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz"; + sha1 = "c55ecf02185e2469259399310c173ce31233b142"; + }; + } + { + name = "aproba___aproba_1.2.0.tgz"; + path = fetchurl { + name = "aproba___aproba_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"; + sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a"; + }; + } + { + name = "arch___arch_2.1.2.tgz"; + path = fetchurl { + name = "arch___arch_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz"; + sha1 = "0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf"; + }; + } + { + name = "argparse___argparse_1.0.10.tgz"; + path = fetchurl { + name = "argparse___argparse_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"; + sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911"; + }; + } + { + name = "arr_diff___arr_diff_4.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"; + sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; + }; + } + { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + path = fetchurl { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"; + sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1"; + }; + } + { + name = "arr_union___arr_union_3.1.0.tgz"; + path = fetchurl { + name = "arr_union___arr_union_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"; + sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; + }; + } + { + name = "array_flatten___array_flatten_1.1.1.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + } + { + name = "array_flatten___array_flatten_2.1.2.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz"; + sha1 = "24ef80a28c1a893617e2149b0c6d0d788293b099"; + }; + } + { + name = "array_union___array_union_1.0.2.tgz"; + path = fetchurl { + name = "array_union___array_union_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"; + sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; + }; + } + { + name = "array_uniq___array_uniq_1.0.3.tgz"; + path = fetchurl { + name = "array_uniq___array_uniq_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + } + { + name = "array_unique___array_unique_0.3.2.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"; + sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; + }; + } + { + name = "asn1.js___asn1.js_4.10.1.tgz"; + path = fetchurl { + name = "asn1.js___asn1.js_4.10.1.tgz"; + url = "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz"; + sha1 = "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"; + }; + } + { + name = "asn1___asn1_0.2.4.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; + sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; + }; + } + { + name = "assert_plus___assert_plus_1.0.0.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + } + { + name = "assert___assert_1.5.0.tgz"; + path = fetchurl { + name = "assert___assert_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz"; + sha1 = "55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"; + }; + } + { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + path = fetchurl { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"; + sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; + }; + } + { + name = "astral_regex___astral_regex_1.0.0.tgz"; + path = fetchurl { + name = "astral_regex___astral_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz"; + sha1 = "6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"; + }; + } + { + name = "async_each___async_each_1.0.3.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"; + sha1 = "b727dbf87d7651602f06f4d4ac387f47d91b0cbf"; + }; + } + { + name = "async_limiter___async_limiter_1.0.1.tgz"; + path = fetchurl { + name = "async_limiter___async_limiter_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz"; + sha1 = "dd379e94f0db8310b08291f9d64c3209766617fd"; + }; + } + { + name = "async___async_2.6.3.tgz"; + path = fetchurl { + name = "async___async_2.6.3.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz"; + sha1 = "d72625e2344a3656e3a3ad4fa749fa83299d82ff"; + }; + } + { + name = "asynckit___asynckit_0.4.0.tgz"; + path = fetchurl { + name = "asynckit___asynckit_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + } + { + name = "atob___atob_2.1.2.tgz"; + path = fetchurl { + name = "atob___atob_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; + sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; + }; + } + { + name = "autoprefixer___autoprefixer_9.8.0.tgz"; + path = fetchurl { + name = "autoprefixer___autoprefixer_9.8.0.tgz"; + url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz"; + sha1 = "68e2d2bef7ba4c3a65436f662d0a56a741e56511"; + }; + } + { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + } + { + name = "aws4___aws4_1.10.0.tgz"; + path = fetchurl { + name = "aws4___aws4_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz"; + sha1 = "a17b3a8ea811060e74d47d306122400ad4497ae2"; + }; + } + { + name = "babel_eslint___babel_eslint_10.1.0.tgz"; + path = fetchurl { + name = "babel_eslint___babel_eslint_10.1.0.tgz"; + url = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz"; + sha1 = "6968e568a910b78fb3779cdd8b6ac2f479943232"; + }; + } + { + name = "babel_extract_comments___babel_extract_comments_1.0.0.tgz"; + path = fetchurl { + name = "babel_extract_comments___babel_extract_comments_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz"; + sha1 = "0a2aedf81417ed391b85e18b4614e693a0351a21"; + }; + } + { + name = "babel_loader___babel_loader_8.1.0.tgz"; + path = fetchurl { + name = "babel_loader___babel_loader_8.1.0.tgz"; + url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz"; + sha1 = "c611d5112bd5209abe8b9fa84c3e4da25275f1c3"; + }; + } + { + name = "babel_plugin_dynamic_import_node___babel_plugin_dynamic_import_node_2.3.3.tgz"; + path = fetchurl { + name = "babel_plugin_dynamic_import_node___babel_plugin_dynamic_import_node_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"; + sha1 = "84fda19c976ec5c6defef57f9427b3def66e17a3"; + }; + } + { + name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz"; + path = fetchurl { + name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz"; + sha1 = "fd6536f2bce13836ffa3a5458c4903a597bb3bf5"; + }; + } + { + name = "babel_plugin_transform_object_rest_spread___babel_plugin_transform_object_rest_spread_6.26.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_object_rest_spread___babel_plugin_transform_object_rest_spread_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz"; + sha1 = "0f36692d50fef6b7e2d4b3ac1478137a963b7b06"; + }; + } + { + name = "babel_runtime___babel_runtime_6.26.0.tgz"; + path = fetchurl { + name = "babel_runtime___babel_runtime_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"; + sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; + }; + } + { + name = "babylon___babylon_6.18.0.tgz"; + path = fetchurl { + name = "babylon___babylon_6.18.0.tgz"; + url = "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"; + sha1 = "af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"; + }; + } + { + name = "balanced_match___balanced_match_1.0.0.tgz"; + path = fetchurl { + name = "balanced_match___balanced_match_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + } + { + name = "base64_js___base64_js_1.3.1.tgz"; + path = fetchurl { + name = "base64_js___base64_js_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz"; + sha1 = "58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"; + }; + } + { + name = "base___base_0.11.2.tgz"; + path = fetchurl { + name = "base___base_0.11.2.tgz"; + url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"; + sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f"; + }; + } + { + name = "batch___batch_0.6.1.tgz"; + path = fetchurl { + name = "batch___batch_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"; + sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; + }; + } + { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + path = fetchurl { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + } + { + name = "bfj___bfj_6.1.2.tgz"; + path = fetchurl { + name = "bfj___bfj_6.1.2.tgz"; + url = "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz"; + sha1 = "325c861a822bcb358a41c78a33b8e6e2086dde7f"; + }; + } + { + name = "big.js___big.js_3.2.0.tgz"; + path = fetchurl { + name = "big.js___big.js_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz"; + sha1 = "a5fc298b81b9e0dca2e458824784b65c52ba588e"; + }; + } + { + name = "big.js___big.js_5.2.2.tgz"; + path = fetchurl { + name = "big.js___big.js_5.2.2.tgz"; + url = "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz"; + sha1 = "65f0af382f578bcdc742bd9c281e9cb2d7768328"; + }; + } + { + name = "binary_extensions___binary_extensions_1.13.1.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.13.1.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"; + sha1 = "598afe54755b2868a5330d2aff9d4ebb53209b65"; + }; + } + { + name = "binary_extensions___binary_extensions_2.0.0.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz"; + sha1 = "23c0df14f6a88077f5f986c0d167ec03c3d5537c"; + }; + } + { + name = "bindings___bindings_1.5.0.tgz"; + path = fetchurl { + name = "bindings___bindings_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"; + sha1 = "10353c9e945334bc0511a6d90b38fbc7c9c504df"; + }; + } + { + name = "bluebird___bluebird_3.7.2.tgz"; + path = fetchurl { + name = "bluebird___bluebird_3.7.2.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz"; + sha1 = "9f229c15be272454ffa973ace0dbee79a1b0c36f"; + }; + } + { + name = "bn.js___bn.js_4.11.9.tgz"; + path = fetchurl { + name = "bn.js___bn.js_4.11.9.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz"; + sha1 = "26d556829458f9d1e81fc48952493d0ba3507828"; + }; + } + { + name = "bn.js___bn.js_5.1.2.tgz"; + path = fetchurl { + name = "bn.js___bn.js_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz"; + sha1 = "c9686902d3c9a27729f43ab10f9d79c2004da7b0"; + }; + } + { + name = "body_parser___body_parser_1.19.0.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.19.0.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"; + sha1 = "96b2709e57c9c4e09a6fd66a8fd979844f69f08a"; + }; + } + { + name = "bonjour___bonjour_3.5.0.tgz"; + path = fetchurl { + name = "bonjour___bonjour_3.5.0.tgz"; + url = "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"; + sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"; + }; + } + { + name = "boolbase___boolbase_1.0.0.tgz"; + path = fetchurl { + name = "boolbase___boolbase_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"; + sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"; + }; + } + { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + path = fetchurl { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd"; + }; + } + { + name = "braces___braces_2.3.2.tgz"; + path = fetchurl { + name = "braces___braces_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"; + sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729"; + }; + } + { + name = "braces___braces_3.0.2.tgz"; + path = fetchurl { + name = "braces___braces_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"; + sha1 = "3454e1a462ee8d599e236df336cd9ea4f8afe107"; + }; + } + { + name = "brorand___brorand_1.1.0.tgz"; + path = fetchurl { + name = "brorand___brorand_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"; + sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; + }; + } + { + name = "browserify_aes___browserify_aes_1.2.0.tgz"; + path = fetchurl { + name = "browserify_aes___browserify_aes_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"; + sha1 = "326734642f403dabc3003209853bb70ad428ef48"; + }; + } + { + name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; + path = fetchurl { + name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"; + sha1 = "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"; + }; + } + { + name = "browserify_des___browserify_des_1.0.2.tgz"; + path = fetchurl { + name = "browserify_des___browserify_des_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"; + sha1 = "3af4f1f59839403572f1c66204375f7a7f703e9c"; + }; + } + { + name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; + path = fetchurl { + name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz"; + sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524"; + }; + } + { + name = "browserify_sign___browserify_sign_4.2.0.tgz"; + path = fetchurl { + name = "browserify_sign___browserify_sign_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz"; + sha1 = "545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"; + }; + } + { + name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; + path = fetchurl { + name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"; + sha1 = "2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"; + }; + } + { + name = "browserslist___browserslist_4.12.0.tgz"; + path = fetchurl { + name = "browserslist___browserslist_4.12.0.tgz"; + url = "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz"; + sha1 = "06c6d5715a1ede6c51fc39ff67fd647f740b656d"; + }; + } + { + name = "buffer_from___buffer_from_1.1.1.tgz"; + path = fetchurl { + name = "buffer_from___buffer_from_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz"; + sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef"; + }; + } + { + name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; + path = fetchurl { + name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"; + sha1 = "52fabcc6a606d1a00302802648ef68f639da268c"; + }; + } + { + name = "buffer_json___buffer_json_2.0.0.tgz"; + path = fetchurl { + name = "buffer_json___buffer_json_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz"; + sha1 = "f73e13b1e42f196fe2fd67d001c7d7107edd7c23"; + }; + } + { + name = "buffer_xor___buffer_xor_1.0.3.tgz"; + path = fetchurl { + name = "buffer_xor___buffer_xor_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"; + sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9"; + }; + } + { + name = "buffer___buffer_4.9.2.tgz"; + path = fetchurl { + name = "buffer___buffer_4.9.2.tgz"; + url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz"; + sha1 = "230ead344002988644841ab0244af8c44bbe3ef8"; + }; + } + { + name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; + path = fetchurl { + name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"; + sha1 = "85982878e21b98e1c66425e03d0174788f569ee8"; + }; + } + { + name = "bulma___bulma_0.8.2.tgz"; + path = fetchurl { + name = "bulma___bulma_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/bulma/-/bulma-0.8.2.tgz"; + sha1 = "5d928f16ed4a84549c2873f95c92c38c69c631a7"; + }; + } + { + name = "bytes___bytes_3.0.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + } + { + name = "bytes___bytes_3.1.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"; + sha1 = "f6cf7933a360e0588fa9fde85651cdc7f805d1f6"; + }; + } + { + name = "cacache___cacache_12.0.4.tgz"; + path = fetchurl { + name = "cacache___cacache_12.0.4.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz"; + sha1 = "668bcbd105aeb5f1d92fe25570ec9525c8faa40c"; + }; + } + { + name = "cacache___cacache_13.0.1.tgz"; + path = fetchurl { + name = "cacache___cacache_13.0.1.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz"; + sha1 = "a8000c21697089082f85287a1aec6e382024a71c"; + }; + } + { + name = "cache_base___cache_base_1.0.1.tgz"; + path = fetchurl { + name = "cache_base___cache_base_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"; + sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2"; + }; + } + { + name = "cache_loader___cache_loader_4.1.0.tgz"; + path = fetchurl { + name = "cache_loader___cache_loader_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz"; + sha1 = "9948cae353aec0a1fcb1eafda2300816ec85387e"; + }; + } + { + name = "call_me_maybe___call_me_maybe_1.0.1.tgz"; + path = fetchurl { + name = "call_me_maybe___call_me_maybe_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz"; + sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b"; + }; + } + { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + path = fetchurl { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"; + sha1 = "847e0fce0a223750a9a027c54b33731ad3154134"; + }; + } + { + name = "caller_path___caller_path_2.0.0.tgz"; + path = fetchurl { + name = "caller_path___caller_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"; + sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4"; + }; + } + { + name = "callsites___callsites_2.0.0.tgz"; + path = fetchurl { + name = "callsites___callsites_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"; + sha1 = "06eb84f00eea413da86affefacbffb36093b3c50"; + }; + } + { + name = "callsites___callsites_3.1.0.tgz"; + path = fetchurl { + name = "callsites___callsites_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz"; + sha1 = "b3630abd8943432f54b3f0519238e33cd7df2f73"; + }; + } + { + name = "camel_case___camel_case_3.0.0.tgz"; + path = fetchurl { + name = "camel_case___camel_case_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz"; + sha1 = "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"; + }; + } + { + name = "camelcase___camelcase_5.3.1.tgz"; + path = fetchurl { + name = "camelcase___camelcase_5.3.1.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz"; + sha1 = "e3c9b31569e106811df242f715725a1f4c494320"; + }; + } + { + name = "caniuse_api___caniuse_api_3.0.0.tgz"; + path = fetchurl { + name = "caniuse_api___caniuse_api_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz"; + sha1 = "5e4d90e2274961d46291997df599e3ed008ee4c0"; + }; + } + { + name = "caniuse_lite___caniuse_lite_1.0.30001078.tgz"; + path = fetchurl { + name = "caniuse_lite___caniuse_lite_1.0.30001078.tgz"; + url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001078.tgz"; + sha1 = "e1b6e2ae327b6a1ec11f65ec7a0dde1e7093074c"; + }; + } + { + name = "case_sensitive_paths_webpack_plugin___case_sensitive_paths_webpack_plugin_2.3.0.tgz"; + path = fetchurl { + name = "case_sensitive_paths_webpack_plugin___case_sensitive_paths_webpack_plugin_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz"; + sha1 = "23ac613cc9a856e4f88ff8bb73bbb5e989825cf7"; + }; + } + { + name = "caseless___caseless_0.12.0.tgz"; + path = fetchurl { + name = "caseless___caseless_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + } + { + name = "chalk___chalk_1.1.3.tgz"; + path = fetchurl { + name = "chalk___chalk_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + } + { + name = "chalk___chalk_2.4.2.tgz"; + path = fetchurl { + name = "chalk___chalk_2.4.2.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"; + sha1 = "cd42541677a54333cf541a49108c1432b44c9424"; + }; + } + { + name = "chalk___chalk_3.0.0.tgz"; + path = fetchurl { + name = "chalk___chalk_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz"; + sha1 = "3f73c2bf526591f574cc492c51e2456349f844e4"; + }; + } + { + name = "chalk___chalk_4.0.0.tgz"; + path = fetchurl { + name = "chalk___chalk_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz"; + sha1 = "6e98081ed2d17faab615eb52ac66ec1fe6209e72"; + }; + } + { + name = "chardet___chardet_0.7.0.tgz"; + path = fetchurl { + name = "chardet___chardet_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz"; + sha1 = "90094849f0937f2eedc2425d0d28a9e5f0cbad9e"; + }; + } + { + name = "check_types___check_types_8.0.3.tgz"; + path = fetchurl { + name = "check_types___check_types_8.0.3.tgz"; + url = "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz"; + sha1 = "3356cca19c889544f2d7a95ed49ce508a0ecf552"; + }; + } + { + name = "chokidar___chokidar_3.4.0.tgz"; + path = fetchurl { + name = "chokidar___chokidar_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz"; + sha1 = "b30611423ce376357c765b9b8f904b9fba3c0be8"; + }; + } + { + name = "chokidar___chokidar_2.1.8.tgz"; + path = fetchurl { + name = "chokidar___chokidar_2.1.8.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz"; + sha1 = "804b3a7b6a99358c3c5c61e71d8728f041cff917"; + }; + } + { + name = "chownr___chownr_1.1.4.tgz"; + path = fetchurl { + name = "chownr___chownr_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"; + sha1 = "6fc9d7b42d32a583596337666e7d08084da2cc6b"; + }; + } + { + name = "chrome_trace_event___chrome_trace_event_1.0.2.tgz"; + path = fetchurl { + name = "chrome_trace_event___chrome_trace_event_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz"; + sha1 = "234090ee97c7d4ad1a2c4beae27505deffc608a4"; + }; + } + { + name = "ci_info___ci_info_1.6.0.tgz"; + path = fetchurl { + name = "ci_info___ci_info_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz"; + sha1 = "2ca20dbb9ceb32d4524a683303313f0304b1e497"; + }; + } + { + name = "cipher_base___cipher_base_1.0.4.tgz"; + path = fetchurl { + name = "cipher_base___cipher_base_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"; + sha1 = "8760e4ecc272f4c363532f926d874aae2c1397de"; + }; + } + { + name = "class_utils___class_utils_0.3.6.tgz"; + path = fetchurl { + name = "class_utils___class_utils_0.3.6.tgz"; + url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"; + sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463"; + }; + } + { + name = "clean_css___clean_css_4.2.3.tgz"; + path = fetchurl { + name = "clean_css___clean_css_4.2.3.tgz"; + url = "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz"; + sha1 = "507b5de7d97b48ee53d84adb0160ff6216380f78"; + }; + } + { + name = "clean_stack___clean_stack_2.2.0.tgz"; + path = fetchurl { + name = "clean_stack___clean_stack_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz"; + sha1 = "ee8472dbb129e727b31e8a10a427dee9dfe4008b"; + }; + } + { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz"; + sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5"; + }; + } + { + name = "cli_cursor___cli_cursor_3.1.0.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz"; + sha1 = "264305a7ae490d1d03bf0c9ba7c925d1753af307"; + }; + } + { + name = "cli_highlight___cli_highlight_2.1.4.tgz"; + path = fetchurl { + name = "cli_highlight___cli_highlight_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz"; + sha1 = "098cb642cf17f42adc1c1145e07f960ec4d7522b"; + }; + } + { + name = "cli_spinners___cli_spinners_2.3.0.tgz"; + path = fetchurl { + name = "cli_spinners___cli_spinners_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz"; + sha1 = "0632239a4b5aa4c958610142c34bb7a651fc8df5"; + }; + } + { + name = "cli_width___cli_width_2.2.1.tgz"; + path = fetchurl { + name = "cli_width___cli_width_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz"; + sha1 = "b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"; + }; + } + { + name = "clipboardy___clipboardy_2.3.0.tgz"; + path = fetchurl { + name = "clipboardy___clipboardy_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz"; + sha1 = "3c2903650c68e46a91b388985bc2774287dba290"; + }; + } + { + name = "cliui___cliui_5.0.0.tgz"; + path = fetchurl { + name = "cliui___cliui_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz"; + sha1 = "deefcfdb2e800784aa34f46fa08e06851c7bbbc5"; + }; + } + { + name = "cliui___cliui_6.0.0.tgz"; + path = fetchurl { + name = "cliui___cliui_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz"; + sha1 = "511d702c0c4e41ca156d7d0e96021f23e13225b1"; + }; + } + { + name = "clone_deep___clone_deep_4.0.1.tgz"; + path = fetchurl { + name = "clone_deep___clone_deep_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz"; + sha1 = "c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"; + }; + } + { + name = "clone___clone_1.0.4.tgz"; + path = fetchurl { + name = "clone___clone_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz"; + sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; + }; + } + { + name = "coa___coa_2.0.2.tgz"; + path = fetchurl { + name = "coa___coa_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz"; + sha1 = "43f6c21151b4ef2bf57187db0d73de229e3e7ec3"; + }; + } + { + name = "collection_visit___collection_visit_1.0.0.tgz"; + path = fetchurl { + name = "collection_visit___collection_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"; + sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; + }; + } + { + name = "color_convert___color_convert_1.9.3.tgz"; + path = fetchurl { + name = "color_convert___color_convert_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"; + sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8"; + }; + } + { + name = "color_convert___color_convert_2.0.1.tgz"; + path = fetchurl { + name = "color_convert___color_convert_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"; + sha1 = "72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"; + }; + } + { + name = "color_name___color_name_1.1.3.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + } + { + name = "color_name___color_name_1.1.4.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"; + sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2"; + }; + } + { + name = "color_string___color_string_1.5.3.tgz"; + path = fetchurl { + name = "color_string___color_string_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz"; + sha1 = "c9bbc5f01b58b5492f3d6857459cb6590ce204cc"; + }; + } + { + name = "color___color_3.1.2.tgz"; + path = fetchurl { + name = "color___color_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz"; + sha1 = "68148e7f85d41ad7649c5fa8c8106f098d229e10"; + }; + } + { + name = "combined_stream___combined_stream_1.0.8.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.8.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"; + sha1 = "c3d45a8b34fd730631a110a8a2520682b31d5a7f"; + }; + } + { + name = "commander___commander_2.17.1.tgz"; + path = fetchurl { + name = "commander___commander_2.17.1.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz"; + sha1 = "bd77ab7de6de94205ceacc72f1716d29f20a77bf"; + }; + } + { + name = "commander___commander_2.20.3.tgz"; + path = fetchurl { + name = "commander___commander_2.20.3.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"; + sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33"; + }; + } + { + name = "commander___commander_2.19.0.tgz"; + path = fetchurl { + name = "commander___commander_2.19.0.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz"; + sha1 = "f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"; + }; + } + { + name = "common_tags___common_tags_1.8.0.tgz"; + path = fetchurl { + name = "common_tags___common_tags_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz"; + sha1 = "8e3153e542d4a39e9b10554434afaaf98956a937"; + }; + } + { + name = "commondir___commondir_1.0.1.tgz"; + path = fetchurl { + name = "commondir___commondir_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"; + sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b"; + }; + } + { + name = "component_emitter___component_emitter_1.3.0.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"; + sha1 = "16e4070fba8ae29b679f2215853ee181ab2eabc0"; + }; + } + { + name = "compressible___compressible_2.0.18.tgz"; + path = fetchurl { + name = "compressible___compressible_2.0.18.tgz"; + url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz"; + sha1 = "af53cca6b070d4c3c0750fbd77286a6d7cc46fba"; + }; + } + { + name = "compression___compression_1.7.4.tgz"; + path = fetchurl { + name = "compression___compression_1.7.4.tgz"; + url = "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz"; + sha1 = "95523eff170ca57c29a0ca41e6fe131f41e5bb8f"; + }; + } + { + name = "concat_map___concat_map_0.0.1.tgz"; + path = fetchurl { + name = "concat_map___concat_map_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + } + { + name = "concat_stream___concat_stream_1.6.2.tgz"; + path = fetchurl { + name = "concat_stream___concat_stream_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"; + sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"; + }; + } + { + name = "connect_history_api_fallback___connect_history_api_fallback_1.6.0.tgz"; + path = fetchurl { + name = "connect_history_api_fallback___connect_history_api_fallback_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz"; + sha1 = "8b32089359308d111115d81cad3fceab888f97bc"; + }; + } + { + name = "console_browserify___console_browserify_1.2.0.tgz"; + path = fetchurl { + name = "console_browserify___console_browserify_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz"; + sha1 = "67063cef57ceb6cf4993a2ab3a55840ae8c49336"; + }; + } + { + name = "consolidate___consolidate_0.15.1.tgz"; + path = fetchurl { + name = "consolidate___consolidate_0.15.1.tgz"; + url = "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz"; + sha1 = "21ab043235c71a07d45d9aad98593b0dba56bab7"; + }; + } + { + name = "constants_browserify___constants_browserify_1.0.0.tgz"; + path = fetchurl { + name = "constants_browserify___constants_browserify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"; + sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; + }; + } + { + name = "content_disposition___content_disposition_0.5.3.tgz"; + path = fetchurl { + name = "content_disposition___content_disposition_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz"; + sha1 = "e130caf7e7279087c5616c2007d0485698984fbd"; + }; + } + { + name = "content_type___content_type_1.0.4.tgz"; + path = fetchurl { + name = "content_type___content_type_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"; + sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b"; + }; + } + { + name = "convert_source_map___convert_source_map_1.7.0.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"; + sha1 = "17a2cb882d7f77d3490585e2ce6c524424a3a442"; + }; + } + { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + path = fetchurl { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + } + { + name = "cookie___cookie_0.4.0.tgz"; + path = fetchurl { + name = "cookie___cookie_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz"; + sha1 = "beb437e7022b3b6d49019d088665303ebe9c14ba"; + }; + } + { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + path = fetchurl { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"; + sha1 = "92297398cae34937fcafd6ec8139c18051f0b5e0"; + }; + } + { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + path = fetchurl { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; + sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; + }; + } + { + name = "copy_webpack_plugin___copy_webpack_plugin_5.1.1.tgz"; + path = fetchurl { + name = "copy_webpack_plugin___copy_webpack_plugin_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz"; + sha1 = "5481a03dea1123d88a988c6ff8b78247214f0b88"; + }; + } + { + name = "core_js_compat___core_js_compat_3.6.5.tgz"; + path = fetchurl { + name = "core_js_compat___core_js_compat_3.6.5.tgz"; + url = "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz"; + sha1 = "2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"; + }; + } + { + name = "core_js___core_js_2.6.11.tgz"; + path = fetchurl { + name = "core_js___core_js_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz"; + sha1 = "38831469f9922bded8ee21c9dc46985e0399308c"; + }; + } + { + name = "core_js___core_js_3.6.5.tgz"; + path = fetchurl { + name = "core_js___core_js_3.6.5.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz"; + sha1 = "7395dc273af37fb2e50e9bd3d9fe841285231d1a"; + }; + } + { + name = "core_util_is___core_util_is_1.0.2.tgz"; + path = fetchurl { + name = "core_util_is___core_util_is_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + } + { + name = "cosmiconfig___cosmiconfig_5.2.1.tgz"; + path = fetchurl { + name = "cosmiconfig___cosmiconfig_5.2.1.tgz"; + url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz"; + sha1 = "040f726809c591e77a17c0a3626ca45b4f168b1a"; + }; + } + { + name = "create_ecdh___create_ecdh_4.0.3.tgz"; + path = fetchurl { + name = "create_ecdh___create_ecdh_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz"; + sha1 = "c9111b6f33045c4697f144787f9254cdc77c45ff"; + }; + } + { + name = "create_hash___create_hash_1.2.0.tgz"; + path = fetchurl { + name = "create_hash___create_hash_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"; + sha1 = "889078af11a63756bcfb59bd221996be3a9ef196"; + }; + } + { + name = "create_hmac___create_hmac_1.1.7.tgz"; + path = fetchurl { + name = "create_hmac___create_hmac_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"; + sha1 = "69170c78b3ab957147b2b8b04572e47ead2243ff"; + }; + } + { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz"; + sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449"; + }; + } + { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"; + sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"; + }; + } + { + name = "cross_spawn___cross_spawn_7.0.3.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_7.0.3.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz"; + sha1 = "f73a85b9d5d41d045551c177e2882d4ac85728a6"; + }; + } + { + name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; + path = fetchurl { + name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; + url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"; + sha1 = "396cf9f3137f03e4b8e532c58f698254e00f80ec"; + }; + } + { + name = "css_color_names___css_color_names_0.0.4.tgz"; + path = fetchurl { + name = "css_color_names___css_color_names_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"; + sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0"; + }; + } + { + name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz"; + path = fetchurl { + name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"; + sha1 = "c198940f63a76d7e36c1e71018b001721054cb22"; + }; + } + { + name = "css_loader___css_loader_3.5.3.tgz"; + path = fetchurl { + name = "css_loader___css_loader_3.5.3.tgz"; + url = "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz"; + sha1 = "95ac16468e1adcd95c844729e0bb167639eb0bcf"; + }; + } + { + name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz"; + path = fetchurl { + name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"; + sha1 = "3b2ff4972cc362ab88561507a95408a1432135d7"; + }; + } + { + name = "css_select___css_select_1.2.0.tgz"; + path = fetchurl { + name = "css_select___css_select_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz"; + sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858"; + }; + } + { + name = "css_select___css_select_2.1.0.tgz"; + path = fetchurl { + name = "css_select___css_select_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz"; + sha1 = "6a34653356635934a81baca68d0255432105dbef"; + }; + } + { + name = "css_tree___css_tree_1.0.0_alpha.37.tgz"; + path = fetchurl { + name = "css_tree___css_tree_1.0.0_alpha.37.tgz"; + url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz"; + sha1 = "98bebd62c4c1d9f960ec340cf9f7522e30709a22"; + }; + } + { + name = "css_tree___css_tree_1.0.0_alpha.39.tgz"; + path = fetchurl { + name = "css_tree___css_tree_1.0.0_alpha.39.tgz"; + url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz"; + sha1 = "2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb"; + }; + } + { + name = "css_what___css_what_2.1.3.tgz"; + path = fetchurl { + name = "css_what___css_what_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz"; + sha1 = "a6d7604573365fe74686c3f311c56513d88285f2"; + }; + } + { + name = "css_what___css_what_3.3.0.tgz"; + path = fetchurl { + name = "css_what___css_what_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz"; + sha1 = "10fec696a9ece2e591ac772d759aacabac38cd39"; + }; + } + { + name = "cssesc___cssesc_3.0.0.tgz"; + path = fetchurl { + name = "cssesc___cssesc_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz"; + sha1 = "37741919903b868565e1c09ea747445cd18983ee"; + }; + } + { + name = "cssnano_preset_default___cssnano_preset_default_4.0.7.tgz"; + path = fetchurl { + name = "cssnano_preset_default___cssnano_preset_default_4.0.7.tgz"; + url = "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz"; + sha1 = "51ec662ccfca0f88b396dcd9679cdb931be17f76"; + }; + } + { + name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz"; + path = fetchurl { + name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"; + sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f"; + }; + } + { + name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz"; + path = fetchurl { + name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"; + sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d"; + }; + } + { + name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz"; + path = fetchurl { + name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"; + sha1 = "b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"; + }; + } + { + name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz"; + path = fetchurl { + name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"; + sha1 = "574082fb2859d2db433855835d9a8456ea18bbf3"; + }; + } + { + name = "cssnano___cssnano_4.1.10.tgz"; + path = fetchurl { + name = "cssnano___cssnano_4.1.10.tgz"; + url = "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz"; + sha1 = "0ac41f0b13d13d465487e111b778d42da631b8b2"; + }; + } + { + name = "csso___csso_4.0.3.tgz"; + path = fetchurl { + name = "csso___csso_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz"; + sha1 = "0d9985dc852c7cc2b2cacfbbe1079014d1a8e903"; + }; + } + { + name = "cyclist___cyclist_1.0.1.tgz"; + path = fetchurl { + name = "cyclist___cyclist_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz"; + sha1 = "596e9698fd0c80e12038c2b82d6eb1b35b6224d9"; + }; + } + { + name = "dashdash___dashdash_1.14.1.tgz"; + path = fetchurl { + name = "dashdash___dashdash_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + } + { + name = "de_indent___de_indent_1.0.2.tgz"; + path = fetchurl { + name = "de_indent___de_indent_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz"; + sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d"; + }; + } + { + name = "debug___debug_2.6.9.tgz"; + path = fetchurl { + name = "debug___debug_2.6.9.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"; + sha1 = "5d128515df134ff327e90a4c93f4e077a536341f"; + }; + } + { + name = "debug___debug_3.2.6.tgz"; + path = fetchurl { + name = "debug___debug_3.2.6.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; + sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; + }; + } + { + name = "debug___debug_4.1.1.tgz"; + path = fetchurl { + name = "debug___debug_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz"; + sha1 = "3b72260255109c6b589cee050f1d516139664791"; + }; + } + { + name = "decamelize___decamelize_1.2.0.tgz"; + path = fetchurl { + name = "decamelize___decamelize_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + } + { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + path = fetchurl { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + } + { + name = "deep_equal___deep_equal_1.1.1.tgz"; + path = fetchurl { + name = "deep_equal___deep_equal_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz"; + sha1 = "b5c98c942ceffaf7cb051e24e1434a25a2e6076a"; + }; + } + { + name = "deep_is___deep_is_0.1.3.tgz"; + path = fetchurl { + name = "deep_is___deep_is_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + } + { + name = "deepmerge___deepmerge_1.5.2.tgz"; + path = fetchurl { + name = "deepmerge___deepmerge_1.5.2.tgz"; + url = "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz"; + sha1 = "10499d868844cdad4fee0842df8c7f6f0c95a753"; + }; + } + { + name = "default_gateway___default_gateway_4.2.0.tgz"; + path = fetchurl { + name = "default_gateway___default_gateway_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz"; + sha1 = "167104c7500c2115f6dd69b0a536bb8ed720552b"; + }; + } + { + name = "default_gateway___default_gateway_5.0.5.tgz"; + path = fetchurl { + name = "default_gateway___default_gateway_5.0.5.tgz"; + url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz"; + sha1 = "4fd6bd5d2855d39b34cc5a59505486e9aafc9b10"; + }; + } + { + name = "defaults___defaults_1.0.3.tgz"; + path = fetchurl { + name = "defaults___defaults_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + } + { + name = "define_properties___define_properties_1.1.3.tgz"; + path = fetchurl { + name = "define_properties___define_properties_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"; + sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1"; + }; + } + { + name = "define_property___define_property_0.2.5.tgz"; + path = fetchurl { + name = "define_property___define_property_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"; + sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; + }; + } + { + name = "define_property___define_property_1.0.0.tgz"; + path = fetchurl { + name = "define_property___define_property_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"; + sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; + }; + } + { + name = "define_property___define_property_2.0.2.tgz"; + path = fetchurl { + name = "define_property___define_property_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"; + sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d"; + }; + } + { + name = "del___del_4.1.1.tgz"; + path = fetchurl { + name = "del___del_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz"; + sha1 = "9e8f117222ea44a31ff3a156c049b99052a9f0b4"; + }; + } + { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + path = fetchurl { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + } + { + name = "depd___depd_1.1.2.tgz"; + path = fetchurl { + name = "depd___depd_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + } + { + name = "des.js___des.js_1.0.1.tgz"; + path = fetchurl { + name = "des.js___des.js_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz"; + sha1 = "5382142e1bdc53f85d86d53e5f4aa7deb91e0843"; + }; + } + { + name = "destroy___destroy_1.0.4.tgz"; + path = fetchurl { + name = "destroy___destroy_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + } + { + name = "detect_node___detect_node_2.0.4.tgz"; + path = fetchurl { + name = "detect_node___detect_node_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz"; + sha1 = "014ee8f8f669c5c58023da64b8179c083a28c46c"; + }; + } + { + name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; + path = fetchurl { + name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; + url = "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"; + sha1 = "40e8ee98f55a2149607146921c63e1ae5f3d2875"; + }; + } + { + name = "dir_glob___dir_glob_2.2.2.tgz"; + path = fetchurl { + name = "dir_glob___dir_glob_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz"; + sha1 = "fa09f0694153c8918b18ba0deafae94769fc50c4"; + }; + } + { + name = "dns_equal___dns_equal_1.0.0.tgz"; + path = fetchurl { + name = "dns_equal___dns_equal_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"; + sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d"; + }; + } + { + name = "dns_packet___dns_packet_1.3.1.tgz"; + path = fetchurl { + name = "dns_packet___dns_packet_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz"; + sha1 = "12aa426981075be500b910eedcd0b47dd7deda5a"; + }; + } + { + name = "dns_txt___dns_txt_2.0.2.tgz"; + path = fetchurl { + name = "dns_txt___dns_txt_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"; + sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6"; + }; + } + { + name = "doctrine___doctrine_3.0.0.tgz"; + path = fetchurl { + name = "doctrine___doctrine_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz"; + sha1 = "addebead72a6574db783639dc87a121773973961"; + }; + } + { + name = "dom_converter___dom_converter_0.2.0.tgz"; + path = fetchurl { + name = "dom_converter___dom_converter_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz"; + sha1 = "6721a9daee2e293682955b6afe416771627bb768"; + }; + } + { + name = "dom_serializer___dom_serializer_0.2.2.tgz"; + path = fetchurl { + name = "dom_serializer___dom_serializer_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz"; + sha1 = "1afb81f533717175d478655debc5e332d9f9bb51"; + }; + } + { + name = "domain_browser___domain_browser_1.2.0.tgz"; + path = fetchurl { + name = "domain_browser___domain_browser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"; + sha1 = "3d31f50191a6749dd1375a7f522e823d42e54eda"; + }; + } + { + name = "domelementtype___domelementtype_1.3.1.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz"; + sha1 = "d048c44b37b0d10a7f2a3d5fee3f4333d790481f"; + }; + } + { + name = "domelementtype___domelementtype_2.0.1.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz"; + sha1 = "1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"; + }; + } + { + name = "domhandler___domhandler_2.4.2.tgz"; + path = fetchurl { + name = "domhandler___domhandler_2.4.2.tgz"; + url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz"; + sha1 = "8805097e933d65e85546f726d60f5eb88b44f803"; + }; + } + { + name = "domutils___domutils_1.5.1.tgz"; + path = fetchurl { + name = "domutils___domutils_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz"; + sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf"; + }; + } + { + name = "domutils___domutils_1.7.0.tgz"; + path = fetchurl { + name = "domutils___domutils_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz"; + sha1 = "56ea341e834e06e6748af7a1cb25da67ea9f8c2a"; + }; + } + { + name = "dot_prop___dot_prop_5.2.0.tgz"; + path = fetchurl { + name = "dot_prop___dot_prop_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz"; + sha1 = "c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"; + }; + } + { + name = "dotenv_expand___dotenv_expand_5.1.0.tgz"; + path = fetchurl { + name = "dotenv_expand___dotenv_expand_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz"; + sha1 = "3fbaf020bfd794884072ea26b1e9791d45a629f0"; + }; + } + { + name = "dotenv___dotenv_8.2.0.tgz"; + path = fetchurl { + name = "dotenv___dotenv_8.2.0.tgz"; + url = "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz"; + sha1 = "97e619259ada750eea3e4ea3e26bceea5424b16a"; + }; + } + { + name = "duplexer___duplexer_0.1.1.tgz"; + path = fetchurl { + name = "duplexer___duplexer_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz"; + sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1"; + }; + } + { + name = "duplexify___duplexify_3.7.1.tgz"; + path = fetchurl { + name = "duplexify___duplexify_3.7.1.tgz"; + url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"; + sha1 = "2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"; + }; + } + { + name = "easy_stack___easy_stack_1.0.0.tgz"; + path = fetchurl { + name = "easy_stack___easy_stack_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz"; + sha1 = "12c91b3085a37f0baa336e9486eac4bf94e3e788"; + }; + } + { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + } + { + name = "ee_first___ee_first_1.1.1.tgz"; + path = fetchurl { + name = "ee_first___ee_first_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + } + { + name = "ejs___ejs_2.7.4.tgz"; + path = fetchurl { + name = "ejs___ejs_2.7.4.tgz"; + url = "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz"; + sha1 = "48661287573dcc53e366c7a1ae52c3a120eec9ba"; + }; + } + { + name = "electron_to_chromium___electron_to_chromium_1.3.464.tgz"; + path = fetchurl { + name = "electron_to_chromium___electron_to_chromium_1.3.464.tgz"; + url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.464.tgz"; + sha1 = "fe13feaa08f6f865d3c89d5d72e54c194f463aa5"; + }; + } + { + name = "elliptic___elliptic_6.5.2.tgz"; + path = fetchurl { + name = "elliptic___elliptic_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz"; + sha1 = "05c5678d7173c049d8ca433552224a495d0e3762"; + }; + } + { + name = "emoji_regex___emoji_regex_7.0.3.tgz"; + path = fetchurl { + name = "emoji_regex___emoji_regex_7.0.3.tgz"; + url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz"; + sha1 = "933a04052860c85e83c122479c4748a8e4c72156"; + }; + } + { + name = "emoji_regex___emoji_regex_8.0.0.tgz"; + path = fetchurl { + name = "emoji_regex___emoji_regex_8.0.0.tgz"; + url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz"; + sha1 = "e818fd69ce5ccfcb404594f842963bf53164cc37"; + }; + } + { + name = "emojis_list___emojis_list_2.1.0.tgz"; + path = fetchurl { + name = "emojis_list___emojis_list_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"; + sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389"; + }; + } + { + name = "emojis_list___emojis_list_3.0.0.tgz"; + path = fetchurl { + name = "emojis_list___emojis_list_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz"; + sha1 = "5570662046ad29e2e916e71aae260abdff4f6a78"; + }; + } + { + name = "encodeurl___encodeurl_1.0.2.tgz"; + path = fetchurl { + name = "encodeurl___encodeurl_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + } + { + name = "end_of_stream___end_of_stream_1.4.4.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_1.4.4.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"; + sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"; + }; + } + { + name = "enhanced_resolve___enhanced_resolve_4.1.1.tgz"; + path = fetchurl { + name = "enhanced_resolve___enhanced_resolve_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz"; + sha1 = "2937e2b8066cd0fe7ce0990a98f0d71a35189f66"; + }; + } + { + name = "entities___entities_1.1.2.tgz"; + path = fetchurl { + name = "entities___entities_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz"; + sha1 = "bdfa735299664dfafd34529ed4f8522a275fea56"; + }; + } + { + name = "entities___entities_2.0.3.tgz"; + path = fetchurl { + name = "entities___entities_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz"; + sha1 = "5c487e5742ab93c15abb5da22759b8590ec03b7f"; + }; + } + { + name = "errno___errno_0.1.7.tgz"; + path = fetchurl { + name = "errno___errno_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz"; + sha1 = "4684d71779ad39af177e3f007996f7c67c852618"; + }; + } + { + name = "error_ex___error_ex_1.3.2.tgz"; + path = fetchurl { + name = "error_ex___error_ex_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"; + sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf"; + }; + } + { + name = "error_stack_parser___error_stack_parser_2.0.6.tgz"; + path = fetchurl { + name = "error_stack_parser___error_stack_parser_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz"; + sha1 = "5a99a707bd7a4c58a797902d48d82803ede6aad8"; + }; + } + { + name = "es_abstract___es_abstract_1.17.5.tgz"; + path = fetchurl { + name = "es_abstract___es_abstract_1.17.5.tgz"; + url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz"; + sha1 = "d8c9d1d66c8981fb9200e2251d799eee92774ae9"; + }; + } + { + name = "es_to_primitive___es_to_primitive_1.2.1.tgz"; + path = fetchurl { + name = "es_to_primitive___es_to_primitive_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz"; + sha1 = "e55cd4c9cdc188bcefb03b366c736323fc5c898a"; + }; + } + { + name = "escape_html___escape_html_1.0.3.tgz"; + path = fetchurl { + name = "escape_html___escape_html_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + } + { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + path = fetchurl { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + } + { + name = "eslint_config_prettier___eslint_config_prettier_6.11.0.tgz"; + path = fetchurl { + name = "eslint_config_prettier___eslint_config_prettier_6.11.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz"; + sha1 = "f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1"; + }; + } + { + name = "eslint_loader___eslint_loader_2.2.1.tgz"; + path = fetchurl { + name = "eslint_loader___eslint_loader_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz"; + sha1 = "28b9c12da54057af0845e2a6112701a2f6bf8337"; + }; + } + { + name = "eslint_plugin_prettier___eslint_plugin_prettier_3.1.3.tgz"; + path = fetchurl { + name = "eslint_plugin_prettier___eslint_plugin_prettier_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz"; + sha1 = "ae116a0fc0e598fdae48743a4430903de5b4e6ca"; + }; + } + { + name = "eslint_plugin_vue___eslint_plugin_vue_6.2.2.tgz"; + path = fetchurl { + name = "eslint_plugin_vue___eslint_plugin_vue_6.2.2.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz"; + sha1 = "27fecd9a3a24789b0f111ecdd540a9e56198e0fe"; + }; + } + { + name = "eslint_scope___eslint_scope_4.0.3.tgz"; + path = fetchurl { + name = "eslint_scope___eslint_scope_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz"; + sha1 = "ca03833310f6889a3264781aa82e63eb9cfe7848"; + }; + } + { + name = "eslint_scope___eslint_scope_5.1.0.tgz"; + path = fetchurl { + name = "eslint_scope___eslint_scope_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz"; + sha1 = "d0f971dfe59c69e0cada684b23d49dbf82600ce5"; + }; + } + { + name = "eslint_utils___eslint_utils_2.0.0.tgz"; + path = fetchurl { + name = "eslint_utils___eslint_utils_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz"; + sha1 = "7be1cc70f27a72a76cd14aa698bcabed6890e1cd"; + }; + } + { + name = "eslint_visitor_keys___eslint_visitor_keys_1.2.0.tgz"; + path = fetchurl { + name = "eslint_visitor_keys___eslint_visitor_keys_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz"; + sha1 = "74415ac884874495f78ec2a97349525344c981fa"; + }; + } + { + name = "eslint___eslint_7.2.0.tgz"; + path = fetchurl { + name = "eslint___eslint_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/eslint/-/eslint-7.2.0.tgz"; + sha1 = "d41b2e47804b30dbabb093a967fb283d560082e6"; + }; + } + { + name = "espree___espree_6.2.1.tgz"; + path = fetchurl { + name = "espree___espree_6.2.1.tgz"; + url = "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz"; + sha1 = "77fc72e1fd744a2052c20f38a5b575832e82734a"; + }; + } + { + name = "espree___espree_7.1.0.tgz"; + path = fetchurl { + name = "espree___espree_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz"; + sha1 = "a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c"; + }; + } + { + name = "esprima___esprima_4.0.1.tgz"; + path = fetchurl { + name = "esprima___esprima_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; + sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; + }; + } + { + name = "esquery___esquery_1.3.1.tgz"; + path = fetchurl { + name = "esquery___esquery_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz"; + sha1 = "b78b5828aa8e214e29fb74c4d5b752e1c033da57"; + }; + } + { + name = "esrecurse___esrecurse_4.2.1.tgz"; + path = fetchurl { + name = "esrecurse___esrecurse_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz"; + sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"; + }; + } + { + name = "estraverse___estraverse_4.3.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz"; + sha1 = "398ad3f3c5a24948be7725e83d11a7de28cdbd1d"; + }; + } + { + name = "estraverse___estraverse_5.1.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz"; + sha1 = "374309d39fd935ae500e7b92e8a6b4c720e59642"; + }; + } + { + name = "esutils___esutils_2.0.3.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"; + sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64"; + }; + } + { + name = "etag___etag_1.8.1.tgz"; + path = fetchurl { + name = "etag___etag_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + } + { + name = "event_pubsub___event_pubsub_4.3.0.tgz"; + path = fetchurl { + name = "event_pubsub___event_pubsub_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz"; + sha1 = "f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"; + }; + } + { + name = "eventemitter3___eventemitter3_4.0.4.tgz"; + path = fetchurl { + name = "eventemitter3___eventemitter3_4.0.4.tgz"; + url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz"; + sha1 = "b5463ace635a083d018bdc7c917b4c5f10a85384"; + }; + } + { + name = "events___events_3.1.0.tgz"; + path = fetchurl { + name = "events___events_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz"; + sha1 = "84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"; + }; + } + { + name = "eventsource___eventsource_1.0.7.tgz"; + path = fetchurl { + name = "eventsource___eventsource_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz"; + sha1 = "8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"; + }; + } + { + name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; + path = fetchurl { + name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"; + sha1 = "7fcbdb198dc71959432efe13842684e0525acb02"; + }; + } + { + name = "execa___execa_0.8.0.tgz"; + path = fetchurl { + name = "execa___execa_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz"; + sha1 = "d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"; + }; + } + { + name = "execa___execa_1.0.0.tgz"; + path = fetchurl { + name = "execa___execa_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"; + sha1 = "c6236a5bb4df6d6f15e88e7f017798216749ddd8"; + }; + } + { + name = "execa___execa_3.4.0.tgz"; + path = fetchurl { + name = "execa___execa_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz"; + sha1 = "c08ed4550ef65d858fac269ffc8572446f37eb89"; + }; + } + { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"; + sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; + }; + } + { + name = "express___express_4.17.1.tgz"; + path = fetchurl { + name = "express___express_4.17.1.tgz"; + url = "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz"; + sha1 = "4491fc38605cf51f8629d39c2b5d026f98a4c134"; + }; + } + { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"; + sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; + }; + } + { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"; + sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; + }; + } + { + name = "extend___extend_3.0.2.tgz"; + path = fetchurl { + name = "extend___extend_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz"; + sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa"; + }; + } + { + name = "external_editor___external_editor_3.1.0.tgz"; + path = fetchurl { + name = "external_editor___external_editor_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz"; + sha1 = "cb03f740befae03ea4d283caed2741a83f335495"; + }; + } + { + name = "extglob___extglob_2.0.4.tgz"; + path = fetchurl { + name = "extglob___extglob_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"; + sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543"; + }; + } + { + name = "extsprintf___extsprintf_1.3.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + } + { + name = "extsprintf___extsprintf_1.4.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz"; + sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f"; + }; + } + { + name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; + sha1 = "545145077c501491e33b15ec408c294376e94ae4"; + }; + } + { + name = "fast_diff___fast_diff_1.2.0.tgz"; + path = fetchurl { + name = "fast_diff___fast_diff_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz"; + sha1 = "73ee11982d86caaf7959828d519cfe927fac5f03"; + }; + } + { + name = "fast_glob___fast_glob_2.2.7.tgz"; + path = fetchurl { + name = "fast_glob___fast_glob_2.2.7.tgz"; + url = "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz"; + sha1 = "6953857c3afa475fff92ee6015d52da70a4cd39d"; + }; + } + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; + sha1 = "874bf69c6f404c2b5d99c481341399fd55892633"; + }; + } + { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + path = fetchurl { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + } + { + name = "faye_websocket___faye_websocket_0.10.0.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.10.0.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz"; + sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"; + }; + } + { + name = "faye_websocket___faye_websocket_0.11.3.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.11.3.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz"; + sha1 = "5c0e9a8968e8912c286639fde977a8b209f2508e"; + }; + } + { + name = "figgy_pudding___figgy_pudding_3.5.2.tgz"; + path = fetchurl { + name = "figgy_pudding___figgy_pudding_3.5.2.tgz"; + url = "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz"; + sha1 = "b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"; + }; + } + { + name = "figures___figures_3.2.0.tgz"; + path = fetchurl { + name = "figures___figures_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz"; + sha1 = "625c18bd293c604dc4a8ddb2febf0c88341746af"; + }; + } + { + name = "file_entry_cache___file_entry_cache_5.0.1.tgz"; + path = fetchurl { + name = "file_entry_cache___file_entry_cache_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz"; + sha1 = "ca0f6efa6dd3d561333fb14515065c2fafdf439c"; + }; + } + { + name = "file_loader___file_loader_4.3.0.tgz"; + path = fetchurl { + name = "file_loader___file_loader_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz"; + sha1 = "780f040f729b3d18019f20605f723e844b8a58af"; + }; + } + { + name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; + path = fetchurl { + name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; + sha1 = "553a7b8446ff6f684359c445f1e37a05dacc33dd"; + }; + } + { + name = "filesize___filesize_3.6.1.tgz"; + path = fetchurl { + name = "filesize___filesize_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz"; + sha1 = "090bb3ee01b6f801a8a8be99d31710b3422bb317"; + }; + } + { + name = "fill_range___fill_range_4.0.0.tgz"; + path = fetchurl { + name = "fill_range___fill_range_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"; + sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; + }; + } + { + name = "fill_range___fill_range_7.0.1.tgz"; + path = fetchurl { + name = "fill_range___fill_range_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz"; + sha1 = "1919a6a7c75fe38b2c7c77e5198535da9acdda40"; + }; + } + { + name = "finalhandler___finalhandler_1.1.2.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz"; + sha1 = "b7e7d000ffd11938d0fdb053506f6ebabe9f587d"; + }; + } + { + name = "find_cache_dir___find_cache_dir_0.1.1.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz"; + sha1 = "c8defae57c8a52a8a784f9e31c57c742e993a0b9"; + }; + } + { + name = "find_cache_dir___find_cache_dir_2.1.0.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz"; + sha1 = "8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"; + }; + } + { + name = "find_cache_dir___find_cache_dir_3.3.1.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz"; + sha1 = "89b33fad4a4670daa94f855f7fbe31d6d84fe880"; + }; + } + { + name = "find_up___find_up_1.1.2.tgz"; + path = fetchurl { + name = "find_up___find_up_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz"; + sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"; + }; + } + { + name = "find_up___find_up_2.1.0.tgz"; + path = fetchurl { + name = "find_up___find_up_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz"; + sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; + }; + } + { + name = "find_up___find_up_3.0.0.tgz"; + path = fetchurl { + name = "find_up___find_up_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz"; + sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73"; + }; + } + { + name = "find_up___find_up_4.1.0.tgz"; + path = fetchurl { + name = "find_up___find_up_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz"; + sha1 = "97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"; + }; + } + { + name = "flat_cache___flat_cache_2.0.1.tgz"; + path = fetchurl { + name = "flat_cache___flat_cache_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz"; + sha1 = "5d296d6f04bda44a4630a301413bdbc2ec085ec0"; + }; + } + { + name = "flatted___flatted_2.0.2.tgz"; + path = fetchurl { + name = "flatted___flatted_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz"; + sha1 = "4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"; + }; + } + { + name = "flush_write_stream___flush_write_stream_1.1.1.tgz"; + path = fetchurl { + name = "flush_write_stream___flush_write_stream_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz"; + sha1 = "8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"; + }; + } + { + name = "follow_redirects___follow_redirects_1.11.0.tgz"; + path = fetchurl { + name = "follow_redirects___follow_redirects_1.11.0.tgz"; + url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz"; + sha1 = "afa14f08ba12a52963140fe43212658897bc0ecb"; + }; + } + { + name = "for_in___for_in_1.0.2.tgz"; + path = fetchurl { + name = "for_in___for_in_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz"; + sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; + }; + } + { + name = "forever_agent___forever_agent_0.6.1.tgz"; + path = fetchurl { + name = "forever_agent___forever_agent_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + } + { + name = "form_data___form_data_2.3.3.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; + sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; + }; + } + { + name = "forwarded___forwarded_0.1.2.tgz"; + path = fetchurl { + name = "forwarded___forwarded_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + } + { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + path = fetchurl { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz"; + sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; + }; + } + { + name = "fresh___fresh_0.5.2.tgz"; + path = fetchurl { + name = "fresh___fresh_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + } + { + name = "from2___from2_2.3.0.tgz"; + path = fetchurl { + name = "from2___from2_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz"; + sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af"; + }; + } + { + name = "fs_extra___fs_extra_4.0.3.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz"; + sha1 = "0d852122e5bc5beb453fb028e9c0c9bf36340c94"; + }; + } + { + name = "fs_extra___fs_extra_7.0.1.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz"; + sha1 = "4f189c44aa123b895f722804f55ea23eadc348e9"; + }; + } + { + name = "fs_minipass___fs_minipass_2.1.0.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz"; + sha1 = "7f5036fdbf12c63c169190cbe4199c852271f9fb"; + }; + } + { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + path = fetchurl { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz"; + sha1 = "b47df53493ef911df75731e70a9ded0189db40c9"; + }; + } + { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + path = fetchurl { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + } + { + name = "fsevents___fsevents_1.2.13.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz"; + sha1 = "f325cb0455592428bcf11b383370ef70e3bfcc38"; + }; + } + { + name = "fsevents___fsevents_2.1.3.tgz"; + path = fetchurl { + name = "fsevents___fsevents_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz"; + sha1 = "fb738703ae8d2f9fe900c33836ddebee8b97f23e"; + }; + } + { + name = "function_bind___function_bind_1.1.1.tgz"; + path = fetchurl { + name = "function_bind___function_bind_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz"; + sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d"; + }; + } + { + name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz"; + path = fetchurl { + name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"; + sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"; + }; + } + { + name = "gensync___gensync_1.0.0_beta.1.tgz"; + path = fetchurl { + name = "gensync___gensync_1.0.0_beta.1.tgz"; + url = "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz"; + sha1 = "58f4361ff987e5ff6e1e7a210827aa371eaac269"; + }; + } + { + name = "get_caller_file___get_caller_file_2.0.5.tgz"; + path = fetchurl { + name = "get_caller_file___get_caller_file_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz"; + sha1 = "4f94412a82db32f36e3b0b9741f8a97feb031f7e"; + }; + } + { + name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz"; + path = fetchurl { + name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz"; + sha1 = "b5fde77f22cbe35f390b4e089922c50bce6ef664"; + }; + } + { + name = "get_stdin___get_stdin_6.0.0.tgz"; + path = fetchurl { + name = "get_stdin___get_stdin_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz"; + sha1 = "9e09bf712b360ab9225e812048f71fde9c89657b"; + }; + } + { + name = "get_stream___get_stream_3.0.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz"; + sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14"; + }; + } + { + name = "get_stream___get_stream_4.1.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz"; + sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"; + }; + } + { + name = "get_stream___get_stream_5.1.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz"; + sha1 = "01203cdc92597f9b909067c3e656cc1f4d3c4dc9"; + }; + } + { + name = "get_value___get_value_2.0.6.tgz"; + path = fetchurl { + name = "get_value___get_value_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz"; + sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; + }; + } + { + name = "getpass___getpass_0.1.7.tgz"; + path = fetchurl { + name = "getpass___getpass_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + } + { + name = "glob_parent___glob_parent_3.1.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz"; + sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; + }; + } + { + name = "glob_parent___glob_parent_5.1.1.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz"; + sha1 = "b6c1ef417c4e5663ea498f1c45afac6916bbc229"; + }; + } + { + name = "glob_to_regexp___glob_to_regexp_0.3.0.tgz"; + path = fetchurl { + name = "glob_to_regexp___glob_to_regexp_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz"; + sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab"; + }; + } + { + name = "glob___glob_7.1.6.tgz"; + path = fetchurl { + name = "glob___glob_7.1.6.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz"; + sha1 = "141f33b81a7c2492e125594307480c46679278a6"; + }; + } + { + name = "globals___globals_11.12.0.tgz"; + path = fetchurl { + name = "globals___globals_11.12.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz"; + sha1 = "ab8795338868a0babd8525758018c2a7eb95c42e"; + }; + } + { + name = "globals___globals_12.4.0.tgz"; + path = fetchurl { + name = "globals___globals_12.4.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz"; + sha1 = "a18813576a41b00a24a97e7f815918c2e19925f8"; + }; + } + { + name = "globby___globby_6.1.0.tgz"; + path = fetchurl { + name = "globby___globby_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz"; + sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c"; + }; + } + { + name = "globby___globby_7.1.1.tgz"; + path = fetchurl { + name = "globby___globby_7.1.1.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz"; + sha1 = "fb2ccff9401f8600945dfada97440cca972b8680"; + }; + } + { + name = "globby___globby_9.2.0.tgz"; + path = fetchurl { + name = "globby___globby_9.2.0.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz"; + sha1 = "fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"; + }; + } + { + name = "graceful_fs___graceful_fs_4.2.4.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.2.4.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz"; + sha1 = "2256bde14d3632958c465ebc96dc467ca07a29fb"; + }; + } + { + name = "gzip_size___gzip_size_5.1.1.tgz"; + path = fetchurl { + name = "gzip_size___gzip_size_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz"; + sha1 = "cb9bee692f87c0612b232840a873904e4c135274"; + }; + } + { + name = "handle_thing___handle_thing_2.0.1.tgz"; + path = fetchurl { + name = "handle_thing___handle_thing_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz"; + sha1 = "857f79ce359580c340d43081cc648970d0bb234e"; + }; + } + { + name = "har_schema___har_schema_2.0.0.tgz"; + path = fetchurl { + name = "har_schema___har_schema_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + } + { + name = "har_validator___har_validator_5.1.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.1.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; + sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; + }; + } + { + name = "has_ansi___has_ansi_2.0.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + } + { + name = "has_flag___has_flag_3.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + } + { + name = "has_flag___has_flag_4.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz"; + sha1 = "944771fd9c81c81265c4d6941860da06bb59479b"; + }; + } + { + name = "has_symbols___has_symbols_1.0.1.tgz"; + path = fetchurl { + name = "has_symbols___has_symbols_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz"; + sha1 = "9f5214758a44196c406d9bd76cebf81ec2dd31e8"; + }; + } + { + name = "has_value___has_value_0.3.1.tgz"; + path = fetchurl { + name = "has_value___has_value_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz"; + sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; + }; + } + { + name = "has_value___has_value_1.0.0.tgz"; + path = fetchurl { + name = "has_value___has_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz"; + sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; + }; + } + { + name = "has_values___has_values_0.1.4.tgz"; + path = fetchurl { + name = "has_values___has_values_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz"; + sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; + }; + } + { + name = "has_values___has_values_1.0.0.tgz"; + path = fetchurl { + name = "has_values___has_values_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz"; + sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; + }; + } + { + name = "has___has_1.0.3.tgz"; + path = fetchurl { + name = "has___has_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz"; + sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796"; + }; + } + { + name = "hash_base___hash_base_3.1.0.tgz"; + path = fetchurl { + name = "hash_base___hash_base_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz"; + sha1 = "55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"; + }; + } + { + name = "hash_sum___hash_sum_1.0.2.tgz"; + path = fetchurl { + name = "hash_sum___hash_sum_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz"; + sha1 = "33b40777754c6432573c120cc3808bbd10d47f04"; + }; + } + { + name = "hash_sum___hash_sum_2.0.0.tgz"; + path = fetchurl { + name = "hash_sum___hash_sum_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz"; + sha1 = "81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"; + }; + } + { + name = "hash.js___hash.js_1.1.7.tgz"; + path = fetchurl { + name = "hash.js___hash.js_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz"; + sha1 = "0babca538e8d4ee4a0f8988d68866537a003cf42"; + }; + } + { + name = "he___he_1.2.0.tgz"; + path = fetchurl { + name = "he___he_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz"; + sha1 = "84ae65fa7eafb165fddb61566ae14baf05664f0f"; + }; + } + { + name = "hex_color_regex___hex_color_regex_1.1.0.tgz"; + path = fetchurl { + name = "hex_color_regex___hex_color_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz"; + sha1 = "4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"; + }; + } + { + name = "highlight.js___highlight.js_9.18.1.tgz"; + path = fetchurl { + name = "highlight.js___highlight.js_9.18.1.tgz"; + url = "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz"; + sha1 = "ed21aa001fe6252bb10a3d76d47573c6539fe13c"; + }; + } + { + name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; + path = fetchurl { + name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz"; + sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1"; + }; + } + { + name = "hoopy___hoopy_0.1.4.tgz"; + path = fetchurl { + name = "hoopy___hoopy_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz"; + sha1 = "609207d661100033a9a9402ad3dea677381c1b1d"; + }; + } + { + name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.8.8.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz"; + sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488"; + }; + } + { + name = "hpack.js___hpack.js_2.1.6.tgz"; + path = fetchurl { + name = "hpack.js___hpack.js_2.1.6.tgz"; + url = "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz"; + sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2"; + }; + } + { + name = "hsl_regex___hsl_regex_1.0.0.tgz"; + path = fetchurl { + name = "hsl_regex___hsl_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz"; + sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e"; + }; + } + { + name = "hsla_regex___hsla_regex_1.0.0.tgz"; + path = fetchurl { + name = "hsla_regex___hsla_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz"; + sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"; + }; + } + { + name = "html_comment_regex___html_comment_regex_1.1.2.tgz"; + path = fetchurl { + name = "html_comment_regex___html_comment_regex_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz"; + sha1 = "97d4688aeb5c81886a364faa0cad1dda14d433a7"; + }; + } + { + name = "html_entities___html_entities_1.3.1.tgz"; + path = fetchurl { + name = "html_entities___html_entities_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz"; + sha1 = "fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"; + }; + } + { + name = "html_minifier___html_minifier_3.5.21.tgz"; + path = fetchurl { + name = "html_minifier___html_minifier_3.5.21.tgz"; + url = "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz"; + sha1 = "d0040e054730e354db008463593194015212d20c"; + }; + } + { + name = "html_tags___html_tags_2.0.0.tgz"; + path = fetchurl { + name = "html_tags___html_tags_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz"; + sha1 = "10b30a386085f43cede353cc8fa7cb0deeea668b"; + }; + } + { + name = "html_webpack_plugin___html_webpack_plugin_3.2.0.tgz"; + path = fetchurl { + name = "html_webpack_plugin___html_webpack_plugin_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz"; + sha1 = "b01abbd723acaaa7b37b6af4492ebda03d9dd37b"; + }; + } + { + name = "htmlparser2___htmlparser2_3.10.1.tgz"; + path = fetchurl { + name = "htmlparser2___htmlparser2_3.10.1.tgz"; + url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz"; + sha1 = "bd679dc3f59897b6a34bb10749c855bb53a9392f"; + }; + } + { + name = "http_deceiver___http_deceiver_1.2.7.tgz"; + path = fetchurl { + name = "http_deceiver___http_deceiver_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz"; + sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87"; + }; + } + { + name = "http_errors___http_errors_1.7.2.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz"; + sha1 = "4f5029cf13239f31036e5b2e55292bcfbcc85c8f"; + }; + } + { + name = "http_errors___http_errors_1.6.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.6.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + } + { + name = "http_errors___http_errors_1.7.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz"; + sha1 = "6c619e4f9c60308c38519498c14fbb10aacebb06"; + }; + } + { + name = "http_parser_js___http_parser_js_0.5.2.tgz"; + path = fetchurl { + name = "http_parser_js___http_parser_js_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz"; + sha1 = "da2e31d237b393aae72ace43882dd7e270a8ff77"; + }; + } + { + name = "http_proxy_middleware___http_proxy_middleware_0.19.1.tgz"; + path = fetchurl { + name = "http_proxy_middleware___http_proxy_middleware_0.19.1.tgz"; + url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz"; + sha1 = "183c7dc4aa1479150306498c210cdaf96080a43a"; + }; + } + { + name = "http_proxy___http_proxy_1.18.1.tgz"; + path = fetchurl { + name = "http_proxy___http_proxy_1.18.1.tgz"; + url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz"; + sha1 = "401541f0534884bbf95260334e72f88ee3976549"; + }; + } + { + name = "http_signature___http_signature_1.2.0.tgz"; + path = fetchurl { + name = "http_signature___http_signature_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + } + { + name = "https_browserify___https_browserify_1.0.0.tgz"; + path = fetchurl { + name = "https_browserify___https_browserify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz"; + sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"; + }; + } + { + name = "human_signals___human_signals_1.1.1.tgz"; + path = fetchurl { + name = "human_signals___human_signals_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz"; + sha1 = "c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"; + }; + } + { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; + }; + } + { + name = "icss_utils___icss_utils_4.1.1.tgz"; + path = fetchurl { + name = "icss_utils___icss_utils_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz"; + sha1 = "21170b53789ee27447c2f47dd683081403f9a467"; + }; + } + { + name = "ieee754___ieee754_1.1.13.tgz"; + path = fetchurl { + name = "ieee754___ieee754_1.1.13.tgz"; + url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz"; + sha1 = "ec168558e95aa181fd87d37f55c32bbcb6708b84"; + }; + } + { + name = "iferr___iferr_0.1.5.tgz"; + path = fetchurl { + name = "iferr___iferr_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz"; + sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"; + }; + } + { + name = "ignore___ignore_3.3.10.tgz"; + path = fetchurl { + name = "ignore___ignore_3.3.10.tgz"; + url = "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz"; + sha1 = "0a97fb876986e8081c631160f8f9f389157f0043"; + }; + } + { + name = "ignore___ignore_4.0.6.tgz"; + path = fetchurl { + name = "ignore___ignore_4.0.6.tgz"; + url = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz"; + sha1 = "750e3db5862087b4737ebac8207ffd1ef27b25fc"; + }; + } + { + name = "import_cwd___import_cwd_2.1.0.tgz"; + path = fetchurl { + name = "import_cwd___import_cwd_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz"; + sha1 = "aa6cf36e722761285cb371ec6519f53e2435b0a9"; + }; + } + { + name = "import_fresh___import_fresh_2.0.0.tgz"; + path = fetchurl { + name = "import_fresh___import_fresh_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz"; + sha1 = "d81355c15612d386c61f9ddd3922d4304822a546"; + }; + } + { + name = "import_fresh___import_fresh_3.2.1.tgz"; + path = fetchurl { + name = "import_fresh___import_fresh_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz"; + sha1 = "633ff618506e793af5ac91bf48b72677e15cbe66"; + }; + } + { + name = "import_from___import_from_2.1.0.tgz"; + path = fetchurl { + name = "import_from___import_from_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz"; + sha1 = "335db7f2a7affd53aaa471d4b8021dee36b7f3b1"; + }; + } + { + name = "import_local___import_local_2.0.0.tgz"; + path = fetchurl { + name = "import_local___import_local_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz"; + sha1 = "55070be38a5993cf18ef6db7e961f5bee5c5a09d"; + }; + } + { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + path = fetchurl { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + } + { + name = "indent_string___indent_string_4.0.0.tgz"; + path = fetchurl { + name = "indent_string___indent_string_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz"; + sha1 = "624f8f4497d619b2d9768531d58f4122854d7251"; + }; + } + { + name = "indexes_of___indexes_of_1.0.1.tgz"; + path = fetchurl { + name = "indexes_of___indexes_of_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz"; + sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607"; + }; + } + { + name = "infer_owner___infer_owner_1.0.4.tgz"; + path = fetchurl { + name = "infer_owner___infer_owner_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz"; + sha1 = "c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"; + }; + } + { + name = "inflight___inflight_1.0.6.tgz"; + path = fetchurl { + name = "inflight___inflight_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + } + { + name = "inherits___inherits_2.0.4.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz"; + sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c"; + }; + } + { + name = "inherits___inherits_2.0.1.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz"; + sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; + }; + } + { + name = "inherits___inherits_2.0.3.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + } + { + name = "inquirer___inquirer_7.1.0.tgz"; + path = fetchurl { + name = "inquirer___inquirer_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz"; + sha1 = "1298a01859883e17c7264b82870ae1034f92dd29"; + }; + } + { + name = "internal_ip___internal_ip_4.3.0.tgz"; + path = fetchurl { + name = "internal_ip___internal_ip_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz"; + sha1 = "845452baad9d2ca3b69c635a137acb9a0dad0907"; + }; + } + { + name = "invariant___invariant_2.2.4.tgz"; + path = fetchurl { + name = "invariant___invariant_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz"; + sha1 = "610f3c92c9359ce1db616e538008d23ff35158e6"; + }; + } + { + name = "ip_regex___ip_regex_2.1.0.tgz"; + path = fetchurl { + name = "ip_regex___ip_regex_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz"; + sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"; + }; + } + { + name = "ip___ip_1.1.5.tgz"; + path = fetchurl { + name = "ip___ip_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz"; + sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; + }; + } + { + name = "ipaddr.js___ipaddr.js_1.9.1.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz"; + sha1 = "bff38543eeb8984825079ff3a2a8e6cbd46781b3"; + }; + } + { + name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; + path = fetchurl { + name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz"; + sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"; + }; + } + { + name = "is_absolute_url___is_absolute_url_3.0.3.tgz"; + path = fetchurl { + name = "is_absolute_url___is_absolute_url_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz"; + sha1 = "96c6a22b6a23929b11ea0afb1836c36ad4a5d698"; + }; + } + { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; + sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; + }; + } + { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; + sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656"; + }; + } + { + name = "is_arguments___is_arguments_1.0.4.tgz"; + path = fetchurl { + name = "is_arguments___is_arguments_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz"; + sha1 = "3faf966c7cba0ff437fb31f6250082fcf0448cf3"; + }; + } + { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + } + { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz"; + sha1 = "4574a2ae56f7ab206896fb431eaeed066fdf8f03"; + }; + } + { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz"; + sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; + }; + } + { + name = "is_binary_path___is_binary_path_2.1.0.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz"; + sha1 = "ea1f7f3b80f064236e83470f86c09c254fb45b09"; + }; + } + { + name = "is_buffer___is_buffer_1.1.6.tgz"; + path = fetchurl { + name = "is_buffer___is_buffer_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz"; + sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"; + }; + } + { + name = "is_callable___is_callable_1.2.0.tgz"; + path = fetchurl { + name = "is_callable___is_callable_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz"; + sha1 = "83336560b54a38e35e3a2df7afd0454d691468bb"; + }; + } + { + name = "is_ci___is_ci_1.2.1.tgz"; + path = fetchurl { + name = "is_ci___is_ci_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz"; + sha1 = "e3779c8ee17fccf428488f6e281187f2e632841c"; + }; + } + { + name = "is_color_stop___is_color_stop_1.1.0.tgz"; + path = fetchurl { + name = "is_color_stop___is_color_stop_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz"; + sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345"; + }; + } + { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; + sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; + }; + } + { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; + sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7"; + }; + } + { + name = "is_date_object___is_date_object_1.0.2.tgz"; + path = fetchurl { + name = "is_date_object___is_date_object_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz"; + sha1 = "bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"; + }; + } + { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz"; + sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca"; + }; + } + { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz"; + sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec"; + }; + } + { + name = "is_directory___is_directory_0.3.1.tgz"; + path = fetchurl { + name = "is_directory___is_directory_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz"; + sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1"; + }; + } + { + name = "is_docker___is_docker_2.0.0.tgz"; + path = fetchurl { + name = "is_docker___is_docker_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz"; + sha1 = "2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"; + }; + } + { + name = "is_extendable___is_extendable_0.1.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz"; + sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; + }; + } + { + name = "is_extendable___is_extendable_1.0.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz"; + sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4"; + }; + } + { + name = "is_extglob___is_extglob_2.1.1.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + } + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + } + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"; + sha1 = "f116f8064fe90b3f7844a38997c0b75051269f1d"; + }; + } + { + name = "is_glob___is_glob_3.1.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz"; + sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; + }; + } + { + name = "is_glob___is_glob_4.0.1.tgz"; + path = fetchurl { + name = "is_glob___is_glob_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz"; + sha1 = "7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"; + }; + } + { + name = "is_number___is_number_3.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz"; + sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; + }; + } + { + name = "is_number___is_number_7.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz"; + sha1 = "7535345b896734d5f80c4d06c50955527a14f12b"; + }; + } + { + name = "is_obj___is_obj_1.0.1.tgz"; + path = fetchurl { + name = "is_obj___is_obj_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz"; + sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"; + }; + } + { + name = "is_obj___is_obj_2.0.0.tgz"; + path = fetchurl { + name = "is_obj___is_obj_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz"; + sha1 = "473fb05d973705e3fd9620545018ca8e22ef4982"; + }; + } + { + name = "is_path_cwd___is_path_cwd_2.2.0.tgz"; + path = fetchurl { + name = "is_path_cwd___is_path_cwd_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz"; + sha1 = "67d43b82664a7b5191fd9119127eb300048a9fdb"; + }; + } + { + name = "is_path_in_cwd___is_path_in_cwd_2.1.0.tgz"; + path = fetchurl { + name = "is_path_in_cwd___is_path_in_cwd_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz"; + sha1 = "bfe2dca26c69f397265a4009963602935a053acb"; + }; + } + { + name = "is_path_inside___is_path_inside_2.1.0.tgz"; + path = fetchurl { + name = "is_path_inside___is_path_inside_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz"; + sha1 = "7c9810587d659a40d27bcdb4d5616eab059494b2"; + }; + } + { + name = "is_plain_obj___is_plain_obj_1.1.0.tgz"; + path = fetchurl { + name = "is_plain_obj___is_plain_obj_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz"; + sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e"; + }; + } + { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + path = fetchurl { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677"; + }; + } + { + name = "is_regex___is_regex_1.1.0.tgz"; + path = fetchurl { + name = "is_regex___is_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz"; + sha1 = "ece38e389e490df0dc21caea2bd596f987f767ff"; + }; + } + { + name = "is_regexp___is_regexp_1.0.0.tgz"; + path = fetchurl { + name = "is_regexp___is_regexp_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz"; + sha1 = "fd2d883545c46bac5a633e7b9a09e87fa2cb5069"; + }; + } + { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + path = fetchurl { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz"; + sha1 = "fb18f87ce1feb925169c9a407c19318a3206ed88"; + }; + } + { + name = "is_stream___is_stream_1.1.0.tgz"; + path = fetchurl { + name = "is_stream___is_stream_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz"; + sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; + }; + } + { + name = "is_stream___is_stream_2.0.0.tgz"; + path = fetchurl { + name = "is_stream___is_stream_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz"; + sha1 = "bde9c32680d6fae04129d6ac9d921ce7815f78e3"; + }; + } + { + name = "is_svg___is_svg_3.0.0.tgz"; + path = fetchurl { + name = "is_svg___is_svg_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz"; + sha1 = "9321dbd29c212e5ca99c4fa9794c714bcafa2f75"; + }; + } + { + name = "is_symbol___is_symbol_1.0.3.tgz"; + path = fetchurl { + name = "is_symbol___is_symbol_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz"; + sha1 = "38e1014b9e6329be0de9d24a414fd7441ec61937"; + }; + } + { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + path = fetchurl { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + } + { + name = "is_windows___is_windows_1.0.2.tgz"; + path = fetchurl { + name = "is_windows___is_windows_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz"; + sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d"; + }; + } + { + name = "is_wsl___is_wsl_1.1.0.tgz"; + path = fetchurl { + name = "is_wsl___is_wsl_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz"; + sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; + }; + } + { + name = "is_wsl___is_wsl_2.2.0.tgz"; + path = fetchurl { + name = "is_wsl___is_wsl_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz"; + sha1 = "74a4c76e77ca9fd3f932f290c17ea326cd157271"; + }; + } + { + name = "isarray___isarray_1.0.0.tgz"; + path = fetchurl { + name = "isarray___isarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + } + { + name = "isexe___isexe_2.0.0.tgz"; + path = fetchurl { + name = "isexe___isexe_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + } + { + name = "isobject___isobject_2.1.0.tgz"; + path = fetchurl { + name = "isobject___isobject_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz"; + sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; + }; + } + { + name = "isobject___isobject_3.0.1.tgz"; + path = fetchurl { + name = "isobject___isobject_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + } + { + name = "isstream___isstream_0.1.2.tgz"; + path = fetchurl { + name = "isstream___isstream_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + } + { + name = "javascript_stringify___javascript_stringify_2.0.1.tgz"; + path = fetchurl { + name = "javascript_stringify___javascript_stringify_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz"; + sha1 = "6ef358035310e35d667c675ed63d3eb7c1aa19e5"; + }; + } + { + name = "jest_worker___jest_worker_25.5.0.tgz"; + path = fetchurl { + name = "jest_worker___jest_worker_25.5.0.tgz"; + url = "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz"; + sha1 = "2611d071b79cea0f43ee57a3d118593ac1547db1"; + }; + } + { + name = "js_message___js_message_1.0.5.tgz"; + path = fetchurl { + name = "js_message___js_message_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz"; + sha1 = "2300d24b1af08e89dd095bc1a4c9c9cfcb892d15"; + }; + } + { + name = "js_queue___js_queue_2.0.0.tgz"; + path = fetchurl { + name = "js_queue___js_queue_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz"; + sha1 = "362213cf860f468f0125fc6c96abc1742531f948"; + }; + } + { + name = "js_tokens___js_tokens_4.0.0.tgz"; + path = fetchurl { + name = "js_tokens___js_tokens_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz"; + sha1 = "19203fb59991df98e3a287050d4647cdeaf32499"; + }; + } + { + name = "js_yaml___js_yaml_3.14.0.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.14.0.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz"; + sha1 = "a7a34170f26a21bb162424d8adacb4113a69e482"; + }; + } + { + name = "jsbn___jsbn_0.1.1.tgz"; + path = fetchurl { + name = "jsbn___jsbn_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + } + { + name = "jsesc___jsesc_2.5.2.tgz"; + path = fetchurl { + name = "jsesc___jsesc_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz"; + sha1 = "80564d2e483dacf6e8ef209650a67df3f0c283a4"; + }; + } + { + name = "jsesc___jsesc_0.5.0.tgz"; + path = fetchurl { + name = "jsesc___jsesc_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz"; + sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d"; + }; + } + { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + path = fetchurl { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9"; + }; + } + { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + path = fetchurl { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660"; + }; + } + { + name = "json_schema___json_schema_0.2.3.tgz"; + path = fetchurl { + name = "json_schema___json_schema_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + } + { + name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"; + sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651"; + }; + } + { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; + sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; + }; + } + { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + path = fetchurl { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + } + { + name = "json3___json3_3.3.3.tgz"; + path = fetchurl { + name = "json3___json3_3.3.3.tgz"; + url = "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz"; + sha1 = "7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"; + }; + } + { + name = "json5___json5_0.5.1.tgz"; + path = fetchurl { + name = "json5___json5_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz"; + sha1 = "1eade7acc012034ad84e2396767ead9fa5495821"; + }; + } + { + name = "json5___json5_1.0.1.tgz"; + path = fetchurl { + name = "json5___json5_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz"; + sha1 = "779fb0018604fa854eacbf6252180d83543e3dbe"; + }; + } + { + name = "json5___json5_2.1.3.tgz"; + path = fetchurl { + name = "json5___json5_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz"; + sha1 = "c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"; + }; + } + { + name = "jsonfile___jsonfile_4.0.0.tgz"; + path = fetchurl { + name = "jsonfile___jsonfile_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz"; + sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb"; + }; + } + { + name = "jsonify___jsonify_0.0.0.tgz"; + path = fetchurl { + name = "jsonify___jsonify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz"; + sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; + }; + } + { + name = "jsprim___jsprim_1.4.1.tgz"; + path = fetchurl { + name = "jsprim___jsprim_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + } + { + name = "killable___killable_1.0.1.tgz"; + path = fetchurl { + name = "killable___killable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz"; + sha1 = "4c8ce441187a061c7474fb87ca08e2a638194892"; + }; + } + { + name = "kind_of___kind_of_3.2.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz"; + sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; + }; + } + { + name = "kind_of___kind_of_4.0.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz"; + sha1 = "20813df3d712928b207378691a45066fae72dd57"; + }; + } + { + name = "kind_of___kind_of_5.1.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz"; + sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d"; + }; + } + { + name = "kind_of___kind_of_6.0.3.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.3.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz"; + sha1 = "07c05034a6c349fa06e24fa35aa76db4580ce4dd"; + }; + } + { + name = "launch_editor_middleware___launch_editor_middleware_2.2.1.tgz"; + path = fetchurl { + name = "launch_editor_middleware___launch_editor_middleware_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz"; + sha1 = "e14b07e6c7154b0a4b86a0fd345784e45804c157"; + }; + } + { + name = "launch_editor___launch_editor_2.2.1.tgz"; + path = fetchurl { + name = "launch_editor___launch_editor_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz"; + sha1 = "871b5a3ee39d6680fcc26d37930b6eeda89db0ca"; + }; + } + { + name = "leven___leven_3.1.0.tgz"; + path = fetchurl { + name = "leven___leven_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz"; + sha1 = "77891de834064cccba82ae7842bb6b14a13ed7f2"; + }; + } + { + name = "levenary___levenary_1.1.1.tgz"; + path = fetchurl { + name = "levenary___levenary_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz"; + sha1 = "842a9ee98d2075aa7faeedbe32679e9205f46f77"; + }; + } + { + name = "levn___levn_0.4.1.tgz"; + path = fetchurl { + name = "levn___levn_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz"; + sha1 = "ae4562c007473b932a6200d403268dd2fffc6ade"; + }; + } + { + name = "lines_and_columns___lines_and_columns_1.1.6.tgz"; + path = fetchurl { + name = "lines_and_columns___lines_and_columns_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz"; + sha1 = "1c00c743b433cd0a4e80758f7b64a57440d9ff00"; + }; + } + { + name = "loader_fs_cache___loader_fs_cache_1.0.3.tgz"; + path = fetchurl { + name = "loader_fs_cache___loader_fs_cache_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz"; + sha1 = "f08657646d607078be2f0a032f8bd69dd6f277d9"; + }; + } + { + name = "loader_runner___loader_runner_2.4.0.tgz"; + path = fetchurl { + name = "loader_runner___loader_runner_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz"; + sha1 = "ed47066bfe534d7e84c4c7b9998c2a75607d9357"; + }; + } + { + name = "loader_utils___loader_utils_0.2.17.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_0.2.17.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz"; + sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348"; + }; + } + { + name = "loader_utils___loader_utils_1.4.0.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz"; + sha1 = "c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"; + }; + } + { + name = "loader_utils___loader_utils_2.0.0.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz"; + sha1 = "e4cace5b816d425a166b5f097e10cd12b36064b0"; + }; + } + { + name = "locate_path___locate_path_2.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz"; + sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; + }; + } + { + name = "locate_path___locate_path_3.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz"; + sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e"; + }; + } + { + name = "locate_path___locate_path_5.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz"; + sha1 = "1afba396afd676a6d42504d0a67a3a7eb9f62aa0"; + }; + } + { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"; + sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d"; + }; + } + { + name = "lodash.defaultsdeep___lodash.defaultsdeep_4.6.1.tgz"; + path = fetchurl { + name = "lodash.defaultsdeep___lodash.defaultsdeep_4.6.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz"; + sha1 = "512e9bd721d272d94e3d3a63653fa17516741ca6"; + }; + } + { + name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz"; + path = fetchurl { + name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz"; + sha1 = "8489b1cb0d29ff88195cceca448ff6d6cc295c36"; + }; + } + { + name = "lodash.mapvalues___lodash.mapvalues_4.6.0.tgz"; + path = fetchurl { + name = "lodash.mapvalues___lodash.mapvalues_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz"; + sha1 = "1bafa5005de9dd6f4f26668c30ca37230cc9689c"; + }; + } + { + name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; + path = fetchurl { + name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz"; + sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe"; + }; + } + { + name = "lodash.merge___lodash.merge_4.6.2.tgz"; + path = fetchurl { + name = "lodash.merge___lodash.merge_4.6.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz"; + sha1 = "558aa53b43b661e1925a0afdfa36a9a1085fe57a"; + }; + } + { + name = "lodash.template___lodash.template_4.5.0.tgz"; + path = fetchurl { + name = "lodash.template___lodash.template_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz"; + sha1 = "f976195cf3f347d0d5f52483569fe8031ccce8ab"; + }; + } + { + name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; + path = fetchurl { + name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz"; + sha1 = "e481310f049d3cf6d47e912ad09313b154f0fb33"; + }; + } + { + name = "lodash.transform___lodash.transform_4.6.0.tgz"; + path = fetchurl { + name = "lodash.transform___lodash.transform_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz"; + sha1 = "12306422f63324aed8483d3f38332b5f670547a0"; + }; + } + { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + path = fetchurl { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; + sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; + }; + } + { + name = "lodash___lodash_4.17.15.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.15.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz"; + sha1 = "b447f6670a0455bbfeedd11392eff330ea097548"; + }; + } + { + name = "log_symbols___log_symbols_2.2.0.tgz"; + path = fetchurl { + name = "log_symbols___log_symbols_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz"; + sha1 = "5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"; + }; + } + { + name = "loglevel___loglevel_1.6.8.tgz"; + path = fetchurl { + name = "loglevel___loglevel_1.6.8.tgz"; + url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz"; + sha1 = "8a25fb75d092230ecd4457270d80b54e28011171"; + }; + } + { + name = "loose_envify___loose_envify_1.4.0.tgz"; + path = fetchurl { + name = "loose_envify___loose_envify_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz"; + sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf"; + }; + } + { + name = "lower_case___lower_case_1.1.4.tgz"; + path = fetchurl { + name = "lower_case___lower_case_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz"; + sha1 = "9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"; + }; + } + { + name = "lru_cache___lru_cache_4.1.5.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; + sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; + }; + } + { + name = "lru_cache___lru_cache_5.1.1.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz"; + sha1 = "1da27e6710271947695daf6848e847f01d84b920"; + }; + } + { + name = "make_dir___make_dir_2.1.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz"; + sha1 = "5f0310e18b8be898cc07009295a30ae41e91e6f5"; + }; + } + { + name = "make_dir___make_dir_3.1.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz"; + sha1 = "415e967046b3a7f1d185277d84aa58203726a13f"; + }; + } + { + name = "map_cache___map_cache_0.2.2.tgz"; + path = fetchurl { + name = "map_cache___map_cache_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz"; + sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; + }; + } + { + name = "map_visit___map_visit_1.0.0.tgz"; + path = fetchurl { + name = "map_visit___map_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz"; + sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; + }; + } + { + name = "md5.js___md5.js_1.3.5.tgz"; + path = fetchurl { + name = "md5.js___md5.js_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz"; + sha1 = "b5d07b8e3216e3e27cd728d72f70d1e6a342005f"; + }; + } + { + name = "mdn_data___mdn_data_2.0.4.tgz"; + path = fetchurl { + name = "mdn_data___mdn_data_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz"; + sha1 = "699b3c38ac6f1d728091a64650b65d388502fd5b"; + }; + } + { + name = "mdn_data___mdn_data_2.0.6.tgz"; + path = fetchurl { + name = "mdn_data___mdn_data_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz"; + sha1 = "852dc60fcaa5daa2e8cf6c9189c440ed3e042978"; + }; + } + { + name = "media_typer___media_typer_0.3.0.tgz"; + path = fetchurl { + name = "media_typer___media_typer_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + } + { + name = "memory_fs___memory_fs_0.4.1.tgz"; + path = fetchurl { + name = "memory_fs___memory_fs_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz"; + sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552"; + }; + } + { + name = "memory_fs___memory_fs_0.5.0.tgz"; + path = fetchurl { + name = "memory_fs___memory_fs_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz"; + sha1 = "324c01288b88652966d161db77838720845a8e3c"; + }; + } + { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + path = fetchurl { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + } + { + name = "merge_source_map___merge_source_map_1.1.0.tgz"; + path = fetchurl { + name = "merge_source_map___merge_source_map_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz"; + sha1 = "2fdde7e6020939f70906a68f2d7ae685e4c8c646"; + }; + } + { + name = "merge_stream___merge_stream_2.0.0.tgz"; + path = fetchurl { + name = "merge_stream___merge_stream_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz"; + sha1 = "52823629a14dd00c9770fb6ad47dc6310f2c1f60"; + }; + } + { + name = "merge2___merge2_1.4.1.tgz"; + path = fetchurl { + name = "merge2___merge2_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz"; + sha1 = "4368892f885e907455a6fd7dc55c0c9d404990ae"; + }; + } + { + name = "methods___methods_1.1.2.tgz"; + path = fetchurl { + name = "methods___methods_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + } + { + name = "micromatch___micromatch_3.1.10.tgz"; + path = fetchurl { + name = "micromatch___micromatch_3.1.10.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz"; + sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23"; + }; + } + { + name = "miller_rabin___miller_rabin_4.0.1.tgz"; + path = fetchurl { + name = "miller_rabin___miller_rabin_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz"; + sha1 = "f080351c865b0dc562a8462966daa53543c78a4d"; + }; + } + { + name = "mime_db___mime_db_1.44.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.44.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz"; + sha1 = "fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"; + }; + } + { + name = "mime_types___mime_types_2.1.27.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.27.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz"; + sha1 = "47949f98e279ea53119f5722e0f34e529bec009f"; + }; + } + { + name = "mime___mime_1.6.0.tgz"; + path = fetchurl { + name = "mime___mime_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz"; + sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1"; + }; + } + { + name = "mime___mime_2.4.6.tgz"; + path = fetchurl { + name = "mime___mime_2.4.6.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz"; + sha1 = "e5b407c90db442f2beb5b162373d07b69affa4d1"; + }; + } + { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + path = fetchurl { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz"; + sha1 = "820c86a39334640e99516928bd03fca88057d022"; + }; + } + { + name = "mimic_fn___mimic_fn_2.1.0.tgz"; + path = fetchurl { + name = "mimic_fn___mimic_fn_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz"; + sha1 = "7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"; + }; + } + { + name = "mini_css_extract_plugin___mini_css_extract_plugin_0.9.0.tgz"; + path = fetchurl { + name = "mini_css_extract_plugin___mini_css_extract_plugin_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz"; + sha1 = "47f2cf07aa165ab35733b1fc97d4c46c0564339e"; + }; + } + { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; + sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"; + }; + } + { + name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"; + sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"; + }; + } + { + name = "minimatch___minimatch_3.0.4.tgz"; + path = fetchurl { + name = "minimatch___minimatch_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"; + sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; + }; + } + { + name = "minimist___minimist_1.2.5.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz"; + sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602"; + }; + } + { + name = "minipass_collect___minipass_collect_1.0.2.tgz"; + path = fetchurl { + name = "minipass_collect___minipass_collect_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz"; + sha1 = "22b813bf745dc6edba2576b940022ad6edc8c617"; + }; + } + { + name = "minipass_flush___minipass_flush_1.0.5.tgz"; + path = fetchurl { + name = "minipass_flush___minipass_flush_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz"; + sha1 = "82e7135d7e89a50ffe64610a787953c4c4cbb373"; + }; + } + { + name = "minipass_pipeline___minipass_pipeline_1.2.3.tgz"; + path = fetchurl { + name = "minipass_pipeline___minipass_pipeline_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz"; + sha1 = "55f7839307d74859d6e8ada9c3ebe72cec216a34"; + }; + } + { + name = "minipass___minipass_3.1.3.tgz"; + path = fetchurl { + name = "minipass___minipass_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz"; + sha1 = "7d42ff1f39635482e15f9cdb53184deebd5815fd"; + }; + } + { + name = "mississippi___mississippi_3.0.0.tgz"; + path = fetchurl { + name = "mississippi___mississippi_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz"; + sha1 = "ea0a3291f97e0b5e8776b363d5f0a12d94c67022"; + }; + } + { + name = "mixin_deep___mixin_deep_1.3.2.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz"; + sha1 = "1120b43dc359a785dce65b55b82e257ccf479566"; + }; + } + { + name = "mkdirp___mkdirp_0.5.5.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.5.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz"; + sha1 = "d91cefd62d1436ca0f41620e251288d420099def"; + }; + } + { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + path = fetchurl { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz"; + sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92"; + }; + } + { + name = "ms___ms_2.0.0.tgz"; + path = fetchurl { + name = "ms___ms_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + } + { + name = "ms___ms_2.1.1.tgz"; + path = fetchurl { + name = "ms___ms_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz"; + sha1 = "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"; + }; + } + { + name = "ms___ms_2.1.2.tgz"; + path = fetchurl { + name = "ms___ms_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz"; + sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009"; + }; + } + { + name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; + path = fetchurl { + name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz"; + sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901"; + }; + } + { + name = "multicast_dns___multicast_dns_6.2.3.tgz"; + path = fetchurl { + name = "multicast_dns___multicast_dns_6.2.3.tgz"; + url = "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz"; + sha1 = "a0ec7bd9055c4282f790c3c82f4e28db3b31b229"; + }; + } + { + name = "mute_stream___mute_stream_0.0.8.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz"; + sha1 = "1630c42b2251ff81e2a283de96a5497ea92e5e0d"; + }; + } + { + name = "mz___mz_2.7.0.tgz"; + path = fetchurl { + name = "mz___mz_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz"; + sha1 = "95008057a56cafadc2bc63dde7f9ff6955948e32"; + }; + } + { + name = "nan___nan_2.14.1.tgz"; + path = fetchurl { + name = "nan___nan_2.14.1.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz"; + sha1 = "d7be34dfa3105b91494c3147089315eff8874b01"; + }; + } + { + name = "nanomatch___nanomatch_1.2.13.tgz"; + path = fetchurl { + name = "nanomatch___nanomatch_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz"; + sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119"; + }; + } + { + name = "natural_compare___natural_compare_1.4.0.tgz"; + path = fetchurl { + name = "natural_compare___natural_compare_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz"; + sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"; + }; + } + { + name = "negotiator___negotiator_0.6.2.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.6.2.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz"; + sha1 = "feacf7ccf525a77ae9634436a64883ffeca346fb"; + }; + } + { + name = "neo_async___neo_async_2.6.1.tgz"; + path = fetchurl { + name = "neo_async___neo_async_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz"; + sha1 = "ac27ada66167fa8849a6addd837f6b189ad2081c"; + }; + } + { + name = "nice_try___nice_try_1.0.5.tgz"; + path = fetchurl { + name = "nice_try___nice_try_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz"; + sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366"; + }; + } + { + name = "no_case___no_case_2.3.2.tgz"; + path = fetchurl { + name = "no_case___no_case_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz"; + sha1 = "60b813396be39b3f1288a4c1ed5d1e7d28b464ac"; + }; + } + { + name = "node_forge___node_forge_0.9.0.tgz"; + path = fetchurl { + name = "node_forge___node_forge_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz"; + sha1 = "d624050edbb44874adca12bb9a52ec63cb782579"; + }; + } + { + name = "node_ipc___node_ipc_9.1.1.tgz"; + path = fetchurl { + name = "node_ipc___node_ipc_9.1.1.tgz"; + url = "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz"; + sha1 = "4e245ed6938e65100e595ebc5dc34b16e8dd5d69"; + }; + } + { + name = "node_libs_browser___node_libs_browser_2.2.1.tgz"; + path = fetchurl { + name = "node_libs_browser___node_libs_browser_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz"; + sha1 = "b64f513d18338625f90346d27b0d235e631f6425"; + }; + } + { + name = "node_releases___node_releases_1.1.58.tgz"; + path = fetchurl { + name = "node_releases___node_releases_1.1.58.tgz"; + url = "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz"; + sha1 = "8ee20eef30fa60e52755fcc0942def5a734fe935"; + }; + } + { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz"; + sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8"; + }; + } + { + name = "normalize_path___normalize_path_1.0.0.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz"; + sha1 = "32d0e472f91ff345701c15a8311018d3b0a90379"; + }; + } + { + name = "normalize_path___normalize_path_2.1.1.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz"; + sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; + }; + } + { + name = "normalize_path___normalize_path_3.0.0.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz"; + sha1 = "0dcd69ff23a1c9b11fd0978316644a0388216a65"; + }; + } + { + name = "normalize_range___normalize_range_0.1.2.tgz"; + path = fetchurl { + name = "normalize_range___normalize_range_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz"; + sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942"; + }; + } + { + name = "normalize_url___normalize_url_1.9.1.tgz"; + path = fetchurl { + name = "normalize_url___normalize_url_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz"; + sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c"; + }; + } + { + name = "normalize_url___normalize_url_3.3.0.tgz"; + path = fetchurl { + name = "normalize_url___normalize_url_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz"; + sha1 = "b2e1c4dc4f7c6d57743df733a4f5978d18650559"; + }; + } + { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + path = fetchurl { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz"; + sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f"; + }; + } + { + name = "npm_run_path___npm_run_path_4.0.1.tgz"; + path = fetchurl { + name = "npm_run_path___npm_run_path_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz"; + sha1 = "b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"; + }; + } + { + name = "nth_check___nth_check_1.0.2.tgz"; + path = fetchurl { + name = "nth_check___nth_check_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz"; + sha1 = "b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"; + }; + } + { + name = "num2fraction___num2fraction_1.2.2.tgz"; + path = fetchurl { + name = "num2fraction___num2fraction_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz"; + sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"; + }; + } + { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; + }; + } + { + name = "object_assign___object_assign_4.1.1.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + } + { + name = "object_copy___object_copy_0.1.0.tgz"; + path = fetchurl { + name = "object_copy___object_copy_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz"; + sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; + }; + } + { + name = "object_hash___object_hash_1.3.1.tgz"; + path = fetchurl { + name = "object_hash___object_hash_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz"; + sha1 = "fde452098a951cb145f039bb7d455449ddc126df"; + }; + } + { + name = "object_inspect___object_inspect_1.7.0.tgz"; + path = fetchurl { + name = "object_inspect___object_inspect_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz"; + sha1 = "f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"; + }; + } + { + name = "object_is___object_is_1.1.2.tgz"; + path = fetchurl { + name = "object_is___object_is_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz"; + sha1 = "c5d2e87ff9e119f78b7a088441519e2eec1573b6"; + }; + } + { + name = "object_keys___object_keys_1.1.1.tgz"; + path = fetchurl { + name = "object_keys___object_keys_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz"; + sha1 = "1c47f272df277f3b1daf061677d9c82e2322c60e"; + }; + } + { + name = "object_visit___object_visit_1.0.1.tgz"; + path = fetchurl { + name = "object_visit___object_visit_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz"; + sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; + }; + } + { + name = "object.assign___object.assign_4.1.0.tgz"; + path = fetchurl { + name = "object.assign___object.assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz"; + sha1 = "968bf1100d7956bb3ca086f006f846b3bc4008da"; + }; + } + { + name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.1.0.tgz"; + path = fetchurl { + name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"; + sha1 = "369bf1f9592d8ab89d712dced5cb81c7c5352649"; + }; + } + { + name = "object.pick___object.pick_1.3.0.tgz"; + path = fetchurl { + name = "object.pick___object.pick_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz"; + sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; + }; + } + { + name = "object.values___object.values_1.1.1.tgz"; + path = fetchurl { + name = "object.values___object.values_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz"; + sha1 = "68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"; + }; + } + { + name = "obuf___obuf_1.1.2.tgz"; + path = fetchurl { + name = "obuf___obuf_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz"; + sha1 = "09bea3343d41859ebd446292d11c9d4db619084e"; + }; + } + { + name = "on_finished___on_finished_2.3.0.tgz"; + path = fetchurl { + name = "on_finished___on_finished_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + } + { + name = "on_headers___on_headers_1.0.2.tgz"; + path = fetchurl { + name = "on_headers___on_headers_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz"; + sha1 = "772b0ae6aaa525c399e489adfad90c403eb3c28f"; + }; + } + { + name = "once___once_1.4.0.tgz"; + path = fetchurl { + name = "once___once_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + } + { + name = "onetime___onetime_2.0.1.tgz"; + path = fetchurl { + name = "onetime___onetime_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz"; + sha1 = "067428230fd67443b2794b22bba528b6867962d4"; + }; + } + { + name = "onetime___onetime_5.1.0.tgz"; + path = fetchurl { + name = "onetime___onetime_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz"; + sha1 = "fff0f3c91617fe62bb50189636e99ac8a6df7be5"; + }; + } + { + name = "open___open_6.4.0.tgz"; + path = fetchurl { + name = "open___open_6.4.0.tgz"; + url = "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz"; + sha1 = "5c13e96d0dc894686164f18965ecfe889ecfc8a9"; + }; + } + { + name = "opener___opener_1.5.1.tgz"; + path = fetchurl { + name = "opener___opener_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz"; + sha1 = "6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"; + }; + } + { + name = "opn___opn_5.5.0.tgz"; + path = fetchurl { + name = "opn___opn_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz"; + sha1 = "fc7164fab56d235904c51c3b27da6758ca3b9bfc"; + }; + } + { + name = "optionator___optionator_0.9.1.tgz"; + path = fetchurl { + name = "optionator___optionator_0.9.1.tgz"; + url = "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz"; + sha1 = "4f236a6373dae0566a6d43e1326674f50c291499"; + }; + } + { + name = "ora___ora_3.4.0.tgz"; + path = fetchurl { + name = "ora___ora_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz"; + sha1 = "bf0752491059a3ef3ed4c85097531de9fdbcd318"; + }; + } + { + name = "original___original_1.0.2.tgz"; + path = fetchurl { + name = "original___original_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz"; + sha1 = "e442a61cffe1c5fd20a65f3261c26663b303f25f"; + }; + } + { + name = "os_browserify___os_browserify_0.3.0.tgz"; + path = fetchurl { + name = "os_browserify___os_browserify_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz"; + sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27"; + }; + } + { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + path = fetchurl { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + } + { + name = "p_finally___p_finally_1.0.0.tgz"; + path = fetchurl { + name = "p_finally___p_finally_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz"; + sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae"; + }; + } + { + name = "p_finally___p_finally_2.0.1.tgz"; + path = fetchurl { + name = "p_finally___p_finally_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz"; + sha1 = "bd6fcaa9c559a096b680806f4d657b3f0f240561"; + }; + } + { + name = "p_limit___p_limit_1.3.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz"; + sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"; + }; + } + { + name = "p_limit___p_limit_2.3.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz"; + sha1 = "3dd33c647a214fdfffd835933eb086da0dc21db1"; + }; + } + { + name = "p_locate___p_locate_2.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz"; + sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; + }; + } + { + name = "p_locate___p_locate_3.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz"; + sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4"; + }; + } + { + name = "p_locate___p_locate_4.1.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz"; + sha1 = "a3428bb7088b3a60292f66919278b7c297ad4f07"; + }; + } + { + name = "p_map___p_map_2.1.0.tgz"; + path = fetchurl { + name = "p_map___p_map_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz"; + sha1 = "310928feef9c9ecc65b68b17693018a665cea175"; + }; + } + { + name = "p_map___p_map_3.0.0.tgz"; + path = fetchurl { + name = "p_map___p_map_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz"; + sha1 = "d704d9af8a2ba684e2600d9a215983d4141a979d"; + }; + } + { + name = "p_retry___p_retry_3.0.1.tgz"; + path = fetchurl { + name = "p_retry___p_retry_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz"; + sha1 = "316b4c8893e2c8dc1cfa891f406c4b422bebf328"; + }; + } + { + name = "p_try___p_try_1.0.0.tgz"; + path = fetchurl { + name = "p_try___p_try_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz"; + sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; + }; + } + { + name = "p_try___p_try_2.2.0.tgz"; + path = fetchurl { + name = "p_try___p_try_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz"; + sha1 = "cb2868540e313d61de58fafbe35ce9004d5540e6"; + }; + } + { + name = "pako___pako_1.0.11.tgz"; + path = fetchurl { + name = "pako___pako_1.0.11.tgz"; + url = "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz"; + sha1 = "6c9599d340d54dfd3946380252a35705a6b992bf"; + }; + } + { + name = "parallel_transform___parallel_transform_1.2.0.tgz"; + path = fetchurl { + name = "parallel_transform___parallel_transform_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz"; + sha1 = "9049ca37d6cb2182c3b1d2c720be94d14a5814fc"; + }; + } + { + name = "param_case___param_case_2.1.1.tgz"; + path = fetchurl { + name = "param_case___param_case_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz"; + sha1 = "df94fd8cf6531ecf75e6bef9a0858fbc72be2247"; + }; + } + { + name = "parent_module___parent_module_1.0.1.tgz"; + path = fetchurl { + name = "parent_module___parent_module_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz"; + sha1 = "691d2709e78c79fae3a156622452d00762caaaa2"; + }; + } + { + name = "parse_asn1___parse_asn1_5.1.5.tgz"; + path = fetchurl { + name = "parse_asn1___parse_asn1_5.1.5.tgz"; + url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz"; + sha1 = "003271343da58dc94cace494faef3d2147ecea0e"; + }; + } + { + name = "parse_json___parse_json_4.0.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz"; + sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0"; + }; + } + { + name = "parse_json___parse_json_5.0.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz"; + sha1 = "73e5114c986d143efa3712d4ea24db9a4266f60f"; + }; + } + { + name = "parse5_htmlparser2_tree_adapter___parse5_htmlparser2_tree_adapter_5.1.1.tgz"; + path = fetchurl { + name = "parse5_htmlparser2_tree_adapter___parse5_htmlparser2_tree_adapter_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz"; + sha1 = "e8c743d4e92194d5293ecde2b08be31e67461cbc"; + }; + } + { + name = "parse5___parse5_5.1.1.tgz"; + path = fetchurl { + name = "parse5___parse5_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz"; + sha1 = "f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"; + }; + } + { + name = "parseurl___parseurl_1.3.3.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz"; + sha1 = "9da19e7bee8d12dff0513ed5b76957793bc2e8d4"; + }; + } + { + name = "pascalcase___pascalcase_0.1.1.tgz"; + path = fetchurl { + name = "pascalcase___pascalcase_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz"; + sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; + }; + } + { + name = "path_browserify___path_browserify_0.0.1.tgz"; + path = fetchurl { + name = "path_browserify___path_browserify_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz"; + sha1 = "e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"; + }; + } + { + name = "path_dirname___path_dirname_1.0.2.tgz"; + path = fetchurl { + name = "path_dirname___path_dirname_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz"; + sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; + }; + } + { + name = "path_exists___path_exists_2.1.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz"; + sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b"; + }; + } + { + name = "path_exists___path_exists_3.0.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz"; + sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; + }; + } + { + name = "path_exists___path_exists_4.0.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz"; + sha1 = "513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"; + }; + } + { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + path = fetchurl { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + } + { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + path = fetchurl { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz"; + sha1 = "365417dede44430d1c11af61027facf074bdfc53"; + }; + } + { + name = "path_key___path_key_2.0.1.tgz"; + path = fetchurl { + name = "path_key___path_key_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz"; + sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; + }; + } + { + name = "path_key___path_key_3.1.1.tgz"; + path = fetchurl { + name = "path_key___path_key_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz"; + sha1 = "581f6ade658cbba65a0d3380de7753295054f375"; + }; + } + { + name = "path_parse___path_parse_1.0.6.tgz"; + path = fetchurl { + name = "path_parse___path_parse_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; + sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; + }; + } + { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + path = fetchurl { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + } + { + name = "path_type___path_type_3.0.0.tgz"; + path = fetchurl { + name = "path_type___path_type_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz"; + sha1 = "cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"; + }; + } + { + name = "pbkdf2___pbkdf2_3.1.1.tgz"; + path = fetchurl { + name = "pbkdf2___pbkdf2_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz"; + sha1 = "cb8724b0fada984596856d1a6ebafd3584654b94"; + }; + } + { + name = "performance_now___performance_now_2.1.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + } + { + name = "picomatch___picomatch_2.2.2.tgz"; + path = fetchurl { + name = "picomatch___picomatch_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz"; + sha1 = "21f333e9b6b8eaff02468f5146ea406d345f4dad"; + }; + } + { + name = "pify___pify_2.3.0.tgz"; + path = fetchurl { + name = "pify___pify_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + } + { + name = "pify___pify_3.0.0.tgz"; + path = fetchurl { + name = "pify___pify_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz"; + sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"; + }; + } + { + name = "pify___pify_4.0.1.tgz"; + path = fetchurl { + name = "pify___pify_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz"; + sha1 = "4b2cd25c50d598735c50292224fd8c6df41e3231"; + }; + } + { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + path = fetchurl { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + } + { + name = "pinkie___pinkie_2.0.4.tgz"; + path = fetchurl { + name = "pinkie___pinkie_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + } + { + name = "pkg_dir___pkg_dir_1.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz"; + sha1 = "7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"; + }; + } + { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz"; + sha1 = "2749020f239ed990881b1f71210d51eb6523bea3"; + }; + } + { + name = "pkg_dir___pkg_dir_4.2.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz"; + sha1 = "f099133df7ede422e81d1d8448270eeb3e4261f3"; + }; + } + { + name = "pkg_up___pkg_up_2.0.0.tgz"; + path = fetchurl { + name = "pkg_up___pkg_up_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz"; + sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f"; + }; + } + { + name = "pnp_webpack_plugin___pnp_webpack_plugin_1.6.4.tgz"; + path = fetchurl { + name = "pnp_webpack_plugin___pnp_webpack_plugin_1.6.4.tgz"; + url = "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz"; + sha1 = "c9711ac4dc48a685dabafc86f8b6dd9f8df84149"; + }; + } + { + name = "portfinder___portfinder_1.0.26.tgz"; + path = fetchurl { + name = "portfinder___portfinder_1.0.26.tgz"; + url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz"; + sha1 = "475658d56ca30bed72ac7f1378ed350bd1b64e70"; + }; + } + { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + path = fetchurl { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; + sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; + }; + } + { + name = "postcss_calc___postcss_calc_7.0.2.tgz"; + path = fetchurl { + name = "postcss_calc___postcss_calc_7.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz"; + sha1 = "504efcd008ca0273120568b0792b16cdcde8aac1"; + }; + } + { + name = "postcss_colormin___postcss_colormin_4.0.3.tgz"; + path = fetchurl { + name = "postcss_colormin___postcss_colormin_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz"; + sha1 = "ae060bce93ed794ac71264f08132d550956bd381"; + }; + } + { + name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz"; + path = fetchurl { + name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz"; + sha1 = "ca3813ed4da0f812f9d43703584e449ebe189a7f"; + }; + } + { + name = "postcss_discard_comments___postcss_discard_comments_4.0.2.tgz"; + path = fetchurl { + name = "postcss_discard_comments___postcss_discard_comments_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz"; + sha1 = "1fbabd2c246bff6aaad7997b2b0918f4d7af4033"; + }; + } + { + name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz"; + path = fetchurl { + name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz"; + sha1 = "3fe133cd3c82282e550fc9b239176a9207b784eb"; + }; + } + { + name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz"; + sha1 = "c8c951e9f73ed9428019458444a02ad90bb9f765"; + }; + } + { + name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz"; + sha1 = "652aef8a96726f029f5e3e00146ee7a4e755ff57"; + }; + } + { + name = "postcss_load_config___postcss_load_config_2.1.0.tgz"; + path = fetchurl { + name = "postcss_load_config___postcss_load_config_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz"; + sha1 = "c84d692b7bb7b41ddced94ee62e8ab31b417b003"; + }; + } + { + name = "postcss_loader___postcss_loader_3.0.0.tgz"; + path = fetchurl { + name = "postcss_loader___postcss_loader_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz"; + sha1 = "6b97943e47c72d845fa9e03f273773d4e8dd6c2d"; + }; + } + { + name = "postcss_merge_longhand___postcss_merge_longhand_4.0.11.tgz"; + path = fetchurl { + name = "postcss_merge_longhand___postcss_merge_longhand_4.0.11.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz"; + sha1 = "62f49a13e4a0ee04e7b98f42bb16062ca2549e24"; + }; + } + { + name = "postcss_merge_rules___postcss_merge_rules_4.0.3.tgz"; + path = fetchurl { + name = "postcss_merge_rules___postcss_merge_rules_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz"; + sha1 = "362bea4ff5a1f98e4075a713c6cb25aefef9a650"; + }; + } + { + name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz"; + sha1 = "cd4c344cce474343fac5d82206ab2cbcb8afd5a6"; + }; + } + { + name = "postcss_minify_gradients___postcss_minify_gradients_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_gradients___postcss_minify_gradients_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz"; + sha1 = "93b29c2ff5099c535eecda56c4aa6e665a663471"; + }; + } + { + name = "postcss_minify_params___postcss_minify_params_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_params___postcss_minify_params_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz"; + sha1 = "6b9cef030c11e35261f95f618c90036d680db874"; + }; + } + { + name = "postcss_minify_selectors___postcss_minify_selectors_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_selectors___postcss_minify_selectors_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz"; + sha1 = "e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"; + }; + } + { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz"; + path = fetchurl { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz"; + sha1 = "818719a1ae1da325f9832446b01136eeb493cd7e"; + }; + } + { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_3.0.2.tgz"; + path = fetchurl { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz"; + sha1 = "e8a6561be914aaf3c052876377524ca90dbb7915"; + }; + } + { + name = "postcss_modules_scope___postcss_modules_scope_2.2.0.tgz"; + path = fetchurl { + name = "postcss_modules_scope___postcss_modules_scope_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz"; + sha1 = "385cae013cc7743f5a7d7602d1073a89eaae62ee"; + }; + } + { + name = "postcss_modules_values___postcss_modules_values_3.0.0.tgz"; + path = fetchurl { + name = "postcss_modules_values___postcss_modules_values_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz"; + sha1 = "5b5000d6ebae29b4255301b4a3a54574423e7f10"; + }; + } + { + name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz"; + sha1 = "8b35add3aee83a136b0471e0d59be58a50285dd4"; + }; + } + { + name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz"; + sha1 = "0dbe04a4ce9063d4667ed2be476bb830c825935a"; + }; + } + { + name = "postcss_normalize_positions___postcss_normalize_positions_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_positions___postcss_normalize_positions_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz"; + sha1 = "05f757f84f260437378368a91f8932d4b102917f"; + }; + } + { + name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz"; + sha1 = "c4ebbc289f3991a028d44751cbdd11918b17910c"; + }; + } + { + name = "postcss_normalize_string___postcss_normalize_string_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_string___postcss_normalize_string_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz"; + sha1 = "cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"; + }; + } + { + name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz"; + sha1 = "8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"; + }; + } + { + name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz"; + sha1 = "841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"; + }; + } + { + name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz"; + sha1 = "10e437f86bc7c7e58f7b9652ed878daaa95faae1"; + }; + } + { + name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.2.tgz"; + path = fetchurl { + name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz"; + sha1 = "bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"; + }; + } + { + name = "postcss_ordered_values___postcss_ordered_values_4.1.2.tgz"; + path = fetchurl { + name = "postcss_ordered_values___postcss_ordered_values_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz"; + sha1 = "0cf75c820ec7d5c4d280189559e0b571ebac0eee"; + }; + } + { + name = "postcss_reduce_initial___postcss_reduce_initial_4.0.3.tgz"; + path = fetchurl { + name = "postcss_reduce_initial___postcss_reduce_initial_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz"; + sha1 = "7fd42ebea5e9c814609639e2c2e84ae270ba48df"; + }; + } + { + name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.2.tgz"; + path = fetchurl { + name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz"; + sha1 = "17efa405eacc6e07be3414a5ca2d1074681d4e29"; + }; + } + { + name = "postcss_selector_parser___postcss_selector_parser_3.1.2.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz"; + sha1 = "b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"; + }; + } + { + name = "postcss_selector_parser___postcss_selector_parser_6.0.2.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz"; + sha1 = "934cf799d016c83411859e09dcecade01286ec5c"; + }; + } + { + name = "postcss_svgo___postcss_svgo_4.0.2.tgz"; + path = fetchurl { + name = "postcss_svgo___postcss_svgo_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz"; + sha1 = "17b997bc711b333bab143aaed3b8d3d6e3d38258"; + }; + } + { + name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz"; + path = fetchurl { + name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz"; + sha1 = "9446911f3289bfd64c6d680f073c03b1f9ee4bac"; + }; + } + { + name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz"; + path = fetchurl { + name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"; + sha1 = "9ff822547e2893213cf1c30efa51ac5fd1ba8281"; + }; + } + { + name = "postcss_value_parser___postcss_value_parser_4.1.0.tgz"; + path = fetchurl { + name = "postcss_value_parser___postcss_value_parser_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz"; + sha1 = "443f6a20ced6481a2bda4fa8532a6e55d789a2cb"; + }; + } + { + name = "postcss___postcss_7.0.32.tgz"; + path = fetchurl { + name = "postcss___postcss_7.0.32.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz"; + sha1 = "4310d6ee347053da3433db2be492883d62cec59d"; + }; + } + { + name = "prelude_ls___prelude_ls_1.2.1.tgz"; + path = fetchurl { + name = "prelude_ls___prelude_ls_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz"; + sha1 = "debc6489d7a6e6b0e7611888cec880337d316396"; + }; + } + { + name = "prepend_http___prepend_http_1.0.4.tgz"; + path = fetchurl { + name = "prepend_http___prepend_http_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz"; + sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"; + }; + } + { + name = "prettier_linter_helpers___prettier_linter_helpers_1.0.0.tgz"; + path = fetchurl { + name = "prettier_linter_helpers___prettier_linter_helpers_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz"; + sha1 = "d23d41fe1375646de2d0104d3454a3008802cf7b"; + }; + } + { + name = "prettier___prettier_1.19.1.tgz"; + path = fetchurl { + name = "prettier___prettier_1.19.1.tgz"; + url = "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz"; + sha1 = "f7d7f5ff8a9cd872a7be4ca142095956a60797cb"; + }; + } + { + name = "prettier___prettier_2.0.5.tgz"; + path = fetchurl { + name = "prettier___prettier_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz"; + sha1 = "d6d56282455243f2f92cc1716692c08aa31522d4"; + }; + } + { + name = "pretty_bytes___pretty_bytes_5.3.0.tgz"; + path = fetchurl { + name = "pretty_bytes___pretty_bytes_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz"; + sha1 = "f2849e27db79fb4d6cfe24764fc4134f165989f2"; + }; + } + { + name = "pretty_error___pretty_error_2.1.1.tgz"; + path = fetchurl { + name = "pretty_error___pretty_error_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz"; + sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"; + }; + } + { + name = "private___private_0.1.8.tgz"; + path = fetchurl { + name = "private___private_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz"; + sha1 = "2381edb3689f7a53d653190060fcf822d2f368ff"; + }; + } + { + name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; + sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"; + }; + } + { + name = "process___process_0.11.10.tgz"; + path = fetchurl { + name = "process___process_0.11.10.tgz"; + url = "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz"; + sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182"; + }; + } + { + name = "progress___progress_2.0.3.tgz"; + path = fetchurl { + name = "progress___progress_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz"; + sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"; + }; + } + { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + path = fetchurl { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz"; + sha1 = "98472870bf228132fcbdd868129bad12c3c029e3"; + }; + } + { + name = "proxy_addr___proxy_addr_2.0.6.tgz"; + path = fetchurl { + name = "proxy_addr___proxy_addr_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz"; + sha1 = "fdc2336505447d3f2f2c638ed272caf614bbb2bf"; + }; + } + { + name = "prr___prr_1.0.1.tgz"; + path = fetchurl { + name = "prr___prr_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz"; + sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; + }; + } + { + name = "pseudomap___pseudomap_1.0.2.tgz"; + path = fetchurl { + name = "pseudomap___pseudomap_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + } + { + name = "psl___psl_1.8.0.tgz"; + path = fetchurl { + name = "psl___psl_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz"; + sha1 = "9326f8bcfb013adcc005fdff056acce020e51c24"; + }; + } + { + name = "public_encrypt___public_encrypt_4.0.3.tgz"; + path = fetchurl { + name = "public_encrypt___public_encrypt_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz"; + sha1 = "4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"; + }; + } + { + name = "pump___pump_2.0.1.tgz"; + path = fetchurl { + name = "pump___pump_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz"; + sha1 = "12399add6e4cf7526d973cbc8b5ce2e2908b3909"; + }; + } + { + name = "pump___pump_3.0.0.tgz"; + path = fetchurl { + name = "pump___pump_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz"; + sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64"; + }; + } + { + name = "pumpify___pumpify_1.5.1.tgz"; + path = fetchurl { + name = "pumpify___pumpify_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz"; + sha1 = "36513be246ab27570b1a374a5ce278bfd74370ce"; + }; + } + { + name = "punycode___punycode_1.3.2.tgz"; + path = fetchurl { + name = "punycode___punycode_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz"; + sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d"; + }; + } + { + name = "punycode___punycode_1.4.1.tgz"; + path = fetchurl { + name = "punycode___punycode_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + } + { + name = "punycode___punycode_2.1.1.tgz"; + path = fetchurl { + name = "punycode___punycode_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz"; + sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec"; + }; + } + { + name = "q___q_1.5.1.tgz"; + path = fetchurl { + name = "q___q_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz"; + sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7"; + }; + } + { + name = "qs___qs_6.7.0.tgz"; + path = fetchurl { + name = "qs___qs_6.7.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz"; + sha1 = "41dc1a015e3d581f1621776be31afb2876a9b1bc"; + }; + } + { + name = "qs___qs_6.5.2.tgz"; + path = fetchurl { + name = "qs___qs_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"; + sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36"; + }; + } + { + name = "query_string___query_string_4.3.4.tgz"; + path = fetchurl { + name = "query_string___query_string_4.3.4.tgz"; + url = "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz"; + sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb"; + }; + } + { + name = "querystring_es3___querystring_es3_0.2.1.tgz"; + path = fetchurl { + name = "querystring_es3___querystring_es3_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz"; + sha1 = "9ec61f79049875707d69414596fd907a4d711e73"; + }; + } + { + name = "querystring___querystring_0.2.0.tgz"; + path = fetchurl { + name = "querystring___querystring_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz"; + sha1 = "b209849203bb25df820da756e747005878521620"; + }; + } + { + name = "querystringify___querystringify_2.1.1.tgz"; + path = fetchurl { + name = "querystringify___querystringify_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz"; + sha1 = "60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"; + }; + } + { + name = "randombytes___randombytes_2.1.0.tgz"; + path = fetchurl { + name = "randombytes___randombytes_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz"; + sha1 = "df6f84372f0270dc65cdf6291349ab7a473d4f2a"; + }; + } + { + name = "randomfill___randomfill_1.0.4.tgz"; + path = fetchurl { + name = "randomfill___randomfill_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz"; + sha1 = "c92196fc86ab42be983f1bf31778224931d61458"; + }; + } + { + name = "range_parser___range_parser_1.2.1.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz"; + sha1 = "3cf37023d199e1c24d1a55b84800c2f3e6468031"; + }; + } + { + name = "raw_body___raw_body_2.4.0.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz"; + sha1 = "a1ce6fb9c9bc356ca52e89256ab59059e13d0332"; + }; + } + { + name = "raw_loader___raw_loader_4.0.1.tgz"; + path = fetchurl { + name = "raw_loader___raw_loader_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz"; + sha1 = "14e1f726a359b68437e183d5a5b7d33a3eba6933"; + }; + } + { + name = "read_pkg___read_pkg_5.2.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz"; + sha1 = "7bf295438ca5a33e56cd30e053b34ee7250c93cc"; + }; + } + { + name = "readable_stream___readable_stream_2.3.7.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.7.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz"; + sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57"; + }; + } + { + name = "readable_stream___readable_stream_3.6.0.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_3.6.0.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz"; + sha1 = "337bbda3adc0706bd3e024426a286d4b4b2c9198"; + }; + } + { + name = "readdirp___readdirp_2.2.1.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; + sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; + }; + } + { + name = "readdirp___readdirp_3.4.0.tgz"; + path = fetchurl { + name = "readdirp___readdirp_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz"; + sha1 = "9fdccdf9e9155805449221ac645e8303ab5b9ada"; + }; + } + { + name = "regenerate_unicode_properties___regenerate_unicode_properties_8.2.0.tgz"; + path = fetchurl { + name = "regenerate_unicode_properties___regenerate_unicode_properties_8.2.0.tgz"; + url = "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz"; + sha1 = "e5de7111d655e7ba60c057dbe9ff37c87e65cdec"; + }; + } + { + name = "regenerate___regenerate_1.4.1.tgz"; + path = fetchurl { + name = "regenerate___regenerate_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz"; + sha1 = "cad92ad8e6b591773485fbe05a485caf4f457e6f"; + }; + } + { + name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; + path = fetchurl { + name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; + sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"; + }; + } + { + name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz"; + path = fetchurl { + name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz"; + url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz"; + sha1 = "d878a1d094b4306d10b9096484b33ebd55e26697"; + }; + } + { + name = "regenerator_transform___regenerator_transform_0.14.4.tgz"; + path = fetchurl { + name = "regenerator_transform___regenerator_transform_0.14.4.tgz"; + url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz"; + sha1 = "5266857896518d1616a78a0479337a30ea974cc7"; + }; + } + { + name = "regex_not___regex_not_1.0.2.tgz"; + path = fetchurl { + name = "regex_not___regex_not_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz"; + sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c"; + }; + } + { + name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz"; + path = fetchurl { + name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz"; + sha1 = "7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"; + }; + } + { + name = "regexpp___regexpp_3.1.0.tgz"; + path = fetchurl { + name = "regexpp___regexpp_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz"; + sha1 = "206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"; + }; + } + { + name = "regexpu_core___regexpu_core_4.7.0.tgz"; + path = fetchurl { + name = "regexpu_core___regexpu_core_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz"; + sha1 = "fcbf458c50431b0bb7b45d6967b8192d91f3d938"; + }; + } + { + name = "register_service_worker___register_service_worker_1.7.1.tgz"; + path = fetchurl { + name = "register_service_worker___register_service_worker_1.7.1.tgz"; + url = "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.1.tgz"; + sha1 = "6308347ac6c0af0f6c0b22ea5d59d25e836bc932"; + }; + } + { + name = "regjsgen___regjsgen_0.5.2.tgz"; + path = fetchurl { + name = "regjsgen___regjsgen_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz"; + sha1 = "92ff295fb1deecbf6ecdab2543d207e91aa33733"; + }; + } + { + name = "regjsparser___regjsparser_0.6.4.tgz"; + path = fetchurl { + name = "regjsparser___regjsparser_0.6.4.tgz"; + url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz"; + sha1 = "a769f8684308401a66e9b529d2436ff4d0666272"; + }; + } + { + name = "relateurl___relateurl_0.2.7.tgz"; + path = fetchurl { + name = "relateurl___relateurl_0.2.7.tgz"; + url = "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz"; + sha1 = "54dbf377e51440aca90a4cd274600d3ff2d888a9"; + }; + } + { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + path = fetchurl { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; + sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; + }; + } + { + name = "renderkid___renderkid_2.0.3.tgz"; + path = fetchurl { + name = "renderkid___renderkid_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz"; + sha1 = "380179c2ff5ae1365c522bf2fcfcff01c5b74149"; + }; + } + { + name = "repeat_element___repeat_element_1.1.3.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; + sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; + }; + } + { + name = "repeat_string___repeat_string_1.6.1.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz"; + sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; + }; + } + { + name = "request_promise_core___request_promise_core_1.1.3.tgz"; + path = fetchurl { + name = "request_promise_core___request_promise_core_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz"; + sha1 = "e9a3c081b51380dfea677336061fea879a829ee9"; + }; + } + { + name = "request_promise_native___request_promise_native_1.0.8.tgz"; + path = fetchurl { + name = "request_promise_native___request_promise_native_1.0.8.tgz"; + url = "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz"; + sha1 = "a455b960b826e44e2bf8999af64dff2bfe58cb36"; + }; + } + { + name = "request___request_2.88.2.tgz"; + path = fetchurl { + name = "request___request_2.88.2.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz"; + sha1 = "d73c918731cb5a87da047e207234146f664d12b3"; + }; + } + { + name = "require_directory___require_directory_2.1.1.tgz"; + path = fetchurl { + name = "require_directory___require_directory_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + } + { + name = "require_main_filename___require_main_filename_2.0.0.tgz"; + path = fetchurl { + name = "require_main_filename___require_main_filename_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz"; + sha1 = "d0b329ecc7cc0f61649f62215be69af54aa8989b"; + }; + } + { + name = "requires_port___requires_port_1.0.0.tgz"; + path = fetchurl { + name = "requires_port___requires_port_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz"; + sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff"; + }; + } + { + name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; + path = fetchurl { + name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz"; + sha1 = "00a9f7387556e27038eae232caa372a6a59b665a"; + }; + } + { + name = "resolve_from___resolve_from_3.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz"; + sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; + }; + } + { + name = "resolve_from___resolve_from_4.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz"; + sha1 = "4abcd852ad32dd7baabfe9b40e00a36db5f392e6"; + }; + } + { + name = "resolve_url___resolve_url_0.2.1.tgz"; + path = fetchurl { + name = "resolve_url___resolve_url_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz"; + sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; + }; + } + { + name = "resolve___resolve_1.17.0.tgz"; + path = fetchurl { + name = "resolve___resolve_1.17.0.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz"; + sha1 = "b25941b54968231cc2d1bb76a79cb7f2c0bf8444"; + }; + } + { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz"; + sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf"; + }; + } + { + name = "restore_cursor___restore_cursor_3.1.0.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz"; + sha1 = "39f67c54b3a7a58cea5236d95cf0034239631f7e"; + }; + } + { + name = "ret___ret_0.1.15.tgz"; + path = fetchurl { + name = "ret___ret_0.1.15.tgz"; + url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz"; + sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"; + }; + } + { + name = "retry___retry_0.12.0.tgz"; + path = fetchurl { + name = "retry___retry_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz"; + sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b"; + }; + } + { + name = "rgb_regex___rgb_regex_1.0.1.tgz"; + path = fetchurl { + name = "rgb_regex___rgb_regex_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz"; + sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1"; + }; + } + { + name = "rgba_regex___rgba_regex_1.0.0.tgz"; + path = fetchurl { + name = "rgba_regex___rgba_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz"; + sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3"; + }; + } + { + name = "rimraf___rimraf_2.6.3.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.6.3.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz"; + sha1 = "b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"; + }; + } + { + name = "rimraf___rimraf_2.7.1.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz"; + sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec"; + }; + } + { + name = "ripemd160___ripemd160_2.0.2.tgz"; + path = fetchurl { + name = "ripemd160___ripemd160_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz"; + sha1 = "a1c1a6f624751577ba5d07914cbc92850585890c"; + }; + } + { + name = "run_async___run_async_2.4.1.tgz"; + path = fetchurl { + name = "run_async___run_async_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz"; + sha1 = "8440eccf99ea3e70bd409d49aab88e10c189a455"; + }; + } + { + name = "run_queue___run_queue_1.0.3.tgz"; + path = fetchurl { + name = "run_queue___run_queue_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz"; + sha1 = "e848396f057d223f24386924618e25694161ec47"; + }; + } + { + name = "rxjs___rxjs_6.5.5.tgz"; + path = fetchurl { + name = "rxjs___rxjs_6.5.5.tgz"; + url = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz"; + sha1 = "c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"; + }; + } + { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d"; + }; + } + { + name = "safe_buffer___safe_buffer_5.2.1.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.2.1.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz"; + sha1 = "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"; + }; + } + { + name = "safe_regex___safe_regex_1.1.0.tgz"; + path = fetchurl { + name = "safe_regex___safe_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz"; + sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; + }; + } + { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + path = fetchurl { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a"; + }; + } + { + name = "sass_loader___sass_loader_8.0.2.tgz"; + path = fetchurl { + name = "sass_loader___sass_loader_8.0.2.tgz"; + url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz"; + sha1 = "debecd8c3ce243c76454f2e8290482150380090d"; + }; + } + { + name = "sass___sass_1.26.8.tgz"; + path = fetchurl { + name = "sass___sass_1.26.8.tgz"; + url = "https://registry.yarnpkg.com/sass/-/sass-1.26.8.tgz"; + sha1 = "312652530721f9568d4c4000b0db07ec6eb23325"; + }; + } + { + name = "sax___sax_1.2.4.tgz"; + path = fetchurl { + name = "sax___sax_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz"; + sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9"; + }; + } + { + name = "schema_utils___schema_utils_1.0.0.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz"; + sha1 = "0b79a93204d7b600d4b2850d1f66c2a34951c770"; + }; + } + { + name = "schema_utils___schema_utils_2.7.0.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz"; + sha1 = "17151f76d8eae67fbbf77960c33c676ad9f4efc7"; + }; + } + { + name = "select_hose___select_hose_2.0.0.tgz"; + path = fetchurl { + name = "select_hose___select_hose_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz"; + sha1 = "625d8658f865af43ec962bfc376a37359a4994ca"; + }; + } + { + name = "selfsigned___selfsigned_1.10.7.tgz"; + path = fetchurl { + name = "selfsigned___selfsigned_1.10.7.tgz"; + url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz"; + sha1 = "da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"; + }; + } + { + name = "semver___semver_5.7.1.tgz"; + path = fetchurl { + name = "semver___semver_5.7.1.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz"; + sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7"; + }; + } + { + name = "semver___semver_7.0.0.tgz"; + path = fetchurl { + name = "semver___semver_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz"; + sha1 = "5f3ca35761e47e05b206c6daff2cf814f0316b8e"; + }; + } + { + name = "semver___semver_6.3.0.tgz"; + path = fetchurl { + name = "semver___semver_6.3.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz"; + sha1 = "ee0a64c8af5e8ceea67687b133761e1becbd1d3d"; + }; + } + { + name = "semver___semver_7.3.2.tgz"; + path = fetchurl { + name = "semver___semver_7.3.2.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz"; + sha1 = "604962b052b81ed0786aae84389ffba70ffd3938"; + }; + } + { + name = "send___send_0.17.1.tgz"; + path = fetchurl { + name = "send___send_0.17.1.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz"; + sha1 = "c1d8b059f7900f7466dd4938bdc44e11ddb376c8"; + }; + } + { + name = "serialize_javascript___serialize_javascript_2.1.2.tgz"; + path = fetchurl { + name = "serialize_javascript___serialize_javascript_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz"; + sha1 = "ecec53b0e0317bdc95ef76ab7074b7384785fa61"; + }; + } + { + name = "serialize_javascript___serialize_javascript_3.1.0.tgz"; + path = fetchurl { + name = "serialize_javascript___serialize_javascript_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz"; + sha1 = "8bf3a9170712664ef2561b44b691eafe399214ea"; + }; + } + { + name = "serve_index___serve_index_1.9.1.tgz"; + path = fetchurl { + name = "serve_index___serve_index_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz"; + sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; + }; + } + { + name = "serve_static___serve_static_1.14.1.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz"; + sha1 = "666e636dc4f010f7ef29970a88a674320898b2f9"; + }; + } + { + name = "set_blocking___set_blocking_2.0.0.tgz"; + path = fetchurl { + name = "set_blocking___set_blocking_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + } + { + name = "set_value___set_value_2.0.1.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz"; + sha1 = "a18d40530e6f07de4228c7defe4227af8cad005b"; + }; + } + { + name = "setimmediate___setimmediate_1.0.5.tgz"; + path = fetchurl { + name = "setimmediate___setimmediate_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz"; + sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285"; + }; + } + { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656"; + }; + } + { + name = "setprototypeof___setprototypeof_1.1.1.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz"; + sha1 = "7e95acb24aa92f5885e0abef5ba131330d4ae683"; + }; + } + { + name = "sha.js___sha.js_2.4.11.tgz"; + path = fetchurl { + name = "sha.js___sha.js_2.4.11.tgz"; + url = "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz"; + sha1 = "37a5cf0b81ecbc6943de109ba2960d1b26584ae7"; + }; + } + { + name = "shallow_clone___shallow_clone_3.0.1.tgz"; + path = fetchurl { + name = "shallow_clone___shallow_clone_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz"; + sha1 = "8f2981ad92531f55035b01fb230769a40e02efa3"; + }; + } + { + name = "shebang_command___shebang_command_1.2.0.tgz"; + path = fetchurl { + name = "shebang_command___shebang_command_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz"; + sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; + }; + } + { + name = "shebang_command___shebang_command_2.0.0.tgz"; + path = fetchurl { + name = "shebang_command___shebang_command_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz"; + sha1 = "ccd0af4f8835fbdc265b82461aaf0c36663f34ea"; + }; + } + { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + path = fetchurl { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz"; + sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; + }; + } + { + name = "shebang_regex___shebang_regex_3.0.0.tgz"; + path = fetchurl { + name = "shebang_regex___shebang_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz"; + sha1 = "ae16f1644d873ecad843b0307b143362d4c42172"; + }; + } + { + name = "shell_quote___shell_quote_1.7.2.tgz"; + path = fetchurl { + name = "shell_quote___shell_quote_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz"; + sha1 = "67a7d02c76c9da24f99d20808fcaded0e0e04be2"; + }; + } + { + name = "signal_exit___signal_exit_3.0.3.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz"; + sha1 = "a1410c2edd8f077b08b4e253c8eacfcaf057461c"; + }; + } + { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + path = fetchurl { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz"; + sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a"; + }; + } + { + name = "slash___slash_1.0.0.tgz"; + path = fetchurl { + name = "slash___slash_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz"; + sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"; + }; + } + { + name = "slash___slash_2.0.0.tgz"; + path = fetchurl { + name = "slash___slash_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz"; + sha1 = "de552851a1759df3a8f206535442f5ec4ddeab44"; + }; + } + { + name = "slice_ansi___slice_ansi_2.1.0.tgz"; + path = fetchurl { + name = "slice_ansi___slice_ansi_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz"; + sha1 = "cacd7693461a637a5788d92a7dd4fba068e81636"; + }; + } + { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + path = fetchurl { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; + sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b"; + }; + } + { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + path = fetchurl { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; + sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2"; + }; + } + { + name = "snapdragon___snapdragon_0.8.2.tgz"; + path = fetchurl { + name = "snapdragon___snapdragon_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz"; + sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d"; + }; + } + { + name = "sockjs_client___sockjs_client_1.4.0.tgz"; + path = fetchurl { + name = "sockjs_client___sockjs_client_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz"; + sha1 = "c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"; + }; + } + { + name = "sockjs___sockjs_0.3.20.tgz"; + path = fetchurl { + name = "sockjs___sockjs_0.3.20.tgz"; + url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz"; + sha1 = "b26a283ec562ef8b2687b44033a4eeceac75d855"; + }; + } + { + name = "sort_keys___sort_keys_1.1.2.tgz"; + path = fetchurl { + name = "sort_keys___sort_keys_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz"; + sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad"; + }; + } + { + name = "source_list_map___source_list_map_2.0.1.tgz"; + path = fetchurl { + name = "source_list_map___source_list_map_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz"; + sha1 = "3993bd873bfc48479cca9ea3a547835c7c154b34"; + }; + } + { + name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; + sha1 = "190866bece7553e1f8f267a2ee82c606b5509a1a"; + }; + } + { + name = "source_map_support___source_map_support_0.5.19.tgz"; + path = fetchurl { + name = "source_map_support___source_map_support_0.5.19.tgz"; + url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz"; + sha1 = "a98b62f86dcaf4f67399648c085291ab9e8fed61"; + }; + } + { + name = "source_map_url___source_map_url_0.4.0.tgz"; + path = fetchurl { + name = "source_map_url___source_map_url_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz"; + sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; + }; + } + { + name = "source_map___source_map_0.5.7.tgz"; + path = fetchurl { + name = "source_map___source_map_0.5.7.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + } + { + name = "source_map___source_map_0.6.1.tgz"; + path = fetchurl { + name = "source_map___source_map_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz"; + sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263"; + }; + } + { + name = "spdx_correct___spdx_correct_3.1.1.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz"; + sha1 = "dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"; + }; + } + { + name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz"; + sha1 = "3f28ce1a77a00372683eade4a433183527a2163d"; + }; + } + { + name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz"; + path = fetchurl { + name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"; + sha1 = "cf70f50482eefdc98e3ce0a6833e4a53ceeba679"; + }; + } + { + name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz"; + sha1 = "3694b5804567a458d3c8045842a6358632f62654"; + }; + } + { + name = "spdy_transport___spdy_transport_3.0.0.tgz"; + path = fetchurl { + name = "spdy_transport___spdy_transport_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz"; + sha1 = "00d4863a6400ad75df93361a1608605e5dcdcf31"; + }; + } + { + name = "spdy___spdy_4.0.2.tgz"; + path = fetchurl { + name = "spdy___spdy_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz"; + sha1 = "b74f466203a3eda452c02492b91fb9e84a27677b"; + }; + } + { + name = "split_string___split_string_3.1.0.tgz"; + path = fetchurl { + name = "split_string___split_string_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz"; + sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2"; + }; + } + { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + path = fetchurl { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + } + { + name = "sshpk___sshpk_1.16.1.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.16.1.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz"; + sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877"; + }; + } + { + name = "ssri___ssri_6.0.1.tgz"; + path = fetchurl { + name = "ssri___ssri_6.0.1.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz"; + sha1 = "2a3c41b28dd45b62b63676ecb74001265ae9edd8"; + }; + } + { + name = "ssri___ssri_7.1.0.tgz"; + path = fetchurl { + name = "ssri___ssri_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz"; + sha1 = "92c241bf6de82365b5c7fb4bd76e975522e1294d"; + }; + } + { + name = "stable___stable_0.1.8.tgz"; + path = fetchurl { + name = "stable___stable_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz"; + sha1 = "836eb3c8382fe2936feaf544631017ce7d47a3cf"; + }; + } + { + name = "stackframe___stackframe_1.2.0.tgz"; + path = fetchurl { + name = "stackframe___stackframe_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz"; + sha1 = "52429492d63c62eb989804c11552e3d22e779303"; + }; + } + { + name = "static_extend___static_extend_0.1.2.tgz"; + path = fetchurl { + name = "static_extend___static_extend_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz"; + sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; + }; + } + { + name = "statuses___statuses_1.5.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + } + { + name = "stealthy_require___stealthy_require_1.1.1.tgz"; + path = fetchurl { + name = "stealthy_require___stealthy_require_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz"; + sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b"; + }; + } + { + name = "stream_browserify___stream_browserify_2.0.2.tgz"; + path = fetchurl { + name = "stream_browserify___stream_browserify_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz"; + sha1 = "87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"; + }; + } + { + name = "stream_each___stream_each_1.2.3.tgz"; + path = fetchurl { + name = "stream_each___stream_each_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz"; + sha1 = "ebe27a0c389b04fbcc233642952e10731afa9bae"; + }; + } + { + name = "stream_http___stream_http_2.8.3.tgz"; + path = fetchurl { + name = "stream_http___stream_http_2.8.3.tgz"; + url = "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz"; + sha1 = "b2d242469288a5a27ec4fe8933acf623de6514fc"; + }; + } + { + name = "stream_shift___stream_shift_1.0.1.tgz"; + path = fetchurl { + name = "stream_shift___stream_shift_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz"; + sha1 = "d7088281559ab2778424279b0877da3c392d5a3d"; + }; + } + { + name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz"; + path = fetchurl { + name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz"; + sha1 = "279b225df1d582b1f54e65addd4352e18faa0713"; + }; + } + { + name = "string_width___string_width_2.1.1.tgz"; + path = fetchurl { + name = "string_width___string_width_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz"; + sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e"; + }; + } + { + name = "string_width___string_width_3.1.0.tgz"; + path = fetchurl { + name = "string_width___string_width_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz"; + sha1 = "22767be21b62af1081574306f69ac51b62203961"; + }; + } + { + name = "string_width___string_width_4.2.0.tgz"; + path = fetchurl { + name = "string_width___string_width_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz"; + sha1 = "952182c46cc7b2c313d1596e623992bd163b72b5"; + }; + } + { + name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz"; + path = fetchurl { + name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz"; + sha1 = "85812a6b847ac002270f5808146064c995fb6913"; + }; + } + { + name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz"; + path = fetchurl { + name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz"; + sha1 = "4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"; + }; + } + { + name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz"; + path = fetchurl { + name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz"; + sha1 = "c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"; + }; + } + { + name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz"; + path = fetchurl { + name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz"; + sha1 = "14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"; + }; + } + { + name = "string_decoder___string_decoder_1.3.0.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz"; + sha1 = "42f114594a46cf1a8e30b0a84f56c78c3edac21e"; + }; + } + { + name = "string_decoder___string_decoder_1.1.1.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz"; + sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8"; + }; + } + { + name = "stringify_object___stringify_object_3.3.0.tgz"; + path = fetchurl { + name = "stringify_object___stringify_object_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz"; + sha1 = "703065aefca19300d3ce88af4f5b3956d7556629"; + }; + } + { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + } + { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + } + { + name = "strip_ansi___strip_ansi_5.2.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz"; + sha1 = "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"; + }; + } + { + name = "strip_ansi___strip_ansi_6.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz"; + sha1 = "0b1571dd7669ccd4f3e06e14ef1eed26225ae532"; + }; + } + { + name = "strip_comments___strip_comments_1.0.2.tgz"; + path = fetchurl { + name = "strip_comments___strip_comments_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz"; + sha1 = "82b9c45e7f05873bee53f37168af930aa368679d"; + }; + } + { + name = "strip_eof___strip_eof_1.0.0.tgz"; + path = fetchurl { + name = "strip_eof___strip_eof_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz"; + sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf"; + }; + } + { + name = "strip_final_newline___strip_final_newline_2.0.0.tgz"; + path = fetchurl { + name = "strip_final_newline___strip_final_newline_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz"; + sha1 = "89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"; + }; + } + { + name = "strip_indent___strip_indent_2.0.0.tgz"; + path = fetchurl { + name = "strip_indent___strip_indent_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz"; + sha1 = "5ef8db295d01e6ed6cbf7aab96998d7822527b68"; + }; + } + { + name = "strip_json_comments___strip_json_comments_3.1.0.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz"; + sha1 = "7638d31422129ecf4457440009fba03f9f9ac180"; + }; + } + { + name = "stylehacks___stylehacks_4.0.3.tgz"; + path = fetchurl { + name = "stylehacks___stylehacks_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz"; + sha1 = "6718fcaf4d1e07d8a1318690881e8d96726a71d5"; + }; + } + { + name = "supports_color___supports_color_2.0.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + } + { + name = "supports_color___supports_color_5.5.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz"; + sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f"; + }; + } + { + name = "supports_color___supports_color_6.1.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz"; + sha1 = "0764abc69c63d5ac842dd4867e8d025e880df8f3"; + }; + } + { + name = "supports_color___supports_color_7.1.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz"; + sha1 = "68e32591df73e25ad1c4b49108a2ec507962bfd1"; + }; + } + { + name = "svg_tags___svg_tags_1.0.0.tgz"; + path = fetchurl { + name = "svg_tags___svg_tags_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz"; + sha1 = "58f71cee3bd519b59d4b2a843b6c7de64ac04764"; + }; + } + { + name = "svgo___svgo_1.3.2.tgz"; + path = fetchurl { + name = "svgo___svgo_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz"; + sha1 = "b6dc511c063346c9e415b81e43401145b96d4167"; + }; + } + { + name = "table___table_5.4.6.tgz"; + path = fetchurl { + name = "table___table_5.4.6.tgz"; + url = "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz"; + sha1 = "1292d19500ce3f86053b05f0e8e7e4a3bb21079e"; + }; + } + { + name = "tapable___tapable_1.1.3.tgz"; + path = fetchurl { + name = "tapable___tapable_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz"; + sha1 = "a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"; + }; + } + { + name = "terser_webpack_plugin___terser_webpack_plugin_1.4.4.tgz"; + path = fetchurl { + name = "terser_webpack_plugin___terser_webpack_plugin_1.4.4.tgz"; + url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz"; + sha1 = "2c63544347324baafa9a56baaddf1634c8abfc2f"; + }; + } + { + name = "terser_webpack_plugin___terser_webpack_plugin_2.3.7.tgz"; + path = fetchurl { + name = "terser_webpack_plugin___terser_webpack_plugin_2.3.7.tgz"; + url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz"; + sha1 = "4910ff5d1a872168cc7fa6cd3749e2b0d60a8a0b"; + }; + } + { + name = "terser___terser_4.7.0.tgz"; + path = fetchurl { + name = "terser___terser_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz"; + sha1 = "15852cf1a08e3256a80428e865a2fa893ffba006"; + }; + } + { + name = "text_table___text_table_0.2.0.tgz"; + path = fetchurl { + name = "text_table___text_table_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + } + { + name = "thenify_all___thenify_all_1.6.0.tgz"; + path = fetchurl { + name = "thenify_all___thenify_all_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz"; + sha1 = "1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"; + }; + } + { + name = "thenify___thenify_3.3.0.tgz"; + path = fetchurl { + name = "thenify___thenify_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz"; + sha1 = "e69e38a1babe969b0108207978b9f62b88604839"; + }; + } + { + name = "thread_loader___thread_loader_2.1.3.tgz"; + path = fetchurl { + name = "thread_loader___thread_loader_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz"; + sha1 = "cbd2c139fc2b2de6e9d28f62286ab770c1acbdda"; + }; + } + { + name = "through2___through2_2.0.5.tgz"; + path = fetchurl { + name = "through2___through2_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; + sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; + }; + } + { + name = "through___through_2.3.8.tgz"; + path = fetchurl { + name = "through___through_2.3.8.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + } + { + name = "thunky___thunky_1.1.0.tgz"; + path = fetchurl { + name = "thunky___thunky_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz"; + sha1 = "5abaf714a9405db0504732bbccd2cedd9ef9537d"; + }; + } + { + name = "timers_browserify___timers_browserify_2.0.11.tgz"; + path = fetchurl { + name = "timers_browserify___timers_browserify_2.0.11.tgz"; + url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz"; + sha1 = "800b1f3eee272e5bc53ee465a04d0e804c31211f"; + }; + } + { + name = "timsort___timsort_0.3.0.tgz"; + path = fetchurl { + name = "timsort___timsort_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz"; + sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4"; + }; + } + { + name = "tmp___tmp_0.0.33.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.33.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; + sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; + }; + } + { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + path = fetchurl { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; + sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; + }; + } + { + name = "to_fast_properties___to_fast_properties_2.0.0.tgz"; + path = fetchurl { + name = "to_fast_properties___to_fast_properties_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; + sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e"; + }; + } + { + name = "to_object_path___to_object_path_0.3.0.tgz"; + path = fetchurl { + name = "to_object_path___to_object_path_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz"; + sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; + }; + } + { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz"; + sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; + }; + } + { + name = "to_regex_range___to_regex_range_5.0.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz"; + sha1 = "1648c44aae7c8d988a326018ed72f5b4dd0392e4"; + }; + } + { + name = "to_regex___to_regex_3.0.2.tgz"; + path = fetchurl { + name = "to_regex___to_regex_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz"; + sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"; + }; + } + { + name = "toidentifier___toidentifier_1.0.0.tgz"; + path = fetchurl { + name = "toidentifier___toidentifier_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz"; + sha1 = "7e1be3470f1e77948bc43d94a3c8f4d7752ba553"; + }; + } + { + name = "toposort___toposort_1.0.7.tgz"; + path = fetchurl { + name = "toposort___toposort_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz"; + sha1 = "2e68442d9f64ec720b8cc89e6443ac6caa950029"; + }; + } + { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz"; + sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"; + }; + } + { + name = "tryer___tryer_1.0.1.tgz"; + path = fetchurl { + name = "tryer___tryer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz"; + sha1 = "f2c85406800b9b0f74c9f7465b81eaad241252f8"; + }; + } + { + name = "ts_pnp___ts_pnp_1.2.0.tgz"; + path = fetchurl { + name = "ts_pnp___ts_pnp_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz"; + sha1 = "a500ad084b0798f1c3071af391e65912c86bca92"; + }; + } + { + name = "tslib___tslib_1.13.0.tgz"; + path = fetchurl { + name = "tslib___tslib_1.13.0.tgz"; + url = "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz"; + sha1 = "c881e13cc7015894ed914862d276436fa9a47043"; + }; + } + { + name = "tty_browserify___tty_browserify_0.0.0.tgz"; + path = fetchurl { + name = "tty_browserify___tty_browserify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz"; + sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6"; + }; + } + { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + } + { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + path = fetchurl { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + } + { + name = "type_check___type_check_0.4.0.tgz"; + path = fetchurl { + name = "type_check___type_check_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz"; + sha1 = "07b8203bfa7056c0657050e3ccd2c37730bab8f1"; + }; + } + { + name = "type_fest___type_fest_0.11.0.tgz"; + path = fetchurl { + name = "type_fest___type_fest_0.11.0.tgz"; + url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz"; + sha1 = "97abf0872310fed88a5c466b25681576145e33f1"; + }; + } + { + name = "type_fest___type_fest_0.6.0.tgz"; + path = fetchurl { + name = "type_fest___type_fest_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz"; + sha1 = "8d2a2370d3df886eb5c90ada1c5bf6188acf838b"; + }; + } + { + name = "type_fest___type_fest_0.8.1.tgz"; + path = fetchurl { + name = "type_fest___type_fest_0.8.1.tgz"; + url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz"; + sha1 = "09e249ebde851d3b1e48d27c105444667f17b83d"; + }; + } + { + name = "type_is___type_is_1.6.18.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.18.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz"; + sha1 = "4e552cd05df09467dcbc4ef739de89f2cf37c131"; + }; + } + { + name = "typedarray___typedarray_0.0.6.tgz"; + path = fetchurl { + name = "typedarray___typedarray_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + } + { + name = "uglify_js___uglify_js_3.4.10.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_3.4.10.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz"; + sha1 = "9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"; + }; + } + { + name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"; + sha1 = "2619800c4c825800efdd8343af7dd9933cbe2818"; + }; + } + { + name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz"; + sha1 = "8ed2a32569961bce9227d09cd3ffbb8fed5f020c"; + }; + } + { + name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.2.0.tgz"; + path = fetchurl { + name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz"; + sha1 = "0d91f600eeeb3096aa962b1d6fc88876e64ea531"; + }; + } + { + name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.1.0.tgz"; + path = fetchurl { + name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz"; + sha1 = "dd57a99f6207bedff4628abefb94c50db941c8f4"; + }; + } + { + name = "union_value___union_value_1.0.1.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz"; + sha1 = "0b6fe7b835aecda61c6ea4d4f02c14221e109847"; + }; + } + { + name = "uniq___uniq_1.0.1.tgz"; + path = fetchurl { + name = "uniq___uniq_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz"; + sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; + }; + } + { + name = "uniqs___uniqs_2.0.0.tgz"; + path = fetchurl { + name = "uniqs___uniqs_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz"; + sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02"; + }; + } + { + name = "unique_filename___unique_filename_1.1.1.tgz"; + path = fetchurl { + name = "unique_filename___unique_filename_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz"; + sha1 = "1d69769369ada0583103a1e6ae87681b56573230"; + }; + } + { + name = "unique_slug___unique_slug_2.0.2.tgz"; + path = fetchurl { + name = "unique_slug___unique_slug_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz"; + sha1 = "baabce91083fc64e945b0f3ad613e264f7cd4e6c"; + }; + } + { + name = "universalify___universalify_0.1.2.tgz"; + path = fetchurl { + name = "universalify___universalify_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz"; + sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66"; + }; + } + { + name = "unpipe___unpipe_1.0.0.tgz"; + path = fetchurl { + name = "unpipe___unpipe_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + } + { + name = "unquote___unquote_1.1.1.tgz"; + path = fetchurl { + name = "unquote___unquote_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz"; + sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544"; + }; + } + { + name = "unset_value___unset_value_1.0.0.tgz"; + path = fetchurl { + name = "unset_value___unset_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz"; + sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; + }; + } + { + name = "upath___upath_1.2.0.tgz"; + path = fetchurl { + name = "upath___upath_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz"; + sha1 = "8f66dbcd55a883acdae4408af8b035a5044c1894"; + }; + } + { + name = "upper_case___upper_case_1.1.3.tgz"; + path = fetchurl { + name = "upper_case___upper_case_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz"; + sha1 = "f6b4501c2ec4cdd26ba78be7222961de77621598"; + }; + } + { + name = "uri_js___uri_js_4.2.2.tgz"; + path = fetchurl { + name = "uri_js___uri_js_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz"; + sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0"; + }; + } + { + name = "urix___urix_0.1.0.tgz"; + path = fetchurl { + name = "urix___urix_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz"; + sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; + }; + } + { + name = "url_loader___url_loader_2.3.0.tgz"; + path = fetchurl { + name = "url_loader___url_loader_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz"; + sha1 = "e0e2ef658f003efb8ca41b0f3ffbf76bab88658b"; + }; + } + { + name = "url_parse___url_parse_1.4.7.tgz"; + path = fetchurl { + name = "url_parse___url_parse_1.4.7.tgz"; + url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz"; + sha1 = "a8a83535e8c00a316e403a5db4ac1b9b853ae278"; + }; + } + { + name = "url___url_0.11.0.tgz"; + path = fetchurl { + name = "url___url_0.11.0.tgz"; + url = "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz"; + sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"; + }; + } + { + name = "use___use_3.1.1.tgz"; + path = fetchurl { + name = "use___use_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz"; + sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f"; + }; + } + { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + path = fetchurl { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + } + { + name = "util.promisify___util.promisify_1.0.0.tgz"; + path = fetchurl { + name = "util.promisify___util.promisify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz"; + sha1 = "440f7165a459c9a16dc145eb8e72f35687097030"; + }; + } + { + name = "util.promisify___util.promisify_1.0.1.tgz"; + path = fetchurl { + name = "util.promisify___util.promisify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz"; + sha1 = "6baf7774b80eeb0f7520d8b81d07982a59abbaee"; + }; + } + { + name = "util___util_0.10.3.tgz"; + path = fetchurl { + name = "util___util_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz"; + sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9"; + }; + } + { + name = "util___util_0.11.1.tgz"; + path = fetchurl { + name = "util___util_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz"; + sha1 = "3236733720ec64bb27f6e26f421aaa2e1b588d61"; + }; + } + { + name = "utila___utila_0.4.0.tgz"; + path = fetchurl { + name = "utila___utila_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz"; + sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c"; + }; + } + { + name = "utils_merge___utils_merge_1.0.1.tgz"; + path = fetchurl { + name = "utils_merge___utils_merge_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + } + { + name = "uuid___uuid_3.4.0.tgz"; + path = fetchurl { + name = "uuid___uuid_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz"; + sha1 = "b23e4358afa8a202fe7a100af1f5f883f02007ee"; + }; + } + { + name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz"; + path = fetchurl { + name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz"; + sha1 = "54bc3cdd43317bca91e35dcaf305b1a7237de745"; + }; + } + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; + sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; + }; + } + { + name = "vary___vary_1.1.2.tgz"; + path = fetchurl { + name = "vary___vary_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + } + { + name = "vendors___vendors_1.0.4.tgz"; + path = fetchurl { + name = "vendors___vendors_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz"; + sha1 = "e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"; + }; + } + { + name = "verror___verror_1.10.0.tgz"; + path = fetchurl { + name = "verror___verror_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + } + { + name = "vm_browserify___vm_browserify_1.1.2.tgz"; + path = fetchurl { + name = "vm_browserify___vm_browserify_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz"; + sha1 = "78641c488b8e6ca91a75f511e7a3b32a86e5dda0"; + }; + } + { + name = "vue_eslint_parser___vue_eslint_parser_7.1.0.tgz"; + path = fetchurl { + name = "vue_eslint_parser___vue_eslint_parser_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz"; + sha1 = "9cdbcc823e656b087507a1911732b867ac101e83"; + }; + } + { + name = "vue_hot_reload_api___vue_hot_reload_api_2.3.4.tgz"; + path = fetchurl { + name = "vue_hot_reload_api___vue_hot_reload_api_2.3.4.tgz"; + url = "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz"; + sha1 = "532955cc1eb208a3d990b3a9f9a70574657e08f2"; + }; + } + { + name = "vue_loader___vue_loader_15.9.2.tgz"; + path = fetchurl { + name = "vue_loader___vue_loader_15.9.2.tgz"; + url = "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.2.tgz"; + sha1 = "ae01f5f4c9c6a04bff4483912e72ef91a402c1ae"; + }; + } + { + name = "vue_style_loader___vue_style_loader_4.1.2.tgz"; + path = fetchurl { + name = "vue_style_loader___vue_style_loader_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz"; + sha1 = "dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"; + }; + } + { + name = "vue_template_compiler___vue_template_compiler_2.6.11.tgz"; + path = fetchurl { + name = "vue_template_compiler___vue_template_compiler_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz"; + sha1 = "c04704ef8f498b153130018993e56309d4698080"; + }; + } + { + name = "vue_template_es2015_compiler___vue_template_es2015_compiler_1.9.1.tgz"; + path = fetchurl { + name = "vue_template_es2015_compiler___vue_template_es2015_compiler_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz"; + sha1 = "1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"; + }; + } + { + name = "vue___vue_2.6.11.tgz"; + path = fetchurl { + name = "vue___vue_2.6.11.tgz"; + url = "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz"; + sha1 = "76594d877d4b12234406e84e35275c6d514125c5"; + }; + } + { + name = "watchpack_chokidar2___watchpack_chokidar2_2.0.0.tgz"; + path = fetchurl { + name = "watchpack_chokidar2___watchpack_chokidar2_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz"; + sha1 = "9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"; + }; + } + { + name = "watchpack___watchpack_1.7.2.tgz"; + path = fetchurl { + name = "watchpack___watchpack_1.7.2.tgz"; + url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz"; + sha1 = "c02e4d4d49913c3e7e122c3325365af9d331e9aa"; + }; + } + { + name = "wbuf___wbuf_1.7.3.tgz"; + path = fetchurl { + name = "wbuf___wbuf_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz"; + sha1 = "c1d8d149316d3ea852848895cb6a0bfe887b87df"; + }; + } + { + name = "wcwidth___wcwidth_1.0.1.tgz"; + path = fetchurl { + name = "wcwidth___wcwidth_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz"; + sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"; + }; + } + { + name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.8.0.tgz"; + path = fetchurl { + name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz"; + sha1 = "ce6b3f908daf069fd1f7266f692cbb3bded9ba16"; + }; + } + { + name = "webpack_chain___webpack_chain_6.4.0.tgz"; + path = fetchurl { + name = "webpack_chain___webpack_chain_6.4.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.4.0.tgz"; + sha1 = "22f0b27b6a9bc9ee3cba4f9e6513cf66394034e2"; + }; + } + { + name = "webpack_dev_middleware___webpack_dev_middleware_3.7.2.tgz"; + path = fetchurl { + name = "webpack_dev_middleware___webpack_dev_middleware_3.7.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz"; + sha1 = "0019c3db716e3fa5cecbf64f2ab88a74bab331f3"; + }; + } + { + name = "webpack_dev_server___webpack_dev_server_3.11.0.tgz"; + path = fetchurl { + name = "webpack_dev_server___webpack_dev_server_3.11.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz"; + sha1 = "8f154a3bce1bcfd1cc618ef4e703278855e7ff8c"; + }; + } + { + name = "webpack_log___webpack_log_2.0.0.tgz"; + path = fetchurl { + name = "webpack_log___webpack_log_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz"; + sha1 = "5b7928e0637593f119d32f6227c1e0ac31e1b47f"; + }; + } + { + name = "webpack_merge___webpack_merge_4.2.2.tgz"; + path = fetchurl { + name = "webpack_merge___webpack_merge_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz"; + sha1 = "a27c52ea783d1398afd2087f547d7b9d2f43634d"; + }; + } + { + name = "webpack_sources___webpack_sources_1.4.3.tgz"; + path = fetchurl { + name = "webpack_sources___webpack_sources_1.4.3.tgz"; + url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz"; + sha1 = "eedd8ec0b928fbf1cbfe994e22d2d890f330a933"; + }; + } + { + name = "webpack___webpack_4.43.0.tgz"; + path = fetchurl { + name = "webpack___webpack_4.43.0.tgz"; + url = "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz"; + sha1 = "c48547b11d563224c561dad1172c8aa0b8a678e6"; + }; + } + { + name = "websocket_driver___websocket_driver_0.6.5.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.6.5.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz"; + sha1 = "5cb2556ceb85f4373c6d8238aa691c8454e13a36"; + }; + } + { + name = "websocket_driver___websocket_driver_0.7.4.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.7.4.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz"; + sha1 = "89ad5295bbf64b480abcba31e4953aca706f5760"; + }; + } + { + name = "websocket_extensions___websocket_extensions_0.1.4.tgz"; + path = fetchurl { + name = "websocket_extensions___websocket_extensions_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz"; + sha1 = "7f8473bc839dfd87608adb95d7eb075211578a42"; + }; + } + { + name = "which_module___which_module_2.0.0.tgz"; + path = fetchurl { + name = "which_module___which_module_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz"; + sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; + }; + } + { + name = "which___which_1.3.1.tgz"; + path = fetchurl { + name = "which___which_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz"; + sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a"; + }; + } + { + name = "which___which_2.0.2.tgz"; + path = fetchurl { + name = "which___which_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz"; + sha1 = "7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"; + }; + } + { + name = "word_wrap___word_wrap_1.2.3.tgz"; + path = fetchurl { + name = "word_wrap___word_wrap_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz"; + sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c"; + }; + } + { + name = "workbox_background_sync___workbox_background_sync_4.3.1.tgz"; + path = fetchurl { + name = "workbox_background_sync___workbox_background_sync_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz"; + sha1 = "26821b9bf16e9e37fd1d640289edddc08afd1950"; + }; + } + { + name = "workbox_broadcast_update___workbox_broadcast_update_4.3.1.tgz"; + path = fetchurl { + name = "workbox_broadcast_update___workbox_broadcast_update_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz"; + sha1 = "e2c0280b149e3a504983b757606ad041f332c35b"; + }; + } + { + name = "workbox_build___workbox_build_4.3.1.tgz"; + path = fetchurl { + name = "workbox_build___workbox_build_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz"; + sha1 = "414f70fb4d6de47f6538608b80ec52412d233e64"; + }; + } + { + name = "workbox_cacheable_response___workbox_cacheable_response_4.3.1.tgz"; + path = fetchurl { + name = "workbox_cacheable_response___workbox_cacheable_response_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz"; + sha1 = "f53e079179c095a3f19e5313b284975c91428c91"; + }; + } + { + name = "workbox_core___workbox_core_4.3.1.tgz"; + path = fetchurl { + name = "workbox_core___workbox_core_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz"; + sha1 = "005d2c6a06a171437afd6ca2904a5727ecd73be6"; + }; + } + { + name = "workbox_expiration___workbox_expiration_4.3.1.tgz"; + path = fetchurl { + name = "workbox_expiration___workbox_expiration_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz"; + sha1 = "d790433562029e56837f341d7f553c4a78ebe921"; + }; + } + { + name = "workbox_google_analytics___workbox_google_analytics_4.3.1.tgz"; + path = fetchurl { + name = "workbox_google_analytics___workbox_google_analytics_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz"; + sha1 = "9eda0183b103890b5c256e6f4ea15a1f1548519a"; + }; + } + { + name = "workbox_navigation_preload___workbox_navigation_preload_4.3.1.tgz"; + path = fetchurl { + name = "workbox_navigation_preload___workbox_navigation_preload_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz"; + sha1 = "29c8e4db5843803b34cd96dc155f9ebd9afa453d"; + }; + } + { + name = "workbox_precaching___workbox_precaching_4.3.1.tgz"; + path = fetchurl { + name = "workbox_precaching___workbox_precaching_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz"; + sha1 = "9fc45ed122d94bbe1f0ea9584ff5940960771cba"; + }; + } + { + name = "workbox_range_requests___workbox_range_requests_4.3.1.tgz"; + path = fetchurl { + name = "workbox_range_requests___workbox_range_requests_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz"; + sha1 = "f8a470188922145cbf0c09a9a2d5e35645244e74"; + }; + } + { + name = "workbox_routing___workbox_routing_4.3.1.tgz"; + path = fetchurl { + name = "workbox_routing___workbox_routing_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz"; + sha1 = "a675841af623e0bb0c67ce4ed8e724ac0bed0cda"; + }; + } + { + name = "workbox_strategies___workbox_strategies_4.3.1.tgz"; + path = fetchurl { + name = "workbox_strategies___workbox_strategies_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz"; + sha1 = "d2be03c4ef214c115e1ab29c9c759c9fe3e9e646"; + }; + } + { + name = "workbox_streams___workbox_streams_4.3.1.tgz"; + path = fetchurl { + name = "workbox_streams___workbox_streams_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz"; + sha1 = "0b57da70e982572de09c8742dd0cb40a6b7c2cc3"; + }; + } + { + name = "workbox_sw___workbox_sw_4.3.1.tgz"; + path = fetchurl { + name = "workbox_sw___workbox_sw_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz"; + sha1 = "df69e395c479ef4d14499372bcd84c0f5e246164"; + }; + } + { + name = "workbox_webpack_plugin___workbox_webpack_plugin_4.3.1.tgz"; + path = fetchurl { + name = "workbox_webpack_plugin___workbox_webpack_plugin_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz"; + sha1 = "47ff5ea1cc074b6c40fb5a86108863a24120d4bd"; + }; + } + { + name = "workbox_window___workbox_window_4.3.1.tgz"; + path = fetchurl { + name = "workbox_window___workbox_window_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz"; + sha1 = "ee6051bf10f06afa5483c9b8dfa0531994ede0f3"; + }; + } + { + name = "worker_farm___worker_farm_1.7.0.tgz"; + path = fetchurl { + name = "worker_farm___worker_farm_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz"; + sha1 = "26a94c5391bbca926152002f69b84a4bf772e5a8"; + }; + } + { + name = "wrap_ansi___wrap_ansi_5.1.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz"; + sha1 = "1fd1f67235d5b6d0fee781056001bfb694c03b09"; + }; + } + { + name = "wrap_ansi___wrap_ansi_6.2.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_6.2.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz"; + sha1 = "e9393ba07102e6c91a3b221478f0257cd2856e53"; + }; + } + { + name = "wrappy___wrappy_1.0.2.tgz"; + path = fetchurl { + name = "wrappy___wrappy_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + } + { + name = "write___write_1.0.3.tgz"; + path = fetchurl { + name = "write___write_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz"; + sha1 = "0800e14523b923a387e415123c865616aae0f5c3"; + }; + } + { + name = "ws___ws_6.2.1.tgz"; + path = fetchurl { + name = "ws___ws_6.2.1.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz"; + sha1 = "442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"; + }; + } + { + name = "xtend___xtend_4.0.2.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz"; + sha1 = "bb72779f5fa465186b1f438f674fa347fdb5db54"; + }; + } + { + name = "y18n___y18n_4.0.0.tgz"; + path = fetchurl { + name = "y18n___y18n_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz"; + sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b"; + }; + } + { + name = "yallist___yallist_2.1.2.tgz"; + path = fetchurl { + name = "yallist___yallist_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + } + { + name = "yallist___yallist_3.1.1.tgz"; + path = fetchurl { + name = "yallist___yallist_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz"; + sha1 = "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"; + }; + } + { + name = "yallist___yallist_4.0.0.tgz"; + path = fetchurl { + name = "yallist___yallist_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz"; + sha1 = "9bb92790d9c0effec63be73519e11a35019a3a72"; + }; + } + { + name = "yargs_parser___yargs_parser_13.1.2.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_13.1.2.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz"; + sha1 = "130f09702ebaeef2650d54ce6e3e5706f7a4fb38"; + }; + } + { + name = "yargs_parser___yargs_parser_18.1.3.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_18.1.3.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz"; + sha1 = "be68c4975c6b2abf469236b0c870362fab09a7b0"; + }; + } + { + name = "yargs___yargs_13.3.2.tgz"; + path = fetchurl { + name = "yargs___yargs_13.3.2.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz"; + sha1 = "ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"; + }; + } + { + name = "yargs___yargs_15.3.1.tgz"; + path = fetchurl { + name = "yargs___yargs_15.3.1.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz"; + sha1 = "9505b472763963e54afe60148ad27a330818e98b"; + }; + } + { + name = "yorkie___yorkie_2.0.0.tgz"; + path = fetchurl { + name = "yorkie___yorkie_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz"; + sha1 = "92411912d435214e12c51c2ae1093e54b6bb83d9"; + }; + } + ]; +} diff --git a/systems/eldiron/websites/tools/ldap.nix b/systems/eldiron/websites/tools/ldap.nix new file mode 100644 index 0000000..9509169 --- /dev/null +++ b/systems/eldiron/websites/tools/ldap.nix @@ -0,0 +1,77 @@ +{ lib, php, env, writeText, phpldapadmin, config }: +rec { + keys."webapps/tools-ldap" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + custom->appearance['show_clear_password'] = true; + $config->custom->appearance['hide_template_warning'] = true; + $config->custom->appearance['theme'] = "tango"; + $config->custom->appearance['minimalMode'] = false; + $config->custom->appearance['tree'] = 'AJAXTree'; + + $servers = new Datastore(); + + $servers->newServer('ldap_pla'); + $servers->setValue('server','name','Immae’s LDAP'); + $servers->setValue('server','host','ldaps://${env.ldap.host}'); + $servers->setValue('login','auth_type','cookie'); + $servers->setValue('login','bind_id','${env.ldap.dn}'); + $servers->setValue('login','bind_pass','${env.ldap.password}'); + $servers->setValue('appearance','pla_password_hash','ssha'); + $servers->setValue('login','attr','uid'); + $servers->setValue('login','fallback_dn',true); + ''; + }; + webRoot = phpldapadmin.override { config = config.secrets.fullPaths."webapps/tools-ldap"; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = "${webRoot}/htdocs"; + vhostConf = socket: '' + Alias /ldap "${root}" + + DirectoryIndex index.php + + SetHandler "proxy:unix:${socket}|fcgi://localhost" + + + AllowOverride None + Require all granted + + ''; + }; + phpFpm = rec { + serviceDeps = [ "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot config.secrets.fullPaths."webapps/tools-ldap" ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "LdapPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:PhpLDAPAdmin:'"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "ldap website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/ldap/" "phpLDAPadmin"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "LDAP"; + _webstatus_url = "https://tools.immae.eu/ldap/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/phpbb.nix b/systems/eldiron/websites/tools/phpbb.nix new file mode 100644 index 0000000..c1cbd6f --- /dev/null +++ b/systems/eldiron/websites/tools/phpbb.nix @@ -0,0 +1,69 @@ +{ lib, phpbb, gnused }: +rec { + varDir = "/var/lib/phpbb"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + if [ ! -d ${varDir} ]; then + install -m 0755 -o ${apache.user} -g ${apache.user} -d ${varDir} + cp -a ${phpbb}/vars/* ${varDir} + chown -R ${apache.user}:${apache.user} ${varDir} + fi + ''; + }; + chatonsHostingProperties = { + file.datetime = "2022-08-21T22:50:00"; + hosting = { + name = "phpBB"; + description = "Forum software"; + website = "https://tools.immae.eu/forum"; + logo = "https://www.phpbb.com/favicon.ico"; + type = "INSTANCE"; + status.level = "OK"; + status.description = "OK"; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + }; + webRoot = phpbb; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /forum "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + Options FollowSymlinks + Require all granted + </Directory> + # add instal to the list after install + <LocationMatch "^/(cache|files|install|store)> + Require all denied + </LocationMatch> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" ]; + basedir = builtins.concatStringsSep ":" [ "/run/wrappers/bin/sendmail" phpbb varDir ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "PhpBBPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:PhpBB:'"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/rompr.nix b/systems/eldiron/websites/tools/rompr.nix new file mode 100644 index 0000000..a7308ce --- /dev/null +++ b/systems/eldiron/websites/tools/rompr.nix @@ -0,0 +1,86 @@ +{ lib, env, rompr, config }: +rec { + varDir = "/var/lib/rompr"; + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/prefs ${varDir}/albumart + ''; + webRoot = rompr; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "headers" "mime" "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /rompr ${root} + + <Directory ${root}> + Options Indexes FollowSymLinks + DirectoryIndex index.php + AllowOverride all + Require all granted + Order allow,deny + Allow from all + ErrorDocument 404 /rompr/404.php + AddType image/x-icon .ico + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + + <Directory ${root}/albumart/small> + Header Set Cache-Control "max-age=0, no-store" + Header Set Cache-Control "no-cache, must-revalidate" + </Directory> + + <Directory ${root}/albumart/asdownloaded> + Header Set Cache-Control "max-age=0, no-store" + Header Set Cache-Control "no-cache, must-revalidate" + </Directory> + + <LocationMatch "^/rompr"> + Use LDAPConnect + Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu + </LocationMatch> + ''; + }; + phpFpm = rec { + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "RomprPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Rompr:'"; + "php_flag[magic_quotes_gpc]" = "Off"; + "php_flag[track_vars]" = "On"; + "php_flag[register_globals]" = "Off"; + "php_admin_flag[allow_url_fopen]" = "On"; + "php_value[include_path]" = "${webRoot}"; + "php_admin_value[upload_tmp_dir]" = "${varDir}/prefs"; + "php_admin_value[post_max_size]" = "32M"; + "php_admin_value[upload_max_filesize]" = "32M"; + "php_admin_value[memory_limit]" = "256M"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "rompr mpd website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https_auth" "tools.immae.eu" "/rompr/" "<title>RompЯ"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "MPD (ROMPR)"; + _webstatus_url = "https://tools.immae.eu/rompr/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/shaarli.nix b/systems/eldiron/websites/tools/shaarli.nix new file mode 100644 index 0000000..35f1edb --- /dev/null +++ b/systems/eldiron/websites/tools/shaarli.nix @@ -0,0 +1,102 @@ +{ lib, env, stdenv, fetchurl, shaarli, config }: +let + varDir = "/var/lib/shaarli"; +in rec { + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/cache ${varDir}/pagecache ${varDir}/tmp ${varDir}/data + ''; + webRoot = shaarli.override { inherit varDir; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" "rewrite" "env" ]; + root = webRoot; + vhostConf = socket: '' + Alias /Shaarli "${root}" + + Include ${config.secrets.fullPaths."webapps/tools-shaarli"} + <Location /Shaarli> + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, Client-Security-Token, Accept-Encoding" + </Location> + <Directory "${root}"> + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + </Directory> + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "Shaarli"; + description = "The personal, minimalist, super-fast, database free, bookmarking service - community repo"; + website = "https://tools.immae.eu/Shaarli/"; + logo = "https://tools.immae.eu/Shaarli/tpl/default/img/apple-touch-icon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Shaarli"; + website = "https://shaarli.readthedocs.io/"; + license.url = "https://github.com/shaarli/Shaarli/blob/master/COPYING"; + license.name = "GNU General Public License Version 3"; + version = webRoot.version; + source.url = "https://github.com/shaarli/Shaarli"; + modules = "ldap-connection-patch"; + }; + }; + keys."webapps/tools-shaarli" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + SetEnv SHAARLI_LDAP_PASSWORD "${env.ldap.password}" + SetEnv SHAARLI_LDAP_DN "${env.ldap.dn}" + SetEnv SHAARLI_LDAP_HOST "ldaps://${env.ldap.host}" + SetEnv SHAARLI_LDAP_BASE "${env.ldap.base}" + SetEnv SHAARLI_LDAP_FILTER "${env.ldap.filter}" + ''; + }; + phpFpm = rec { + serviceDeps = [ "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "ShaarliPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Shaarli:'"; + "php_admin_value[upload_max_filesize]" = "200M"; + "php_admin_value[post_max_size]" = "200M"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "shaarli website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/Shaarli/immae" "<title>Immae"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Shaarli"; + _webstatus_url = "https://tools.immae.eu/Shaarli/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/ttrss.nix b/systems/eldiron/websites/tools/ttrss.nix new file mode 100644 index 0000000..6393256 --- /dev/null +++ b/systems/eldiron/websites/tools/ttrss.nix @@ -0,0 +1,167 @@ +{ php, env, ttrss, ttrss-plugins, config }: +rec { + varDir = "/var/lib/ttrss"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/lock ${varDir}/cache ${varDir}/feed-icons + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/cache/export/ \ + ${varDir}/cache/feeds/ \ + ${varDir}/cache/images/ \ + ${varDir}/cache/js/ \ + ${varDir}/cache/simplepie/ \ + ${varDir}/cache/upload/ + touch ${varDir}/feed-icons/index.html + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "RSS"; + description = "Tiny Tiny RSS is a free and open source web-based news feed (RSS/Atom) reader and aggregator"; + website = "https://tools.immae.eu/ttrss/"; + logo = "https://tools.immae.eu/ttrss/images/favicon.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Tiny Tiny RSS"; + website = "https://tt-rss.org/"; + license.url = "https://www.gnu.org/copyleft/gpl.html"; + license.name = "GNU General Public License Version 3"; + version = webRoot.version; + source.url = "https://git.tt-rss.org/fox/tt-rss.git/"; + modules = map (p: p.pluginName) webRoot.plugins; + }; + }; + keys."webapps/tools-ttrss" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + keyDependencies = [ php ]; + text = '' + <?php + + define('PHP_EXECUTABLE', '${php}/bin/php'); + + define('LOCK_DIRECTORY', 'lock'); + define('CACHE_DIR', 'cache'); + define('ICONS_DIR', 'feed-icons'); + define('ICONS_URL', 'feed-icons'); + define('SELF_URL_PATH', 'https://tools.immae.eu/ttrss/'); + + define('MYSQL_CHARSET', 'UTF8'); + + define('DB_TYPE', 'pgsql'); + define('DB_HOST', '${env.postgresql.socket}'); + define('DB_USER', '${env.postgresql.user}'); + define('DB_NAME', '${env.postgresql.database}'); + define('DB_PASS', '${env.postgresql.password}'); + define('DB_PORT', '${env.postgresql.port}'); + + define('AUTH_AUTO_CREATE', true); + define('AUTH_AUTO_LOGIN', true); + + define('SINGLE_USER_MODE', false); + + define('SIMPLE_UPDATE_MODE', false); + define('CHECK_FOR_UPDATES', true); + + define('FORCE_ARTICLE_PURGE', 0); + define('SESSION_COOKIE_LIFETIME', 60*60*24*120); + define('ENABLE_GZIP_OUTPUT', false); + + define('PLUGINS', 'auth_ldap, note, instances'); + + define('LOG_DESTINATION', '''); + define('CONFIG_VERSION', 26); + + define('DAEMON_UPDATE_LOGIN_LIMIT', 0); + + define('SPHINX_SERVER', 'localhost:9312'); + define('SPHINX_INDEX', 'ttrss, delta'); + + define('ENABLE_REGISTRATION', false); + define('REG_NOTIFY_ADDRESS', 'ttrss@tools.immae.eu'); + define('REG_MAX_USERS', 10); + + define('SMTP_FROM_NAME', 'Tiny Tiny RSS'); + define('SMTP_FROM_ADDRESS', 'ttrss@tools.immae.eu'); + define('DIGEST_SUBJECT', '[tt-rss] New headlines for last 24 hours'); + + define('LDAP_AUTH_SERVER_URI', 'ldap://${env.ldap.host}:389/'); + define('LDAP_AUTH_USETLS', TRUE); + define('LDAP_AUTH_ALLOW_UNTRUSTED_CERT', TRUE); + define('LDAP_AUTH_BASEDN', '${env.ldap.base}'); + define('LDAP_AUTH_ANONYMOUSBEFOREBIND', FALSE); + define('LDAP_AUTH_SEARCHFILTER', '${env.ldap.filter}'); + + define('LDAP_AUTH_BINDDN', '${env.ldap.dn}'); + define('LDAP_AUTH_BINDPW', '${env.ldap.password}'); + define('LDAP_AUTH_LOGIN_ATTRIB', 'immaeTtrssLogin'); + + define('LDAP_AUTH_LOG_ATTEMPTS', FALSE); + define('LDAP_AUTH_DEBUG', FALSE); + ''; + }; + webRoot = (ttrss.override { ttrss_config = config.secrets.fullPaths."webapps/tools-ttrss"; }).withPlugins (p: [ + p.auth_ldap p.ff_instagram p.tumblr_gdpr_ua + (p.af_feedmod.override { patched = true; }) + (p.feediron.override { patched = true; }) + ]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /ttrss "${root}" + <Directory "${root}"> + DirectoryIndex index.php + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride All + Options FollowSymlinks + Require all granted + </Directory> + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot config.secrets.fullPaths."webapps/tools-ttrss" varDir ] + ++ webRoot.plugins); + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "TtrssPHPSESSID"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:TTRSS:'"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "ttrss website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/ttrss/" "<title>Tiny Tiny RSS"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "TT-RSS"; + _webstatus_url = "https://tools.immae.eu/ttrss/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/wallabag.nix b/systems/eldiron/websites/tools/wallabag.nix new file mode 100644 index 0000000..0a5750d --- /dev/null +++ b/systems/eldiron/websites/tools/wallabag.nix @@ -0,0 +1,180 @@ +{ env, wallabag, mylibs, config }: +rec { + varDir = "/var/lib/wallabag"; + keys."webapps/tools-wallabag" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_driver: pdo_pgsql + database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver + database_host: ${env.postgresql.socket} + database_port: ${env.postgresql.port} + database_name: ${env.postgresql.database} + database_user: ${env.postgresql.user} + database_password: ${env.postgresql.password} + database_path: null + database_table_prefix: wallabag_ + database_socket: null + database_charset: utf8 + domain_name: https://tools.immae.eu/wallabag + mailer_transport: sendmail + mailer_host: 127.0.0.1 + mailer_user: null + mailer_password: null + locale: fr + secret: ${env.secret} + twofactor_auth: true + twofactor_sender: wallabag@tools.immae.eu + fosuser_registration: false + fosuser_confirmation: true + from_email: wallabag@tools.immae.eu + rss_limit: 50 + rabbitmq_host: localhost + rabbitmq_port: 5672 + rabbitmq_user: guest + rabbitmq_password: guest + rabbitmq_prefetch_count: 10 + redis_scheme: unix + redis_host: null + redis_port: null + redis_path: ${env.redis.socket} + redis_password: null + sites_credentials: { } + ldap_enabled: true + ldap_host: ${env.ldap.host} + ldap_port: 636 + ldap_tls: false + ldap_ssl: true + ldap_bind_requires_dn: true + ldap_base: '${env.ldap.base}' + ldap_manager_dn: '${env.ldap.dn}' + ldap_manager_pw: ${env.ldap.password} + ldap_filter: '${env.ldap.filter}' + ldap_admin_filter: '${env.ldap.admin_filter}' + ldap_username_attribute: uid + ldap_email_attribute: mail + ldap_name_attribute: cn + ldap_enabled_attribute: null + services: + swiftmailer.mailer.default.transport: + class: Swift_SendmailTransport + arguments: ['/run/wrappers/bin/sendmail -bs'] + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-21T22:50:00"; + service = { + name = "Wallabag"; + description = "wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely."; + website = "https://tools.immae.eu/wallabag/"; + logo = "https://tools.immae.eu/wallabag/wallassets/themes/_global/img/appicon/apple-touch-icon-120.png"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Wallabag"; + website = "https://wallabag.org/en"; + license.url = "https://github.com/wallabag/wallabag/blob/master/COPYING.md"; + license.name = "MIT License"; + version = webappDir.version; + source.url = "https://github.com/wallabag/wallabag"; + modules = "ldap-patch"; + }; + }; + webappDir = wallabag.override { ldap = true; wallabag_config = config.secrets.fullPaths."webapps/tools-wallabag"; }; + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/var ${varDir}/data/db ${varDir}/assets/images + ''; + webRoot = "${webappDir}/web"; + # Domain migration: Table wallabag_entry contains whole + # https://tools.immae.eu/wallabag domain name in preview_picture + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /wallabag "${root}" + <Directory "${root}"> + AllowOverride None + Require all granted + # For OAuth (apps) + CGIPassAuth On + + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + <IfModule mod_rewrite.c> + Options -MultiViews + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ app.php [QSA,L] + </IfModule> + </Directory> + <Directory "${root}/bundles"> + <IfModule mod_rewrite.c> + RewriteEngine Off + </IfModule> + </Directory> + <Directory "${varDir}/assets"> + AllowOverride None + Require all granted + </Directory> + ''; + }; + phpFpm = rec { + preStart = '' + if [ ! -f "${varDir}/currentWebappDir" -o \ + ! -f "${varDir}/currentKey" -o \ + "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${varDir}/currentKey; then + pushd ${webappDir} > /dev/null + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear + rm -rf /var/lib/wallabag/var/cache/pro_ + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction + popd > /dev/null + echo -n "${webappDir}" > ${varDir}/currentWebappDir + sha512sum ${config.secrets.fullPaths."webapps/tools-wallabag"} > ${varDir}/currentKey + fi + ''; + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webappDir config.secrets.fullPaths."webapps/tools-wallabag" varDir ]; + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "dynamic"; + "pm.max_children" = "60"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "10"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "WallabagPHPSESSID"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Wallabag:'"; + "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/tmp"; + "php_value[max_execution_time]" = "300"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "wallabag website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/wallabag/" "<title>Bienvenue sur wallabag"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "Wallabag"; + _webstatus_url = "https://tools.immae.eu/wallabag/"; + } + ]; +} diff --git a/systems/eldiron/websites/tools/webhooks.nix b/systems/eldiron/websites/tools/webhooks.nix new file mode 100644 index 0000000..337c8f8 --- /dev/null +++ b/systems/eldiron/websites/tools/webhooks.nix @@ -0,0 +1,25 @@ +{ lib, env, binEnv }: +{ + keys = lib.attrsets.mapAttrs' (k: v: + lib.nameValuePair "webapps/webhooks/${k}.php" { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = builtins.replaceStrings ["{{webhooks-bin-env}}"] [ "${binEnv}" ] v; + keyDependencies = [ binEnv ]; + }) env // lib.attrsets.mapAttrs' (k: v: + lib.nameValuePair "webapps/webhooks/${k}/index.php" { + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = builtins.replaceStrings ["{{webhooks-bin-env}}"] [ "${binEnv}" ] v; + keyDependencies = [ binEnv ]; + }) env // { + "webapps/webhooks" = { + isDir = true; + user = "wwwrun"; + group = "wwwrun"; + permissions = "0500"; + }; + }; +} diff --git a/systems/eldiron/websites/tools/ympd.nix b/systems/eldiron/websites/tools/ympd.nix new file mode 100644 index 0000000..0d8d41d --- /dev/null +++ b/systems/eldiron/websites/tools/ympd.nix @@ -0,0 +1,54 @@ +{ env, config }: +let + ympd = rec { + config = { + webPort = "localhost:${toString env.listenPort}"; + host = env.mpd.host; + port = env.mpd.port; + }; + apache = { + modules = [ + "proxy_wstunnel" + ]; + vhostConf = '' + <LocationMatch "^/mpd(?!/music.(mp3|ogg))"> + Use LDAPConnect + Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu + </LocationMatch> + + RedirectMatch permanent "^/mpd$" "/mpd/" + <Location "/mpd/"> + ProxyPass http://${config.webPort}/ + ProxyPassReverse http://${config.webPort}/ + ProxyPreserveHost on + </Location> + <Location "/mpd/ws"> + ProxyPass ws://${config.webPort}/ws + </Location> + <Location "/mpd/music.mp3"> + ProxyPass unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3 + ProxyPassReverse unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3 + </Location> + <Location "/mpd/music.ogg"> + ProxyPass unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg + ProxyPassReverse unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg + </Location> + ''; + }; + }; +in + ympd // { + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "mpd website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https_auth" "tools.immae.eu" "/mpd/" "<title>ympd"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "MPD (YMPD)"; + _webstatus_url = "https://tools.immae.eu/mpd/"; + } + ]; + } diff --git a/systems/eldiron/websites/tools/yourls.nix b/systems/eldiron/websites/tools/yourls.nix new file mode 100644 index 0000000..9e54b0d --- /dev/null +++ b/systems/eldiron/websites/tools/yourls.nix @@ -0,0 +1,118 @@ +{ env, yourls, yourls-plugins, config }: +rec { + keys."webapps/tools-yourls" = { + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + <?php + define( 'YOURLS_DB_USER', '${env.mysql.user}' ); + define( 'YOURLS_DB_PASS', '${env.mysql.password}' ); + define( 'YOURLS_DB_NAME', '${env.mysql.database}' ); + define( 'YOURLS_DB_HOST', '${env.mysql.host}' ); + define( 'YOURLS_DB_PREFIX', 'yourls_' ); + define( 'YOURLS_SITE', 'https://tools.immae.eu/url' ); + define( 'YOURLS_HOURS_OFFSET', 0 ); + define( 'YOURLS_LANG', ''' ); + define( 'YOURLS_UNIQUE_URLS', true ); + define( 'YOURLS_PRIVATE', true ); + define( 'YOURLS_COOKIEKEY', '${env.cookieKey}' ); + $yourls_user_passwords = array(); + define( 'YOURLS_DEBUG', false ); + define( 'YOURLS_URL_CONVERT', 36 ); + $yourls_reserved_URL = array(); + define( 'LDAPAUTH_HOST', 'ldaps://${env.ldap.host}' ); + define( 'LDAPAUTH_PORT', '636' ); + define( 'LDAPAUTH_BASE', '${env.ldap.base}' ); + define( 'LDAPAUTH_SEARCH_USER', '${env.ldap.dn}' ); + define( 'LDAPAUTH_SEARCH_PASS', '${env.ldap.password}' ); + + define( 'LDAPAUTH_GROUP_ATTR', 'memberof' ); + define( 'LDAPAUTH_GROUP_REQ', 'cn=admin,cn=yourls,ou=services,dc=immae,dc=eu'); + + define( 'LDAPAUTH_USERCACHE_TYPE', 0); + ''; + }; + chatonsProperties = { + file.datetime = "2022-08-27T18:00:00"; + service = { + name = "Yourls"; + description = "Your own URL shortener"; + website = "https://tools.immae.eu/url/admin/"; + logo = "https://tools.immae.eu/url/images/favicon.gif"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["MEMBER" "CLIENT"]; + registration.load = "FULL"; + install.type = "PACKAGE"; + }; + software = { + name = "YOURLS"; + website = "http://yourls.org/"; + license.url = "https://github.com/YOURLS/YOURLS/blob/master/LICENSE"; + license.name = "MIT License"; + version = webRoot.version; + source.url = "https://github.com/YOURLS/YOURLS"; + modules = map (a: a.pluginName) webRoot.plugins; + }; + }; + webRoot = (yourls.override { yourls_config = config.secrets.fullPaths."webapps/tools-yourls"; }).withPlugins (p: [p.ldap]); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + root = webRoot; + vhostConf = socket: '' + Alias /url "${root}" + <Directory "${root}"> + <FilesMatch "\.php$"> + SetHandler "proxy:unix:${socket}|fcgi://localhost" + </FilesMatch> + + AllowOverride None + Require all granted + <IfModule mod_rewrite.c> + RewriteEngine On + RewriteBase /url/ + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^.*$ /url/yourls-loader.php [L] + </IfModule> + DirectoryIndex index.php + </Directory> + ''; + }; + phpFpm = rec { + serviceDeps = [ "mysql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot config.secrets.fullPaths."webapps/tools-yourls" ] + ++ webRoot.plugins); + pool = { + "listen.owner" = apache.user; + "listen.group" = apache.group; + "pm" = "ondemand"; + "pm.max_children" = "60"; + "pm.process_idle_timeout" = "60"; + + # Needed to avoid clashes in browser cookies (same domain) + "php_value[session.name]" = "YourlsPHPSESSID"; + "php_admin_value[session.save_handler]" = "redis"; + "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Yourls:'"; + "php_admin_value[open_basedir]" = "${basedir}:/tmp"; + }; + }; + monitoringPlugins = [ "http" ]; + monitoringObjects.service = [ + { + service_description = "yourl website is running on tools.immae.eu"; + host_name = config.hostEnv.fqdn; + use = "external-web-service"; + check_command = ["check_https" "tools.immae.eu" "/url/admin/" "<title>YOURLS"]; + + servicegroups = "webstatus-webapps"; + _webstatus_name = "YOURLS"; + _webstatus_url = "https://tools.immae.eu/url/admin/"; + } + + ]; +} diff --git a/systems/eldiron/websites/visio/default.nix b/systems/eldiron/websites/visio/default.nix new file mode 100644 index 0000000..76d1960 --- /dev/null +++ b/systems/eldiron/websites/visio/default.nix @@ -0,0 +1,63 @@ +{ lib, pkgs, config, ... }: +let + port = config.myEnv.ports.galene_port; + cfg = config.myServices.websites.tools.visio; +in { + options.myServices.websites.tools.visio = { + enable = lib.mkEnableOption "enable visio website"; + }; + + config = lib.mkIf cfg.enable { + myServices.dns.zones."immae.eu".subdomains.visio = + with config.myServices.dns.helpers; ips servers.eldiron.ips.main; + + myServices.chatonsProperties.services.galene = { + file.datetime = "2022-08-21T22:45:00"; + service = { + name = "Galene"; + description = "The Galène videoconference server"; + website = "https://visio.immae.eu/"; + status.level = "OK"; + status.description = "OK"; + registration."" = ["NONE"]; + registration.load = "OPEN"; + install.type = "PACKAGE"; + }; + software = { + name = "Galene"; + website = "https://galene.org/"; + license.url = "https://github.com/jech/galene/blob/master/LICENCE"; + license.name = "MIT License"; + version = pkgs.galene.version; + source.url = "https://github.com/jech/galene"; + }; + }; + services.galene = { + enable = true; + httpPort = port; + insecure = true; + # hack to bypass module's limitations + dataDir = "/var/lib/galene/data -http localhost:${builtins.toString port}"; + }; + systemd.services.galene.serviceConfig.RestrictAddressFamilies = lib.mkForce [ "AF_INET" "AF_INET6" "AF_NETLINK" ]; + security.acme.certs.eldiron.extraDomainNames = [ "visio.immae.eu" ]; + services.websites.env.tools.vhostConfs.visio = { + certName = "eldiron"; + hosts = ["visio.immae.eu" ]; + root = null; + extraConfig = [ + '' + ProxyPass /ws ws://localhost:${builtins.toString port}/ws + ProxyPassReverse /ws ws://localhost:${builtins.toString port}/ws + + ProxyPass / http://localhost:${builtins.toString port}/ + ProxyPassReverse / http://localhost:${builtins.toString port}/ + + ProxyPreserveHost On + '' + ]; + }; + + }; +} + diff --git a/systems/eldiron/websites/vpn/default.nix b/systems/eldiron/websites/vpn/default.nix new file mode 100644 index 0000000..ea54691 --- /dev/null +++ b/systems/eldiron/websites/vpn/default.nix @@ -0,0 +1,13 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.vpn; +in { + config = lib.mkIf cfg.enable { + security.acme.certs.eldiron.extraDomainNames = [ "vpn.immae.eu" ]; + services.websites.env.tools.vhostConfs.vpn = { + certName = "eldiron"; + hosts = [ "vpn.immae.eu" ]; + root = ./www; + }; + }; +} diff --git a/systems/eldiron/websites/vpn/www/index.html b/systems/eldiron/websites/vpn/www/index.html new file mode 100644 index 0000000..fc2618a --- /dev/null +++ b/systems/eldiron/websites/vpn/www/index.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>VPN configuration + + + + + +
+

Installation

+
    +
  • Installer tinc
  • +
  • Créer un fichier /etc/tinc/Immae/tinc.conf sur ce modèle, en remplaçant la ligne A choisir par un nom de la forme DomaineMachine. La machine sera accessible par machine.domaine.immae.eu par la suite +
    +Name = A choisir
    +Mode = switch
    +Interface = vpn6
    +ConnectTo = ImmaeEu
    +
    +# The tap device tinc will use.
    +# Default is /dev/tap0 for ethertap or FreeBSD,
    +# /dev/tun0 for Solaris and OpenBSD,
    +# and /dev/net/tun for Linux tun/tap device.
    +Device = /dev/net/tun
    +LocalDiscovery = yes
    +
    +
  • +
  • Vérifier l'existence du device indiqué à la ligne "Device" dans le système. +
    ls /dev/net/tun
    +
  • +
  • Si tinc tourne déjà, l'arrêter !!
  • +
  • Générer les clés : +
    tincd -K -n Immae
    + Stocker la clé privée dans /etc/tinc/Immae/rsa_key.priv et la clé publique dans un autre dossier
    + (pas /etc/tinc/Immae/hosts/ comme proposé par défaut).
    + L'endroit importe peu, elle ne sera pas conservée.
  • +
  • M'envoyer le nom choisi dans tinc.conf, et la clé publique
  • +
  • Cloner le dépôt des hôtes du réseau +
    +cd /etc/tinc/Immae
    +git clone https://git.immae.eu/perso/Immae/Config/tinc/hosts
    +
    +
  • +
  • Une fois que j'ai confirmé avoir reçu la clé : +
    +cd /etc/tinc/Immae/hosts
    +git pull origin master
    +
    +
  • +
  • Uniquement pour Debian/Ubuntu: Ajouter Immae dans /etc/tinc/nets.boot (créer le fichier si nécessaire).
  • +
  • Selon le système, démarrer tinc : +
    +/etc/init.d/tinc start
    +
    + ou +
    +systemctl enable tincd@Immae.service
    +systemctl start tincd@Immae.service
    +
    +
  • +
+ +

Choix d'ip

+
    +
  • Choisir une ip : 2001:aaaa:b:cccc:d::xxxx:yyyy/96 (le préfixe 2001:aaaa:b:cccc:d est imposé). Choix uniquement sur le yyyy (n'importe quel nombre entre 1 et ffff), le xxxx est dépendant du domaine
  • +
  • M'envoyer le choix de l'ip
  • + +
  • Si on veut éviter de passer systématiquement par le serveur immae.eu (Par + défaut linux préfère l'ipv6 dès qu'il en a possibilité), modifier le fichier + /etc/gai.conf. Quelques lignes à décommenter, tout est déjà dans le fichier : +
    +(...)
    +#
    +precedence  ::1/128       50
    +precedence  ::/0          40
    +precedence  2002::/16     30
    +precedence ::/96          20
    +#precedence ::ffff:0:0/96  10
    +#
    +#    For sites which prefer IPv4 connections change the last line to
    +#
    +precedence ::ffff:0:0/96  100
    +(...)
    +
    +
  • +
+
+ + diff --git a/systems/eldiron/websites/vpn/www/style.css b/systems/eldiron/websites/vpn/www/style.css new file mode 100644 index 0000000..b177fec --- /dev/null +++ b/systems/eldiron/websites/vpn/www/style.css @@ -0,0 +1,61 @@ +* { + margin:0; + padding:0; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing: border-box; +} + +html { + min-height:100%; + border-top:10px solid #ECEEF1; + border-bottom:10px solid #ECEEF1; + color:#61666c; + font-weight:400; + font-size:1em; + font-family:'Open Sans', sans-serif; + line-height:2em; +} +body { + padding:20px; + -webkit-backface-visibility:hidden; +} +code { + font-family:consolas,monospace; +} +a { + color:#61666c; + text-decoration:none; +} +a, img { + border:none; + outline:none +} +a:hover { + color:#2a2a2a; +} + +.instructions { + margin:0 auto; + padding-top:20px; + max-width:80%; +} + +.instructions a { + text-decoration: underline; +} + +.instructions h2 { + margin-top: 10px; +} +.instructions em.important:before { + content: "⚠ Important ⚠ "; + color: red; +} +.instructions pre { + width: 50em; + padding: 10px 15px; + display: table; + border: 1px inset black; + line-height: 1em; +} diff --git a/systems/eldiron/webstats/default.nix b/systems/eldiron/webstats/default.nix new file mode 100644 index 0000000..0057f64 --- /dev/null +++ b/systems/eldiron/webstats/default.nix @@ -0,0 +1,80 @@ +{ lib, pkgs, config, ... }: +let + name = "goaccess"; + cfg = config.services.webstats; +in { + options.services.webstats = { + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Goaccess stores its data. + ''; + }; + sites = lib.mkOption { + type = lib.types.listOf (lib.types.submodule { + options = { + conf = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = '' + use custom goaccess configuration file instead of the + default one. + ''; + }; + name = lib.mkOption { + type = lib.types.str; + description = '' + Domain name. Corresponds to the Apache file name and the + folder name in which the state will be saved. + ''; + }; + }; + }); + default = []; + description = "Sites to generate stats"; + }; + }; + + config = lib.mkIf (builtins.length cfg.sites > 0) { + environment.systemPackages = [ + pkgs.goaccess + ]; + + services.cron = { + enable = true; + systemCronJobs = let + stats = domain: conf: let + config = if builtins.isNull conf + then pkgs.runCommand "goaccess.conf" { + dbPath = "${cfg.dataDir}/${domain}"; + } "substituteAll ${./goaccess.conf} $out" + else conf; + d = pkgs.writeScriptBin "stats-${domain}" '' + #!${pkgs.stdenv.shell} + set -e + shopt -s nullglob + TMPFILE=$(mktemp) + trap "rm -f $TMPFILE" EXIT + + mkdir -p ${cfg.dataDir}/${domain} + for i in /var/log/httpd/access-${domain}*.gz /var/log/httpd/*/access-${domain}*.gz; do + zcat "$i" >> $TMPFILE + done + cat /var/log/httpd/*access-${domain}.log /var/log/httpd/*/access-${domain}.log > $TMPFILE + ${pkgs.goaccess}/bin/goaccess $TMPFILE --no-progress -o ${cfg.dataDir}/${domain}/index.html -p ${config} + ''; + in "${d}/bin/stats-${domain}"; + allStats = sites: pkgs.writeScript "stats" '' + #!${pkgs.stdenv.shell} + + mkdir -p ${cfg.dataDir} + ${builtins.concatStringsSep "\n" (map (v: stats v.name v.conf) sites)} + ''; + in + [ + "5 0 * * * root ${allStats cfg.sites}" + ]; + }; + }; +} diff --git a/systems/eldiron/webstats/goaccess.conf b/systems/eldiron/webstats/goaccess.conf new file mode 100644 index 0000000..c6c244a --- /dev/null +++ b/systems/eldiron/webstats/goaccess.conf @@ -0,0 +1,100 @@ +time-format %H:%M:%S +date-format %d/%b/%Y + +log-format VCOMBINED +#= %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u" + +html-prefs {"theme":"bright","layout":"vertical"} + +# old +exclude-ip 188.165.209.148 +exclude-ip 178.33.252.96 +exclude-ip 2001:41d0:2:9c94::1 +exclude-ip 2001:41d0:2:9c94:: +# eldiron +exclude-ip 176.9.151.89 +exclude-ip 2a01:4f8:160:3445:: +# monitoring-1 +exclude-ip 95.216.164.150 +exclude-ip 2a01:4f9:c010:1c95:: + +no-query-string true + +persist true +restore true +db-path @dbPath@ + +ignore-panel REFERRERS +ignore-panel KEYPHRASES + +static-file .css +static-file .js +static-file .jpg +static-file .png +static-file .gif +static-file .ico +static-file .jpeg +static-file .pdf +static-file .csv +static-file .mpeg +static-file .mpg +static-file .swf +static-file .woff +static-file .woff2 +static-file .xls +static-file .xlsx +static-file .doc +static-file .docx +static-file .ppt +static-file .pptx +static-file .txt +static-file .zip +static-file .ogg +static-file .mp3 +static-file .mp4 +static-file .exe +static-file .iso +static-file .gz +static-file .rar +static-file .svg +static-file .bmp +static-file .tar +static-file .tgz +static-file .tiff +static-file .tif +static-file .ttf +static-file .flv +#static-file .less +#static-file .ac3 +#static-file .avi +#static-file .bz2 +#static-file .class +#static-file .cue +#static-file .dae +#static-file .dat +#static-file .dts +#static-file .ejs +#static-file .eot +#static-file .eps +#static-file .img +#static-file .jar +#static-file .map +#static-file .mid +#static-file .midi +#static-file .ogv +#static-file .webm +#static-file .mkv +#static-file .odp +#static-file .ods +#static-file .odt +#static-file .otf +#static-file .pict +#static-file .pls +#static-file .ps +#static-file .qt +#static-file .rm +#static-file .svgz +#static-file .wav +#static-file .webp + + -- cgit v1.2.3