├── .gitignore ├── README.md ├── docker-playground ├── README.md └── docker-compose.yml ├── ethereum ├── README.md └── syncstats │ ├── index.js │ ├── package-lock.json │ └── package.json ├── links.md ├── python-playground └── README.md ├── sdr ├── README.md ├── fm.grc ├── images │ ├── 820t2.jpg │ ├── Screenshot from 2017-08-21 23-18-14.png │ ├── call-frankie.png │ ├── decoding.png │ └── gqrx-spotted.png └── random-notes.md ├── tendermint ├── README.md ├── priv_validator.json └── use_keys.py └── zero-carbon └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | tmp/ 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # vuepress build output 72 | .vuepress/dist 73 | 74 | # Serverless directories 75 | .serverless 76 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Index 2 | 3 | Some random notes: 4 | 5 | * [Software Defined Radio](./sdr) 6 | * [Docker Compose Playground](./docker-compose-playground) 7 | * [Zero carbon infrastructure](./zero-carbon) 8 | * [Ethereum node](./ethereum) 9 | 10 | # License 11 | [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/). 12 | -------------------------------------------------------------------------------- /docker-playground/README.md: -------------------------------------------------------------------------------- 1 | # Docker and Docker Compose networking playground 2 | I'm sharing some experiments that helped me understanding better Docker and Docker Compose from a **networking** level. I made this document public hoping other creatures will find it useful. 3 | 4 | I'm focusing on Docker 17.05 (Community Edition, don't get me started with the name) and [Docker Compose version 3](https://docs.docker.com/compose/compose-file/) (unfortunately, they don't have a permanent URL for that specific version of the documentation), specifically on how to connect to containers from: 5 | - the host 6 | - another container run with `docker` 7 | - another container in a `docker-compose.yml` 8 | 9 | I'm skipping basic stuff like setting up your system with Docker and Docker Compose, if you need help just [duckduckgo](https://duckduckgo.com/) it. 10 | 11 | You'll need to run multiple terminals, my personal preference is to use `tmux` because I can split the current window in multiple panels. I assume basic knowledge of the terminal, and a Posix-like system. 12 | 13 | As a generic humanoid carbon unit, I make mistakes. If you find something wrong please do a PR, if you don't understand something please open an issue. 14 | 15 | # A simple server with `nc` (netcat) 16 | `nc` is a pretty neat command to make TCP and UDP connections and servers. The following examples will use two `nc` processes, one for the server and one for the client. 17 | 18 | ## The basics 19 | The very first step is to try out `nc` and create a simple client-server architecture in our machine (also called *host*). We will spawn a `nc` server, listening to port `8888`, and a client, that will connect to the server to send a message. Doing this in your host is pretty simple. Again, everything is running on `localhost`, starting a server and connecting to it is as easy as it sounds. On a terminal, run the server: 20 | ``` 21 | nc -l -p 8888 22 | ``` 23 | 24 | On a different terminal, send a message to the server: 25 | ``` 26 | echo hello | nc localhost 8888 27 | ``` 28 | 29 | You should now see `hello` on the terminal of the server. 30 | 31 | *Exit by hitting `ctrl+c`.* 32 | 33 | ## Using Docker 34 | In this section we will use the command `docker`. 35 | 36 | ### Host to Docker 37 | What happens if we run the server in a Docker container, and we connect to it from the host? Let's *containerize* it first: 38 | ``` 39 | docker run -p8888:8888 --rm alpine nc -l -p 8888 40 | ``` 41 | 42 | Now we have to options. We can connect from the host or from another container. Let's start connecting the client from the host. 43 | ``` 44 | echo hello | nc localhost 8888 45 | ``` 46 | 47 | As in the previous example, you should see `hello` in the containerized server. 48 | 49 | Why does this work? In this example, Docker is publishing the port `8888` on the host to the port `8888` of the container (the option is `-p8888:8888`). Even if it works, it's kinda boring. Let's spice up our example. 50 | 51 | #### Playing with networks (aka, something I wish I understood earlier) 52 | We start the server as before, and we name the container with `--name ncserver`. This time we don't publish the port: 53 | ``` 54 | docker run --rm --name ncserver alpine nc -l -p 8888 55 | ``` 56 | 57 | How do we connect to it? Where is it running? Docker's networking behaviour is quite interesting. Before digging into details, let's find out our container IP address: 58 | 59 | ``` 60 | docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ncserver 61 | ``` 62 | 63 | In my machine, the IP is `172.17.0.2`. To send a "hello" to it, run again the command you saw the previous section, changing the host to the newly discovered IP: 64 | ``` 65 | echo hello | nc 172.17.0.2 8888 66 | ``` 67 | 68 | #### What happened here? 69 | If you don't specify a network when running a container, Docker attaches it to the default network. You can verify this with `docker inspect ncserver` in the `Networks` section of the output. The default network is called `bridge`, and your `ncserver` should be connected there. 70 | 71 | For even more fun, let's see what the kernel IP routing table looks like: 72 | ``` 73 | $ route -n 74 | Kernel IP routing table 75 | Destination Gateway Genmask Flags Metric Ref Use Iface 76 | ... 77 | 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 78 | ... 79 | ``` 80 | 81 | Interestingly enough, the IP of our container `ncserver` is in the subnet `172.17.0.0`, so packages *from* and *to* `172.17.0.2` go through the (virtual) interface `docker0`. 82 | 83 | If we query for the status of that interface with `ifconfig docker0`, we have something like that: 84 | 85 | ``` 86 | $ ifconfig docker0 87 | docker0: flags=4099 mtu 1500 88 | inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 89 | [...] 90 | ``` 91 | 92 | If you don't find it particularly interesting, wait to see how it works with Docker Compose. 93 | 94 | 95 | ### Docker to Docker 96 | In this section we run two containers and connect them, and things are starting to be interesting. Start the server as before: 97 | ``` 98 | docker run --rm alpine nc -l -p 8888 99 | ``` 100 | 101 | How do we connect client and server? In the "Host to Docker" example, we opened a connection from `localhost` to a specific host in a different network. The kernel took care of routing the request to the correct host through the interface `docker0`. In this case, the two docker containers run in the same network. The IP of the container `ncserver` should be the same as before, `172.17.0.2`. We can simply do: 102 | ``` 103 | docker run --rm alpine sh -c 'echo hello | nc 172.17.0.2 8888' 104 | ``` 105 | 106 | This should connect to the `ncserver` container and send our mildly entertaining "hello" message to it. Note we had to wrap the command in `sh -c '...'` in order to execute the pipe command inside the container, and not in the current terminal. 107 | 108 | IP addresses can change, so using them is not ideal, and hardcoding them in a script is even worse. Docker provides an [embedded DNS server](https://docs.docker.com/engine/userguide/networking/configure-dns/) for user-defined networks. We will see in a moment how this works together with Docker Compose. 109 | 110 | ## Using Docker Compose 111 | Where we explore how to do things with—you guessed right—Docker Compose! 112 | 113 | ### Host to Docker Compose 114 | *Note: this section [doesn't work](https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds) if you are using Docker for mac.* 115 | 116 | We start by creating a simple `docker-compose.yml` file that runs the `nc` server: 117 | ``` 118 | version: '3' 119 | 120 | services: 121 | ncserver: 122 | image: alpine 123 | command: nc -l -p 8888 124 | ``` 125 | 126 | To run the service, type: 127 | ``` 128 | docker-compose up ncserver 129 | ``` 130 | 131 | OK, time to connect to our webscale™ `nc` server. We will do it from our host. The difference from the previous scenario is that in this case Docker Compose creates an **ad hoc virtual network** for the **services** listed in `docker-compose.yml`. Using some of the commands I showed before, we can start understanding how this thing works. First, let's check the IP address of the newly launched `ncserver`. Note that the name of the container depends on the directory where the configuration file is: 132 | ``` 133 | $ docker ps 134 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 135 | afd69fa6e2a8 alpine "nc -l -p 8888" 2 second ago Up 1 second dockercompose_ncserver_1 136 | ``` 137 | 138 | OK, so the name of my container is `dockercompose_ncserver_1`, short, simple, and easy to remember. The IP of the container is: 139 | ``` 140 | $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_ncserver_1 141 | 172.18.0.2 142 | ``` 143 | 144 | Now that we have the IP of the container, we can easily talk to it: 145 | ``` 146 | echo hello | nc 172.18.0.2 8888 147 | ``` 148 | 149 | Yay, it works! 150 | 151 | #### What happened here? 152 | The network where the container is connected is `172.18.0.0`. If you remember, in the Docker examples the newtork was `172.17.0.0`. What happened? Let's dig more, and check the routing tables of the kernel: 153 | ``` 154 | $ route -n 155 | Kernel IP routing table 156 | Destination Gateway Genmask Flags Metric Ref Use Iface 157 | [...] 158 | 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 159 | 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-083ed51d3bc1 160 | [...] 161 | ``` 162 | 163 | Seems like we have a new friend, and its name is `br-083ed51d3bc1`: 164 | ``` 165 | $ ifconfig br-083ed51d3bc1 166 | br-083ed51d3bc1: flags=4163 mtu 1500 167 | inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 168 | [...] 169 | ``` 170 | 171 | This is reflected also in the list of networks managed by Docker: 172 | ``` 173 | $ docker network ls 174 | NETWORK ID NAME DRIVER SCOPE 175 | 9a834ebdf75c bridge bridge local 176 | 083ed51d3bc1 dockercompose_default bridge local 177 | d70f3f0de048 host host local 178 | dce8e03e2ab9 none null local 179 | 180 | ``` 181 | 182 | ### Set up a proper Docker Compose 183 | A Docker Compose file with just one service is not that useful. Let's try to add our client in the configuration. The new `docker-compose.yml` file should look like this: 184 | ``` 185 | version: '3' 186 | 187 | services: 188 | ncserver: 189 | image: alpine 190 | command: nc -l -p 8888 191 | ncclient: 192 | image: alpine 193 | depends_on: 194 | - ncserver 195 | command: sh -c 'echo hello | nc ncserver 8888' 196 | ``` 197 | 198 | You can run everything with the simple command: 199 | ``` 200 | docker-compose up 201 | ``` 202 | 203 | If you see in the logs `ncserver_1 | hello`, congrats, everything went as expected! `docker-compose up` does a lot of things (it *builds, (re)creates, starts, and attaches to containers for a service*), take a minute to read the output of `docker-compose up -h`, it will really help you understand what this command does. 204 | 205 | #### The embedded DNS server 206 | As you might have noticed, we didn't use IP addresses this time, but hostnames. This is something we have for free by using user-defined networks, and Docker Compose (as we saw before) creates a new network for us. This allow us to refer to other containers by the name specified under `services`. 207 | 208 | Let's query the embedded DNS server. First, start `ncserver`: 209 | ``` 210 | docker-compose up ncserver 211 | ``` 212 | 213 | The server will hang waiting for connections. Now run: 214 | ``` 215 | docker-compose run --rm nclient sh 216 | ``` 217 | 218 | To query the DNS server I usually use `dig`. In *alpine* a similar command is `drill`. We need to update the package manager and install the software: 219 | ``` 220 | apk update 221 | apk add drill 222 | ``` 223 | 224 | Now are ready to query the DNS server: 225 | ``` 226 | / # drill ncserver 227 | ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 64349 228 | ;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 229 | ;; QUESTION SECTION: 230 | ;; ncserver. IN A 231 | 232 | ;; ANSWER SECTION: 233 | ncserver. 600 IN A 172.20.0.2 234 | 235 | ;; AUTHORITY SECTION: 236 | 237 | ;; ADDITIONAL SECTION: 238 | 239 | ;; Query time: 0 msec 240 | ;; SERVER: 127.0.0.11 241 | ;; WHEN: Tue Jan 16 11:01:29 2018 242 | ;; MSG SIZE rcvd: 50 243 | ``` 244 | 245 | *Note: I didn't find a way to query the DNS server from the host, if you have an idea on how to do it please tell me.* 246 | 247 | 248 | # Further reading 249 | I suggest you to take 20 minutes and read [Docker container networking](https://docs.docker.com/engine/userguide/networking/). 250 | 251 | -------------------------------------------------------------------------------- /docker-playground/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | ncserver: 5 | image: alpine 6 | command: nc -l -p 8888 7 | ncclient: 8 | image: alpine 9 | depends_on: 10 | - ncserver 11 | command: sh -c 'echo hello | nc ncserver 8888' 12 | -------------------------------------------------------------------------------- /ethereum/README.md: -------------------------------------------------------------------------------- 1 | # Sync your node 2 | 3 | `parity` has a nice **warp** feature. 4 | 5 | ## I want to use HDD 6 | 7 | 8 | This section covers Neo4j I/O behavior, and how to optimize for operations on disk. 9 | 10 | Databases often produce many small and random reads when querying data, and few sequential writes when committing changes. 11 | 12 | By default, most Linux distributions schedule IO requests using the Completely Fair Queuing (CFQ) algorithm, which provides a good balance between throughput and latency. The particular IO workload of a database, however, is better served by the Deadline scheduler. The Deadline scheduler gives preference to read requests, and processes them as soon as possible. This tends to decrease the latency of reads, while the latency of writes goes up. Since the writes are usually sequential, their lingering in the IO queue increases the change of overlapping or adjacent write requests being merged together. This effectively reduces the number of writes that are sent to the drive. 13 | 14 | On Linux, the IO scheduler for a drive, in this case sda, can be changed at runtime like this: 15 | 16 | $ echo 'deadline' > /sys/block/sda/queue/scheduler 17 | $ cat /sys/block/sda/queue/scheduler 18 | noop [deadline] cfq 19 | 20 | Another recommended practice is to disable file and directory access time updates. This way, the file system won’t have to issue writes that update this meta-data, thus improving write performance. This can be accomplished by setting the noatime,nodiratime mount options in fstab, or when issuing the disk mount command. 21 | 22 | [9.6. Linux file system tuning - Chapter 9. Performance](https://neo4j.com/docs/operations-manual/current/performance/linux-file-system-tuning/) 23 | 24 | ## My commands 25 | ``` 26 | fdisk /dev/sdb 27 | mke2fs -t ext4 -O ^has_journal /dev/sdb2 28 | mount -o noatime /dev/sdb1 /data 29 | echo deadline > /sys/block/sda/queue/scheduler 30 | parity --base-path=/data/parity/ethereum --no-serve-light --cache-size-queue=1024 --cache-size-state=8192 --max-peers=50 31 | ``` 32 | 33 | 34 | ## Links 35 | * [Improving Linux System Performance with I/O Scheduler Tuning | via @codeship](https://blog.codeship.com/linux-io-scheduler-tuning/) 36 | * [Tune Your Hard Disk with hdparm » Linux Magazine](http://www.linux-magazine.com/Online/Features/Tune-Your-Hard-Disk-with-hdparm) 37 | * [Tips for optimizing disk performance on Linux](http://blackbird.si/tips-for-optimizing-disk-performance-on-linux/) 38 | * [5 ways to improve HDD speed on Linux | The Code Artist](https://thecodeartist.blogspot.com/2012/06/improving-hdd-performance-linux.html) 39 | * [performance - Optimize Linux file system for reading ~500M small files - Server Fault](https://serverfault.com/questions/701793/optimize-linux-file-system-for-reading-500m-small-files) 40 | * [9.6. Linux file system tuning - Chapter 9. Performance](https://neo4j.com/docs/operations-manual/3.4/performance/linux-file-system-tuning/) 41 | * [How to disable/enable journaling on an ext4 filesystem :Cybergavin](http://cybergav.in/2011/11/15/how-to-disableenable-journaling-on-an-ext4-filesystem/) 42 | * [linux - Disable journaling on ext4 filesystem partition - Super User](https://superuser.com/questions/516784/disable-journaling-on-ext4-filesystem-partition) 43 | -------------------------------------------------------------------------------- /ethereum/syncstats/index.js: -------------------------------------------------------------------------------- 1 | const Web3 = require("web3") 2 | const express = require('express') 3 | const app = express() 4 | const port = 8000 5 | 6 | const web3Local = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')) 7 | const web3Main = new Web3(new Web3.providers.HttpProvider(`https://mainnet.infura.io/${process.env.INFURA_API_KEY}:8545`)) 8 | 9 | app.get('/', async (req, res, next) => { 10 | const localHeight = await web3Local.eth.getBlockNumber() 11 | const mainHeight = await web3Main.eth.getBlockNumber() 12 | const percentage = (100*localHeight/mainHeight).toFixed(2) + "%" 13 | res.setHeader('Content-Type', 'text/plain') 14 | res.end(`local height: ${localHeight}, main net height: ${mainHeight}, percentage: ${percentage}`) 15 | }) 16 | 17 | app.listen(port, () => console.log(`App listening on port ${port}!`)) 18 | -------------------------------------------------------------------------------- /ethereum/syncstats/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "syncstats", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/node": { 8 | "version": "10.11.7", 9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.7.tgz", 10 | "integrity": "sha512-yOxFfkN9xUFLyvWaeYj90mlqTJ41CsQzWKS3gXdOMOyPVacUsymejKxJ4/pMW7exouubuEeZLJawGgcNGYlTeg==" 11 | }, 12 | "accepts": { 13 | "version": "1.3.5", 14 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 15 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 16 | "requires": { 17 | "mime-types": "~2.1.18", 18 | "negotiator": "0.6.1" 19 | } 20 | }, 21 | "aes-js": { 22 | "version": "3.0.0", 23 | "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", 24 | "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" 25 | }, 26 | "ajv": { 27 | "version": "5.5.2", 28 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 29 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 30 | "requires": { 31 | "co": "^4.6.0", 32 | "fast-deep-equal": "^1.0.0", 33 | "fast-json-stable-stringify": "^2.0.0", 34 | "json-schema-traverse": "^0.3.0" 35 | } 36 | }, 37 | "any-promise": { 38 | "version": "1.3.0", 39 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 40 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" 41 | }, 42 | "array-flatten": { 43 | "version": "1.1.1", 44 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 45 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 46 | }, 47 | "asn1": { 48 | "version": "0.2.4", 49 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 50 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 51 | "requires": { 52 | "safer-buffer": "~2.1.0" 53 | } 54 | }, 55 | "asn1.js": { 56 | "version": "4.10.1", 57 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 58 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 59 | "requires": { 60 | "bn.js": "^4.0.0", 61 | "inherits": "^2.0.1", 62 | "minimalistic-assert": "^1.0.0" 63 | } 64 | }, 65 | "assert-plus": { 66 | "version": "1.0.0", 67 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 68 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 69 | }, 70 | "async-limiter": { 71 | "version": "1.0.0", 72 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 73 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 74 | }, 75 | "asynckit": { 76 | "version": "0.4.0", 77 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 78 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 79 | }, 80 | "aws-sign2": { 81 | "version": "0.7.0", 82 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 83 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 84 | }, 85 | "aws4": { 86 | "version": "1.8.0", 87 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 88 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 89 | }, 90 | "balanced-match": { 91 | "version": "1.0.0", 92 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 93 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 94 | }, 95 | "base64-js": { 96 | "version": "1.3.0", 97 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", 98 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" 99 | }, 100 | "bcrypt-pbkdf": { 101 | "version": "1.0.2", 102 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 103 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 104 | "requires": { 105 | "tweetnacl": "^0.14.3" 106 | } 107 | }, 108 | "bl": { 109 | "version": "1.2.3", 110 | "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 111 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 112 | "requires": { 113 | "readable-stream": "^2.3.5", 114 | "safe-buffer": "^5.1.1" 115 | } 116 | }, 117 | "block-stream": { 118 | "version": "0.0.9", 119 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 120 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 121 | "requires": { 122 | "inherits": "~2.0.0" 123 | } 124 | }, 125 | "bluebird": { 126 | "version": "3.5.2", 127 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", 128 | "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" 129 | }, 130 | "bn.js": { 131 | "version": "4.11.8", 132 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 133 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" 134 | }, 135 | "body-parser": { 136 | "version": "1.18.3", 137 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 138 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 139 | "requires": { 140 | "bytes": "3.0.0", 141 | "content-type": "~1.0.4", 142 | "debug": "2.6.9", 143 | "depd": "~1.1.2", 144 | "http-errors": "~1.6.3", 145 | "iconv-lite": "0.4.23", 146 | "on-finished": "~2.3.0", 147 | "qs": "6.5.2", 148 | "raw-body": "2.3.3", 149 | "type-is": "~1.6.16" 150 | } 151 | }, 152 | "brace-expansion": { 153 | "version": "1.1.11", 154 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 155 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 156 | "requires": { 157 | "balanced-match": "^1.0.0", 158 | "concat-map": "0.0.1" 159 | } 160 | }, 161 | "brorand": { 162 | "version": "1.1.0", 163 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 164 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 165 | }, 166 | "browserify-aes": { 167 | "version": "1.2.0", 168 | "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 169 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 170 | "requires": { 171 | "buffer-xor": "^1.0.3", 172 | "cipher-base": "^1.0.0", 173 | "create-hash": "^1.1.0", 174 | "evp_bytestokey": "^1.0.3", 175 | "inherits": "^2.0.1", 176 | "safe-buffer": "^5.0.1" 177 | } 178 | }, 179 | "browserify-cipher": { 180 | "version": "1.0.1", 181 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 182 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 183 | "requires": { 184 | "browserify-aes": "^1.0.4", 185 | "browserify-des": "^1.0.0", 186 | "evp_bytestokey": "^1.0.0" 187 | } 188 | }, 189 | "browserify-des": { 190 | "version": "1.0.2", 191 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 192 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 193 | "requires": { 194 | "cipher-base": "^1.0.1", 195 | "des.js": "^1.0.0", 196 | "inherits": "^2.0.1", 197 | "safe-buffer": "^5.1.2" 198 | } 199 | }, 200 | "browserify-rsa": { 201 | "version": "4.0.1", 202 | "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 203 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 204 | "requires": { 205 | "bn.js": "^4.1.0", 206 | "randombytes": "^2.0.1" 207 | } 208 | }, 209 | "browserify-sha3": { 210 | "version": "0.0.1", 211 | "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", 212 | "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", 213 | "requires": { 214 | "js-sha3": "^0.3.1" 215 | } 216 | }, 217 | "browserify-sign": { 218 | "version": "4.0.4", 219 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 220 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 221 | "requires": { 222 | "bn.js": "^4.1.1", 223 | "browserify-rsa": "^4.0.0", 224 | "create-hash": "^1.1.0", 225 | "create-hmac": "^1.1.2", 226 | "elliptic": "^6.0.0", 227 | "inherits": "^2.0.1", 228 | "parse-asn1": "^5.0.0" 229 | } 230 | }, 231 | "buffer": { 232 | "version": "5.2.1", 233 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", 234 | "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", 235 | "requires": { 236 | "base64-js": "^1.0.2", 237 | "ieee754": "^1.1.4" 238 | } 239 | }, 240 | "buffer-alloc": { 241 | "version": "1.2.0", 242 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 243 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 244 | "requires": { 245 | "buffer-alloc-unsafe": "^1.1.0", 246 | "buffer-fill": "^1.0.0" 247 | } 248 | }, 249 | "buffer-alloc-unsafe": { 250 | "version": "1.1.0", 251 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 252 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 253 | }, 254 | "buffer-crc32": { 255 | "version": "0.2.13", 256 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 257 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 258 | }, 259 | "buffer-fill": { 260 | "version": "1.0.0", 261 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 262 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 263 | }, 264 | "buffer-to-arraybuffer": { 265 | "version": "0.0.5", 266 | "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", 267 | "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" 268 | }, 269 | "buffer-xor": { 270 | "version": "1.0.3", 271 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 272 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" 273 | }, 274 | "bytes": { 275 | "version": "3.0.0", 276 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 277 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 278 | }, 279 | "caseless": { 280 | "version": "0.12.0", 281 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 282 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 283 | }, 284 | "cipher-base": { 285 | "version": "1.0.4", 286 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 287 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 288 | "requires": { 289 | "inherits": "^2.0.1", 290 | "safe-buffer": "^5.0.1" 291 | } 292 | }, 293 | "co": { 294 | "version": "4.6.0", 295 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 296 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 297 | }, 298 | "combined-stream": { 299 | "version": "1.0.7", 300 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 301 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 302 | "requires": { 303 | "delayed-stream": "~1.0.0" 304 | } 305 | }, 306 | "commander": { 307 | "version": "2.8.1", 308 | "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", 309 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", 310 | "requires": { 311 | "graceful-readlink": ">= 1.0.0" 312 | } 313 | }, 314 | "concat-map": { 315 | "version": "0.0.1", 316 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 317 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 318 | }, 319 | "content-disposition": { 320 | "version": "0.5.2", 321 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 322 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 323 | }, 324 | "content-type": { 325 | "version": "1.0.4", 326 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 327 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 328 | }, 329 | "cookie": { 330 | "version": "0.3.1", 331 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 332 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 333 | }, 334 | "cookie-signature": { 335 | "version": "1.0.6", 336 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 337 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 338 | }, 339 | "cookiejar": { 340 | "version": "2.1.2", 341 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", 342 | "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" 343 | }, 344 | "core-util-is": { 345 | "version": "1.0.2", 346 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 347 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 348 | }, 349 | "cors": { 350 | "version": "2.8.4", 351 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", 352 | "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", 353 | "requires": { 354 | "object-assign": "^4", 355 | "vary": "^1" 356 | } 357 | }, 358 | "create-ecdh": { 359 | "version": "4.0.3", 360 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 361 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 362 | "requires": { 363 | "bn.js": "^4.1.0", 364 | "elliptic": "^6.0.0" 365 | } 366 | }, 367 | "create-hash": { 368 | "version": "1.2.0", 369 | "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 370 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 371 | "requires": { 372 | "cipher-base": "^1.0.1", 373 | "inherits": "^2.0.1", 374 | "md5.js": "^1.3.4", 375 | "ripemd160": "^2.0.1", 376 | "sha.js": "^2.4.0" 377 | } 378 | }, 379 | "create-hmac": { 380 | "version": "1.1.7", 381 | "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 382 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 383 | "requires": { 384 | "cipher-base": "^1.0.3", 385 | "create-hash": "^1.1.0", 386 | "inherits": "^2.0.1", 387 | "ripemd160": "^2.0.0", 388 | "safe-buffer": "^5.0.1", 389 | "sha.js": "^2.4.8" 390 | } 391 | }, 392 | "crypto-browserify": { 393 | "version": "3.12.0", 394 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 395 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 396 | "requires": { 397 | "browserify-cipher": "^1.0.0", 398 | "browserify-sign": "^4.0.0", 399 | "create-ecdh": "^4.0.0", 400 | "create-hash": "^1.1.0", 401 | "create-hmac": "^1.1.0", 402 | "diffie-hellman": "^5.0.0", 403 | "inherits": "^2.0.1", 404 | "pbkdf2": "^3.0.3", 405 | "public-encrypt": "^4.0.0", 406 | "randombytes": "^2.0.0", 407 | "randomfill": "^1.0.3" 408 | } 409 | }, 410 | "dashdash": { 411 | "version": "1.14.1", 412 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 413 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 414 | "requires": { 415 | "assert-plus": "^1.0.0" 416 | } 417 | }, 418 | "debug": { 419 | "version": "2.6.9", 420 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 421 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 422 | "requires": { 423 | "ms": "2.0.0" 424 | } 425 | }, 426 | "decode-uri-component": { 427 | "version": "0.2.0", 428 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 429 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" 430 | }, 431 | "decompress": { 432 | "version": "4.2.1", 433 | "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", 434 | "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", 435 | "requires": { 436 | "decompress-tar": "^4.0.0", 437 | "decompress-tarbz2": "^4.0.0", 438 | "decompress-targz": "^4.0.0", 439 | "decompress-unzip": "^4.0.1", 440 | "graceful-fs": "^4.1.10", 441 | "make-dir": "^1.0.0", 442 | "pify": "^2.3.0", 443 | "strip-dirs": "^2.0.0" 444 | } 445 | }, 446 | "decompress-response": { 447 | "version": "3.3.0", 448 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 449 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 450 | "requires": { 451 | "mimic-response": "^1.0.0" 452 | } 453 | }, 454 | "decompress-tar": { 455 | "version": "4.1.1", 456 | "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", 457 | "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", 458 | "requires": { 459 | "file-type": "^5.2.0", 460 | "is-stream": "^1.1.0", 461 | "tar-stream": "^1.5.2" 462 | } 463 | }, 464 | "decompress-tarbz2": { 465 | "version": "4.1.1", 466 | "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", 467 | "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", 468 | "requires": { 469 | "decompress-tar": "^4.1.0", 470 | "file-type": "^6.1.0", 471 | "is-stream": "^1.1.0", 472 | "seek-bzip": "^1.0.5", 473 | "unbzip2-stream": "^1.0.9" 474 | }, 475 | "dependencies": { 476 | "file-type": { 477 | "version": "6.2.0", 478 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", 479 | "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" 480 | } 481 | } 482 | }, 483 | "decompress-targz": { 484 | "version": "4.1.1", 485 | "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", 486 | "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", 487 | "requires": { 488 | "decompress-tar": "^4.1.1", 489 | "file-type": "^5.2.0", 490 | "is-stream": "^1.1.0" 491 | } 492 | }, 493 | "decompress-unzip": { 494 | "version": "4.0.1", 495 | "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", 496 | "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", 497 | "requires": { 498 | "file-type": "^3.8.0", 499 | "get-stream": "^2.2.0", 500 | "pify": "^2.3.0", 501 | "yauzl": "^2.4.2" 502 | }, 503 | "dependencies": { 504 | "file-type": { 505 | "version": "3.9.0", 506 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", 507 | "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" 508 | }, 509 | "get-stream": { 510 | "version": "2.3.1", 511 | "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", 512 | "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", 513 | "requires": { 514 | "object-assign": "^4.0.1", 515 | "pinkie-promise": "^2.0.0" 516 | } 517 | } 518 | } 519 | }, 520 | "delayed-stream": { 521 | "version": "1.0.0", 522 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 523 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 524 | }, 525 | "depd": { 526 | "version": "1.1.2", 527 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 528 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 529 | }, 530 | "des.js": { 531 | "version": "1.0.0", 532 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 533 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 534 | "requires": { 535 | "inherits": "^2.0.1", 536 | "minimalistic-assert": "^1.0.0" 537 | } 538 | }, 539 | "destroy": { 540 | "version": "1.0.4", 541 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 542 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 543 | }, 544 | "diffie-hellman": { 545 | "version": "5.0.3", 546 | "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 547 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 548 | "requires": { 549 | "bn.js": "^4.1.0", 550 | "miller-rabin": "^4.0.0", 551 | "randombytes": "^2.0.0" 552 | } 553 | }, 554 | "dom-walk": { 555 | "version": "0.1.1", 556 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", 557 | "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" 558 | }, 559 | "duplexer3": { 560 | "version": "0.1.4", 561 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 562 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 563 | }, 564 | "ecc-jsbn": { 565 | "version": "0.1.2", 566 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 567 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 568 | "requires": { 569 | "jsbn": "~0.1.0", 570 | "safer-buffer": "^2.1.0" 571 | } 572 | }, 573 | "ee-first": { 574 | "version": "1.1.1", 575 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 576 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 577 | }, 578 | "elliptic": { 579 | "version": "6.4.1", 580 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", 581 | "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", 582 | "requires": { 583 | "bn.js": "^4.4.0", 584 | "brorand": "^1.0.1", 585 | "hash.js": "^1.0.0", 586 | "hmac-drbg": "^1.0.0", 587 | "inherits": "^2.0.1", 588 | "minimalistic-assert": "^1.0.0", 589 | "minimalistic-crypto-utils": "^1.0.0" 590 | } 591 | }, 592 | "encodeurl": { 593 | "version": "1.0.2", 594 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 595 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 596 | }, 597 | "end-of-stream": { 598 | "version": "1.4.1", 599 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 600 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 601 | "requires": { 602 | "once": "^1.4.0" 603 | } 604 | }, 605 | "escape-html": { 606 | "version": "1.0.3", 607 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 608 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 609 | }, 610 | "etag": { 611 | "version": "1.8.1", 612 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 613 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 614 | }, 615 | "eth-ens-namehash": { 616 | "version": "2.0.8", 617 | "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", 618 | "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", 619 | "requires": { 620 | "idna-uts46-hx": "^2.3.1", 621 | "js-sha3": "^0.5.7" 622 | }, 623 | "dependencies": { 624 | "js-sha3": { 625 | "version": "0.5.7", 626 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", 627 | "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" 628 | } 629 | } 630 | }, 631 | "eth-lib": { 632 | "version": "0.1.27", 633 | "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", 634 | "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", 635 | "requires": { 636 | "bn.js": "^4.11.6", 637 | "elliptic": "^6.4.0", 638 | "keccakjs": "^0.2.1", 639 | "nano-json-stream-parser": "^0.1.2", 640 | "servify": "^0.1.12", 641 | "ws": "^3.0.0", 642 | "xhr-request-promise": "^0.1.2" 643 | } 644 | }, 645 | "ethers": { 646 | "version": "4.0.0-beta.1", 647 | "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", 648 | "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", 649 | "requires": { 650 | "@types/node": "^10.3.2", 651 | "aes-js": "3.0.0", 652 | "bn.js": "^4.4.0", 653 | "elliptic": "6.3.3", 654 | "hash.js": "1.1.3", 655 | "js-sha3": "0.5.7", 656 | "scrypt-js": "2.0.3", 657 | "setimmediate": "1.0.4", 658 | "uuid": "2.0.1", 659 | "xmlhttprequest": "1.8.0" 660 | }, 661 | "dependencies": { 662 | "elliptic": { 663 | "version": "6.3.3", 664 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", 665 | "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", 666 | "requires": { 667 | "bn.js": "^4.4.0", 668 | "brorand": "^1.0.1", 669 | "hash.js": "^1.0.0", 670 | "inherits": "^2.0.1" 671 | } 672 | }, 673 | "hash.js": { 674 | "version": "1.1.3", 675 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", 676 | "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", 677 | "requires": { 678 | "inherits": "^2.0.3", 679 | "minimalistic-assert": "^1.0.0" 680 | } 681 | }, 682 | "js-sha3": { 683 | "version": "0.5.7", 684 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", 685 | "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" 686 | }, 687 | "setimmediate": { 688 | "version": "1.0.4", 689 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", 690 | "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" 691 | }, 692 | "uuid": { 693 | "version": "2.0.1", 694 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", 695 | "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" 696 | } 697 | } 698 | }, 699 | "ethjs-unit": { 700 | "version": "0.1.6", 701 | "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", 702 | "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", 703 | "requires": { 704 | "bn.js": "4.11.6", 705 | "number-to-bn": "1.7.0" 706 | }, 707 | "dependencies": { 708 | "bn.js": { 709 | "version": "4.11.6", 710 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", 711 | "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" 712 | } 713 | } 714 | }, 715 | "eventemitter3": { 716 | "version": "1.1.1", 717 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", 718 | "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" 719 | }, 720 | "evp_bytestokey": { 721 | "version": "1.0.3", 722 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 723 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 724 | "requires": { 725 | "md5.js": "^1.3.4", 726 | "safe-buffer": "^5.1.1" 727 | } 728 | }, 729 | "express": { 730 | "version": "4.16.4", 731 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 732 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 733 | "requires": { 734 | "accepts": "~1.3.5", 735 | "array-flatten": "1.1.1", 736 | "body-parser": "1.18.3", 737 | "content-disposition": "0.5.2", 738 | "content-type": "~1.0.4", 739 | "cookie": "0.3.1", 740 | "cookie-signature": "1.0.6", 741 | "debug": "2.6.9", 742 | "depd": "~1.1.2", 743 | "encodeurl": "~1.0.2", 744 | "escape-html": "~1.0.3", 745 | "etag": "~1.8.1", 746 | "finalhandler": "1.1.1", 747 | "fresh": "0.5.2", 748 | "merge-descriptors": "1.0.1", 749 | "methods": "~1.1.2", 750 | "on-finished": "~2.3.0", 751 | "parseurl": "~1.3.2", 752 | "path-to-regexp": "0.1.7", 753 | "proxy-addr": "~2.0.4", 754 | "qs": "6.5.2", 755 | "range-parser": "~1.2.0", 756 | "safe-buffer": "5.1.2", 757 | "send": "0.16.2", 758 | "serve-static": "1.13.2", 759 | "setprototypeof": "1.1.0", 760 | "statuses": "~1.4.0", 761 | "type-is": "~1.6.16", 762 | "utils-merge": "1.0.1", 763 | "vary": "~1.1.2" 764 | } 765 | }, 766 | "extend": { 767 | "version": "3.0.2", 768 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 769 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 770 | }, 771 | "extsprintf": { 772 | "version": "1.3.0", 773 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 774 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 775 | }, 776 | "fast-deep-equal": { 777 | "version": "1.1.0", 778 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 779 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 780 | }, 781 | "fast-json-stable-stringify": { 782 | "version": "2.0.0", 783 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 784 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 785 | }, 786 | "fd-slicer": { 787 | "version": "1.1.0", 788 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 789 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 790 | "requires": { 791 | "pend": "~1.2.0" 792 | } 793 | }, 794 | "file-type": { 795 | "version": "5.2.0", 796 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 797 | "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" 798 | }, 799 | "finalhandler": { 800 | "version": "1.1.1", 801 | "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 802 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 803 | "requires": { 804 | "debug": "2.6.9", 805 | "encodeurl": "~1.0.2", 806 | "escape-html": "~1.0.3", 807 | "on-finished": "~2.3.0", 808 | "parseurl": "~1.3.2", 809 | "statuses": "~1.4.0", 810 | "unpipe": "~1.0.0" 811 | } 812 | }, 813 | "for-each": { 814 | "version": "0.3.3", 815 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 816 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 817 | "requires": { 818 | "is-callable": "^1.1.3" 819 | } 820 | }, 821 | "forever-agent": { 822 | "version": "0.6.1", 823 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 824 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 825 | }, 826 | "form-data": { 827 | "version": "2.3.2", 828 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 829 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 830 | "requires": { 831 | "asynckit": "^0.4.0", 832 | "combined-stream": "1.0.6", 833 | "mime-types": "^2.1.12" 834 | }, 835 | "dependencies": { 836 | "combined-stream": { 837 | "version": "1.0.6", 838 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 839 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 840 | "requires": { 841 | "delayed-stream": "~1.0.0" 842 | } 843 | } 844 | } 845 | }, 846 | "forwarded": { 847 | "version": "0.1.2", 848 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 849 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 850 | }, 851 | "fresh": { 852 | "version": "0.5.2", 853 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 854 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 855 | }, 856 | "fs-constants": { 857 | "version": "1.0.0", 858 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 859 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 860 | }, 861 | "fs-extra": { 862 | "version": "2.1.2", 863 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", 864 | "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", 865 | "requires": { 866 | "graceful-fs": "^4.1.2", 867 | "jsonfile": "^2.1.0" 868 | } 869 | }, 870 | "fs-promise": { 871 | "version": "2.0.3", 872 | "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", 873 | "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", 874 | "requires": { 875 | "any-promise": "^1.3.0", 876 | "fs-extra": "^2.0.0", 877 | "mz": "^2.6.0", 878 | "thenify-all": "^1.6.0" 879 | } 880 | }, 881 | "fs.realpath": { 882 | "version": "1.0.0", 883 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 884 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 885 | }, 886 | "fstream": { 887 | "version": "1.0.12", 888 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", 889 | "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", 890 | "requires": { 891 | "graceful-fs": "^4.1.2", 892 | "inherits": "~2.0.0", 893 | "mkdirp": ">=0.5 0", 894 | "rimraf": "2" 895 | } 896 | }, 897 | "get-stream": { 898 | "version": "3.0.0", 899 | "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 900 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 901 | }, 902 | "getpass": { 903 | "version": "0.1.7", 904 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 905 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 906 | "requires": { 907 | "assert-plus": "^1.0.0" 908 | } 909 | }, 910 | "glob": { 911 | "version": "7.1.3", 912 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 913 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 914 | "requires": { 915 | "fs.realpath": "^1.0.0", 916 | "inflight": "^1.0.4", 917 | "inherits": "2", 918 | "minimatch": "^3.0.4", 919 | "once": "^1.3.0", 920 | "path-is-absolute": "^1.0.0" 921 | } 922 | }, 923 | "global": { 924 | "version": "4.3.2", 925 | "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", 926 | "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", 927 | "requires": { 928 | "min-document": "^2.19.0", 929 | "process": "~0.5.1" 930 | } 931 | }, 932 | "got": { 933 | "version": "7.1.0", 934 | "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", 935 | "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", 936 | "requires": { 937 | "decompress-response": "^3.2.0", 938 | "duplexer3": "^0.1.4", 939 | "get-stream": "^3.0.0", 940 | "is-plain-obj": "^1.1.0", 941 | "is-retry-allowed": "^1.0.0", 942 | "is-stream": "^1.0.0", 943 | "isurl": "^1.0.0-alpha5", 944 | "lowercase-keys": "^1.0.0", 945 | "p-cancelable": "^0.3.0", 946 | "p-timeout": "^1.1.1", 947 | "safe-buffer": "^5.0.1", 948 | "timed-out": "^4.0.0", 949 | "url-parse-lax": "^1.0.0", 950 | "url-to-options": "^1.0.1" 951 | } 952 | }, 953 | "graceful-fs": { 954 | "version": "4.1.11", 955 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 956 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 957 | }, 958 | "graceful-readlink": { 959 | "version": "1.0.1", 960 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 961 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 962 | }, 963 | "har-schema": { 964 | "version": "2.0.0", 965 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 966 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 967 | }, 968 | "har-validator": { 969 | "version": "5.1.0", 970 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", 971 | "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", 972 | "requires": { 973 | "ajv": "^5.3.0", 974 | "har-schema": "^2.0.0" 975 | } 976 | }, 977 | "has-symbol-support-x": { 978 | "version": "1.4.2", 979 | "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", 980 | "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" 981 | }, 982 | "has-to-string-tag-x": { 983 | "version": "1.4.1", 984 | "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", 985 | "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", 986 | "requires": { 987 | "has-symbol-support-x": "^1.4.1" 988 | } 989 | }, 990 | "hash-base": { 991 | "version": "3.0.4", 992 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 993 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 994 | "requires": { 995 | "inherits": "^2.0.1", 996 | "safe-buffer": "^5.0.1" 997 | } 998 | }, 999 | "hash.js": { 1000 | "version": "1.1.5", 1001 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", 1002 | "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", 1003 | "requires": { 1004 | "inherits": "^2.0.3", 1005 | "minimalistic-assert": "^1.0.1" 1006 | } 1007 | }, 1008 | "hmac-drbg": { 1009 | "version": "1.0.1", 1010 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1011 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1012 | "requires": { 1013 | "hash.js": "^1.0.3", 1014 | "minimalistic-assert": "^1.0.0", 1015 | "minimalistic-crypto-utils": "^1.0.1" 1016 | } 1017 | }, 1018 | "http-errors": { 1019 | "version": "1.6.3", 1020 | "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1021 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 1022 | "requires": { 1023 | "depd": "~1.1.2", 1024 | "inherits": "2.0.3", 1025 | "setprototypeof": "1.1.0", 1026 | "statuses": ">= 1.4.0 < 2" 1027 | } 1028 | }, 1029 | "http-https": { 1030 | "version": "1.0.0", 1031 | "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", 1032 | "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" 1033 | }, 1034 | "http-signature": { 1035 | "version": "1.2.0", 1036 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1037 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1038 | "requires": { 1039 | "assert-plus": "^1.0.0", 1040 | "jsprim": "^1.2.2", 1041 | "sshpk": "^1.7.0" 1042 | } 1043 | }, 1044 | "iconv-lite": { 1045 | "version": "0.4.23", 1046 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 1047 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 1048 | "requires": { 1049 | "safer-buffer": ">= 2.1.2 < 3" 1050 | } 1051 | }, 1052 | "idna-uts46-hx": { 1053 | "version": "2.3.1", 1054 | "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", 1055 | "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", 1056 | "requires": { 1057 | "punycode": "2.1.0" 1058 | }, 1059 | "dependencies": { 1060 | "punycode": { 1061 | "version": "2.1.0", 1062 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", 1063 | "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" 1064 | } 1065 | } 1066 | }, 1067 | "ieee754": { 1068 | "version": "1.1.12", 1069 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", 1070 | "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" 1071 | }, 1072 | "inflight": { 1073 | "version": "1.0.6", 1074 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1075 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1076 | "requires": { 1077 | "once": "^1.3.0", 1078 | "wrappy": "1" 1079 | } 1080 | }, 1081 | "inherits": { 1082 | "version": "2.0.3", 1083 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1084 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1085 | }, 1086 | "ipaddr.js": { 1087 | "version": "1.8.0", 1088 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 1089 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 1090 | }, 1091 | "is-callable": { 1092 | "version": "1.1.4", 1093 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 1094 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" 1095 | }, 1096 | "is-function": { 1097 | "version": "1.0.1", 1098 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", 1099 | "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" 1100 | }, 1101 | "is-hex-prefixed": { 1102 | "version": "1.0.0", 1103 | "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", 1104 | "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" 1105 | }, 1106 | "is-natural-number": { 1107 | "version": "4.0.1", 1108 | "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", 1109 | "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" 1110 | }, 1111 | "is-object": { 1112 | "version": "1.0.1", 1113 | "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", 1114 | "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" 1115 | }, 1116 | "is-plain-obj": { 1117 | "version": "1.1.0", 1118 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1119 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" 1120 | }, 1121 | "is-retry-allowed": { 1122 | "version": "1.1.0", 1123 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", 1124 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" 1125 | }, 1126 | "is-stream": { 1127 | "version": "1.1.0", 1128 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1129 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 1130 | }, 1131 | "is-typedarray": { 1132 | "version": "1.0.0", 1133 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1134 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1135 | }, 1136 | "isarray": { 1137 | "version": "1.0.0", 1138 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1139 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1140 | }, 1141 | "isstream": { 1142 | "version": "0.1.2", 1143 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1144 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1145 | }, 1146 | "isurl": { 1147 | "version": "1.0.0", 1148 | "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", 1149 | "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", 1150 | "requires": { 1151 | "has-to-string-tag-x": "^1.2.0", 1152 | "is-object": "^1.0.1" 1153 | } 1154 | }, 1155 | "js-sha3": { 1156 | "version": "0.3.1", 1157 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", 1158 | "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" 1159 | }, 1160 | "jsbn": { 1161 | "version": "0.1.1", 1162 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1163 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1164 | }, 1165 | "json-schema": { 1166 | "version": "0.2.3", 1167 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1168 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1169 | }, 1170 | "json-schema-traverse": { 1171 | "version": "0.3.1", 1172 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1173 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 1174 | }, 1175 | "json-stringify-safe": { 1176 | "version": "5.0.1", 1177 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1178 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1179 | }, 1180 | "jsonfile": { 1181 | "version": "2.4.0", 1182 | "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", 1183 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", 1184 | "requires": { 1185 | "graceful-fs": "^4.1.6" 1186 | } 1187 | }, 1188 | "jsprim": { 1189 | "version": "1.4.1", 1190 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1191 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1192 | "requires": { 1193 | "assert-plus": "1.0.0", 1194 | "extsprintf": "1.3.0", 1195 | "json-schema": "0.2.3", 1196 | "verror": "1.10.0" 1197 | } 1198 | }, 1199 | "keccakjs": { 1200 | "version": "0.2.1", 1201 | "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", 1202 | "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", 1203 | "requires": { 1204 | "browserify-sha3": "^0.0.1", 1205 | "sha3": "^1.1.0" 1206 | } 1207 | }, 1208 | "lowercase-keys": { 1209 | "version": "1.0.1", 1210 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1211 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" 1212 | }, 1213 | "make-dir": { 1214 | "version": "1.3.0", 1215 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 1216 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 1217 | "requires": { 1218 | "pify": "^3.0.0" 1219 | }, 1220 | "dependencies": { 1221 | "pify": { 1222 | "version": "3.0.0", 1223 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1224 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 1225 | } 1226 | } 1227 | }, 1228 | "md5.js": { 1229 | "version": "1.3.5", 1230 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1231 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1232 | "requires": { 1233 | "hash-base": "^3.0.0", 1234 | "inherits": "^2.0.1", 1235 | "safe-buffer": "^5.1.2" 1236 | } 1237 | }, 1238 | "media-typer": { 1239 | "version": "0.3.0", 1240 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1241 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1242 | }, 1243 | "merge-descriptors": { 1244 | "version": "1.0.1", 1245 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1246 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1247 | }, 1248 | "methods": { 1249 | "version": "1.1.2", 1250 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1251 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1252 | }, 1253 | "miller-rabin": { 1254 | "version": "4.0.1", 1255 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 1256 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 1257 | "requires": { 1258 | "bn.js": "^4.0.0", 1259 | "brorand": "^1.0.1" 1260 | } 1261 | }, 1262 | "mime": { 1263 | "version": "1.4.1", 1264 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 1265 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 1266 | }, 1267 | "mime-db": { 1268 | "version": "1.36.0", 1269 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", 1270 | "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" 1271 | }, 1272 | "mime-types": { 1273 | "version": "2.1.20", 1274 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", 1275 | "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", 1276 | "requires": { 1277 | "mime-db": "~1.36.0" 1278 | } 1279 | }, 1280 | "mimic-response": { 1281 | "version": "1.0.1", 1282 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1283 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 1284 | }, 1285 | "min-document": { 1286 | "version": "2.19.0", 1287 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 1288 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", 1289 | "requires": { 1290 | "dom-walk": "^0.1.0" 1291 | } 1292 | }, 1293 | "minimalistic-assert": { 1294 | "version": "1.0.1", 1295 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1296 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1297 | }, 1298 | "minimalistic-crypto-utils": { 1299 | "version": "1.0.1", 1300 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1301 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 1302 | }, 1303 | "minimatch": { 1304 | "version": "3.0.4", 1305 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1306 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1307 | "requires": { 1308 | "brace-expansion": "^1.1.7" 1309 | } 1310 | }, 1311 | "minimist": { 1312 | "version": "0.0.8", 1313 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1314 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1315 | }, 1316 | "mkdirp": { 1317 | "version": "0.5.1", 1318 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1319 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1320 | "requires": { 1321 | "minimist": "0.0.8" 1322 | } 1323 | }, 1324 | "mkdirp-promise": { 1325 | "version": "5.0.1", 1326 | "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", 1327 | "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", 1328 | "requires": { 1329 | "mkdirp": "*" 1330 | } 1331 | }, 1332 | "mock-fs": { 1333 | "version": "4.7.0", 1334 | "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.7.0.tgz", 1335 | "integrity": "sha512-WlQNtUlzMRpvLHf8dqeUmNqfdPjGY29KrJF50Ldb4AcL+vQeR8QH3wQcFMgrhTwb1gHjZn9xggho+84tBskLgA==" 1336 | }, 1337 | "mout": { 1338 | "version": "0.11.1", 1339 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", 1340 | "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" 1341 | }, 1342 | "ms": { 1343 | "version": "2.0.0", 1344 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1345 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1346 | }, 1347 | "mz": { 1348 | "version": "2.7.0", 1349 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1350 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1351 | "requires": { 1352 | "any-promise": "^1.0.0", 1353 | "object-assign": "^4.0.1", 1354 | "thenify-all": "^1.0.0" 1355 | } 1356 | }, 1357 | "nan": { 1358 | "version": "2.10.0", 1359 | "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", 1360 | "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" 1361 | }, 1362 | "nano-json-stream-parser": { 1363 | "version": "0.1.2", 1364 | "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", 1365 | "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" 1366 | }, 1367 | "negotiator": { 1368 | "version": "0.6.1", 1369 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 1370 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 1371 | }, 1372 | "number-to-bn": { 1373 | "version": "1.7.0", 1374 | "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", 1375 | "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", 1376 | "requires": { 1377 | "bn.js": "4.11.6", 1378 | "strip-hex-prefix": "1.0.0" 1379 | }, 1380 | "dependencies": { 1381 | "bn.js": { 1382 | "version": "4.11.6", 1383 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", 1384 | "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" 1385 | } 1386 | } 1387 | }, 1388 | "oauth-sign": { 1389 | "version": "0.9.0", 1390 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1391 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1392 | }, 1393 | "object-assign": { 1394 | "version": "4.1.1", 1395 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1396 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1397 | }, 1398 | "oboe": { 1399 | "version": "2.1.3", 1400 | "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", 1401 | "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", 1402 | "requires": { 1403 | "http-https": "^1.0.0" 1404 | } 1405 | }, 1406 | "on-finished": { 1407 | "version": "2.3.0", 1408 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1409 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1410 | "requires": { 1411 | "ee-first": "1.1.1" 1412 | } 1413 | }, 1414 | "once": { 1415 | "version": "1.4.0", 1416 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1417 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1418 | "requires": { 1419 | "wrappy": "1" 1420 | } 1421 | }, 1422 | "p-cancelable": { 1423 | "version": "0.3.0", 1424 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", 1425 | "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" 1426 | }, 1427 | "p-finally": { 1428 | "version": "1.0.0", 1429 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1430 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1431 | }, 1432 | "p-timeout": { 1433 | "version": "1.2.1", 1434 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", 1435 | "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", 1436 | "requires": { 1437 | "p-finally": "^1.0.0" 1438 | } 1439 | }, 1440 | "parse-asn1": { 1441 | "version": "5.1.1", 1442 | "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", 1443 | "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", 1444 | "requires": { 1445 | "asn1.js": "^4.0.0", 1446 | "browserify-aes": "^1.0.0", 1447 | "create-hash": "^1.1.0", 1448 | "evp_bytestokey": "^1.0.0", 1449 | "pbkdf2": "^3.0.3" 1450 | } 1451 | }, 1452 | "parse-headers": { 1453 | "version": "2.0.1", 1454 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", 1455 | "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", 1456 | "requires": { 1457 | "for-each": "^0.3.2", 1458 | "trim": "0.0.1" 1459 | } 1460 | }, 1461 | "parseurl": { 1462 | "version": "1.3.2", 1463 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 1464 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 1465 | }, 1466 | "path-is-absolute": { 1467 | "version": "1.0.1", 1468 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1469 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1470 | }, 1471 | "path-to-regexp": { 1472 | "version": "0.1.7", 1473 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1474 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1475 | }, 1476 | "pbkdf2": { 1477 | "version": "3.0.17", 1478 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 1479 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 1480 | "requires": { 1481 | "create-hash": "^1.1.2", 1482 | "create-hmac": "^1.1.4", 1483 | "ripemd160": "^2.0.1", 1484 | "safe-buffer": "^5.0.1", 1485 | "sha.js": "^2.4.8" 1486 | } 1487 | }, 1488 | "pend": { 1489 | "version": "1.2.0", 1490 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1491 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 1492 | }, 1493 | "performance-now": { 1494 | "version": "2.1.0", 1495 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1496 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1497 | }, 1498 | "pify": { 1499 | "version": "2.3.0", 1500 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1501 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1502 | }, 1503 | "pinkie": { 1504 | "version": "2.0.4", 1505 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1506 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 1507 | }, 1508 | "pinkie-promise": { 1509 | "version": "2.0.1", 1510 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1511 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1512 | "requires": { 1513 | "pinkie": "^2.0.0" 1514 | } 1515 | }, 1516 | "prepend-http": { 1517 | "version": "1.0.4", 1518 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 1519 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" 1520 | }, 1521 | "prettier": { 1522 | "version": "1.14.3", 1523 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", 1524 | "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", 1525 | "dev": true 1526 | }, 1527 | "process": { 1528 | "version": "0.5.2", 1529 | "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", 1530 | "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" 1531 | }, 1532 | "process-nextick-args": { 1533 | "version": "2.0.0", 1534 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1535 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 1536 | }, 1537 | "proxy-addr": { 1538 | "version": "2.0.4", 1539 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 1540 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 1541 | "requires": { 1542 | "forwarded": "~0.1.2", 1543 | "ipaddr.js": "1.8.0" 1544 | } 1545 | }, 1546 | "psl": { 1547 | "version": "1.1.29", 1548 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", 1549 | "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" 1550 | }, 1551 | "public-encrypt": { 1552 | "version": "4.0.3", 1553 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 1554 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 1555 | "requires": { 1556 | "bn.js": "^4.1.0", 1557 | "browserify-rsa": "^4.0.0", 1558 | "create-hash": "^1.1.0", 1559 | "parse-asn1": "^5.0.0", 1560 | "randombytes": "^2.0.1", 1561 | "safe-buffer": "^5.1.2" 1562 | } 1563 | }, 1564 | "punycode": { 1565 | "version": "1.4.1", 1566 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1567 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1568 | }, 1569 | "qs": { 1570 | "version": "6.5.2", 1571 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1572 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1573 | }, 1574 | "query-string": { 1575 | "version": "5.1.1", 1576 | "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", 1577 | "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", 1578 | "requires": { 1579 | "decode-uri-component": "^0.2.0", 1580 | "object-assign": "^4.1.0", 1581 | "strict-uri-encode": "^1.0.0" 1582 | } 1583 | }, 1584 | "randombytes": { 1585 | "version": "2.0.6", 1586 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", 1587 | "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", 1588 | "requires": { 1589 | "safe-buffer": "^5.1.0" 1590 | } 1591 | }, 1592 | "randomfill": { 1593 | "version": "1.0.4", 1594 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 1595 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 1596 | "requires": { 1597 | "randombytes": "^2.0.5", 1598 | "safe-buffer": "^5.1.0" 1599 | } 1600 | }, 1601 | "randomhex": { 1602 | "version": "0.1.5", 1603 | "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", 1604 | "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" 1605 | }, 1606 | "range-parser": { 1607 | "version": "1.2.0", 1608 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 1609 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 1610 | }, 1611 | "raw-body": { 1612 | "version": "2.3.3", 1613 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 1614 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 1615 | "requires": { 1616 | "bytes": "3.0.0", 1617 | "http-errors": "1.6.3", 1618 | "iconv-lite": "0.4.23", 1619 | "unpipe": "1.0.0" 1620 | } 1621 | }, 1622 | "readable-stream": { 1623 | "version": "2.3.6", 1624 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1625 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1626 | "requires": { 1627 | "core-util-is": "~1.0.0", 1628 | "inherits": "~2.0.3", 1629 | "isarray": "~1.0.0", 1630 | "process-nextick-args": "~2.0.0", 1631 | "safe-buffer": "~5.1.1", 1632 | "string_decoder": "~1.1.1", 1633 | "util-deprecate": "~1.0.1" 1634 | } 1635 | }, 1636 | "request": { 1637 | "version": "2.88.0", 1638 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 1639 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 1640 | "requires": { 1641 | "aws-sign2": "~0.7.0", 1642 | "aws4": "^1.8.0", 1643 | "caseless": "~0.12.0", 1644 | "combined-stream": "~1.0.6", 1645 | "extend": "~3.0.2", 1646 | "forever-agent": "~0.6.1", 1647 | "form-data": "~2.3.2", 1648 | "har-validator": "~5.1.0", 1649 | "http-signature": "~1.2.0", 1650 | "is-typedarray": "~1.0.0", 1651 | "isstream": "~0.1.2", 1652 | "json-stringify-safe": "~5.0.1", 1653 | "mime-types": "~2.1.19", 1654 | "oauth-sign": "~0.9.0", 1655 | "performance-now": "^2.1.0", 1656 | "qs": "~6.5.2", 1657 | "safe-buffer": "^5.1.2", 1658 | "tough-cookie": "~2.4.3", 1659 | "tunnel-agent": "^0.6.0", 1660 | "uuid": "^3.3.2" 1661 | } 1662 | }, 1663 | "rimraf": { 1664 | "version": "2.6.2", 1665 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1666 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1667 | "requires": { 1668 | "glob": "^7.0.5" 1669 | } 1670 | }, 1671 | "ripemd160": { 1672 | "version": "2.0.2", 1673 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 1674 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 1675 | "requires": { 1676 | "hash-base": "^3.0.0", 1677 | "inherits": "^2.0.1" 1678 | } 1679 | }, 1680 | "safe-buffer": { 1681 | "version": "5.1.2", 1682 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1683 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1684 | }, 1685 | "safer-buffer": { 1686 | "version": "2.1.2", 1687 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1688 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1689 | }, 1690 | "scrypt": { 1691 | "version": "6.0.3", 1692 | "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", 1693 | "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", 1694 | "requires": { 1695 | "nan": "^2.0.8" 1696 | } 1697 | }, 1698 | "scrypt-js": { 1699 | "version": "2.0.3", 1700 | "resolved": "http://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", 1701 | "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" 1702 | }, 1703 | "scrypt.js": { 1704 | "version": "0.2.0", 1705 | "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", 1706 | "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", 1707 | "requires": { 1708 | "scrypt": "^6.0.2", 1709 | "scryptsy": "^1.2.1" 1710 | } 1711 | }, 1712 | "scryptsy": { 1713 | "version": "1.2.1", 1714 | "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", 1715 | "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", 1716 | "requires": { 1717 | "pbkdf2": "^3.0.3" 1718 | } 1719 | }, 1720 | "seek-bzip": { 1721 | "version": "1.0.5", 1722 | "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", 1723 | "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", 1724 | "requires": { 1725 | "commander": "~2.8.1" 1726 | } 1727 | }, 1728 | "send": { 1729 | "version": "0.16.2", 1730 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 1731 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 1732 | "requires": { 1733 | "debug": "2.6.9", 1734 | "depd": "~1.1.2", 1735 | "destroy": "~1.0.4", 1736 | "encodeurl": "~1.0.2", 1737 | "escape-html": "~1.0.3", 1738 | "etag": "~1.8.1", 1739 | "fresh": "0.5.2", 1740 | "http-errors": "~1.6.2", 1741 | "mime": "1.4.1", 1742 | "ms": "2.0.0", 1743 | "on-finished": "~2.3.0", 1744 | "range-parser": "~1.2.0", 1745 | "statuses": "~1.4.0" 1746 | } 1747 | }, 1748 | "serve-static": { 1749 | "version": "1.13.2", 1750 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 1751 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 1752 | "requires": { 1753 | "encodeurl": "~1.0.2", 1754 | "escape-html": "~1.0.3", 1755 | "parseurl": "~1.3.2", 1756 | "send": "0.16.2" 1757 | } 1758 | }, 1759 | "servify": { 1760 | "version": "0.1.12", 1761 | "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", 1762 | "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", 1763 | "requires": { 1764 | "body-parser": "^1.16.0", 1765 | "cors": "^2.8.1", 1766 | "express": "^4.14.0", 1767 | "request": "^2.79.0", 1768 | "xhr": "^2.3.3" 1769 | } 1770 | }, 1771 | "setimmediate": { 1772 | "version": "1.0.5", 1773 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 1774 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 1775 | }, 1776 | "setprototypeof": { 1777 | "version": "1.1.0", 1778 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1779 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 1780 | }, 1781 | "sha.js": { 1782 | "version": "2.4.11", 1783 | "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1784 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1785 | "requires": { 1786 | "inherits": "^2.0.1", 1787 | "safe-buffer": "^5.0.1" 1788 | } 1789 | }, 1790 | "sha3": { 1791 | "version": "1.2.2", 1792 | "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", 1793 | "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", 1794 | "requires": { 1795 | "nan": "2.10.0" 1796 | } 1797 | }, 1798 | "simple-concat": { 1799 | "version": "1.0.0", 1800 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 1801 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 1802 | }, 1803 | "simple-get": { 1804 | "version": "2.8.1", 1805 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", 1806 | "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", 1807 | "requires": { 1808 | "decompress-response": "^3.3.0", 1809 | "once": "^1.3.1", 1810 | "simple-concat": "^1.0.0" 1811 | } 1812 | }, 1813 | "sshpk": { 1814 | "version": "1.15.1", 1815 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", 1816 | "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", 1817 | "requires": { 1818 | "asn1": "~0.2.3", 1819 | "assert-plus": "^1.0.0", 1820 | "bcrypt-pbkdf": "^1.0.0", 1821 | "dashdash": "^1.12.0", 1822 | "ecc-jsbn": "~0.1.1", 1823 | "getpass": "^0.1.1", 1824 | "jsbn": "~0.1.0", 1825 | "safer-buffer": "^2.0.2", 1826 | "tweetnacl": "~0.14.0" 1827 | } 1828 | }, 1829 | "statuses": { 1830 | "version": "1.4.0", 1831 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1832 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 1833 | }, 1834 | "strict-uri-encode": { 1835 | "version": "1.1.0", 1836 | "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", 1837 | "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" 1838 | }, 1839 | "string_decoder": { 1840 | "version": "1.1.1", 1841 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1842 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1843 | "requires": { 1844 | "safe-buffer": "~5.1.0" 1845 | } 1846 | }, 1847 | "strip-dirs": { 1848 | "version": "2.1.0", 1849 | "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", 1850 | "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", 1851 | "requires": { 1852 | "is-natural-number": "^4.0.1" 1853 | } 1854 | }, 1855 | "strip-hex-prefix": { 1856 | "version": "1.0.0", 1857 | "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", 1858 | "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", 1859 | "requires": { 1860 | "is-hex-prefixed": "1.0.0" 1861 | } 1862 | }, 1863 | "swarm-js": { 1864 | "version": "0.1.37", 1865 | "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", 1866 | "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", 1867 | "requires": { 1868 | "bluebird": "^3.5.0", 1869 | "buffer": "^5.0.5", 1870 | "decompress": "^4.0.0", 1871 | "eth-lib": "^0.1.26", 1872 | "fs-extra": "^2.1.2", 1873 | "fs-promise": "^2.0.0", 1874 | "got": "^7.1.0", 1875 | "mime-types": "^2.1.16", 1876 | "mkdirp-promise": "^5.0.1", 1877 | "mock-fs": "^4.1.0", 1878 | "setimmediate": "^1.0.5", 1879 | "tar.gz": "^1.0.5", 1880 | "xhr-request-promise": "^0.1.2" 1881 | } 1882 | }, 1883 | "tar": { 1884 | "version": "2.2.2", 1885 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", 1886 | "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", 1887 | "requires": { 1888 | "block-stream": "*", 1889 | "fstream": "^1.0.12", 1890 | "inherits": "2" 1891 | } 1892 | }, 1893 | "tar-stream": { 1894 | "version": "1.6.2", 1895 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", 1896 | "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", 1897 | "requires": { 1898 | "bl": "^1.0.0", 1899 | "buffer-alloc": "^1.2.0", 1900 | "end-of-stream": "^1.0.0", 1901 | "fs-constants": "^1.0.0", 1902 | "readable-stream": "^2.3.0", 1903 | "to-buffer": "^1.1.1", 1904 | "xtend": "^4.0.0" 1905 | } 1906 | }, 1907 | "tar.gz": { 1908 | "version": "1.0.7", 1909 | "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", 1910 | "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", 1911 | "requires": { 1912 | "bluebird": "^2.9.34", 1913 | "commander": "^2.8.1", 1914 | "fstream": "^1.0.8", 1915 | "mout": "^0.11.0", 1916 | "tar": "^2.1.1" 1917 | }, 1918 | "dependencies": { 1919 | "bluebird": { 1920 | "version": "2.11.0", 1921 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", 1922 | "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" 1923 | } 1924 | } 1925 | }, 1926 | "thenify": { 1927 | "version": "3.3.0", 1928 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", 1929 | "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", 1930 | "requires": { 1931 | "any-promise": "^1.0.0" 1932 | } 1933 | }, 1934 | "thenify-all": { 1935 | "version": "1.6.0", 1936 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1937 | "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", 1938 | "requires": { 1939 | "thenify": ">= 3.1.0 < 4" 1940 | } 1941 | }, 1942 | "through": { 1943 | "version": "2.3.8", 1944 | "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 1945 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1946 | }, 1947 | "timed-out": { 1948 | "version": "4.0.1", 1949 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 1950 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" 1951 | }, 1952 | "to-buffer": { 1953 | "version": "1.1.1", 1954 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 1955 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" 1956 | }, 1957 | "tough-cookie": { 1958 | "version": "2.4.3", 1959 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1960 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1961 | "requires": { 1962 | "psl": "^1.1.24", 1963 | "punycode": "^1.4.1" 1964 | } 1965 | }, 1966 | "trim": { 1967 | "version": "0.0.1", 1968 | "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", 1969 | "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" 1970 | }, 1971 | "tunnel-agent": { 1972 | "version": "0.6.0", 1973 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1974 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1975 | "requires": { 1976 | "safe-buffer": "^5.0.1" 1977 | } 1978 | }, 1979 | "tweetnacl": { 1980 | "version": "0.14.5", 1981 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1982 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1983 | }, 1984 | "type-is": { 1985 | "version": "1.6.16", 1986 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 1987 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 1988 | "requires": { 1989 | "media-typer": "0.3.0", 1990 | "mime-types": "~2.1.18" 1991 | } 1992 | }, 1993 | "typedarray-to-buffer": { 1994 | "version": "3.1.5", 1995 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 1996 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 1997 | "requires": { 1998 | "is-typedarray": "^1.0.0" 1999 | } 2000 | }, 2001 | "ultron": { 2002 | "version": "1.1.1", 2003 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 2004 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" 2005 | }, 2006 | "unbzip2-stream": { 2007 | "version": "1.3.1", 2008 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz", 2009 | "integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==", 2010 | "requires": { 2011 | "buffer": "^3.0.1", 2012 | "through": "^2.3.6" 2013 | }, 2014 | "dependencies": { 2015 | "base64-js": { 2016 | "version": "0.0.8", 2017 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", 2018 | "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" 2019 | }, 2020 | "buffer": { 2021 | "version": "3.6.0", 2022 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", 2023 | "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", 2024 | "requires": { 2025 | "base64-js": "0.0.8", 2026 | "ieee754": "^1.1.4", 2027 | "isarray": "^1.0.0" 2028 | } 2029 | } 2030 | } 2031 | }, 2032 | "underscore": { 2033 | "version": "1.8.3", 2034 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", 2035 | "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" 2036 | }, 2037 | "unpipe": { 2038 | "version": "1.0.0", 2039 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2040 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2041 | }, 2042 | "url-parse-lax": { 2043 | "version": "1.0.0", 2044 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 2045 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 2046 | "requires": { 2047 | "prepend-http": "^1.0.1" 2048 | } 2049 | }, 2050 | "url-set-query": { 2051 | "version": "1.0.0", 2052 | "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", 2053 | "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" 2054 | }, 2055 | "url-to-options": { 2056 | "version": "1.0.1", 2057 | "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", 2058 | "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" 2059 | }, 2060 | "utf8": { 2061 | "version": "2.1.1", 2062 | "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", 2063 | "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" 2064 | }, 2065 | "util-deprecate": { 2066 | "version": "1.0.2", 2067 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2068 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2069 | }, 2070 | "utils-merge": { 2071 | "version": "1.0.1", 2072 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2073 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2074 | }, 2075 | "uuid": { 2076 | "version": "3.3.2", 2077 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 2078 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 2079 | }, 2080 | "vary": { 2081 | "version": "1.1.2", 2082 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2083 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2084 | }, 2085 | "verror": { 2086 | "version": "1.10.0", 2087 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2088 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2089 | "requires": { 2090 | "assert-plus": "^1.0.0", 2091 | "core-util-is": "1.0.2", 2092 | "extsprintf": "^1.2.0" 2093 | } 2094 | }, 2095 | "web3": { 2096 | "version": "1.0.0-beta.36", 2097 | "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.36.tgz", 2098 | "integrity": "sha512-fZDunw1V0AQS27r5pUN3eOVP7u8YAvyo6vOapdgVRolAu5LgaweP7jncYyLINqIX9ZgWdS5A090bt+ymgaYHsw==", 2099 | "requires": { 2100 | "web3-bzz": "1.0.0-beta.36", 2101 | "web3-core": "1.0.0-beta.36", 2102 | "web3-eth": "1.0.0-beta.36", 2103 | "web3-eth-personal": "1.0.0-beta.36", 2104 | "web3-net": "1.0.0-beta.36", 2105 | "web3-shh": "1.0.0-beta.36", 2106 | "web3-utils": "1.0.0-beta.36" 2107 | } 2108 | }, 2109 | "web3-bzz": { 2110 | "version": "1.0.0-beta.36", 2111 | "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.36.tgz", 2112 | "integrity": "sha512-clDRS/ziboJ5ytnrfxq80YSu9HQsT0vggnT3BkoXadrauyEE/9JNLxRu016jjUxqdkfdv4MgIPDdOS3Bv2ghiw==", 2113 | "requires": { 2114 | "got": "7.1.0", 2115 | "swarm-js": "0.1.37", 2116 | "underscore": "1.8.3" 2117 | } 2118 | }, 2119 | "web3-core": { 2120 | "version": "1.0.0-beta.36", 2121 | "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", 2122 | "integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", 2123 | "requires": { 2124 | "web3-core-helpers": "1.0.0-beta.36", 2125 | "web3-core-method": "1.0.0-beta.36", 2126 | "web3-core-requestmanager": "1.0.0-beta.36", 2127 | "web3-utils": "1.0.0-beta.36" 2128 | } 2129 | }, 2130 | "web3-core-helpers": { 2131 | "version": "1.0.0-beta.36", 2132 | "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", 2133 | "integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", 2134 | "requires": { 2135 | "underscore": "1.8.3", 2136 | "web3-eth-iban": "1.0.0-beta.36", 2137 | "web3-utils": "1.0.0-beta.36" 2138 | } 2139 | }, 2140 | "web3-core-method": { 2141 | "version": "1.0.0-beta.36", 2142 | "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", 2143 | "integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", 2144 | "requires": { 2145 | "underscore": "1.8.3", 2146 | "web3-core-helpers": "1.0.0-beta.36", 2147 | "web3-core-promievent": "1.0.0-beta.36", 2148 | "web3-core-subscriptions": "1.0.0-beta.36", 2149 | "web3-utils": "1.0.0-beta.36" 2150 | } 2151 | }, 2152 | "web3-core-promievent": { 2153 | "version": "1.0.0-beta.36", 2154 | "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", 2155 | "integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", 2156 | "requires": { 2157 | "any-promise": "1.3.0", 2158 | "eventemitter3": "1.1.1" 2159 | } 2160 | }, 2161 | "web3-core-requestmanager": { 2162 | "version": "1.0.0-beta.36", 2163 | "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", 2164 | "integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", 2165 | "requires": { 2166 | "underscore": "1.8.3", 2167 | "web3-core-helpers": "1.0.0-beta.36", 2168 | "web3-providers-http": "1.0.0-beta.36", 2169 | "web3-providers-ipc": "1.0.0-beta.36", 2170 | "web3-providers-ws": "1.0.0-beta.36" 2171 | } 2172 | }, 2173 | "web3-core-subscriptions": { 2174 | "version": "1.0.0-beta.36", 2175 | "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", 2176 | "integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", 2177 | "requires": { 2178 | "eventemitter3": "1.1.1", 2179 | "underscore": "1.8.3", 2180 | "web3-core-helpers": "1.0.0-beta.36" 2181 | } 2182 | }, 2183 | "web3-eth": { 2184 | "version": "1.0.0-beta.36", 2185 | "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.36.tgz", 2186 | "integrity": "sha512-uEa0UnbnNHUB4N2O1U+LsvxzSPJ/w3azy5115IseaUdDaiz6IFFgFfFP3ssauayQNCf7v2F44GXLfPhrNeb/Sw==", 2187 | "requires": { 2188 | "underscore": "1.8.3", 2189 | "web3-core": "1.0.0-beta.36", 2190 | "web3-core-helpers": "1.0.0-beta.36", 2191 | "web3-core-method": "1.0.0-beta.36", 2192 | "web3-core-subscriptions": "1.0.0-beta.36", 2193 | "web3-eth-abi": "1.0.0-beta.36", 2194 | "web3-eth-accounts": "1.0.0-beta.36", 2195 | "web3-eth-contract": "1.0.0-beta.36", 2196 | "web3-eth-ens": "1.0.0-beta.36", 2197 | "web3-eth-iban": "1.0.0-beta.36", 2198 | "web3-eth-personal": "1.0.0-beta.36", 2199 | "web3-net": "1.0.0-beta.36", 2200 | "web3-utils": "1.0.0-beta.36" 2201 | } 2202 | }, 2203 | "web3-eth-abi": { 2204 | "version": "1.0.0-beta.36", 2205 | "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", 2206 | "integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", 2207 | "requires": { 2208 | "ethers": "4.0.0-beta.1", 2209 | "underscore": "1.8.3", 2210 | "web3-utils": "1.0.0-beta.36" 2211 | } 2212 | }, 2213 | "web3-eth-accounts": { 2214 | "version": "1.0.0-beta.36", 2215 | "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.36.tgz", 2216 | "integrity": "sha512-MmgIlBEZ0ILLWV4+wfMrbeVVMU/VmQnCpgSDcw7wHKOKu47bKncJ6rVqVsUbC6d9F613Rios+Yj2Ua6SCHtmrg==", 2217 | "requires": { 2218 | "any-promise": "1.3.0", 2219 | "crypto-browserify": "3.12.0", 2220 | "eth-lib": "0.2.7", 2221 | "scrypt.js": "0.2.0", 2222 | "underscore": "1.8.3", 2223 | "uuid": "2.0.1", 2224 | "web3-core": "1.0.0-beta.36", 2225 | "web3-core-helpers": "1.0.0-beta.36", 2226 | "web3-core-method": "1.0.0-beta.36", 2227 | "web3-utils": "1.0.0-beta.36" 2228 | }, 2229 | "dependencies": { 2230 | "eth-lib": { 2231 | "version": "0.2.7", 2232 | "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", 2233 | "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", 2234 | "requires": { 2235 | "bn.js": "^4.11.6", 2236 | "elliptic": "^6.4.0", 2237 | "xhr-request-promise": "^0.1.2" 2238 | } 2239 | }, 2240 | "uuid": { 2241 | "version": "2.0.1", 2242 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", 2243 | "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" 2244 | } 2245 | } 2246 | }, 2247 | "web3-eth-contract": { 2248 | "version": "1.0.0-beta.36", 2249 | "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", 2250 | "integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", 2251 | "requires": { 2252 | "underscore": "1.8.3", 2253 | "web3-core": "1.0.0-beta.36", 2254 | "web3-core-helpers": "1.0.0-beta.36", 2255 | "web3-core-method": "1.0.0-beta.36", 2256 | "web3-core-promievent": "1.0.0-beta.36", 2257 | "web3-core-subscriptions": "1.0.0-beta.36", 2258 | "web3-eth-abi": "1.0.0-beta.36", 2259 | "web3-utils": "1.0.0-beta.36" 2260 | } 2261 | }, 2262 | "web3-eth-ens": { 2263 | "version": "1.0.0-beta.36", 2264 | "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.36.tgz", 2265 | "integrity": "sha512-8ZdD7XoJfSX3jNlZHSLe4G837xQ0v5a8cHCcDcd1IoqoY855X9SrIQ0Xdqia9p4mR1YcH1vgmkXY9/3hsvxS7g==", 2266 | "requires": { 2267 | "eth-ens-namehash": "2.0.8", 2268 | "underscore": "1.8.3", 2269 | "web3-core": "1.0.0-beta.36", 2270 | "web3-core-helpers": "1.0.0-beta.36", 2271 | "web3-core-promievent": "1.0.0-beta.36", 2272 | "web3-eth-abi": "1.0.0-beta.36", 2273 | "web3-eth-contract": "1.0.0-beta.36", 2274 | "web3-utils": "1.0.0-beta.36" 2275 | } 2276 | }, 2277 | "web3-eth-iban": { 2278 | "version": "1.0.0-beta.36", 2279 | "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", 2280 | "integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", 2281 | "requires": { 2282 | "bn.js": "4.11.6", 2283 | "web3-utils": "1.0.0-beta.36" 2284 | }, 2285 | "dependencies": { 2286 | "bn.js": { 2287 | "version": "4.11.6", 2288 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", 2289 | "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" 2290 | } 2291 | } 2292 | }, 2293 | "web3-eth-personal": { 2294 | "version": "1.0.0-beta.36", 2295 | "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.36.tgz", 2296 | "integrity": "sha512-+oxvhojeWh4C/XtnlYURWRR3F5Cg7bQQNjtN1ZGnouKAZyBLoYDVVJ6OaPiveNtfC9RKnzLikn9/Uqc0xz410A==", 2297 | "requires": { 2298 | "web3-core": "1.0.0-beta.36", 2299 | "web3-core-helpers": "1.0.0-beta.36", 2300 | "web3-core-method": "1.0.0-beta.36", 2301 | "web3-net": "1.0.0-beta.36", 2302 | "web3-utils": "1.0.0-beta.36" 2303 | } 2304 | }, 2305 | "web3-net": { 2306 | "version": "1.0.0-beta.36", 2307 | "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.36.tgz", 2308 | "integrity": "sha512-BriXK0Pjr6Hc/VDq1Vn8vyOum4JB//wpCjgeGziFD6jC7Of8YaWC7AJYXje89OckzfcqX1aJyJlBwDpasNkAzQ==", 2309 | "requires": { 2310 | "web3-core": "1.0.0-beta.36", 2311 | "web3-core-method": "1.0.0-beta.36", 2312 | "web3-utils": "1.0.0-beta.36" 2313 | } 2314 | }, 2315 | "web3-providers-http": { 2316 | "version": "1.0.0-beta.36", 2317 | "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", 2318 | "integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", 2319 | "requires": { 2320 | "web3-core-helpers": "1.0.0-beta.36", 2321 | "xhr2-cookies": "1.1.0" 2322 | } 2323 | }, 2324 | "web3-providers-ipc": { 2325 | "version": "1.0.0-beta.36", 2326 | "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", 2327 | "integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", 2328 | "requires": { 2329 | "oboe": "2.1.3", 2330 | "underscore": "1.8.3", 2331 | "web3-core-helpers": "1.0.0-beta.36" 2332 | } 2333 | }, 2334 | "web3-providers-ws": { 2335 | "version": "1.0.0-beta.36", 2336 | "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", 2337 | "integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", 2338 | "requires": { 2339 | "underscore": "1.8.3", 2340 | "web3-core-helpers": "1.0.0-beta.36", 2341 | "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" 2342 | } 2343 | }, 2344 | "web3-shh": { 2345 | "version": "1.0.0-beta.36", 2346 | "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.36.tgz", 2347 | "integrity": "sha512-bREGHS/WprYFSvGUhyIk8RSpT2Z5SvJOKGBrsUW2nDIMWO6z0Op8E7fzC6GXY2HZfZliAqq6LirbXLgcLRWuPw==", 2348 | "requires": { 2349 | "web3-core": "1.0.0-beta.36", 2350 | "web3-core-method": "1.0.0-beta.36", 2351 | "web3-core-subscriptions": "1.0.0-beta.36", 2352 | "web3-net": "1.0.0-beta.36" 2353 | } 2354 | }, 2355 | "web3-utils": { 2356 | "version": "1.0.0-beta.36", 2357 | "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", 2358 | "integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", 2359 | "requires": { 2360 | "bn.js": "4.11.6", 2361 | "eth-lib": "0.1.27", 2362 | "ethjs-unit": "0.1.6", 2363 | "number-to-bn": "1.7.0", 2364 | "randomhex": "0.1.5", 2365 | "underscore": "1.8.3", 2366 | "utf8": "2.1.1" 2367 | }, 2368 | "dependencies": { 2369 | "bn.js": { 2370 | "version": "4.11.6", 2371 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", 2372 | "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" 2373 | } 2374 | } 2375 | }, 2376 | "websocket": { 2377 | "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", 2378 | "from": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", 2379 | "requires": { 2380 | "debug": "^2.2.0", 2381 | "nan": "^2.3.3", 2382 | "typedarray-to-buffer": "^3.1.2", 2383 | "yaeti": "^0.0.6" 2384 | } 2385 | }, 2386 | "wrappy": { 2387 | "version": "1.0.2", 2388 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2389 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2390 | }, 2391 | "ws": { 2392 | "version": "3.3.3", 2393 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", 2394 | "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", 2395 | "requires": { 2396 | "async-limiter": "~1.0.0", 2397 | "safe-buffer": "~5.1.0", 2398 | "ultron": "~1.1.0" 2399 | } 2400 | }, 2401 | "xhr": { 2402 | "version": "2.5.0", 2403 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", 2404 | "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", 2405 | "requires": { 2406 | "global": "~4.3.0", 2407 | "is-function": "^1.0.1", 2408 | "parse-headers": "^2.0.0", 2409 | "xtend": "^4.0.0" 2410 | } 2411 | }, 2412 | "xhr-request": { 2413 | "version": "1.1.0", 2414 | "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", 2415 | "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", 2416 | "requires": { 2417 | "buffer-to-arraybuffer": "^0.0.5", 2418 | "object-assign": "^4.1.1", 2419 | "query-string": "^5.0.1", 2420 | "simple-get": "^2.7.0", 2421 | "timed-out": "^4.0.1", 2422 | "url-set-query": "^1.0.0", 2423 | "xhr": "^2.0.4" 2424 | } 2425 | }, 2426 | "xhr-request-promise": { 2427 | "version": "0.1.2", 2428 | "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", 2429 | "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", 2430 | "requires": { 2431 | "xhr-request": "^1.0.1" 2432 | } 2433 | }, 2434 | "xhr2-cookies": { 2435 | "version": "1.1.0", 2436 | "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", 2437 | "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", 2438 | "requires": { 2439 | "cookiejar": "^2.1.1" 2440 | } 2441 | }, 2442 | "xmlhttprequest": { 2443 | "version": "1.8.0", 2444 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 2445 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" 2446 | }, 2447 | "xtend": { 2448 | "version": "4.0.1", 2449 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2450 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 2451 | }, 2452 | "yaeti": { 2453 | "version": "0.0.6", 2454 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", 2455 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" 2456 | }, 2457 | "yauzl": { 2458 | "version": "2.10.0", 2459 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2460 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 2461 | "requires": { 2462 | "buffer-crc32": "~0.2.3", 2463 | "fd-slicer": "~1.1.0" 2464 | } 2465 | } 2466 | } 2467 | } 2468 | -------------------------------------------------------------------------------- /ethereum/syncstats/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "syncstats", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.16.4", 13 | "web3": "^1.0.0-beta.36" 14 | }, 15 | "devDependencies": { 16 | "prettier": "1.14.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /links.md: -------------------------------------------------------------------------------- 1 | # Transhumanism: 2 | - [Survival of the richest: the wealthy are plotting to leave us behind](https://www.cnbc.com/2018/07/11/survival-of-the-richest-the-wealthy-are-plotting-to-leave-us-behind.html?__source=sharebar|twitter&par=sharebar) 3 | - [Why bad technology dominates our lives, according to Don Norman](https://www.fastcompany.com/90202172/why-bad-technology-dominates-our-lives-according-to-don-norman) 4 | 5 | # Testing: 6 | * [testing - What's the difference between unit, functional, acceptance, and integration tests? - Stack Overflow](https://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test#4904533) 7 | * [Google Testing Blog: Testing on the Toilet: Don’t Overuse Mocks](https://testing.googleblog.com/2013/05/testing-on-toilet-dont-overuse-mocks.html) 8 | * [Avoid Testing Implementation Details, Test Behaviours | Ian Cooper](http://codebetter.com/iancooper/2011/10/06/avoid-testing-implementation-details-test-behaviours/) 9 | * [Google Testing Blog: Just Say No to More End-to-End Tests](https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html) 10 | * [Software Testing Anti-patterns · Codepipes Blog](http://blog.codepipes.com/testing/software-testing-antipatterns.html) 11 | 12 | # History of computing 13 | * [Where Vim Came From](https://twobithistory.org/2018/08/05/where-vim-came-from.html) 14 | -------------------------------------------------------------------------------- /python-playground/README.md: -------------------------------------------------------------------------------- 1 | # Stuff I find interesting about Python 3 2 | 3 | ## How to be lazy with `any` 4 | `any` is a nice built-in function: 5 | ``` 6 | any(iterable, /) 7 | Return True if bool(x) is True for any x in the iterable. 8 | 9 | If the iterable is empty, return False. 10 | ``` 11 | 12 | `any` is smart enough to stop iterating when the condition is matched. Let's see some examples. 13 | 14 | First, we need a class that tells us when we access a property (it can be just a method, but I want to be fancy here), and we need also some instances. 15 | 16 | ```python 17 | In [3]: class N: 18 | ...: def __init__(self, x): 19 | ...: self._x = x 20 | ...: @property 21 | ...: def x(self): 22 | ...: print('Accessing x, value is', self._x) 23 | ...: return self._x 24 | 25 | In [4]: l = [N(x) for x in range(10)] 26 | ``` 27 | 28 | As you might guess, if we access the property `x` of an element in the list, we get a message: 29 | 30 | ```python 31 | In [7]: l[5].x 32 | Accessing x, value is 5 33 | Out[7]: 5 34 | ``` 35 | 36 | Things are starting to get interesting when we use lists in combination with `any`, but we need to really understand how to be **truly lazy**. In the following example, we are using a list comprehension: 37 | ```python 38 | In [8]: any([n for n in l if n.x == 1]) 39 | Accessing x, value is 0 40 | Accessing x, value is 1 41 | Accessing x, value is 2 42 | Accessing x, value is 3 43 | Accessing x, value is 4 44 | Accessing x, value is 5 45 | Accessing x, value is 6 46 | Accessing x, value is 7 47 | Accessing x, value is 8 48 | Accessing x, value is 9 49 | Out[8]: True 50 | ``` 51 | 52 | As you can see, all values in the list are accessed. This is because we are **first** iterating through the list `l` checking **all** values, and filtering out anything that is not equal to `1`. The execution of the list comprehension will return a list of only one element, specifically `[1]`. 53 | 54 | But we can do better! The function we are using is `any`, that is equivalent to the [logical quantifier `∃`](https://en.wikipedia.org/wiki/Existential_quantification), so we can stop iterating when we find the first element that satisfy our condition. See what happens when we remove the square brackets from the expression: 55 | 56 | ```python 57 | In [9]: any(n for n in l if n.x == 1) 58 | Accessing x, value is 0 59 | Accessing x, value is 1 60 | Out[9]: True 61 | ``` 62 | 63 | Nice! `any` stopped at the first element satisfying our condition! 64 | -------------------------------------------------------------------------------- /sdr/README.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | Few days ago I attended [Introduction to Software Defined Radio](https://criticalengineering.org/intensives/2017/radio), organized by [Julian](http://julianoliver.com/) and [Bengt](http://automata.se/) from [Critical Engineering](https://criticalengineering.org/). 4 | 5 | The first day was quite exciting. Once I was home, I decided to explore the frequency spectrum to find something interesting. 6 | 7 | 8 | # Much mysterious, very 466MHz, wow. 9 | 10 | I found a really strong signal jumping periodically between 466.0768MHz, 466.2310MHz, 465.9707MHz. Some internet pages say that it is an [unidentified digital signal](http://www.sigidwiki.com/wiki/Unidentified_466_MHz_digital_signal). Even though I later discovered that it is a [known frequency](https://en.wikipedia.org/wiki/POCSAG#National_implementations) for pagers, for a total n00b like me reading *unidentified signal* tickled my curiosity **a lot**. 11 | 12 | To have a full list of the available frequencies, check the [Licensed POCSAG frequencies](https://de.wikipedia.org/wiki/POCSAG#Frequenzen_in_Deutschland) page (thanks [Wikinaut](https://twitter.com/Wikinaut/status/899905985044766724) for the link). 13 | 14 | # Decoding the signal 15 | 16 | ## Prerequisites 17 | 18 | ### Hardware 19 | 20 | I used the **RTL 820T2 SDR Dongle** that I got from the course, its tiny antenna is enough. 21 | ![820T2 SDR Dongle](./images/820t2.jpg) 22 | 23 | 24 | ### Software 25 | 26 | * [gqrx](http://gqrx.dk/) to receive the radio signal. 27 | * [multimon-ng](https://github.com/EliasOenal/multimon-ng) to decode it. 28 | 29 | ### Put everything together 30 | 31 | The steps to read the signal are the following: 32 | 1. Point `gqrx` to listen to the correct frequency, and output the signal as UDP packets 33 | 2. Start a UDP server and pipe it to a program to convert the stream from 48k to 22k. 34 | 3. Pipe the output of the converted audio stream to `multimon-ng` 35 | 36 | Point your radio to 466.0916MHz, you should see a strong signal around that frequency. 37 | ![Signal spotted!](./images/gqrx-spotted.png) 38 | 39 | After you find the exact frequency of the one you want to analyze, center your receiver to that frequency (we need this because later we will enable decimation, and decimation will reduce the range of the frequencies we see in the main panel). I have good results with frequency 466.075MHz. 40 | 41 | I use the following settings: 42 | 43 | * File > I/O Devices: 44 | * Decimation: 8 45 | 46 | * **Input controls**: 47 | * LNA gain: 17db 48 | * DC Remove: on 49 | * IQ balance: on 50 | * Freq. correction: 58ppm (depends on your hardware) 51 | * **Receiver Options**: 52 | * Filter width: around 20k 53 | * Filter shape: Normal 54 | * Mode: Narrow FM 55 | * AGC: Faset 56 | * Squelch -50fBFS 57 | * **FFT Settings** 58 | * FFT size: 8192 59 | * Rate: 20 fps 60 | * Time span: Auto 61 | * Peak: Detect, because it looks cool 62 | 63 | In the **Audio** panel, enable `UDP`. 64 | 65 | Now you are ready to start the server and pipe its output to some other things. 66 | 67 | ``` 68 | $ nc -l -u -p 7355 |\ 69 | sox -t raw -esigned-integer -b 16 -r 48000 - -t raw -esigned-integer -b 16 -r 22050 - |\ 70 | multimon-ng -t raw -a POCSAG512 -a POCSAG1200 -a POCSAG2400 -f alpha - 71 | ``` 72 | 73 | _I found this command somewhere in the comment of a video but I cannot find the source._ 74 | 75 | Let's break it down: 76 | * `nc -l -u -p 7355`: start an UDP server and bind it to the port `7355` 77 | * `sox ...`: convert the stream from 48k to 22k 78 | * `multimon-ng ...`: try to decode the signal using different POCSAG formats, and force decoding of data to `alpha` (I guess alphanumeric, so strings?) 79 | 80 | Run the command and wait for the signal to come up. If everything works as expected, you should start to see some messages. 81 | 82 | ![Decoding the messages](./images/decoding.png) 83 | 84 | If you don't see anything, leave it there for a while, I noticed that sometimes there are no messages at all. 85 | 86 | # Conclusion 87 | 88 | If you need your shower to be installed, please call Frankie. 89 | ![Please call Frankie](./images/call-frankie.png) 90 | -------------------------------------------------------------------------------- /sdr/fm.grc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Sat Aug 19 16:43:59 2017 5 | 6 | options 7 | 8 | author 9 | 10 | 11 | 12 | window_size 13 | 14 | 15 | 16 | category 17 | [GRC Hier Blocks] 18 | 19 | 20 | comment 21 | 22 | 23 | 24 | description 25 | 26 | 27 | 28 | _enabled 29 | True 30 | 31 | 32 | _coordinate 33 | (8, 8) 34 | 35 | 36 | _rotation 37 | 0 38 | 39 | 40 | generate_options 41 | qt_gui 42 | 43 | 44 | hier_block_src_path 45 | .: 46 | 47 | 48 | id 49 | top_block 50 | 51 | 52 | max_nouts 53 | 0 54 | 55 | 56 | qt_qss_theme 57 | 58 | 59 | 60 | realtime_scheduling 61 | 62 | 63 | 64 | run_command 65 | {python} -u {filename} 66 | 67 | 68 | run_options 69 | prompt 70 | 71 | 72 | run 73 | True 74 | 75 | 76 | thread_safe_setters 77 | 78 | 79 | 80 | title 81 | 82 | 83 | 84 | 85 | variable 86 | 87 | comment 88 | 89 | 90 | 91 | _enabled 92 | True 93 | 94 | 95 | _coordinate 96 | (8, 100) 97 | 98 | 99 | _rotation 100 | 0 101 | 102 | 103 | id 104 | audio_rate 105 | 106 | 107 | value 108 | 48000 109 | 110 | 111 | 112 | variable_qtgui_range 113 | 114 | comment 115 | 116 | 117 | 118 | value 119 | 100.6e6 120 | 121 | 122 | _enabled 123 | True 124 | 125 | 126 | _coordinate 127 | (8, 232) 128 | 129 | 130 | gui_hint 131 | 132 | 133 | 134 | _rotation 135 | 0 136 | 137 | 138 | id 139 | frequency 140 | 141 | 142 | label 143 | 144 | 145 | 146 | min_len 147 | 200 148 | 149 | 150 | orient 151 | Qt.Horizontal 152 | 153 | 154 | start 155 | 88e6 156 | 157 | 158 | step 159 | 1 160 | 161 | 162 | stop 163 | 110e6 164 | 165 | 166 | rangeType 167 | float 168 | 169 | 170 | widget 171 | counter_slider 172 | 173 | 174 | 175 | variable_qtgui_range 176 | 177 | comment 178 | 179 | 180 | 181 | value 182 | 40 183 | 184 | 185 | _enabled 186 | True 187 | 188 | 189 | _coordinate 190 | (208, 320) 191 | 192 | 193 | gui_hint 194 | 195 | 196 | 197 | _rotation 198 | 0 199 | 200 | 201 | id 202 | gain 203 | 204 | 205 | label 206 | 207 | 208 | 209 | min_len 210 | 200 211 | 212 | 213 | orient 214 | Qt.Horizontal 215 | 216 | 217 | start 218 | 0 219 | 220 | 221 | step 222 | 1 223 | 224 | 225 | stop 226 | 74 227 | 228 | 229 | rangeType 230 | float 231 | 232 | 233 | widget 234 | counter_slider 235 | 236 | 237 | 238 | variable 239 | 240 | comment 241 | 242 | 243 | 244 | _enabled 245 | True 246 | 247 | 248 | _coordinate 249 | (8, 160) 250 | 251 | 252 | _rotation 253 | 0 254 | 255 | 256 | id 257 | samp_rate 258 | 259 | 260 | value 261 | 2560000 262 | 263 | 264 | 265 | analog_wfm_rcv 266 | 267 | audio_decimation 268 | 4 269 | 270 | 271 | alias 272 | 273 | 274 | 275 | comment 276 | 277 | 278 | 279 | affinity 280 | 281 | 282 | 283 | _enabled 284 | True 285 | 286 | 287 | _coordinate 288 | (656, 140) 289 | 290 | 291 | _rotation 292 | 0 293 | 294 | 295 | id 296 | analog_wfm_rcv_0 297 | 298 | 299 | maxoutbuf 300 | 0 301 | 302 | 303 | minoutbuf 304 | 0 305 | 306 | 307 | quad_rate 308 | 192000 309 | 310 | 311 | 312 | audio_sink 313 | 314 | alias 315 | 316 | 317 | 318 | comment 319 | 320 | 321 | 322 | affinity 323 | 324 | 325 | 326 | device_name 327 | 328 | 329 | 330 | _enabled 331 | True 332 | 333 | 334 | _coordinate 335 | (928, 92) 336 | 337 | 338 | _rotation 339 | 0 340 | 341 | 342 | id 343 | audio_sink_0 344 | 345 | 346 | num_inputs 347 | 1 348 | 349 | 350 | ok_to_block 351 | True 352 | 353 | 354 | samp_rate 355 | audio_rate 356 | 357 | 358 | 359 | qtgui_sink_x 360 | 361 | bw 362 | samp_rate 363 | 364 | 365 | alias 366 | 367 | 368 | 369 | fc 370 | 0 371 | 372 | 373 | freqchangevar 374 | None 375 | 376 | 377 | comment 378 | 379 | 380 | 381 | affinity 382 | 383 | 384 | 385 | _enabled 386 | True 387 | 388 | 389 | fftsize 390 | 1024 391 | 392 | 393 | _coordinate 394 | (928, 192) 395 | 396 | 397 | gui_hint 398 | 399 | 400 | 401 | _rotation 402 | 0 403 | 404 | 405 | id 406 | qtgui_sink_x_0 407 | 408 | 409 | maxoutbuf 410 | 0 411 | 412 | 413 | minoutbuf 414 | 0 415 | 416 | 417 | name 418 | "" 419 | 420 | 421 | plotconst 422 | True 423 | 424 | 425 | plotfreq 426 | True 427 | 428 | 429 | plottime 430 | True 431 | 432 | 433 | plotwaterfall 434 | True 435 | 436 | 437 | showports 438 | True 439 | 440 | 441 | showrf 442 | False 443 | 444 | 445 | type 446 | float 447 | 448 | 449 | rate 450 | 10 451 | 452 | 453 | wintype 454 | firdes.WIN_BLACKMAN_hARRIS 455 | 456 | 457 | 458 | rational_resampler_xxx 459 | 460 | alias 461 | 462 | 463 | 464 | comment 465 | 466 | 467 | 468 | affinity 469 | 470 | 471 | 472 | decim 473 | 2560 474 | 475 | 476 | _enabled 477 | True 478 | 479 | 480 | fbw 481 | 0 482 | 483 | 484 | _coordinate 485 | (456, 128) 486 | 487 | 488 | _rotation 489 | 0 490 | 491 | 492 | id 493 | rational_resampler_xxx_0 494 | 495 | 496 | interp 497 | 192 498 | 499 | 500 | maxoutbuf 501 | 0 502 | 503 | 504 | minoutbuf 505 | 0 506 | 507 | 508 | taps 509 | 510 | 511 | 512 | type 513 | ccc 514 | 515 | 516 | 517 | rtlsdr_source 518 | 519 | alias 520 | 521 | 522 | 523 | ant0 524 | 525 | 526 | 527 | bb_gain0 528 | 20 529 | 530 | 531 | bw0 532 | 0 533 | 534 | 535 | dc_offset_mode0 536 | 0 537 | 538 | 539 | corr0 540 | 0 541 | 542 | 543 | freq0 544 | frequency 545 | 546 | 547 | gain_mode0 548 | False 549 | 550 | 551 | if_gain0 552 | 20 553 | 554 | 555 | iq_balance_mode0 556 | 0 557 | 558 | 559 | gain0 560 | gain 561 | 562 | 563 | ant10 564 | 565 | 566 | 567 | bb_gain10 568 | 20 569 | 570 | 571 | bw10 572 | 0 573 | 574 | 575 | dc_offset_mode10 576 | 0 577 | 578 | 579 | corr10 580 | 0 581 | 582 | 583 | freq10 584 | 100e6 585 | 586 | 587 | gain_mode10 588 | False 589 | 590 | 591 | if_gain10 592 | 20 593 | 594 | 595 | iq_balance_mode10 596 | 0 597 | 598 | 599 | gain10 600 | 10 601 | 602 | 603 | ant11 604 | 605 | 606 | 607 | bb_gain11 608 | 20 609 | 610 | 611 | bw11 612 | 0 613 | 614 | 615 | dc_offset_mode11 616 | 0 617 | 618 | 619 | corr11 620 | 0 621 | 622 | 623 | freq11 624 | 100e6 625 | 626 | 627 | gain_mode11 628 | False 629 | 630 | 631 | if_gain11 632 | 20 633 | 634 | 635 | iq_balance_mode11 636 | 0 637 | 638 | 639 | gain11 640 | 10 641 | 642 | 643 | ant12 644 | 645 | 646 | 647 | bb_gain12 648 | 20 649 | 650 | 651 | bw12 652 | 0 653 | 654 | 655 | dc_offset_mode12 656 | 0 657 | 658 | 659 | corr12 660 | 0 661 | 662 | 663 | freq12 664 | 100e6 665 | 666 | 667 | gain_mode12 668 | False 669 | 670 | 671 | if_gain12 672 | 20 673 | 674 | 675 | iq_balance_mode12 676 | 0 677 | 678 | 679 | gain12 680 | 10 681 | 682 | 683 | ant13 684 | 685 | 686 | 687 | bb_gain13 688 | 20 689 | 690 | 691 | bw13 692 | 0 693 | 694 | 695 | dc_offset_mode13 696 | 0 697 | 698 | 699 | corr13 700 | 0 701 | 702 | 703 | freq13 704 | 100e6 705 | 706 | 707 | gain_mode13 708 | False 709 | 710 | 711 | if_gain13 712 | 20 713 | 714 | 715 | iq_balance_mode13 716 | 0 717 | 718 | 719 | gain13 720 | 10 721 | 722 | 723 | ant14 724 | 725 | 726 | 727 | bb_gain14 728 | 20 729 | 730 | 731 | bw14 732 | 0 733 | 734 | 735 | dc_offset_mode14 736 | 0 737 | 738 | 739 | corr14 740 | 0 741 | 742 | 743 | freq14 744 | 100e6 745 | 746 | 747 | gain_mode14 748 | False 749 | 750 | 751 | if_gain14 752 | 20 753 | 754 | 755 | iq_balance_mode14 756 | 0 757 | 758 | 759 | gain14 760 | 10 761 | 762 | 763 | ant15 764 | 765 | 766 | 767 | bb_gain15 768 | 20 769 | 770 | 771 | bw15 772 | 0 773 | 774 | 775 | dc_offset_mode15 776 | 0 777 | 778 | 779 | corr15 780 | 0 781 | 782 | 783 | freq15 784 | 100e6 785 | 786 | 787 | gain_mode15 788 | False 789 | 790 | 791 | if_gain15 792 | 20 793 | 794 | 795 | iq_balance_mode15 796 | 0 797 | 798 | 799 | gain15 800 | 10 801 | 802 | 803 | ant16 804 | 805 | 806 | 807 | bb_gain16 808 | 20 809 | 810 | 811 | bw16 812 | 0 813 | 814 | 815 | dc_offset_mode16 816 | 0 817 | 818 | 819 | corr16 820 | 0 821 | 822 | 823 | freq16 824 | 100e6 825 | 826 | 827 | gain_mode16 828 | False 829 | 830 | 831 | if_gain16 832 | 20 833 | 834 | 835 | iq_balance_mode16 836 | 0 837 | 838 | 839 | gain16 840 | 10 841 | 842 | 843 | ant17 844 | 845 | 846 | 847 | bb_gain17 848 | 20 849 | 850 | 851 | bw17 852 | 0 853 | 854 | 855 | dc_offset_mode17 856 | 0 857 | 858 | 859 | corr17 860 | 0 861 | 862 | 863 | freq17 864 | 100e6 865 | 866 | 867 | gain_mode17 868 | False 869 | 870 | 871 | if_gain17 872 | 20 873 | 874 | 875 | iq_balance_mode17 876 | 0 877 | 878 | 879 | gain17 880 | 10 881 | 882 | 883 | ant18 884 | 885 | 886 | 887 | bb_gain18 888 | 20 889 | 890 | 891 | bw18 892 | 0 893 | 894 | 895 | dc_offset_mode18 896 | 0 897 | 898 | 899 | corr18 900 | 0 901 | 902 | 903 | freq18 904 | 100e6 905 | 906 | 907 | gain_mode18 908 | False 909 | 910 | 911 | if_gain18 912 | 20 913 | 914 | 915 | iq_balance_mode18 916 | 0 917 | 918 | 919 | gain18 920 | 10 921 | 922 | 923 | ant19 924 | 925 | 926 | 927 | bb_gain19 928 | 20 929 | 930 | 931 | bw19 932 | 0 933 | 934 | 935 | dc_offset_mode19 936 | 0 937 | 938 | 939 | corr19 940 | 0 941 | 942 | 943 | freq19 944 | 100e6 945 | 946 | 947 | gain_mode19 948 | False 949 | 950 | 951 | if_gain19 952 | 20 953 | 954 | 955 | iq_balance_mode19 956 | 0 957 | 958 | 959 | gain19 960 | 10 961 | 962 | 963 | ant1 964 | 965 | 966 | 967 | bb_gain1 968 | 20 969 | 970 | 971 | bw1 972 | 0 973 | 974 | 975 | dc_offset_mode1 976 | 0 977 | 978 | 979 | corr1 980 | 0 981 | 982 | 983 | freq1 984 | 100e6 985 | 986 | 987 | gain_mode1 988 | False 989 | 990 | 991 | if_gain1 992 | 20 993 | 994 | 995 | iq_balance_mode1 996 | 0 997 | 998 | 999 | gain1 1000 | 10 1001 | 1002 | 1003 | ant20 1004 | 1005 | 1006 | 1007 | bb_gain20 1008 | 20 1009 | 1010 | 1011 | bw20 1012 | 0 1013 | 1014 | 1015 | dc_offset_mode20 1016 | 0 1017 | 1018 | 1019 | corr20 1020 | 0 1021 | 1022 | 1023 | freq20 1024 | 100e6 1025 | 1026 | 1027 | gain_mode20 1028 | False 1029 | 1030 | 1031 | if_gain20 1032 | 20 1033 | 1034 | 1035 | iq_balance_mode20 1036 | 0 1037 | 1038 | 1039 | gain20 1040 | 10 1041 | 1042 | 1043 | ant21 1044 | 1045 | 1046 | 1047 | bb_gain21 1048 | 20 1049 | 1050 | 1051 | bw21 1052 | 0 1053 | 1054 | 1055 | dc_offset_mode21 1056 | 0 1057 | 1058 | 1059 | corr21 1060 | 0 1061 | 1062 | 1063 | freq21 1064 | 100e6 1065 | 1066 | 1067 | gain_mode21 1068 | False 1069 | 1070 | 1071 | if_gain21 1072 | 20 1073 | 1074 | 1075 | iq_balance_mode21 1076 | 0 1077 | 1078 | 1079 | gain21 1080 | 10 1081 | 1082 | 1083 | ant22 1084 | 1085 | 1086 | 1087 | bb_gain22 1088 | 20 1089 | 1090 | 1091 | bw22 1092 | 0 1093 | 1094 | 1095 | dc_offset_mode22 1096 | 0 1097 | 1098 | 1099 | corr22 1100 | 0 1101 | 1102 | 1103 | freq22 1104 | 100e6 1105 | 1106 | 1107 | gain_mode22 1108 | False 1109 | 1110 | 1111 | if_gain22 1112 | 20 1113 | 1114 | 1115 | iq_balance_mode22 1116 | 0 1117 | 1118 | 1119 | gain22 1120 | 10 1121 | 1122 | 1123 | ant23 1124 | 1125 | 1126 | 1127 | bb_gain23 1128 | 20 1129 | 1130 | 1131 | bw23 1132 | 0 1133 | 1134 | 1135 | dc_offset_mode23 1136 | 0 1137 | 1138 | 1139 | corr23 1140 | 0 1141 | 1142 | 1143 | freq23 1144 | 100e6 1145 | 1146 | 1147 | gain_mode23 1148 | False 1149 | 1150 | 1151 | if_gain23 1152 | 20 1153 | 1154 | 1155 | iq_balance_mode23 1156 | 0 1157 | 1158 | 1159 | gain23 1160 | 10 1161 | 1162 | 1163 | ant24 1164 | 1165 | 1166 | 1167 | bb_gain24 1168 | 20 1169 | 1170 | 1171 | bw24 1172 | 0 1173 | 1174 | 1175 | dc_offset_mode24 1176 | 0 1177 | 1178 | 1179 | corr24 1180 | 0 1181 | 1182 | 1183 | freq24 1184 | 100e6 1185 | 1186 | 1187 | gain_mode24 1188 | False 1189 | 1190 | 1191 | if_gain24 1192 | 20 1193 | 1194 | 1195 | iq_balance_mode24 1196 | 0 1197 | 1198 | 1199 | gain24 1200 | 10 1201 | 1202 | 1203 | ant25 1204 | 1205 | 1206 | 1207 | bb_gain25 1208 | 20 1209 | 1210 | 1211 | bw25 1212 | 0 1213 | 1214 | 1215 | dc_offset_mode25 1216 | 0 1217 | 1218 | 1219 | corr25 1220 | 0 1221 | 1222 | 1223 | freq25 1224 | 100e6 1225 | 1226 | 1227 | gain_mode25 1228 | False 1229 | 1230 | 1231 | if_gain25 1232 | 20 1233 | 1234 | 1235 | iq_balance_mode25 1236 | 0 1237 | 1238 | 1239 | gain25 1240 | 10 1241 | 1242 | 1243 | ant26 1244 | 1245 | 1246 | 1247 | bb_gain26 1248 | 20 1249 | 1250 | 1251 | bw26 1252 | 0 1253 | 1254 | 1255 | dc_offset_mode26 1256 | 0 1257 | 1258 | 1259 | corr26 1260 | 0 1261 | 1262 | 1263 | freq26 1264 | 100e6 1265 | 1266 | 1267 | gain_mode26 1268 | False 1269 | 1270 | 1271 | if_gain26 1272 | 20 1273 | 1274 | 1275 | iq_balance_mode26 1276 | 0 1277 | 1278 | 1279 | gain26 1280 | 10 1281 | 1282 | 1283 | ant27 1284 | 1285 | 1286 | 1287 | bb_gain27 1288 | 20 1289 | 1290 | 1291 | bw27 1292 | 0 1293 | 1294 | 1295 | dc_offset_mode27 1296 | 0 1297 | 1298 | 1299 | corr27 1300 | 0 1301 | 1302 | 1303 | freq27 1304 | 100e6 1305 | 1306 | 1307 | gain_mode27 1308 | False 1309 | 1310 | 1311 | if_gain27 1312 | 20 1313 | 1314 | 1315 | iq_balance_mode27 1316 | 0 1317 | 1318 | 1319 | gain27 1320 | 10 1321 | 1322 | 1323 | ant28 1324 | 1325 | 1326 | 1327 | bb_gain28 1328 | 20 1329 | 1330 | 1331 | bw28 1332 | 0 1333 | 1334 | 1335 | dc_offset_mode28 1336 | 0 1337 | 1338 | 1339 | corr28 1340 | 0 1341 | 1342 | 1343 | freq28 1344 | 100e6 1345 | 1346 | 1347 | gain_mode28 1348 | False 1349 | 1350 | 1351 | if_gain28 1352 | 20 1353 | 1354 | 1355 | iq_balance_mode28 1356 | 0 1357 | 1358 | 1359 | gain28 1360 | 10 1361 | 1362 | 1363 | ant29 1364 | 1365 | 1366 | 1367 | bb_gain29 1368 | 20 1369 | 1370 | 1371 | bw29 1372 | 0 1373 | 1374 | 1375 | dc_offset_mode29 1376 | 0 1377 | 1378 | 1379 | corr29 1380 | 0 1381 | 1382 | 1383 | freq29 1384 | 100e6 1385 | 1386 | 1387 | gain_mode29 1388 | False 1389 | 1390 | 1391 | if_gain29 1392 | 20 1393 | 1394 | 1395 | iq_balance_mode29 1396 | 0 1397 | 1398 | 1399 | gain29 1400 | 10 1401 | 1402 | 1403 | ant2 1404 | 1405 | 1406 | 1407 | bb_gain2 1408 | 20 1409 | 1410 | 1411 | bw2 1412 | 0 1413 | 1414 | 1415 | dc_offset_mode2 1416 | 0 1417 | 1418 | 1419 | corr2 1420 | 0 1421 | 1422 | 1423 | freq2 1424 | 100e6 1425 | 1426 | 1427 | gain_mode2 1428 | False 1429 | 1430 | 1431 | if_gain2 1432 | 20 1433 | 1434 | 1435 | iq_balance_mode2 1436 | 0 1437 | 1438 | 1439 | gain2 1440 | 10 1441 | 1442 | 1443 | ant30 1444 | 1445 | 1446 | 1447 | bb_gain30 1448 | 20 1449 | 1450 | 1451 | bw30 1452 | 0 1453 | 1454 | 1455 | dc_offset_mode30 1456 | 0 1457 | 1458 | 1459 | corr30 1460 | 0 1461 | 1462 | 1463 | freq30 1464 | 100e6 1465 | 1466 | 1467 | gain_mode30 1468 | False 1469 | 1470 | 1471 | if_gain30 1472 | 20 1473 | 1474 | 1475 | iq_balance_mode30 1476 | 0 1477 | 1478 | 1479 | gain30 1480 | 10 1481 | 1482 | 1483 | ant31 1484 | 1485 | 1486 | 1487 | bb_gain31 1488 | 20 1489 | 1490 | 1491 | bw31 1492 | 0 1493 | 1494 | 1495 | dc_offset_mode31 1496 | 0 1497 | 1498 | 1499 | corr31 1500 | 0 1501 | 1502 | 1503 | freq31 1504 | 100e6 1505 | 1506 | 1507 | gain_mode31 1508 | False 1509 | 1510 | 1511 | if_gain31 1512 | 20 1513 | 1514 | 1515 | iq_balance_mode31 1516 | 0 1517 | 1518 | 1519 | gain31 1520 | 10 1521 | 1522 | 1523 | ant3 1524 | 1525 | 1526 | 1527 | bb_gain3 1528 | 20 1529 | 1530 | 1531 | bw3 1532 | 0 1533 | 1534 | 1535 | dc_offset_mode3 1536 | 0 1537 | 1538 | 1539 | corr3 1540 | 0 1541 | 1542 | 1543 | freq3 1544 | 100e6 1545 | 1546 | 1547 | gain_mode3 1548 | False 1549 | 1550 | 1551 | if_gain3 1552 | 20 1553 | 1554 | 1555 | iq_balance_mode3 1556 | 0 1557 | 1558 | 1559 | gain3 1560 | 10 1561 | 1562 | 1563 | ant4 1564 | 1565 | 1566 | 1567 | bb_gain4 1568 | 20 1569 | 1570 | 1571 | bw4 1572 | 0 1573 | 1574 | 1575 | dc_offset_mode4 1576 | 0 1577 | 1578 | 1579 | corr4 1580 | 0 1581 | 1582 | 1583 | freq4 1584 | 100e6 1585 | 1586 | 1587 | gain_mode4 1588 | False 1589 | 1590 | 1591 | if_gain4 1592 | 20 1593 | 1594 | 1595 | iq_balance_mode4 1596 | 0 1597 | 1598 | 1599 | gain4 1600 | 10 1601 | 1602 | 1603 | ant5 1604 | 1605 | 1606 | 1607 | bb_gain5 1608 | 20 1609 | 1610 | 1611 | bw5 1612 | 0 1613 | 1614 | 1615 | dc_offset_mode5 1616 | 0 1617 | 1618 | 1619 | corr5 1620 | 0 1621 | 1622 | 1623 | freq5 1624 | 100e6 1625 | 1626 | 1627 | gain_mode5 1628 | False 1629 | 1630 | 1631 | if_gain5 1632 | 20 1633 | 1634 | 1635 | iq_balance_mode5 1636 | 0 1637 | 1638 | 1639 | gain5 1640 | 10 1641 | 1642 | 1643 | ant6 1644 | 1645 | 1646 | 1647 | bb_gain6 1648 | 20 1649 | 1650 | 1651 | bw6 1652 | 0 1653 | 1654 | 1655 | dc_offset_mode6 1656 | 0 1657 | 1658 | 1659 | corr6 1660 | 0 1661 | 1662 | 1663 | freq6 1664 | 100e6 1665 | 1666 | 1667 | gain_mode6 1668 | False 1669 | 1670 | 1671 | if_gain6 1672 | 20 1673 | 1674 | 1675 | iq_balance_mode6 1676 | 0 1677 | 1678 | 1679 | gain6 1680 | 10 1681 | 1682 | 1683 | ant7 1684 | 1685 | 1686 | 1687 | bb_gain7 1688 | 20 1689 | 1690 | 1691 | bw7 1692 | 0 1693 | 1694 | 1695 | dc_offset_mode7 1696 | 0 1697 | 1698 | 1699 | corr7 1700 | 0 1701 | 1702 | 1703 | freq7 1704 | 100e6 1705 | 1706 | 1707 | gain_mode7 1708 | False 1709 | 1710 | 1711 | if_gain7 1712 | 20 1713 | 1714 | 1715 | iq_balance_mode7 1716 | 0 1717 | 1718 | 1719 | gain7 1720 | 10 1721 | 1722 | 1723 | ant8 1724 | 1725 | 1726 | 1727 | bb_gain8 1728 | 20 1729 | 1730 | 1731 | bw8 1732 | 0 1733 | 1734 | 1735 | dc_offset_mode8 1736 | 0 1737 | 1738 | 1739 | corr8 1740 | 0 1741 | 1742 | 1743 | freq8 1744 | 100e6 1745 | 1746 | 1747 | gain_mode8 1748 | False 1749 | 1750 | 1751 | if_gain8 1752 | 20 1753 | 1754 | 1755 | iq_balance_mode8 1756 | 0 1757 | 1758 | 1759 | gain8 1760 | 10 1761 | 1762 | 1763 | ant9 1764 | 1765 | 1766 | 1767 | bb_gain9 1768 | 20 1769 | 1770 | 1771 | bw9 1772 | 0 1773 | 1774 | 1775 | dc_offset_mode9 1776 | 0 1777 | 1778 | 1779 | corr9 1780 | 0 1781 | 1782 | 1783 | freq9 1784 | 100e6 1785 | 1786 | 1787 | gain_mode9 1788 | False 1789 | 1790 | 1791 | if_gain9 1792 | 20 1793 | 1794 | 1795 | iq_balance_mode9 1796 | 0 1797 | 1798 | 1799 | gain9 1800 | 10 1801 | 1802 | 1803 | comment 1804 | 1805 | 1806 | 1807 | affinity 1808 | 1809 | 1810 | 1811 | args 1812 | 1813 | 1814 | 1815 | _enabled 1816 | True 1817 | 1818 | 1819 | _coordinate 1820 | (224, 92) 1821 | 1822 | 1823 | _rotation 1824 | 0 1825 | 1826 | 1827 | id 1828 | rtlsdr_source_0 1829 | 1830 | 1831 | maxoutbuf 1832 | 0 1833 | 1834 | 1835 | clock_source0 1836 | 1837 | 1838 | 1839 | time_source0 1840 | 1841 | 1842 | 1843 | clock_source1 1844 | 1845 | 1846 | 1847 | time_source1 1848 | 1849 | 1850 | 1851 | clock_source2 1852 | 1853 | 1854 | 1855 | time_source2 1856 | 1857 | 1858 | 1859 | clock_source3 1860 | 1861 | 1862 | 1863 | time_source3 1864 | 1865 | 1866 | 1867 | clock_source4 1868 | 1869 | 1870 | 1871 | time_source4 1872 | 1873 | 1874 | 1875 | clock_source5 1876 | 1877 | 1878 | 1879 | time_source5 1880 | 1881 | 1882 | 1883 | clock_source6 1884 | 1885 | 1886 | 1887 | time_source6 1888 | 1889 | 1890 | 1891 | clock_source7 1892 | 1893 | 1894 | 1895 | time_source7 1896 | 1897 | 1898 | 1899 | minoutbuf 1900 | 0 1901 | 1902 | 1903 | nchan 1904 | 1 1905 | 1906 | 1907 | num_mboards 1908 | 1 1909 | 1910 | 1911 | type 1912 | fc32 1913 | 1914 | 1915 | sample_rate 1916 | samp_rate 1917 | 1918 | 1919 | sync 1920 | 1921 | 1922 | 1923 | 1924 | analog_wfm_rcv_0 1925 | audio_sink_0 1926 | 0 1927 | 0 1928 | 1929 | 1930 | analog_wfm_rcv_0 1931 | qtgui_sink_x_0 1932 | 0 1933 | 0 1934 | 1935 | 1936 | rational_resampler_xxx_0 1937 | analog_wfm_rcv_0 1938 | 0 1939 | 0 1940 | 1941 | 1942 | rtlsdr_source_0 1943 | rational_resampler_xxx_0 1944 | 0 1945 | 0 1946 | 1947 | 1948 | -------------------------------------------------------------------------------- /sdr/images/820t2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrde/notes/c40c317350521870e8ee3539a1210ee7cf58d01b/sdr/images/820t2.jpg -------------------------------------------------------------------------------- /sdr/images/Screenshot from 2017-08-21 23-18-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrde/notes/c40c317350521870e8ee3539a1210ee7cf58d01b/sdr/images/Screenshot from 2017-08-21 23-18-14.png -------------------------------------------------------------------------------- /sdr/images/call-frankie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrde/notes/c40c317350521870e8ee3539a1210ee7cf58d01b/sdr/images/call-frankie.png -------------------------------------------------------------------------------- /sdr/images/decoding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrde/notes/c40c317350521870e8ee3539a1210ee7cf58d01b/sdr/images/decoding.png -------------------------------------------------------------------------------- /sdr/images/gqrx-spotted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrde/notes/c40c317350521870e8ee3539a1210ee7cf58d01b/sdr/images/gqrx-spotted.png -------------------------------------------------------------------------------- /sdr/random-notes.md: -------------------------------------------------------------------------------- 1 | # Random notes about SDR 2 | 3 | Those commands are related to the ubuntu image that has beed used during the course. 4 | 5 | ## Programs 6 | 7 | ### Listen to random things! 8 | ```bash 9 | $ gqrx 10 | ``` 11 | 12 | ### Listen to airplanes! 13 | 14 | ```bash 15 | $ cd bin/dump1090 16 | $ dump1090 --net --interactive 17 | ``` 18 | 19 | ### Listen to FM radio! 20 | Download `fm.grc` and run it on `gnuradio-companion`. 21 | 22 | ```bash 23 | $ gnuradio-companion 24 | ``` 25 | 26 | ### Locate cell towers! 27 | https://opencellid.org/ 28 | 29 | 30 | ### Becoming a cell tower! 31 | /usr/local/etc/yate/yate.conf 32 | /usr/local/etc/yate/subscribers.conf 33 | /usr/local/etc/yate/ybts.conf 34 | /usr/local/share/yate/scripts/nib.js 35 | /usr/local/etc/yate/tmsidata.conf 36 | 37 | 38 | ### Listen to IMSI ids! 39 | ``` 40 | $ cd bin/IMSI_catcher 41 | $ sudo python simple_IMSI-catcher.py 42 | 43 | ... 44 | 45 | $ grgsm_livemon -f 935800000 46 | ``` 47 | 48 | 49 | ### Listen to packets! 50 | ``` 51 | sudo wireshark -k -Y '!icmp && gsmtap' -i lo 52 | ``` 53 | 54 | ### Listen to satellites! 55 | http://www.teske.net.br/lucas/2016/02/recording-noaa-apt-signals-with-gqrx-and-rtl-sdr-on-linux/ 56 | -------------------------------------------------------------------------------- /tendermint/README.md: -------------------------------------------------------------------------------- 1 | # Know what your node is doing 2 | The following commands that can help troubleshooting common issues with Tendermint. They require `jq`, a command line JSON processor, that you can install with: 3 | ``` 4 | sudo apt install jq 5 | ``` 6 | 7 | ## Problem: I don't know if my node is connected to the network 8 | When you add your node to the network, it will connect to a subset of nodes. To find out which ones, run: 9 | ``` 10 | curl -s localhost:26657/net_info | jq ".result.peers[].node_info | {id, listen_addr, moniker}" 11 | ``` 12 | 13 | ## Problem: the network is stuck and does not accept new transactions 14 | Maybe there are not enough pre-votes or pre-commits to reach consensus. This happens when less than ⅔ of the network is online. 15 | 16 | Run the command: 17 | ``` 18 | curl -s localhost:26657/dump_consensus_state | jq ".result.round_state.votes" 19 | ``` 20 | You should see two keys: `prevotes` and `precommits`. The first stage to reach consensus is to vote (`prevote`) on the current round, the second stage is to commit (`precommit`) the block. The majority of the network needs to reach consensus on both steps to commit the block and move to the next one. If one (or both) of `prevotes` and `precommits` has less than ⅔ votes, the network is stuck and will wait for new nodes to come online and vote. 21 | 22 | Even if the network seems to not be responsive, transactions are stored in the mempool and put into the blockchain once the networ is able to reach consensus. You can check it by running: 23 | ``` 24 | curl -s http://localhost:26657/num_unconfirmed_txs | jq .result 25 | ``` 26 | 27 | If this is the situation you are in, you need to talk to the other Members of the Network and make sure they come back online. To mitigate the issue in the future, make sure everyone is starting BigchainDB and Tendermint on boot of their machine. Also, a larger network can help. 28 | 29 | # How to import a Validator key pair 30 | 31 | The script [use_keys.py](use_keys.py) loads signing and verifying key from `priv_validator.json`, and uses them to sign and verify a message. 32 | 33 | Details about the encodings used by Tendermint can be found in their [specification document](https://github.com/tendermint/tendermint/blob/master/docs/spec/blockchain/encoding.md), together with the [list of all possible encodings](https://github.com/tendermint/go-crypto#json-encoding) 34 | -------------------------------------------------------------------------------- /tendermint/priv_validator.json: -------------------------------------------------------------------------------- 1 | {"address":"0CA11FA943FAAB247749E181E9EAFEFE3D727790","pub_key":{"type":"AC26791624DE60","value":"ejDKuGmb+G/n8Lky8jpcnln278EhmPLjf0fq7ouu7q8="},"last_height":0,"last_round":0,"last_step":0,"priv_key":{"type":"954568A3288910","value":"va+oHrZrVqQWvBn3NZpEBpnBh6lZ2+gX9fKN7yQNeNV6MMq4aZv4b+fwuTLyOlyeWfbvwSGY8uN/R+rui67urw=="}} -------------------------------------------------------------------------------- /tendermint/use_keys.py: -------------------------------------------------------------------------------- 1 | import json 2 | from base64 import b64decode 3 | 4 | from nacl import signing 5 | 6 | 7 | priv_val = json.load(open('priv_validator.json')) 8 | 9 | # The *amino type* 954568A3288910 is 64 bytes long, where 10 | # raw 32-byte priv key are concatenated to raw 32-byte pub key. 11 | raw_key = b64decode(priv_val['priv_key']['value']) 12 | signing_key_bytes, verifying_key_bytes = raw_key[:32], raw_key[32:] 13 | 14 | signing_key = signing.SigningKey(signing_key_bytes) 15 | verify_key = signing.VerifyKey(verifying_key_bytes) 16 | 17 | signed = signing_key.sign(b'I love cats.') 18 | 19 | # Will raise nacl.exceptions.BadSignatureError if the signature check fails 20 | verify_key.verify(signed) 21 | 22 | # The following code will raise the exception. 23 | # signing.VerifyKey(verifying_key_bytes[:31] + b'\x00').verify(signed) 24 | -------------------------------------------------------------------------------- /zero-carbon/README.md: -------------------------------------------------------------------------------- 1 | # Zero carbon infrastructure 2 | 3 | This list is a collection of providers (VPS, hosting, email, etc.) that run their business on renewable energy and have a commitment towards the environment. 4 | 5 | This list focuses on **zero carbon** providers, not on carbon neutral ones. 6 | 7 | ## VPS and hosting 8 | 9 | ### netcup.eu 10 | 11 | [netcup.eu](https://www.netcup.eu/ueber-netcup/) is a European cloud provider. 12 | 13 | From their [Green Electricity page](https://www.netcup.eu/ueber-netcup/oekostrom.php): 14 | 15 | > netcup's own data centre is powered by electricity from renewable energy sources. A conscious decision has been made to avoid nuclear power and sources that are environmental CO2 polluters. netcup sources its energy from the power generated by flowing water. 16 | 17 | ### tilaa.com 18 | 19 | [tilaa](https://www.tilaa.com/) is a European cloud partner that actively tries to limit its impact on our environment. 20 | 21 | From their [Conscious Cloud Hosting page](https://www.tilaa.com/en/vps/conscious-cloud-hosting): 22 | 23 | > Renewable energy is an essential condition for a sustainable future. That is why, all of our cloudservers are already powered by 100% renewable energy. The PUE is 1.2, which is lower than the market average. 24 | 25 | ### scaleway.com 26 | 27 | [scaleway.com](https://www.scaleway.com/) is a European cloud provider with datacenters in Paris, Amsterdam and Warsaw. 28 | 29 | From their [About us page](https://www.scaleway.com/en/about-us/): 30 | 31 | > We’ve always challenged the status quo rather than build on normal, and that’s why our data centers are carbon neutral and are 100% powered by renewable energy. Our latest data center, DC5, uses an adiabatic cooling system which is based on an evaporative process (no air conditioning). DC5 is therefore radically more efficient and uses less energy than a traditional data center. 32 | 33 | ### datacenterlight.ch 34 | 35 | [datacenterlight.ch](https://datacenterlight.ch/) is located in Switzerland. They operate with 99.9% hydropower from the Alps and a 0.01% from solar energy. They claim also to reuse existing factory halls instead of building everything new. They have been mentioned by [Julian Oliver](http://twitter.com/julian0liver) in his talk [Server Infrastructure for Global Rebellion](https://media.ccc.de/v/36c3-11008-server_infrastructure_for_global_rebellion). 36 | 37 | From their [renewable energy page](https://datacenterlight.ch/en-us/cms/hydropower/): 38 | 39 | > Not every data center has an in-house hydropower plant, but we do. Data Center Light runs with 99.9%\* hydropower. Few meters away from where our servers are running, the hydropower plant is generating electricity in the basement. We assure you that our electricity is made of 100% renewable energy. 40 | > 41 | > \*0.1 % of electricity comes from solar power. 42 | 43 | 44 | ### greenhost.net 45 | 46 | [greenhost.net](https://greenhost.net/) is a Dutch provider powered by 100% Dutch wind energy. 47 | 48 | From their [sustainability page](https://greenhost.net/sustainable/): 49 | 50 | > Green and sustainable web hosting, from small, simple websites to complex setups with multiple VPSs, is the foundation of Greenhost. We have been front runners in this field for over fifteen years, and we still strive towards maximal sustainability in every step of our production process. This goes just as much for the small choices, like which coffee or furniture to use and for the big contributions, like which hardware or energy supplier to select. This page provides more background information on policy and the choices made. 51 | 52 | ### runbox 53 | 54 | [runbox](https://runbox.com/) is an independent private Norwegian company headquartered in Oslo, Norway. Runbox is double carbon negative. They care about sustainability, security, privacy. The company is owned by employees and board members (77.54% in 2018) and close associates. 55 | 56 | From their [sustainability page](https://runbox.com/why-runbox/sustainable-services/): 57 | 58 | > Runbox works continuously to decrease CO2 emissions from our operations and act in an environmentally responsible manner. 59 | > Our environmental policy lays out our commitments to reducing, reusing, and recycling our resources. In our policy we also pledge to doubly offset any CO2 emissions that do result from our operations despite our email service being entirely hydropowered. 60 | 61 | Thanks [Carl Emil Carlsen for the recommendation](https://twitter.com/cecarlsen/status/1265256188998008834). 62 | 63 | ### FlokiNET 64 | 65 | [FlokiNET](https://flokinet.is/) is an Icelandic provider located also in Romania and Finland. They provide a safe harbor for freedom of speech, free press and whistleblower projects. 66 | 67 | From their [ecological responsibility page](https://flokinet.is/ecoresponsability.php): 68 | 69 | > Iceland´s geographic location provides plenty of both water and wind used to generate energy, from either hydroelectric dams (for further information, see the website for Landsvirkjun, Iceland´s National Energy Company, www.landsvirkjun.com) or, in super-heated form as steam in geothermal power plants, such as the one pictured above (see Reykjavik Energy website, https://www.or.is/English). The second one, wind, provides a steady supply of natural cooling and helps to keep temperatures down. 70 | 71 | > This temperate climate is the ideal for data centers. The energy is clean, and renewable. Pollution from energy production is non-existent and the carbon footprint is absolutely zero. 72 | Natural free cooling, amply provided by Kári (an Icelandic nick name for the wind), is used to control temperatures inside the data center, and helps to keep costs down. The average temperature at the data center location is 1.8°C in January and 10°C in July. 73 | 74 | ### 1984 75 | 76 | [1984](https://www.1984.is/) is an Icelandic provider established in 2006. They care about civil rights and Free Software. 77 | 78 | From their [about page](https://www.1984.is/about/): 79 | 80 | > Green, sustainable geothermal and hydro power energy. 1984 commits to environmentally responsible business practices by utilizing only electricity from renewable energy sources and placing emphasis on reaching the highest possible energy utilization efficiency levels. This is achievable in Iceland, because all electricity production meets the aforementioned criteria and the cold climate makes PUE (Power Usage Effectiveness) very high, meaning that for each watt used to run servers, storage and network equipment, proportionally very little is used for cooling, lighting and other overhead. 81 | 82 | ### Bahnhof 83 | 84 | [bahnhof.net](https://www.bahnhof.net/) is a Swedish provider focusing on extreme security and low cost green energy. 85 | 86 | They started an intiative called [Triple Green](http://triplegreen.net/) that states: 87 | 88 | > Triple Green is an environmental certification for data centers which fulfill a tough set of requirements on renewable energy and efficiency. The initiative was started by Bahnhof AB. 89 | > 1. The data center must be powered by renewable energy only. 90 | > 2. Heat from the servers is collected and used for heating of nearby households. 91 | > 3. The household heating replaces other energy sources, and everyone profits in the process. 92 | 93 | ### greengeeks.com 94 | 95 | [greengeeks](https://www.greengeeks.com/) is a US (California) provider. They claim that a GreenGeeks account has a positive energy footprint on the environment as they replace, with wind power credits, 3 times the amount of energy your website will use. 96 | 97 | From their [platform page](https://www.greengeeks.com/platform): 98 | 99 | > Our hosting platform has been designed with a maximum use, no waste of resources mindset. Every aspect of our hosting platform is built to be as energy efficient as possible. 100 | > In addition to this, for every amperage we pull from the grid, we invest 3 times that in the form of renewable energy via Bonneville Environmental Foundation. 101 | > Your website will be "carbon-reducing" when hosted on our platform. You can feel good that you're helping make a difference by hosting on a platform that is eco-friendly. 102 | 103 | ### Hetzner 104 | 105 | WARNING: Hetzner has a very stupid policy about blockchain, and while I agree PoW mining is bad, I don't see any problem with the rest. 106 | 107 | > The operation of applications for mining cryptocurrencies remains prohibited. These include, but are not limited to, mining, farming and plotting of cryptocurrencies. We are entitled to lock the Customer’s access to their Hetzner services or account in the event of non-compliance. 108 | 109 | [hetzner.com](https://www.hetzner.com/) is a German hosting provider and data center operator, established in 1997. It has data centers in Germany and Finland, and they claim to have 0 CO₂ emissions by running on 100% green electricity. 110 | 111 | From their [environmental protection page](https://www.hetzner.com/unternehmen/umweltschutz/): 112 | 113 | > Hetzner Online is taking responsibility and protecting the environment. 114 | > 115 | > Taking responsibility for the environment means there is an increasing need to obtain energy from renewable sources. Hetzner Online uses energy from renewable sources to power the servers in its data centers. 116 | 117 | 118 | ## E-mail 119 | 120 | ### mailbox.org 121 | 122 | [mailbox.org](https://mailbox.org/en/) is a company based Berlin, Germany, that runs on 100% green energy. They claim that their servers are energy-efficient and powered by eco-friendly energy. I'm a mailbox user and I'm quite satisfied. 123 | 124 | From their [sustainability page](https://mailbox.org/en/company): 125 | 126 | > Our servers are energy-efficient and powered by eco-friendly energy that provided through the data centers. We use renewable energy in our offices, too, provided by the company "Lichtblick". 127 | > Whenever we need to go visit one of the data centers we use public transport or car-sharing offers by Stadtmobil. Should a flight be necessary, we compensate the extra emissions caused with a contribution to atmosfair. 128 | 129 | 130 | ### posteo.de 131 | 132 | [posteo.de](https://posteo.de/en) is an independent email service based in Berlin, Germany. They are highly concerned with sustainability, security, privacy and usability. 133 | 134 | From their [sustainability page](https://posteo.de/en/site/sustainability): 135 | 136 | > Our servers and offices run 100% on green energy from Greenpeace Energy, which comes from hydro stations and wind turbines in Austria and Germany. Greenpeace Energy makes no compromises in terms of its supply concept and development of new facilities: 137 | > - No greenwashing: Greenpeace Energy does not label power from coal or nuclear sources as green energy and declines to deal in certificate trading such as RECS. 138 | > - Transparency: Greenpeace Energy openly displays its supply sources for its customers to see. 139 | > - Promoting new facilities: Within five years at the latest, new customers are supplied with 100% power from facilities that are less than five years old. 140 | --------------------------------------------------------------------------------