diff --git a/.gitignore b/.gitignore
index bfaed51..e28a7dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,8 @@ public/js/build.min.js
test*.js
public/vids/*
npm-debug.log
+config.json
+config.json
+mongod.pdb
+mongos.pdb
+config.json
diff --git a/InstallCompass.ps1 b/InstallCompass.ps1
new file mode 100644
index 0000000..3a7913e
--- /dev/null
+++ b/InstallCompass.ps1
@@ -0,0 +1,54 @@
+#Requires -Version 3.0
+<#
+.SYNOPSIS
+ Download and install latest version of MongoDB Compass.
+
+.DESCRIPTION
+ A longer description.
+
+.INPUTS
+ Description of objects that can be piped to the script
+
+.OUTPUTS
+ Description of objects that are output by the script
+
+.EXAMPLE
+ Example of how to run the script
+
+.LINK
+ Links to further documentation
+
+.NOTES
+ Detail on what the script does, if this is needed
+#>
+param()
+$ErrorActionPreference = 'Stop'
+
+$CompassUrl = 'https://compass.mongodb.com/api/v2/download/latest/compass/stable/windows'
+
+$TemporaryDir = [System.IO.Path]::GetTempPath()
+$CompassExe = "$TemporaryDir" + "compass-install.exe"
+
+Remove-Item $CompassExe -ErrorAction:Ignore
+
+try {
+ Write-Output "Downloading Compass from $CompassUrl"
+
+ # Default PowerShell SecurityProtocol does not support Tls1.2 (required by domain)
+ if ([Net.ServicePointManager]::SecurityProtocol.ToString() -NotMatch "Tls12") {
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ }
+ Invoke-WebRequest -Uri $CompassUrl -OutFile $CompassExe
+
+ Write-Output "Installing Compass"
+ & $CompassExe
+ Write-Output "Successfully installed Compass"
+} catch {
+ # Fail silently. With the way that we've hooked into the MSI
+ # currently we're not able to do any meaningful error reporting
+ # and not crash the installer.
+ Write-Output "Error installing Compass."
+}
+
+# Remove the binary we downloaded
+Remove-Item $CompassExe -ErrorAction:Ignore
diff --git a/README.md b/README.md
index 45620e0..9f83f88 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,12 @@
+# Why this fork?
+the old project hasn't been changed in 5 years
+
+### Changelog
+1. added electron interface
+2. added easier config
+
+
+
# myTube: Youtube without the bloat

@@ -32,9 +41,23 @@ myTube on the other hand doesn't require you to have the video element focused.
* Shake on mobile to go back 5 seconds
### How to Setup
-1. Clone this repo and run `npm install`.
-2. Add the database user by running `mongo < mongoSetup`. This will create the default collection `myTube` and the default user `myTube`. If you want to use any other db/user make sure you update the `config.json` file.
-3. Get a Youtube Data API from Google and add the API key to the `config.json` file.
-4. Run `gulp` to build the views.
-5. Double check that your config settings are all set the way you like and run `npm start` to start the myTube server.
-6. Access myTube at `http://localhost:3000`
+```
+git clone https://github.com/keitharm/mytube
+cd mytube
+```
+then read docs.txt
+
+**windows:**
+```
+install-dep.sh
+start.sh
+```
+
+**other:**
+```
+bash install-dep.sh
+bash start.sh
+```
+
+# Help?
+please check docs.txt
diff --git a/config.json b/config.json
index 623cdaf..bf8c2bf 100644
--- a/config.json
+++ b/config.json
@@ -3,7 +3,7 @@
"socket": 8080,
"updateInterval": 300,
"simultaneousDownloads": 1,
- "apikey": "",
+ "apikey": "AIzaSyAIFRG3KdSkLSo5_PAorogQphb0j-iDI14",
"quality": "299+140/298+140/137+140/136+140/bestvideo[ext!=webm]+bestaudio[ext!=webm]/best[ext!=webm]",
"downloadDelay": 1800,
"db": {
diff --git a/docs.txt b/docs.txt
new file mode 100644
index 0000000..ef7ef32
--- /dev/null
+++ b/docs.txt
@@ -0,0 +1,19 @@
+```
+npm install
+npm i --save-dev electron
+```
+
+# If you don't have mongo DB you can get it from here, https://mongodb.com
+
+mongo < mongoSetup
+
+# config.json
+# go to config.json
+# check https://www.youtube.com/watch?v=VqML5F8hcRQ for help
+```
+gulp
+npm start
+```
+
+# done, the bash script is located at install-dep.sh
+# then run start.exe (win) or start.sh
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c58170e
--- /dev/null
+++ b/index.html
@@ -0,0 +1,11 @@
+
+
+
+ Mytube
+
+
+
+ This page will redirect in 10 seconds.
+ While I make the app, Aspiring coder is making the bot for discord :)
+
+
diff --git a/install-dep.sh b/install-dep.sh
new file mode 100644
index 0000000..5762dcc
--- /dev/null
+++ b/install-dep.sh
@@ -0,0 +1,16 @@
+npm install
+npm i --save-dev electron
+
+echo "If you don't have mongo DB you can get it from here, https://mongodb.com"
+
+mongo < mongoSetup
+
+echo "config.json"
+echo "go to config.json"
+echo "check https://www.youtube.com/watch?v=VqML5F8hcRQ for help"
+
+gulp
+npm start
+
+
+echo "run start.exe (win) or start.sh ()linux/mac"
diff --git a/login.html b/login.html
new file mode 100644
index 0000000..598a912
--- /dev/null
+++ b/login.html
@@ -0,0 +1,23 @@
+
+
+
+
+Click the button to demonstrate the prompt box.
+
+Try it
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..224131b
--- /dev/null
+++ b/main.js
@@ -0,0 +1,29 @@
+const { app, BrowserWindow } = require('electron')
+
+function createWindow () {
+ const win = new BrowserWindow({
+ width: 800,
+ height: 600,
+ webPreferences: {
+ nodeIntegration: true
+ }
+ })
+ console.log("remember to check the config files")
+ console.log("or check docs.txt for the steps")
+ win.loadFile('index.html')
+}
+
+app.whenReady().then(createWindow)
+
+app.on('window-all-closed', () => {
+ if (process.platform !== 'darwin') {
+ app.quit()
+ }
+})
+
+app.on('activate', () => {
+ if (BrowserWindow.getAllWindows().length === 0) {
+ createWindow()
+ }
+})
+
diff --git a/mongo.exe b/mongo.exe
new file mode 100644
index 0000000..7228f29
Binary files /dev/null and b/mongo.exe differ
diff --git a/mongod.cfg b/mongod.cfg
new file mode 100644
index 0000000..03f9f06
--- /dev/null
+++ b/mongod.cfg
@@ -0,0 +1,41 @@
+# mongod.conf
+
+# for documentation of all options, see:
+# http://docs.mongodb.org/manual/reference/configuration-options/
+
+# Where and how to store data.
+storage:
+ dbPath: C:\Program Files\MongoDB\Server\4.4\data
+ journal:
+ enabled: true
+# engine:
+# mmapv1:
+# wiredTiger:
+
+# where to write logging data.
+systemLog:
+ destination: file
+ logAppend: true
+ path: C:\Program Files\MongoDB\Server\4.4\log\mongod.log
+
+# network interfaces
+net:
+ port: 27017
+ bindIp: 127.0.0.1
+
+
+#processManagement:
+
+#security:
+
+#operationProfiling:
+
+#replication:
+
+#sharding:
+
+## Enterprise-Only Options:
+
+#auditLog:
+
+#snmp:
diff --git a/mongod.exe b/mongod.exe
new file mode 100644
index 0000000..74a1557
Binary files /dev/null and b/mongod.exe differ
diff --git a/mongos.exe b/mongos.exe
new file mode 100644
index 0000000..fdf3bff
Binary files /dev/null and b/mongos.exe differ
diff --git a/mtube.build/.sconsign-39.dblite b/mtube.build/.sconsign-39.dblite
new file mode 100644
index 0000000..6b723ca
Binary files /dev/null and b/mtube.build/.sconsign-39.dblite differ
diff --git a/mtube.build/@link_input.txt b/mtube.build/@link_input.txt
new file mode 100644
index 0000000..52b4869
--- /dev/null
+++ b/mtube.build/@link_input.txt
@@ -0,0 +1,11 @@
+"./__constants.o"
+"./__helpers.o"
+"./__loader.o"
+"./module.__main__.o"
+"./static_src/MainProgram.o"
+"./static_src/CompiledCellType.o"
+"./static_src/CompiledFunctionType.o"
+"./static_src/CompiledGeneratorType.o"
+"./static_src/CompiledCodeHelpers.o"
+"./static_src/InspectPatcher.o"
+"./static_src/MetaPathBasedLoader.o"
diff --git a/mtube.build/__bytecode.const b/mtube.build/__bytecode.const
new file mode 100644
index 0000000..e69de29
diff --git a/mtube.build/__constants.bin b/mtube.build/__constants.bin
new file mode 100644
index 0000000..1862579
Binary files /dev/null and b/mtube.build/__constants.bin differ
diff --git a/mtube.build/__constants.c b/mtube.build/__constants.c
new file mode 100644
index 0000000..a73d4e1
--- /dev/null
+++ b/mtube.build/__constants.c
@@ -0,0 +1,126 @@
+
+#include "nuitka/prelude.h"
+#include "structseq.h"
+
+// Global constants storage
+PyObject *global_constants[69];
+
+// Sentinel PyObject to be used for all our call iterator endings. It will
+// become a PyCObject pointing to NULL. It's address is unique, and that's
+// enough for us to use it as sentinel value.
+PyObject *_sentinel_value = NULL;
+
+PyObject *Nuitka_dunder_compiled_value = NULL;
+
+
+#ifdef _NUITKA_STANDALONE
+extern PyObject *getStandaloneSysExecutablePath(PyObject *basename);
+#endif
+
+static void _createGlobalConstants(void) {
+ // The empty name means global.
+ loadConstantsBlob(&global_constants[0], "", 69);
+
+#if _NUITKA_EXE
+ /* Set the "sys.executable" path to the original CPython executable or point to inside the
+ distribution for standalone. */
+ PySys_SetObject(
+ (char *)"executable",
+#ifndef _NUITKA_STANDALONE
+ global_constants[67]
+#else
+ getStandaloneSysExecutablePath(global_constants[67])
+#endif
+ );
+
+#ifndef _NUITKA_STANDALONE
+ /* Set the "sys.prefix" path to the original one. */
+ PySys_SetObject(
+ (char *)"prefix",
+ global_constants[68]
+ );
+
+ /* Set the "sys.prefix" path to the original one. */
+ PySys_SetObject(
+ (char *)"exec_prefix",
+ global_constants[68]
+ );
+
+
+#if PYTHON_VERSION >= 0x300
+ /* Set the "sys.base_prefix" path to the original one. */
+ PySys_SetObject(
+ (char *)"base_prefix",
+ global_constants[68]
+ );
+
+ /* Set the "sys.exec_base_prefix" path to the original one. */
+ PySys_SetObject(
+ (char *)"base_exec_prefix",
+ global_constants[68]
+ );
+
+#endif
+#endif
+#endif
+
+ static PyTypeObject Nuitka_VersionInfoType;
+
+ // Same fields as "sys.version_info" except no serial number.
+ static PyStructSequence_Field Nuitka_VersionInfoFields[] = {
+ {(char *)"major", (char *)"Major release number"},
+ {(char *)"minor", (char *)"Minor release number"},
+ {(char *)"micro", (char *)"Micro release number"},
+ {(char *)"releaselevel", (char *)"'alpha', 'beta', 'candidate', or 'release'"},
+ {0}
+ };
+
+ static PyStructSequence_Desc Nuitka_VersionInfoDesc = {
+ (char *)"__nuitka_version__", /* name */
+ (char *)"__compiled__\\n\\nVersion information as a named tuple.", /* doc */
+ Nuitka_VersionInfoFields, /* fields */
+ 4
+ };
+
+ PyStructSequence_InitType(&Nuitka_VersionInfoType, &Nuitka_VersionInfoDesc);
+
+ Nuitka_dunder_compiled_value = PyStructSequence_New(&Nuitka_VersionInfoType);
+ assert(Nuitka_dunder_compiled_value != NULL);
+
+ PyStructSequence_SET_ITEM(Nuitka_dunder_compiled_value, 0, PyInt_FromLong(0));
+ PyStructSequence_SET_ITEM(Nuitka_dunder_compiled_value, 1, PyInt_FromLong(6));
+ PyStructSequence_SET_ITEM(Nuitka_dunder_compiled_value, 2, PyInt_FromLong(12));
+
+ PyStructSequence_SET_ITEM(Nuitka_dunder_compiled_value, 3, Nuitka_String_FromString("release"));
+
+ // Prevent users from creating the Nuitka version type object.
+ Nuitka_VersionInfoType.tp_init = NULL;
+ Nuitka_VersionInfoType.tp_new = NULL;
+
+
+}
+
+// In debug mode we can check that the constants were not tampered with in any
+// given moment. We typically do it at program exit, but we can add extra calls
+// for sanity.
+#ifndef __NUITKA_NO_ASSERT__
+void checkGlobalConstants(void) {
+// TODO: Ask constant code to check values.
+
+}
+#endif
+
+void createGlobalConstants(void) {
+ if (_sentinel_value == NULL) {
+#if PYTHON_VERSION < 0x300
+ _sentinel_value = PyCObject_FromVoidPtr(NULL, NULL);
+#else
+ // The NULL value is not allowed for a capsule, so use something else.
+ _sentinel_value = PyCapsule_New((void *)27, "sentinel", NULL);
+#endif
+ assert(_sentinel_value);
+
+ _createGlobalConstants();
+ }
+}
+
diff --git a/mtube.build/__constants.const b/mtube.build/__constants.const
new file mode 100644
index 0000000..5629a87
Binary files /dev/null and b/mtube.build/__constants.const differ
diff --git a/mtube.build/__constants.h b/mtube.build/__constants.h
new file mode 100644
index 0000000..99b79d9
--- /dev/null
+++ b/mtube.build/__constants.h
@@ -0,0 +1,144 @@
+#ifndef __NUITKA_GLOBAL_CONSTANTS_H__
+#define __NUITKA_GLOBAL_CONSTANTS_H__
+
+extern PyObject *global_constants[69];
+// ()
+#define const_tuple_empty global_constants[0]
+// {}
+#define const_dict_empty global_constants[1]
+// 0
+#define const_int_0 global_constants[2]
+// 1
+#define const_int_pos_1 global_constants[3]
+// -1
+#define const_int_neg_1 global_constants[4]
+// 0.0
+#define const_float_0_0 global_constants[5]
+// -0.0
+#define const_float_minus_0_0 global_constants[6]
+// 1.0
+#define const_float_1_0 global_constants[7]
+// -1.0
+#define const_float_minus_1_0 global_constants[8]
+// ''
+#define const_str_empty global_constants[9]
+// b''
+#define const_bytes_empty global_constants[10]
+// '__module__'
+#define const_str_plain___module__ global_constants[11]
+// '__class__'
+#define const_str_plain___class__ global_constants[12]
+// '__name__'
+#define const_str_plain___name__ global_constants[13]
+// '__package__'
+#define const_str_plain___package__ global_constants[14]
+// '__metaclass__'
+#define const_str_plain___metaclass__ global_constants[15]
+// '__dict__'
+#define const_str_plain___dict__ global_constants[16]
+// '__doc__'
+#define const_str_plain___doc__ global_constants[17]
+// '__file__'
+#define const_str_plain___file__ global_constants[18]
+// '__path__'
+#define const_str_plain___path__ global_constants[19]
+// '__enter__'
+#define const_str_plain___enter__ global_constants[20]
+// '__exit__'
+#define const_str_plain___exit__ global_constants[21]
+// '__builtins__'
+#define const_str_plain___builtins__ global_constants[22]
+// '__all__'
+#define const_str_plain___all__ global_constants[23]
+// '__cmp__'
+#define const_str_plain___cmp__ global_constants[24]
+// '__iter__'
+#define const_str_plain___iter__ global_constants[25]
+// '__compiled__'
+#define const_str_plain___compiled__ global_constants[26]
+// 'inspect'
+#define const_str_plain_inspect global_constants[27]
+// 'compile'
+#define const_str_plain_compile global_constants[28]
+// 'range'
+#define const_str_plain_range global_constants[29]
+// 'open'
+#define const_str_plain_open global_constants[30]
+// 'sum'
+#define const_str_plain_sum global_constants[31]
+// 'format'
+#define const_str_plain_format global_constants[32]
+// '__import__'
+#define const_str_plain___import__ global_constants[33]
+// 'bytearray'
+#define const_str_plain_bytearray global_constants[34]
+// 'staticmethod'
+#define const_str_plain_staticmethod global_constants[35]
+// 'classmethod'
+#define const_str_plain_classmethod global_constants[36]
+// 'name'
+#define const_str_plain_name global_constants[37]
+// 'globals'
+#define const_str_plain_globals global_constants[38]
+// 'locals'
+#define const_str_plain_locals global_constants[39]
+// 'fromlist'
+#define const_str_plain_fromlist global_constants[40]
+// 'level'
+#define const_str_plain_level global_constants[41]
+// 'read'
+#define const_str_plain_read global_constants[42]
+// 'rb'
+#define const_str_plain_rb global_constants[43]
+// 'getattr'
+#define const_str_plain_getattr global_constants[44]
+// '__cached__'
+#define const_str_plain___cached__ global_constants[45]
+// '__loader__'
+#define const_str_plain___loader__ global_constants[46]
+// 'print'
+#define const_str_plain_print global_constants[47]
+// 'end'
+#define const_str_plain_end global_constants[48]
+// 'file'
+#define const_str_plain_file global_constants[49]
+// 'bytes'
+#define const_str_plain_bytes global_constants[50]
+// '.'
+#define const_str_dot global_constants[51]
+// '__loader__'
+#define const_str_plain___loader__ global_constants[46]
+// 'send'
+#define const_str_plain_send global_constants[52]
+// 'throw'
+#define const_str_plain_throw global_constants[53]
+// 'close'
+#define const_str_plain_close global_constants[54]
+// 'site'
+#define const_str_plain_site global_constants[55]
+// 'type'
+#define const_str_plain_type global_constants[56]
+// 'len'
+#define const_str_plain_len global_constants[57]
+// 'range'
+#define const_str_plain_range global_constants[29]
+// 'repr'
+#define const_str_plain_repr global_constants[58]
+// 'int'
+#define const_str_plain_int global_constants[59]
+// 'iter'
+#define const_str_plain_iter global_constants[60]
+// '__spec__'
+#define const_str_plain___spec__ global_constants[61]
+// '_initializing'
+#define const_str_plain__initializing global_constants[62]
+// 'parent'
+#define const_str_plain_parent global_constants[63]
+// 'types'
+#define const_str_plain_types global_constants[64]
+// '__main__'
+#define const_str_plain___main__ global_constants[65]
+// '__class_getitem__'
+#define const_str_plain___class_getitem__ global_constants[66]
+#endif
+
diff --git a/mtube.build/__constants.o b/mtube.build/__constants.o
new file mode 100644
index 0000000..f280ebd
Binary files /dev/null and b/mtube.build/__constants.o differ
diff --git a/mtube.build/__helpers.c b/mtube.build/__helpers.c
new file mode 100644
index 0000000..a1f263c
--- /dev/null
+++ b/mtube.build/__helpers.c
@@ -0,0 +1,1749 @@
+// This file contains helper functions that are automatically created from
+// templates.
+
+#include "nuitka/prelude.h"
+
+extern PyObject *callPythonFunction( PyObject *func, PyObject **args, int count );
+
+
+PyObject *CALL_FUNCTION_WITH_ARGS1(PyObject *called, PyObject **args) {
+ CHECK_OBJECT(called);
+
+ // Check if arguments are valid objects in debug mode.
+#ifndef __NUITKA_NO_ASSERT__
+ for (size_t i = 0; i < 1; i++) {
+ CHECK_OBJECT(args[i]);
+ }
+#endif
+
+ if (Nuitka_Function_Check(called)) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)called;
+ PyObject *result;
+
+ if (function->m_args_simple && 1 == function->m_args_positional_count){
+ for (Py_ssize_t i = 0; i < 1; i++) {
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, args);
+ } else if (function->m_args_simple && 1 + function->m_defaults_given == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ memcpy(python_pars, args, 1 * sizeof(PyObject *));
+ memcpy(python_pars + 1, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 0; i < function->m_args_positional_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsPos(function, python_pars, args, 1)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ } else if (Nuitka_Method_Check(called)) {
+ struct Nuitka_MethodObject *method = (struct Nuitka_MethodObject *)called;
+
+ // Unbound method without arguments, let the error path be slow.
+ if (method->m_object != NULL) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = method->m_function;
+
+ PyObject *result;
+
+ if (function->m_args_simple && 1 + 1 == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ for (Py_ssize_t i = 0; i < 1; i++) {
+ python_pars[i + 1] = args[i];
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else if ( function->m_args_simple && 1 + 1 + function->m_defaults_given == function->m_args_positional_count ) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ memcpy(python_pars+1, args, 1 * sizeof(PyObject *));
+ memcpy(python_pars+1 + 1, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 1; i < function->m_args_overall_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsMethodPos(function, python_pars, method->m_object, args, 1)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ }
+ } else if (PyCFunction_Check(called)) {
+ // Try to be fast about wrapping the arguments.
+ int flags = PyCFunction_GET_FLAGS(called) & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
+
+ if (flags & METH_NOARGS) {
+#if 1 == 0
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, NULL );
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(
+ PyExc_TypeError,
+ "%s() takes no arguments (1 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_O) {
+#if 1 == 1
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, args[0]);
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyExc_TypeError,
+ "%s() takes exactly one argument (1 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_VARARGS) {
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ PyObject *pos_args = MAKE_TUPLE(args, 1);
+
+ PyObject *result;
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+#if PYTHON_VERSION < 0x360
+ if (flags & METH_KEYWORDS) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#else
+ if (flags == (METH_VARARGS|METH_KEYWORDS)) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else if (flags == METH_FASTCALL) {
+#if PYTHON_VERSION < 0x370
+ result = (*(_PyCFunctionFast)method)(self, &PyTuple_GET_ITEM(pos_args, 0), 1, NULL);
+#else
+ result = (*(_PyCFunctionFast)method)(self, &pos_args, 1);
+#endif
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#endif
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ Py_DECREF(pos_args);
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ Py_DECREF(pos_args);
+ return NULL;
+ }
+ }
+ } else if (PyFunction_Check(called)) {
+ return callPythonFunction(
+ called,
+ args,
+ 1
+ );
+ }
+
+ PyObject *pos_args = MAKE_TUPLE(args, 1);
+
+ PyObject *result = CALL_FUNCTION(called, pos_args, NULL);
+
+ Py_DECREF(pos_args);
+
+ return result;
+}
+
+PyObject *CALL_FUNCTION_WITH_ARGS2(PyObject *called, PyObject **args) {
+ CHECK_OBJECT(called);
+
+ // Check if arguments are valid objects in debug mode.
+#ifndef __NUITKA_NO_ASSERT__
+ for (size_t i = 0; i < 2; i++) {
+ CHECK_OBJECT(args[i]);
+ }
+#endif
+
+ if (Nuitka_Function_Check(called)) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)called;
+ PyObject *result;
+
+ if (function->m_args_simple && 2 == function->m_args_positional_count){
+ for (Py_ssize_t i = 0; i < 2; i++) {
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, args);
+ } else if (function->m_args_simple && 2 + function->m_defaults_given == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ memcpy(python_pars, args, 2 * sizeof(PyObject *));
+ memcpy(python_pars + 2, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 0; i < function->m_args_positional_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsPos(function, python_pars, args, 2)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ } else if (Nuitka_Method_Check(called)) {
+ struct Nuitka_MethodObject *method = (struct Nuitka_MethodObject *)called;
+
+ // Unbound method without arguments, let the error path be slow.
+ if (method->m_object != NULL) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = method->m_function;
+
+ PyObject *result;
+
+ if (function->m_args_simple && 2 + 1 == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ for (Py_ssize_t i = 0; i < 2; i++) {
+ python_pars[i + 1] = args[i];
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else if ( function->m_args_simple && 2 + 1 + function->m_defaults_given == function->m_args_positional_count ) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ memcpy(python_pars+1, args, 2 * sizeof(PyObject *));
+ memcpy(python_pars+1 + 2, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 1; i < function->m_args_overall_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsMethodPos(function, python_pars, method->m_object, args, 2)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ }
+ } else if (PyCFunction_Check(called)) {
+ // Try to be fast about wrapping the arguments.
+ int flags = PyCFunction_GET_FLAGS(called) & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
+
+ if (flags & METH_NOARGS) {
+#if 2 == 0
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, NULL );
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(
+ PyExc_TypeError,
+ "%s() takes no arguments (2 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_O) {
+#if 2 == 1
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, args[0]);
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyExc_TypeError,
+ "%s() takes exactly one argument (2 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_VARARGS) {
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ PyObject *pos_args = MAKE_TUPLE(args, 2);
+
+ PyObject *result;
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+#if PYTHON_VERSION < 0x360
+ if (flags & METH_KEYWORDS) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#else
+ if (flags == (METH_VARARGS|METH_KEYWORDS)) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else if (flags == METH_FASTCALL) {
+#if PYTHON_VERSION < 0x370
+ result = (*(_PyCFunctionFast)method)(self, &PyTuple_GET_ITEM(pos_args, 0), 2, NULL);
+#else
+ result = (*(_PyCFunctionFast)method)(self, &pos_args, 2);
+#endif
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#endif
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ Py_DECREF(pos_args);
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ Py_DECREF(pos_args);
+ return NULL;
+ }
+ }
+ } else if (PyFunction_Check(called)) {
+ return callPythonFunction(
+ called,
+ args,
+ 2
+ );
+ }
+
+ PyObject *pos_args = MAKE_TUPLE(args, 2);
+
+ PyObject *result = CALL_FUNCTION(called, pos_args, NULL);
+
+ Py_DECREF(pos_args);
+
+ return result;
+}
+
+PyObject *CALL_FUNCTION_WITH_ARGS3(PyObject *called, PyObject **args) {
+ CHECK_OBJECT(called);
+
+ // Check if arguments are valid objects in debug mode.
+#ifndef __NUITKA_NO_ASSERT__
+ for (size_t i = 0; i < 3; i++) {
+ CHECK_OBJECT(args[i]);
+ }
+#endif
+
+ if (Nuitka_Function_Check(called)) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)called;
+ PyObject *result;
+
+ if (function->m_args_simple && 3 == function->m_args_positional_count){
+ for (Py_ssize_t i = 0; i < 3; i++) {
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, args);
+ } else if (function->m_args_simple && 3 + function->m_defaults_given == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ memcpy(python_pars, args, 3 * sizeof(PyObject *));
+ memcpy(python_pars + 3, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 0; i < function->m_args_positional_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsPos(function, python_pars, args, 3)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ } else if (Nuitka_Method_Check(called)) {
+ struct Nuitka_MethodObject *method = (struct Nuitka_MethodObject *)called;
+
+ // Unbound method without arguments, let the error path be slow.
+ if (method->m_object != NULL) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = method->m_function;
+
+ PyObject *result;
+
+ if (function->m_args_simple && 3 + 1 == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ for (Py_ssize_t i = 0; i < 3; i++) {
+ python_pars[i + 1] = args[i];
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else if ( function->m_args_simple && 3 + 1 + function->m_defaults_given == function->m_args_positional_count ) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ memcpy(python_pars+1, args, 3 * sizeof(PyObject *));
+ memcpy(python_pars+1 + 3, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 1; i < function->m_args_overall_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsMethodPos(function, python_pars, method->m_object, args, 3)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ }
+ } else if (PyCFunction_Check(called)) {
+ // Try to be fast about wrapping the arguments.
+ int flags = PyCFunction_GET_FLAGS(called) & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
+
+ if (flags & METH_NOARGS) {
+#if 3 == 0
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, NULL );
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(
+ PyExc_TypeError,
+ "%s() takes no arguments (3 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_O) {
+#if 3 == 1
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, args[0]);
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyExc_TypeError,
+ "%s() takes exactly one argument (3 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_VARARGS) {
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ PyObject *pos_args = MAKE_TUPLE(args, 3);
+
+ PyObject *result;
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+#if PYTHON_VERSION < 0x360
+ if (flags & METH_KEYWORDS) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#else
+ if (flags == (METH_VARARGS|METH_KEYWORDS)) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else if (flags == METH_FASTCALL) {
+#if PYTHON_VERSION < 0x370
+ result = (*(_PyCFunctionFast)method)(self, &PyTuple_GET_ITEM(pos_args, 0), 3, NULL);
+#else
+ result = (*(_PyCFunctionFast)method)(self, &pos_args, 3);
+#endif
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#endif
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ Py_DECREF(pos_args);
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ Py_DECREF(pos_args);
+ return NULL;
+ }
+ }
+ } else if (PyFunction_Check(called)) {
+ return callPythonFunction(
+ called,
+ args,
+ 3
+ );
+ }
+
+ PyObject *pos_args = MAKE_TUPLE(args, 3);
+
+ PyObject *result = CALL_FUNCTION(called, pos_args, NULL);
+
+ Py_DECREF(pos_args);
+
+ return result;
+}
+
+PyObject *CALL_FUNCTION_WITH_ARGS4(PyObject *called, PyObject **args) {
+ CHECK_OBJECT(called);
+
+ // Check if arguments are valid objects in debug mode.
+#ifndef __NUITKA_NO_ASSERT__
+ for (size_t i = 0; i < 4; i++) {
+ CHECK_OBJECT(args[i]);
+ }
+#endif
+
+ if (Nuitka_Function_Check(called)) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)called;
+ PyObject *result;
+
+ if (function->m_args_simple && 4 == function->m_args_positional_count){
+ for (Py_ssize_t i = 0; i < 4; i++) {
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, args);
+ } else if (function->m_args_simple && 4 + function->m_defaults_given == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ memcpy(python_pars, args, 4 * sizeof(PyObject *));
+ memcpy(python_pars + 4, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 0; i < function->m_args_positional_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsPos(function, python_pars, args, 4)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ } else if (Nuitka_Method_Check(called)) {
+ struct Nuitka_MethodObject *method = (struct Nuitka_MethodObject *)called;
+
+ // Unbound method without arguments, let the error path be slow.
+ if (method->m_object != NULL) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = method->m_function;
+
+ PyObject *result;
+
+ if (function->m_args_simple && 4 + 1 == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ for (Py_ssize_t i = 0; i < 4; i++) {
+ python_pars[i + 1] = args[i];
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else if ( function->m_args_simple && 4 + 1 + function->m_defaults_given == function->m_args_positional_count ) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ memcpy(python_pars+1, args, 4 * sizeof(PyObject *));
+ memcpy(python_pars+1 + 4, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 1; i < function->m_args_overall_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsMethodPos(function, python_pars, method->m_object, args, 4)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ }
+ } else if (PyCFunction_Check(called)) {
+ // Try to be fast about wrapping the arguments.
+ int flags = PyCFunction_GET_FLAGS(called) & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
+
+ if (flags & METH_NOARGS) {
+#if 4 == 0
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, NULL );
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(
+ PyExc_TypeError,
+ "%s() takes no arguments (4 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_O) {
+#if 4 == 1
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, args[0]);
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyExc_TypeError,
+ "%s() takes exactly one argument (4 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_VARARGS) {
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ PyObject *pos_args = MAKE_TUPLE(args, 4);
+
+ PyObject *result;
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+#if PYTHON_VERSION < 0x360
+ if (flags & METH_KEYWORDS) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#else
+ if (flags == (METH_VARARGS|METH_KEYWORDS)) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else if (flags == METH_FASTCALL) {
+#if PYTHON_VERSION < 0x370
+ result = (*(_PyCFunctionFast)method)(self, &PyTuple_GET_ITEM(pos_args, 0), 4, NULL);
+#else
+ result = (*(_PyCFunctionFast)method)(self, &pos_args, 4);
+#endif
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#endif
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ Py_DECREF(pos_args);
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ Py_DECREF(pos_args);
+ return NULL;
+ }
+ }
+ } else if (PyFunction_Check(called)) {
+ return callPythonFunction(
+ called,
+ args,
+ 4
+ );
+ }
+
+ PyObject *pos_args = MAKE_TUPLE(args, 4);
+
+ PyObject *result = CALL_FUNCTION(called, pos_args, NULL);
+
+ Py_DECREF(pos_args);
+
+ return result;
+}
+
+PyObject *CALL_FUNCTION_WITH_ARGS5(PyObject *called, PyObject **args) {
+ CHECK_OBJECT(called);
+
+ // Check if arguments are valid objects in debug mode.
+#ifndef __NUITKA_NO_ASSERT__
+ for (size_t i = 0; i < 5; i++) {
+ CHECK_OBJECT(args[i]);
+ }
+#endif
+
+ if (Nuitka_Function_Check(called)) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)called;
+ PyObject *result;
+
+ if (function->m_args_simple && 5 == function->m_args_positional_count){
+ for (Py_ssize_t i = 0; i < 5; i++) {
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, args);
+ } else if (function->m_args_simple && 5 + function->m_defaults_given == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ memcpy(python_pars, args, 5 * sizeof(PyObject *));
+ memcpy(python_pars + 5, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 0; i < function->m_args_positional_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsPos(function, python_pars, args, 5)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ } else if (Nuitka_Method_Check(called)) {
+ struct Nuitka_MethodObject *method = (struct Nuitka_MethodObject *)called;
+
+ // Unbound method without arguments, let the error path be slow.
+ if (method->m_object != NULL) {
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = method->m_function;
+
+ PyObject *result;
+
+ if (function->m_args_simple && 5 + 1 == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ for (Py_ssize_t i = 0; i < 5; i++) {
+ python_pars[i + 1] = args[i];
+ Py_INCREF(args[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else if ( function->m_args_simple && 5 + 1 + function->m_defaults_given == function->m_args_positional_count ) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_positional_count);
+#else
+ PyObject *python_pars[function->m_args_positional_count];
+#endif
+ python_pars[0] = method->m_object;
+ Py_INCREF(method->m_object);
+
+ memcpy(python_pars+1, args, 5 * sizeof(PyObject *));
+ memcpy(python_pars+1 + 5, &PyTuple_GET_ITEM(function->m_defaults, 0), function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 1; i < function->m_args_overall_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ result = function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsMethodPos(function, python_pars, method->m_object, args, 5)) {
+ result = function->m_c_code(function, python_pars);
+ } else {
+ result = NULL;
+ }
+ }
+
+ Py_LeaveRecursiveCall();
+
+ return result;
+ }
+ } else if (PyCFunction_Check(called)) {
+ // Try to be fast about wrapping the arguments.
+ int flags = PyCFunction_GET_FLAGS(called) & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
+
+ if (flags & METH_NOARGS) {
+#if 5 == 0
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, NULL );
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(
+ PyExc_TypeError,
+ "%s() takes no arguments (5 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_O) {
+#if 5 == 1
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+ PyObject *result = (*method)( self, args[0]);
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ return NULL;
+ }
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyExc_TypeError,
+ "%s() takes exactly one argument (5 given)",
+ ((PyCFunctionObject *)called)->m_ml->ml_name
+ );
+ return NULL;
+#endif
+ } else if (flags & METH_VARARGS) {
+ PyCFunction method = PyCFunction_GET_FUNCTION(called);
+ PyObject *self = PyCFunction_GET_SELF(called);
+
+ PyObject *pos_args = MAKE_TUPLE(args, 5);
+
+ PyObject *result;
+
+ // Recursion guard is not strictly necessary, as we already have
+ // one on our way to here.
+#ifdef _NUITKA_FULL_COMPAT
+ if (unlikely(Py_EnterRecursiveCall((char *)" while calling a Python object"))) {
+ return NULL;
+ }
+#endif
+
+#if PYTHON_VERSION < 0x360
+ if (flags & METH_KEYWORDS) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#else
+ if (flags == (METH_VARARGS|METH_KEYWORDS)) {
+ result = (*(PyCFunctionWithKeywords)method)(self, pos_args, NULL);
+ } else if (flags == METH_FASTCALL) {
+#if PYTHON_VERSION < 0x370
+ result = (*(_PyCFunctionFast)method)(self, &PyTuple_GET_ITEM(pos_args, 0), 5, NULL);
+#else
+ result = (*(_PyCFunctionFast)method)(self, &pos_args, 5);
+#endif
+ } else {
+ result = (*method)(self, pos_args);
+ }
+#endif
+
+#ifdef _NUITKA_FULL_COMPAT
+ Py_LeaveRecursiveCall();
+#endif
+
+ if (result != NULL) {
+ // Some buggy C functions do set an error, but do not indicate it
+ // and Nuitka inner workings can get upset/confused from it.
+ DROP_ERROR_OCCURRED();
+
+ Py_DECREF(pos_args);
+ return result;
+ } else {
+ // Other buggy C functions do this, return NULL, but with
+ // no error set, not allowed.
+ if (unlikely(!ERROR_OCCURRED())) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call"
+ );
+ }
+
+ Py_DECREF(pos_args);
+ return NULL;
+ }
+ }
+ } else if (PyFunction_Check(called)) {
+ return callPythonFunction(
+ called,
+ args,
+ 5
+ );
+ }
+
+ PyObject *pos_args = MAKE_TUPLE(args, 5);
+
+ PyObject *result = CALL_FUNCTION(called, pos_args, NULL);
+
+ Py_DECREF(pos_args);
+
+ return result;
+}
+
+PyObject *CALL_METHOD_WITH_ARGS1(PyObject *source, PyObject *attr_name, PyObject **args) {
+ CHECK_OBJECT(source);
+ CHECK_OBJECT(attr_name);
+
+ // Check if arguments are valid objects in debug mode.
+#ifndef __NUITKA_NO_ASSERT__
+ for (size_t i = 0; i < 1; i++) {
+ CHECK_OBJECT(args[i]);
+ }
+#endif
+
+ PyTypeObject *type = Py_TYPE(source);
+
+ if (type->tp_getattro == PyObject_GenericGetAttr) {
+ // Unfortunately this is required, although of cause rarely necessary.
+ if (unlikely(type->tp_dict == NULL)) {
+ if (unlikely(PyType_Ready(type) < 0)) {
+ return NULL;
+ }
+ }
+
+ PyObject *descr = _PyType_Lookup(type, attr_name);
+ descrgetfunc func = NULL;
+
+ if (descr != NULL) {
+ Py_INCREF(descr);
+
+#if PYTHON_VERSION < 0x300
+ if (PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)) {
+#endif
+ func = Py_TYPE(descr)->tp_descr_get;
+
+ if (func != NULL && PyDescr_IsData(descr)) {
+ PyObject *called_object = func(descr, source, (PyObject *)type);
+ Py_DECREF(descr);
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ called_object,
+ args
+ );
+ Py_DECREF(called_object);
+ return result;
+ }
+#if PYTHON_VERSION < 0x300
+ }
+#endif
+ }
+
+ Py_ssize_t dictoffset = type->tp_dictoffset;
+ PyObject *dict = NULL;
+
+ if (dictoffset != 0) {
+ // Negative dictionary offsets have special meaning.
+ if (dictoffset < 0) {
+ Py_ssize_t tsize;
+ size_t size;
+
+ tsize = ((PyVarObject *)source)->ob_size;
+ if (tsize < 0) {
+ tsize = -tsize;
+ }
+ size = _PyObject_VAR_SIZE( type, tsize );
+
+ dictoffset += (long)size;
+ }
+
+ PyObject **dictptr = (PyObject **) ((char *)source + dictoffset);
+ dict = *dictptr;
+ }
+
+ if (dict != NULL) {
+ CHECK_OBJECT(dict);
+
+ Py_INCREF(dict);
+
+ PyObject *called_object = DICT_GET_ITEM1(dict, attr_name);
+
+ if (called_object != NULL) {
+ Py_XDECREF(descr);
+ Py_DECREF(dict);
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ called_object,
+ args
+ );
+ Py_DECREF(called_object);
+ return result;
+ }
+
+ Py_DECREF(dict);
+ }
+
+ if (func != NULL) {
+ if (func == Nuitka_Function_Type.tp_descr_get) {
+ PyObject *result = Nuitka_CallMethodFunctionPosArgs(
+ (struct Nuitka_FunctionObject const *)descr,
+ source,
+ args,
+ 1
+ );
+
+ Py_DECREF(descr);
+
+ return result;
+ } else {
+ PyObject *called_object = func(descr, source, (PyObject *)type);
+ CHECK_OBJECT(called_object);
+
+ Py_DECREF(descr);
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ called_object,
+ args
+ );
+ Py_DECREF(called_object);
+
+ return result;
+ }
+ }
+
+ if (descr != NULL) {
+ CHECK_OBJECT(descr);
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ descr,
+ args
+ );
+ Py_DECREF(descr);
+
+ return result;
+ }
+
+#if PYTHON_VERSION < 0x300
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT2(
+ PyExc_AttributeError,
+ "'%s' object has no attribute '%s'",
+ type->tp_name,
+ PyString_AS_STRING(attr_name)
+ );
+#else
+ PyErr_Format(
+ PyExc_AttributeError,
+ "'%s' object has no attribute '%U'",
+ type->tp_name,
+ attr_name
+ );
+#endif
+ return NULL;
+ }
+#if PYTHON_VERSION < 0x300
+ else if (type == &PyInstance_Type) {
+ PyInstanceObject *source_instance = (PyInstanceObject *)source;
+
+ // The special cases have their own variant on the code generation level
+ // as we are called with constants only.
+ assert(attr_name != const_str_plain___dict__);
+ assert(attr_name != const_str_plain___class__);
+
+ // Try the instance dict first.
+ PyObject *called_object = GET_STRING_DICT_VALUE(
+ (PyDictObject *)source_instance->in_dict,
+ (PyStringObject *)attr_name
+ );
+
+ // Note: The "called_object" was found without taking a reference,
+ // so we need not release it in this branch.
+ if (called_object != NULL) {
+ return CALL_FUNCTION_WITH_ARGS1(called_object, args);
+ }
+
+ // Then check the class dictionaries.
+ called_object = FIND_ATTRIBUTE_IN_CLASS(
+ source_instance->in_class,
+ attr_name
+ );
+
+ // Note: The "called_object" was found without taking a reference,
+ // so we need not release it in this branch.
+ if (called_object != NULL) {
+ descrgetfunc descr_get = Py_TYPE(called_object)->tp_descr_get;
+
+ if (descr_get == Nuitka_Function_Type.tp_descr_get) {
+ return Nuitka_CallMethodFunctionPosArgs(
+ (struct Nuitka_FunctionObject const *)called_object,
+ source,
+ args,
+ 1
+ );
+ } else if (descr_get != NULL) {
+ PyObject *method = descr_get(
+ called_object,
+ source,
+ (PyObject *)source_instance->in_class
+ );
+
+ if (unlikely(method == NULL)) {
+ return NULL;
+ }
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(method, args);
+ Py_DECREF(method);
+ return result;
+ } else {
+ return CALL_FUNCTION_WITH_ARGS1(called_object, args);
+ }
+
+ } else if (unlikely(source_instance->in_class->cl_getattr == NULL)) {
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT2(
+ PyExc_AttributeError,
+ "%s instance has no attribute '%s'",
+ PyString_AS_STRING(source_instance->in_class->cl_name),
+ PyString_AS_STRING(attr_name)
+ );
+
+ return NULL;
+ } else {
+ // Finally allow the "__getattr__" override to provide it or else
+ // it's an error.
+
+ PyObject *args2[] = {
+ source,
+ attr_name
+ };
+
+ called_object = CALL_FUNCTION_WITH_ARGS2(
+ source_instance->in_class->cl_getattr,
+ args2
+ );
+
+ if (unlikely(called_object == NULL)) {
+ return NULL;
+ }
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ called_object,
+ args
+ );
+ Py_DECREF(called_object);
+ return result;
+ }
+ }
+#endif
+ else if (type->tp_getattro != NULL) {
+ PyObject *called_object = (*type->tp_getattro)(
+ source,
+ attr_name
+ );
+
+ if (unlikely(called_object == NULL)) {
+ return NULL;
+ }
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ called_object,
+ args
+ );
+ Py_DECREF(called_object);
+ return result;
+ } else if (type->tp_getattr != NULL) {
+ PyObject *called_object = (*type->tp_getattr)(
+ source,
+ (char *)Nuitka_String_AsString_Unchecked(attr_name)
+ );
+
+ if (unlikely(called_object == NULL)) {
+ return NULL;
+ }
+
+ PyObject *result = CALL_FUNCTION_WITH_ARGS1(
+ called_object,
+ args
+ );
+ Py_DECREF(called_object);
+ return result;
+ } else {
+ SET_CURRENT_EXCEPTION_TYPE0_FORMAT2(
+ PyExc_AttributeError,
+ "'%s' object has no attribute '%s'",
+ type->tp_name,
+ Nuitka_String_AsString_Unchecked(attr_name)
+ );
+
+ return NULL;
+ }
+}
+
diff --git a/mtube.build/__helpers.h b/mtube.build/__helpers.h
new file mode 100644
index 0000000..c334eeb
--- /dev/null
+++ b/mtube.build/__helpers.h
@@ -0,0 +1,11 @@
+#ifndef __NUITKA_CALLS_H__
+#define __NUITKA_CALLS_H__
+
+extern PyObject *CALL_FUNCTION_WITH_ARGS1(PyObject *called, PyObject **args);
+extern PyObject *CALL_FUNCTION_WITH_ARGS2(PyObject *called, PyObject **args);
+extern PyObject *CALL_FUNCTION_WITH_ARGS3(PyObject *called, PyObject **args);
+extern PyObject *CALL_FUNCTION_WITH_ARGS4(PyObject *called, PyObject **args);
+extern PyObject *CALL_FUNCTION_WITH_ARGS5(PyObject *called, PyObject **args);
+extern PyObject *CALL_METHOD_WITH_ARGS1(PyObject *source, PyObject *attr_name, PyObject **args);
+#endif
+
diff --git a/mtube.build/__helpers.o b/mtube.build/__helpers.o
new file mode 100644
index 0000000..03bdd8b
Binary files /dev/null and b/mtube.build/__helpers.o differ
diff --git a/mtube.build/__loader.c b/mtube.build/__loader.c
new file mode 100644
index 0000000..e4d3908
--- /dev/null
+++ b/mtube.build/__loader.c
@@ -0,0 +1,83 @@
+
+/* Code to register embedded modules for meta path based loading if any. */
+
+#include
+
+#include "nuitka/constants_blob.h"
+
+#include "nuitka/unfreezing.h"
+
+/* Type bool */
+#ifndef __cplusplus
+#include "stdbool.h"
+#endif
+
+#if 0 > 0
+static unsigned char *bytecode_data[0];
+#else
+static unsigned char **bytecode_data = NULL;
+#endif
+
+/* Table for lookup to find compiled or bytecode modules included in this
+ * binary or module, or put along this binary as extension modules. We do
+ * our own loading for each of these.
+ */
+extern PyObject *modulecode___main__(PyObject *, struct Nuitka_MetaPathBasedLoaderEntry const *);
+
+static struct Nuitka_MetaPathBasedLoaderEntry meta_path_loader_entries[] = {
+ {"__main__", modulecode___main__, 0, 0, },
+ {NULL, NULL, 0, 0, 0}
+};
+
+
+void setupMetaPathBasedLoader(void) {
+ static bool init_done = false;
+ if (init_done == false) {
+ loadConstantsBlob((PyObject **)bytecode_data, ".bytecode", 0);
+ registerMetaPathBasedUnfreezer(meta_path_loader_entries, bytecode_data);
+
+ init_done = true;
+ }
+
+
+}
+
+// This provides the frozen (compiled bytecode) files that are included if
+// any.
+
+// These modules should be loaded as bytecode. They may e.g. have to be loadable
+// during "Py_Initialize" already, or for irrelevance, they are only included
+// in this un-optimized form. These are not compiled by Nuitka, and therefore
+// are not accelerated at all, merely bundled with the binary or module, so
+// that CPython library can start out finding them.
+
+struct frozen_desc {
+ char const *name;
+ int index;
+ int size;
+};
+
+static struct frozen_desc _frozen_modules[] = {
+
+ {NULL, 0, 0}
+};
+
+
+void copyFrozenModulesTo(struct _frozen *destination) {
+ loadConstantsBlob((PyObject **)bytecode_data, ".bytecode", 0);
+
+ struct frozen_desc *current = _frozen_modules;
+
+ for(;;) {
+ destination->name = (char *)current->name;
+ destination->code = bytecode_data[current->index];
+ destination->size = current->size;
+
+ if (destination->name == NULL) break;
+
+ current += 1;
+ destination += 1;
+ };
+}
+
+
diff --git a/mtube.build/__loader.o b/mtube.build/__loader.o
new file mode 100644
index 0000000..2aa5353
Binary files /dev/null and b/mtube.build/__loader.o differ
diff --git a/mtube.build/build_definitions.h b/mtube.build/build_definitions.h
new file mode 100644
index 0000000..de4c5b6
--- /dev/null
+++ b/mtube.build/build_definitions.h
@@ -0,0 +1,9 @@
+#define DLL_EXTRA_PATH "c:\\users\\blzza\\appdata\\local\\programs\\python\\python39"
+#define NO_PYTHON_WARNINGS 0
+#define PYTHON_HOME_PATH "C:\\Users\\blzza\\AppData\\Local\\Programs\\Python\\Python39"
+#define SYSFLAG_BYTES_WARNING 0
+#define SYSFLAG_NO_RANDOMIZATION 0
+#define SYSFLAG_NO_SITE 0
+#define SYSFLAG_OPTIMIZE 0
+#define SYSFLAG_UTF8 0
+#define SYSFLAG_VERBOSE 0
diff --git a/mtube.build/ccache-15656.txt b/mtube.build/ccache-15656.txt
new file mode 100644
index 0000000..5364cee
--- /dev/null
+++ b/mtube.build/ccache-15656.txt
@@ -0,0 +1,481 @@
+[2021-03-09T11:32:02.233722 7908 ] === CCACHE 3.7.12 STARTED =========================================
+[2021-03-09T11:32:02.233722 12316] === CCACHE 3.7.12 STARTED =========================================
+[2021-03-09T11:32:02.233722 12316] Config: (default) base_dir =
+[2021-03-09T11:32:02.233722 12316] Config: (environment) cache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:02.233722 12316] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:02.233722 12316] Config: (default) compiler =
+[2021-03-09T11:32:02.233722 12316] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:02.233722 12316] Config: (default) compression = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) compression_level = 6
+[2021-03-09T11:32:02.233722 12316] Config: (default) cpp_extension =
+[2021-03-09T11:32:02.233722 12316] Config: (default) debug = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) depend_mode = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) direct_mode = true
+[2021-03-09T11:32:02.233722 12316] Config: (default) disable = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:02.233722 12316] Config: (default) hard_link = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) hash_dir = true
+[2021-03-09T11:32:02.233722 12316] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:02.233722 12316] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:02.233722 12316] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:02.233722 12316] Config: (default) max_files = 0
+[2021-03-09T11:32:02.233722 12316] Config: (default) max_size = 5.0G
+[2021-03-09T11:32:02.233722 12316] Config: (default) path =
+[2021-03-09T11:32:02.233722 12316] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) prefix_command =
+[2021-03-09T11:32:02.233722 12316] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:02.233722 12316] Config: (default) read_only = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) read_only_direct = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) recache = false
+[2021-03-09T11:32:02.233722 12316] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:02.233722 12316] Config: (default) sloppiness =
+[2021-03-09T11:32:02.233722 12316] Config: (default) stats = true
+[2021-03-09T11:32:02.233722 12316] Config: (default) temporary_dir =
+[2021-03-09T11:32:02.233722 12316] Config: (default) umask =
+[2021-03-09T11:32:02.234723 12316] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o module.__main__.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\static_src module.__main__.c
+ainProgram.c
+[2021-03-09T11:32:02.235722 7908 ] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:02.235722 12316] Hostname: LAPTOP-BNFR538A
+\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.235722 12316] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.235722 7908 ] Source file: static_src\MainProgram.c
+[2021-03-09T11:32:02.235722 7908 ] Object file: static_src\MainProgram.o
+[2021-03-09T11:32:02.235722 12316] Source file: module.__main__.c
+[2021-03-09T11:32:02.235722 12316] Object file: module.__main__.o
+[2021-03-09T11:32:02.235722 7908 ] Trying direct lookup
+[2021-03-09T11:32:02.235722 12316] Trying direct lookup
+[2021-03-09T11:32:02.239721 7908 ] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/a/8359a36f8398a6a0a089569eee7974-24573.manifest
+[2021-03-09T11:32:02.239721 12316] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/3/9d243c0b0d16f440bd207cbaf3816f-21083.manifest
+[2021-03-09T11:32:02.239721 7908 ] No such manifest file
+[2021-03-09T11:32:02.239721 7908 ] Did not find object file hash in manifest
+[2021-03-09T11:32:02.240722 12316] No such manifest file
+[2021-03-09T11:32:02.240722 12316] Did not find object file hash in manifest
+[2021-03-09T11:32:02.241721 12316] Running preprocessor
+[2021-03-09T11:32:02.242720 7908 ] Running preprocessor
+[2021-03-09T11:32:02.252722 5384 ] === CCACHE 3.7.12 STARTED =========================================
+[2021-03-09T11:32:02.251722 19428] Config: (default) base_dir =
+[2021-03-09T11:32:02.251722 19428] Config: (environment) cache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:02.251722 19428] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:02.251722 19428] Config: (default) compiler =
+[2021-03-09T11:32:02.251722 19428] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:02.251722 19428] Config: (default) compression = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) compression_level = 6
+[2021-03-09T11:32:02.251722 19428] Config: (default) cpp_extension =
+[2021-03-09T11:32:02.251722 19428] Config: (default) debug = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) depend_mode = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) direct_mode = true
+[2021-03-09T11:32:02.251722 19428] Config: (default) disable = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:02.251722 19428] Config: (default) hard_link = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) hash_dir = true
+[2021-03-09T11:32:02.251722 19428] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:02.251722 19428] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:02.251722 19428] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:02.251722 19428] Config: (default) max_files = 0
+[2021-03-09T11:32:02.251722 19428] Config: (C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/ccache.conf) max_size = 5.0G
+[2021-03-09T11:32:02.251722 19428] Config: (default) path =
+[2021-03-09T11:32:02.251722 19428] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) prefix_command =
+[2021-03-09T11:32:02.251722 19428] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:02.251722 19428] Config: (default) read_only = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) read_only_direct = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) recache = false
+[2021-03-09T11:32:02.251722 19428] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:02.251722 19428] Config: (default) sloppiness =
+[2021-03-09T11:32:02.251722 19428] Config: (default) stats = true
+[2021-03-09T11:32:02.251722 19428] Config: (default) temporary_dir =
+[2021-03-09T11:32:02.251722 19428] Config: (default) umask =
+[2021-03-09T11:32:02.252722 19428] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o static_src\CompiledCellType.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\stat[2021-03-09T11:32:02.251722 15984] Config: (default) base_dir [2021-03-09T11:32:02.252722 19428] Hostname: LAPTOP-BNFR538A
+ache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:02.251722 15984] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:02.251722 15984] Config: (default) compiler =
+[2021-03-09T11:32:02.251722 15984] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:02.251722 15984] Config: (default) compression = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) compression_level = 6
+[2021-03-09T11:32:02.251722 15984] Config: (default) cpp_extension =
+[2021-03-09T11:32:02.251722 15984] Config: (default) debug = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) depend_mode = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) direct_mode = true
+[2021-03-09T11:32:02.251722 15984] Config: (default) disable = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:02.251722 15984] Config: (default) hard_link = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) hash_dir = true
+[2021-03-09T11:32:02.251722 15984] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:02.251722 15984] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:02.251722 15984] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:02.251722 15984] Config: (default) max_files = 0
+[2021-03-09T11:32:02.251722 15984] Config: (C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/ccache.conf) max_size = 5.0G
+[2021-03-09T11:32:02.251722 15984] Config: (default) path =
+[2021-03-09T11:32:02.251722 15984] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) prefix_command =
+[2021-03-09T11:32:02.251722 15984] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:02.251722 15984] Config: (default) read_only = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) read_only_direct = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) recache = false
+[2021-03-09T11:32:02.251722 15984] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:02.251722 15984] Config: (default) sloppiness =
+[2021-03-09T11:32:02.251722 15984] Config: (default) stats = true
+[2021-03-09T11:32:02.251722 15984] Config: (default) temporary_dir =
+[2021-03-09T11:32:02.251722 15984] Config: (default) umask =
+[2021-03-09T11:32:02.252722 15984] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o __constants.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\static_src __constants.c
+_src static_src\CompiledFunctionType.c
+[2021-03-09T11:32:02.252722 1788 ] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:02.252722 19748] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.252722 1788 ] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) base_dir =
+[2021-03-09T11:32:02.252722 5384 ] Config: (environment) cache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) compiler =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) compression = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) compression_level = 6
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) cpp_extension =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) debug = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) depend_mode = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) direct_mode = true
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) disable = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) hard_link = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) hash_dir = true
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:02.252722 5384 ] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) max_files = 0
+[2021-03-09T11:32:02.252722 5384 ] Config: (C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/ccache.conf) max_size = 5.0G
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) path =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) prefix_command =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) read_only = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) read_only_direct = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) recache = false
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) sloppiness =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) stats = true
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) temporary_dir =
+[2021-03-09T11:32:02.252722 5384 ] Config: (default) umask =
+[2021-03-09T11:32:02.252722 5384 ] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o static_src\CompiledGeneratorType.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\s[2021-03-09T11:32:02.253721 15984] Hostname: L[2021-03-09T11:32:02.253721 19880] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:02.253721 5384 ] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:02.253721 19428] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.253721 5384 ] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.253721 19880] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:02.253721 19748] Source file: __loader.c
+[2021-03-09T11:32:02.253721 19748] Object file: __loader.o
+[2021-03-09T11:32:02.253721 19428] Source file: static_src\CompiledCellType.c
+[2021-03-09T11:32:02.253721 19428] Object file: static_src\CompiledCellType.o
+[2021-03-09T11:32:02.253721 15984] Source file: __constants.c
+[2021-03-09T11:32:02.253721 15984] Object file: __constants.o
+[2021-03-09T11:32:02.253721 19428] Trying direct lookup
+[2021-03-09T11:32:02.254724 15984] Trying direct lookup
+[2021-03-09T11:32:02.254724 19748] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/4/e/7e85742bcb0dab17af31d8dfdc89e3-2965.manifest
+[2021-03-09T11:32:02.254724 19748] No such manifest file
+[2021-03-09T11:32:02.254724 19748] Did not find object file hash in manifest
+[2021-03-09T11:32:02.254724 5384 ] Source file: static_src\CompiledGeneratorType.c
+[2021-03-09T11:32:02.254724 5384 ] Object file: static_src\CompiledGeneratorType.o
+[2021-03-09T11:32:02.254724 5384 ] Trying direct lookup
+[2021-03-09T11:32:02.254724 1788 ] Source file: static_src\CompiledFunctionType.c
+[2021-03-09T11:32:02.254724 1788 ] Object file: static_src\CompiledFunctionType.o
+[2021-03-09T11:32:02.254724 1788 ] Trying direct lookup
+[2021-03-09T11:32:02.255725 19748] Running preprocessor
+[2021-03-09T11:32:02.255725 19880] Source file: __helpers.c
+[2021-03-09T11:32:02.255725 19880] Object file: __helpers.o
+[2021-03-09T11:32:02.256725 19880] Trying direct lookup
+[2021-03-09T11:32:02.258726 19880] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/a/b/3d8f5c383fb443a2dc7873ff7a588a-61875.manifest
+[2021-03-09T11:32:02.258726 19880] No such manifest file
+[2021-03-09T11:32:02.258726 19880] Did not find object file hash in manifest
+[2021-03-09T11:32:02.258726 15984] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/8/4d3491490d32d0e995e7b30426d37c-4702.manifest
+[2021-03-09T11:32:02.258726 15984] No such manifest file
+[2021-03-09T11:32:02.258726 15984] Did not find object file hash in manifest
+[2021-03-09T11:32:02.259721 19880] Running preprocessor
+[2021-03-09T11:32:02.259721 15984] Running preprocessor
+[2021-03-09T11:32:02.260724 5384 ] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/6/8/6146ac7a3332ec36555753ab2951cb-57400.manifest
+[2021-03-09T11:32:02.261723 5384 ] No such manifest file
+[2021-03-09T11:32:02.261723 5384 ] Did not find object file hash in manifest
+[2021-03-09T11:32:02.262721 5384 ] Running preprocessor
+[2021-03-09T11:32:02.264723 1788 ] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/4/e6713e48c73af95b3e76b726ad6ccb-78951.manifest
+[2021-03-09T11:32:02.264723 1788 ] No such manifest file
+[2021-03-09T11:32:02.264723 1788 ] Did not find object file hash in manifest
+[2021-03-09T11:32:02.265721 1788 ] Running preprocessor
+[2021-03-09T11:32:02.265721 19428] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/9/71f4bca7069bee0038d0a3b9ff2695-7970.manifest
+[2021-03-09T11:32:02.265721 19428] No such manifest file
+[2021-03-09T11:32:02.265721 19428] Did not find object file hash in manifest
+[2021-03-09T11:32:02.266722 19428] Running preprocessor
+[2021-03-09T11:32:02.593723 19748] Got object file hash from preprocessor
+[2021-03-09T11:32:02.593723 19748] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/a/e8cde6b56e6c91c560b612d1429ed8-439833.o not in cache
+[2021-03-09T11:32:02.593723 19748] Running real compiler
+[2021-03-09T11:32:02.677721 12316] Got object file hash from preprocessor
+[2021-03-09T11:32:02.677721 12316] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/b/45960c05f9e4e9ac2661debf0502ef-621803.o not in cache
+[2021-03-09T11:32:02.677721 12316] Running real compiler
+[2021-03-09T11:32:02.678722 19428] Got object file hash from preprocessor
+[2021-03-09T11:32:02.678722 19428] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/0/c12bbe8e2fdacd4c249435dc683fd0-618396.o not in cache
+[2021-03-09T11:32:02.678722 19428] Running real compiler
+[2021-03-09T11:32:02.683723 19880] Got object file hash from preprocessor
+[2021-03-09T11:32:02.683723 19880] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/4/f1ebd0cf97dac9b2ecd057ef65253b-651503.o not in cache
+[2021-03-09T11:32:02.683723 19880] Running real compiler
+[2021-03-09T11:32:02.683723 15984] Got object file hash from preprocessor
+[2021-03-09T11:32:02.684723 15984] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/3/97f8c8f302b008916c86ef0399800d-614761.o not in cache
+[2021-03-09T11:32:02.684723 15984] Running real compiler
+[2021-03-09T11:32:02.695724 1788 ] Got object file hash from preprocessor
+[2021-03-09T11:32:02.695724 1788 ] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/1/a7f54c02f8c10036dc42c83c4ce3de-698490.o not in cache
+[2021-03-09T11:32:02.695724 1788 ] Running real compiler
+[2021-03-09T11:32:02.699723 5384 ] Got object file hash from preprocessor
+[2021-03-09T11:32:02.699723 5384 ] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/6/57cae702cbca32967d6928e1e7e004-791730.o not in cache
+[2021-03-09T11:32:02.699723 5384 ] Running real compiler
+[2021-03-09T11:32:02.849722 19748] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/a/e8cde6b56e6c91c560b612d1429ed8-439833.o.tmp.stdout.LAPTOP-BNFR538A.19748.1QBI6D
+[2021-03-09T11:32:02.850724 19748] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/a/e8cde6b56e6c91c560b612d1429ed8-439833.o.tmp.stderr.LAPTOP-BNFR538A.19748.SS92c3
+[2021-03-09T11:32:02.855722 19748] Copying __loader.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/a/e8cde6b56e6c91c560b612d1429ed8-439833.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/a/e8cde6b56e6c91c560b612d1429ed8-439833.o.LAPTOP-BNFR538A.19748.1Apgjk (uncompressed)
+[2021-03-09T11:32:02.856722 19748] Stored in cache: __loader.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/a/e8cde6b56e6c91c560b612d1429ed8-439833.o (copied)
+[2021-03-09T11:32:02.863721 19748] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/4/e/7e85742bcb0dab17af31d8dfdc89e3-2965.manifest
+[2021-03-09T11:32:02.863721 19748] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/4/stats.lock
+[2021-03-09T11:32:02.866721 19748] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/4/stats.lock
+[2021-03-09T11:32:02.867722 19748] Result: cache miss
+[2021-03-09T11:32:02.868722 19748] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/stats.lock
+[2021-03-09T11:32:02.870724 19748] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/stats.lock
+[2021-03-09T11:32:02.968723 15984] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/3/97f8c8f302b008916c86ef0399800d-614761.o.tmp.stdout.LAPTOP-BNFR538A.15984.1QBI6D
+[2021-03-09T11:32:02.968723 15984] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/3/97f8c8f302b008916c86ef0399800d-614761.o.tmp.stderr.LAPTOP-BNFR538A.15984.SS92c3
+[2021-03-09T11:32:02.974725 15984] Copying __constants.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/3/97f8c8f302b008916c86ef0399800d-614761.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/3/97f8c8f302b008916c86ef0399800d-614761.o.LAPTOP-BNFR538A.15984.1Apgjk (uncompressed)
+[2021-03-09T11:32:02.975723 15984] Stored in cache: __constants.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/3/97f8c8f302b008916c86ef0399800d-614761.o (copied)
+[2021-03-09T11:32:02.983721 15984] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/8/4d3491490d32d0e995e7b30426d37c-4702.manifest
+[2021-03-09T11:32:02.985724 15984] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/stats.lock
+[2021-03-09T11:32:02.988723 15984] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/stats.lock
+[2021-03-09T11:32:02.989723 15984] Result: cache miss
+[2021-03-09T11:32:02.989723 15984] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:02.992724 15984] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:03.055726 19428] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/0/c12bbe8e2fdacd4c249435dc683fd0-618396.o.tmp.stdout.LAPTOP-BNFR538A.19428.1QBI6D
+[2021-03-09T11:32:03.055726 19428] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/0/c12bbe8e2fdacd4c249435dc683fd0-618396.o.tmp.stderr.LAPTOP-BNFR538A.19428.SS92c3
+[2021-03-09T11:32:03.060724 19428] Copying static_src\CompiledCellType.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/0/c12bbe8e2fdacd4c249435dc683fd0-618396.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/0/c12bbe8e2fdacd4c249435dc683fd0-618396.o.LAPTOP-BNFR538A.19428.1Apgjk (uncompressed)
+[2021-03-09T11:32:03.063723 19428] Stored in cache: static_src\CompiledCellType.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/0/c12bbe8e2fdacd4c249435dc683fd0-618396.o (copied)
+[2021-03-09T11:32:03.070727 19428] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/9/71f4bca7069bee0038d0a3b9ff2695-7970.manifest
+[2021-03-09T11:32:03.070727 19428] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/stats.lock
+[2021-03-09T11:32:03.072723 19428] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/stats.lock
+[2021-03-09T11:32:03.074724 19428] Result: cache miss
+[2021-03-09T11:32:03.074724 19428] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/stats.lock
+[2021-03-09T11:32:03.076725 19428] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/stats.lock
+[2021-03-09T11:32:03.123724 12316] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/b/45960c05f9e4e9ac2661debf0502ef-621803.o.tmp.stdout.LAPTOP-BNFR538A.12316.SS92c3
+[2021-03-09T11:32:03.123724 12316] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/b/45960c05f9e4e9ac2661debf0502ef-621803.o.tmp.stderr.LAPTOP-BNFR538A.12316.1Apgjk
+[2021-03-09T11:32:03.131727 12316] Copying module.__main__.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/b/45960c05f9e4e9ac2661debf0502ef-621803.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/b/45960c05f9e4e9ac2661debf0502ef-621803.o.LAPTOP-BNFR538A.12316.9lVK7d (uncompressed)
+[2021-03-09T11:32:03.133725 12316] Stored in cache: module.__main__.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/b/45960c05f9e4e9ac2661debf0502ef-621803.o (copied)
+[2021-03-09T11:32:03.137723 12316] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/3/9d243c0b0d16f440bd207cbaf3816f-21083.manifest
+[2021-03-09T11:32:03.138725 12316] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:03.141725 12316] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:03.142725 12316] Result: cache miss
+[2021-03-09T11:32:03.143724 12316] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:03.145725 12316] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:03.160728 404 ] === CCACHE 3.7.12 STARTED =========================================
+[2021-03-09T11:32:03.160728 404 ] Config: (default) base_dir =
+[2021-03-09T11:32:03.160728 404 ] Config: (environment) cache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:03.160728 404 ] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:03.160728 404 ] Config: (default) compiler =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:03.160728 404 ] Config: (default) compression = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) compression_level = 6
+[2021-03-09T11:32:03.160728 404 ] Config: (default) cpp_extension =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) debug = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) depend_mode = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) direct_mode = true
+[2021-03-09T11:32:03.160728 404 ] Config: (default) disable = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) hard_link = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) hash_dir = true
+[2021-03-09T11:32:03.160728 404 ] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:03.160728 404 ] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:03.160728 404 ] Config: (default) max_files = 0
+[2021-03-09T11:32:03.160728 404 ] Config: (C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/ccache.conf) max_size = 5.0G
+[2021-03-09T11:32:03.160728 404 ] Config: (default) path =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) prefix_command =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) read_only = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) read_only_direct = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) recache = false
+[2021-03-09T11:32:03.160728 404 ] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:03.160728 404 ] Config: (default) sloppiness =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) stats = true
+[2021-03-09T11:32:03.160728 404 ] Config: (default) temporary_dir =
+[2021-03-09T11:32:03.160728 404 ] Config: (default) umask =
+[2021-03-09T11:32:03.160728 404 ] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o static_src\CompiledCodeHelpers.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\static_src static_src\CompiledCodeHelpers.c
+[2021-03-09T11:32:03.161725 404 ] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:03.161725 404 ] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:03.161725 404 ] Source file: static_src\CompiledCodeHelpers.c
+[2021-03-09T11:32:03.161725 404 ] Object file: static_src\CompiledCodeHelpers.o
+[2021-03-09T11:32:03.162730 404 ] Trying direct lookup
+[2021-03-09T11:32:03.166729 404 ] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/4/56c4135e71e15a72ce1a130557ad6e-57111.manifest
+[2021-03-09T11:32:03.166729 404 ] No such manifest file
+[2021-03-09T11:32:03.166729 404 ] Did not find object file hash in manifest
+[2021-03-09T11:32:03.167724 404 ] Running preprocessor
+[2021-03-09T11:32:03.182721 14504] === CCACHE 3.7.12 STARTED =========================================
+[2021-03-09T11:32:03.182721 14504] Config: (default) base_dir =
+[2021-03-09T11:32:03.182721 14504] Config: (environment) cache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:03.182721 14504] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:03.182721 14504] Config: (default) compiler =
+[2021-03-09T11:32:03.182721 14504] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:03.182721 14504] Config: (default) compression = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) compression_level = 6
+[2021-03-09T11:32:03.182721 14504] Config: (default) cpp_extension =
+[2021-03-09T11:32:03.182721 14504] Config: (default) debug = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) depend_mode = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) direct_mode = true
+[2021-03-09T11:32:03.182721 14504] Config: (default) disable = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:03.182721 14504] Config: (default) hard_link = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) hash_dir = true
+[2021-03-09T11:32:03.182721 14504] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:03.182721 14504] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:03.182721 14504] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:03.182721 14504] Config: (default) max_files = 0
+[2021-03-09T11:32:03.182721 14504] Config: (C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/ccache.conf) max_size = 5.0G
+[2021-03-09T11:32:03.182721 14504] Config: (default) path =
+[2021-03-09T11:32:03.182721 14504] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) prefix_command =
+[2021-03-09T11:32:03.182721 14504] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:03.182721 14504] Config: (default) read_only = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) read_only_direct = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) recache = false
+[2021-03-09T11:32:03.182721 14504] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:03.182721 14504] Config: (default) sloppiness =
+[2021-03-09T11:32:03.182721 14504] Config: (default) stats = true
+[2021-03-09T11:32:03.182721 14504] Config: (default) temporary_dir =
+[2021-03-09T11:32:03.182721 14504] Config: (default) umask =
+[2021-03-09T11:32:03.183722 14504] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o static_src\InspectPatcher.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\static_src static_src\InspectPatcher.c
+[2021-03-09T11:32:03.183722 14504] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:03.183722 14504] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:03.184726 14504] Source file: static_src\InspectPatcher.c
+[2021-03-09T11:32:03.184726 14504] Object file: static_src\InspectPatcher.o
+[2021-03-09T11:32:03.184726 14504] Trying direct lookup
+[2021-03-09T11:32:03.190723 14504] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/8/03f9b1f6bf24fb04c936f922e9f814-13634.manifest
+[2021-03-09T11:32:03.190723 14504] No such manifest file
+[2021-03-09T11:32:03.190723 14504] Did not find object file hash in manifest
+[2021-03-09T11:32:03.192723 14504] Running preprocessor
+[2021-03-09T11:32:03.215724 16816] === CCACHE 3.7.12 STARTED =========================================
+[2021-03-09T11:32:03.215724 16816] Config: (default) base_dir =
+[2021-03-09T11:32:03.215724 16816] Config: (environment) cache_dir = C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+[2021-03-09T11:32:03.215724 16816] Config: (default) cache_dir_levels = 2
+[2021-03-09T11:32:03.215724 16816] Config: (default) compiler =
+[2021-03-09T11:32:03.215724 16816] Config: (default) compiler_check = mtime
+[2021-03-09T11:32:03.215724 16816] Config: (default) compression = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) compression_level = 6
+[2021-03-09T11:32:03.215724 16816] Config: (default) cpp_extension =
+[2021-03-09T11:32:03.215724 16816] Config: (default) debug = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) depend_mode = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) direct_mode = true
+[2021-03-09T11:32:03.215724 16816] Config: (default) disable = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) extra_files_to_hash =
+[2021-03-09T11:32:03.215724 16816] Config: (default) hard_link = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) hash_dir = true
+[2021-03-09T11:32:03.215724 16816] Config: (default) ignore_headers_in_manifest =
+[2021-03-09T11:32:03.215724 16816] Config: (default) keep_comments_cpp = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) limit_multiple = 0.8
+[2021-03-09T11:32:03.215724 16816] Config: (environment) log_file = C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+[2021-03-09T11:32:03.215724 16816] Config: (default) max_files = 0
+[2021-03-09T11:32:03.215724 16816] Config: (C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/ccache.conf) max_size = 5.0G
+[2021-03-09T11:32:03.215724 16816] Config: (default) path =
+[2021-03-09T11:32:03.215724 16816] Config: (default) pch_external_checksum = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) prefix_command =
+[2021-03-09T11:32:03.215724 16816] Config: (default) prefix_command_cpp =
+[2021-03-09T11:32:03.215724 16816] Config: (default) read_only = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) read_only_direct = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) recache = false
+[2021-03-09T11:32:03.215724 16816] Config: (default) run_second_cpp = true
+[2021-03-09T11:32:03.215724 16816] Config: (default) sloppiness =
+[2021-03-09T11:32:03.215724 16816] Config: (default) stats = true
+[2021-03-09T11:32:03.215724 16816] Config: (default) temporary_dir =
+[2021-03-09T11:32:03.215724 16816] Config: (default) umask =
+[2021-03-09T11:32:03.215724 16816] Command line: C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe -o static_src\MetaPathBasedLoader.o -c -std=c11 -fvisibility=hidden -fwrapv -fpartial-inlining -ftrack-macro-expansion=0 -Wno-deprecated-declarations -fno-var-tracking -fcompare-debug-second -O3 -pipe -D_WIN32_WINNT=0x0501 -D__NUITKA_NO_ASSERT__ -DMS_WIN64 -D_NUITKA_CONSTANTS_FROM_RESOURCE -D_NUITKA_FROZEN=0 -D_NUITKA_EXE -IC:\Users\blzza\AppData\Local\Programs\Python\Python39\include -I. -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\include -IC:\Users\blzza\venv\lib\SITE-P~1\nuitka\build\static_src static_src\MetaPathBasedLoader.c
+[2021-03-09T11:32:03.215724 16816] Hostname: LAPTOP-BNFR538A
+[2021-03-09T11:32:03.215724 16816] Working directory: C:\Users\blzza\OneDrive\Documents\mytube\mtube.build
+[2021-03-09T11:32:03.216729 16816] Source file: static_src\MetaPathBasedLoader.c
+[2021-03-09T11:32:03.216729 16816] Object file: static_src\MetaPathBasedLoader.o
+[2021-03-09T11:32:03.216729 16816] Trying direct lookup
+[2021-03-09T11:32:03.222728 16816] Looking for object file hash in C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/1/ce2c833a220705d03c6f989f3257fe-52228.manifest
+[2021-03-09T11:32:03.222728 16816] No such manifest file
+[2021-03-09T11:32:03.222728 16816] Did not find object file hash in manifest
+[2021-03-09T11:32:03.223723 16816] Running preprocessor
+[2021-03-09T11:32:03.471726 14504] Got object file hash from preprocessor
+[2021-03-09T11:32:03.471726 14504] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/e/12e8c31823bda36337631ee2ca5978-624081.o not in cache
+[2021-03-09T11:32:03.471726 14504] Running real compiler
+[2021-03-09T11:32:03.502724 19880] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/4/f1ebd0cf97dac9b2ecd057ef65253b-651503.o.tmp.stdout.LAPTOP-BNFR538A.19880.1QBI6D
+[2021-03-09T11:32:03.502724 19880] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/4/f1ebd0cf97dac9b2ecd057ef65253b-651503.o.tmp.stderr.LAPTOP-BNFR538A.19880.SS92c3
+[2021-03-09T11:32:03.507730 19880] Copying __helpers.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/4/f1ebd0cf97dac9b2ecd057ef65253b-651503.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/4/f1ebd0cf97dac9b2ecd057ef65253b-651503.o.LAPTOP-BNFR538A.19880.1Apgjk (uncompressed)
+[2021-03-09T11:32:03.509725 19880] Stored in cache: __helpers.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/4/f1ebd0cf97dac9b2ecd057ef65253b-651503.o (copied)
+[2021-03-09T11:32:03.514723 19880] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/a/b/3d8f5c383fb443a2dc7873ff7a588a-61875.manifest
+[2021-03-09T11:32:03.515723 19880] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/a/stats.lock
+[2021-03-09T11:32:03.517723 19880] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/a/stats.lock
+[2021-03-09T11:32:03.519725 19880] Result: cache miss
+[2021-03-09T11:32:03.519725 19880] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:03.522726 19880] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:03.781723 7908 ] Got object file hash from preprocessor
+[2021-03-09T11:32:03.781723 7908 ] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/b/5105f181151b848bff7b06c797d2bb-4101503.o not in cache
+[2021-03-09T11:32:03.781723 7908 ] Running real compiler
+[2021-03-09T11:32:03.782722 14504] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/e/12e8c31823bda36337631ee2ca5978-624081.o.tmp.stdout.LAPTOP-BNFR538A.14504.1QBI6D
+[2021-03-09T11:32:03.782722 14504] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/e/12e8c31823bda36337631ee2ca5978-624081.o.tmp.stderr.LAPTOP-BNFR538A.14504.SS92c3
+[2021-03-09T11:32:03.787238 14504] Copying static_src\InspectPatcher.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/e/12e8c31823bda36337631ee2ca5978-624081.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/e/12e8c31823bda36337631ee2ca5978-624081.o.LAPTOP-BNFR538A.14504.1Apgjk (uncompressed)
+[2021-03-09T11:32:03.823393 16816] Got object file hash from preprocessor
+[2021-03-09T11:32:03.823393 16816] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/3/76ec2cdaeea2bd3d0b1dc3086256f8-2973663.o not in cache
+[2021-03-09T11:32:03.823393 16816] Running real compiler
+[2021-03-09T11:32:03.835937 14504] Stored in cache: static_src\InspectPatcher.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/e/12e8c31823bda36337631ee2ca5978-624081.o (copied)
+[2021-03-09T11:32:03.841937 14504] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/8/03f9b1f6bf24fb04c936f922e9f814-13634.manifest
+[2021-03-09T11:32:03.842936 14504] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/stats.lock
+[2021-03-09T11:32:03.845934 14504] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/c/stats.lock
+[2021-03-09T11:32:03.846936 14504] Result: cache miss
+[2021-03-09T11:32:03.847935 14504] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/stats.lock
+[2021-03-09T11:32:03.849935 14504] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/7/stats.lock
+[2021-03-09T11:32:04.108452 1788 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/1/a7f54c02f8c10036dc42c83c4ce3de-698490.o.tmp.stdout.LAPTOP-BNFR538A.1788.1QBI6D
+[2021-03-09T11:32:04.109452 1788 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/1/a7f54c02f8c10036dc42c83c4ce3de-698490.o.tmp.stderr.LAPTOP-BNFR538A.1788.SS92c3
+[2021-03-09T11:32:04.114454 1788 ] Copying static_src\CompiledFunctionType.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/1/a7f54c02f8c10036dc42c83c4ce3de-698490.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/1/a7f54c02f8c10036dc42c83c4ce3de-698490.o.LAPTOP-BNFR538A.1788.1Apgjk (uncompressed)
+[2021-03-09T11:32:04.116453 1788 ] Stored in cache: static_src\CompiledFunctionType.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/1/a7f54c02f8c10036dc42c83c4ce3de-698490.o (copied)
+[2021-03-09T11:32:04.121976 1788 ] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/4/e6713e48c73af95b3e76b726ad6ccb-78951.manifest
+[2021-03-09T11:32:04.122981 1788 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/stats.lock
+[2021-03-09T11:32:04.171685 1788 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/5/stats.lock
+[2021-03-09T11:32:04.172685 1788 ] Result: cache miss
+[2021-03-09T11:32:04.172685 1788 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:04.173685 1788 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:04.571214 404 ] Got object file hash from preprocessor
+[2021-03-09T11:32:04.571214 404 ] Object file C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/d/3f0890543fba1a8736864a95708340-5276277.o not in cache
+[2021-03-09T11:32:04.571214 404 ] Running real compiler
+[2021-03-09T11:32:04.817305 16816] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/3/76ec2cdaeea2bd3d0b1dc3086256f8-2973663.o.tmp.stdout.LAPTOP-BNFR538A.16816.1QBI6D
+[2021-03-09T11:32:04.818305 16816] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/3/76ec2cdaeea2bd3d0b1dc3086256f8-2973663.o.tmp.stderr.LAPTOP-BNFR538A.16816.SS92c3
+[2021-03-09T11:32:04.821307 16816] Copying static_src\MetaPathBasedLoader.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/3/76ec2cdaeea2bd3d0b1dc3086256f8-2973663.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/3/76ec2cdaeea2bd3d0b1dc3086256f8-2973663.o.LAPTOP-BNFR538A.16816.1Apgjk (uncompressed)
+[2021-03-09T11:32:04.823305 16816] Stored in cache: static_src\MetaPathBasedLoader.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/3/76ec2cdaeea2bd3d0b1dc3086256f8-2973663.o (copied)
+[2021-03-09T11:32:04.879549 16816] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/1/ce2c833a220705d03c6f989f3257fe-52228.manifest
+[2021-03-09T11:32:04.880550 16816] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/stats.lock
+[2021-03-09T11:32:04.881550 16816] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/stats.lock
+[2021-03-09T11:32:04.883552 16816] Result: cache miss
+[2021-03-09T11:32:04.883552 16816] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/stats.lock
+[2021-03-09T11:32:04.885550 16816] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/8/stats.lock
+[2021-03-09T11:32:04.905553 7908 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/b/5105f181151b848bff7b06c797d2bb-4101503.o.tmp.stdout.LAPTOP-BNFR538A.7908.SS92c3
+[2021-03-09T11:32:04.905553 7908 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/b/5105f181151b848bff7b06c797d2bb-4101503.o.tmp.stderr.LAPTOP-BNFR538A.7908.1Apgjk
+[2021-03-09T11:32:04.909552 7908 ] Copying static_src\MainProgram.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/b/5105f181151b848bff7b06c797d2bb-4101503.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/b/5105f181151b848bff7b06c797d2bb-4101503.o.LAPTOP-BNFR538A.7908.9lVK7d (uncompressed)
+[2021-03-09T11:32:04.910551 7908 ] Stored in cache: static_src\MainProgram.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/b/5105f181151b848bff7b06c797d2bb-4101503.o (copied)
+[2021-03-09T11:32:04.914552 7908 ] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/a/8359a36f8398a6a0a089569eee7974-24573.manifest
+[2021-03-09T11:32:04.915552 7908 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:04.917548 7908 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/3/stats.lock
+[2021-03-09T11:32:04.918549 7908 ] Result: cache miss
+[2021-03-09T11:32:04.918549 7908 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:04.919549 7908 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:04.964549 5384 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/6/57cae702cbca32967d6928e1e7e004-791730.o.tmp.stdout.LAPTOP-BNFR538A.5384.1QBI6D
+[2021-03-09T11:32:04.964549 5384 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/6/57cae702cbca32967d6928e1e7e004-791730.o.tmp.stderr.LAPTOP-BNFR538A.5384.SS92c3
+[2021-03-09T11:32:04.969550 5384 ] Copying static_src\CompiledGeneratorType.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/6/57cae702cbca32967d6928e1e7e004-791730.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/6/57cae702cbca32967d6928e1e7e004-791730.o.LAPTOP-BNFR538A.5384.1Apgjk (uncompressed)
+[2021-03-09T11:32:04.970549 5384 ] Stored in cache: static_src\CompiledGeneratorType.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/6/57cae702cbca32967d6928e1e7e004-791730.o (copied)
+[2021-03-09T11:32:04.973549 5384 ] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/6/8/6146ac7a3332ec36555753ab2951cb-57400.manifest
+[2021-03-09T11:32:04.973549 5384 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/6/stats.lock
+[2021-03-09T11:32:04.974548 5384 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/6/stats.lock
+[2021-03-09T11:32:04.975549 5384 ] Result: cache miss
+[2021-03-09T11:32:04.975549 5384 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:04.976548 5384 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/9/stats.lock
+[2021-03-09T11:32:12.540899 404 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/d/3f0890543fba1a8736864a95708340-5276277.o.tmp.stdout.LAPTOP-BNFR538A.404.1QBI6D
+[2021-03-09T11:32:12.540899 404 ] Unlink C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/d/3f0890543fba1a8736864a95708340-5276277.o.tmp.stderr.LAPTOP-BNFR538A.404.SS92c3
+[2021-03-09T11:32:12.543898 404 ] Copying static_src\CompiledCodeHelpers.o to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/d/3f0890543fba1a8736864a95708340-5276277.o via C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/d/3f0890543fba1a8736864a95708340-5276277.o.LAPTOP-BNFR538A.404.1Apgjk (uncompressed)
+[2021-03-09T11:32:12.544900 404 ] Stored in cache: static_src\CompiledCodeHelpers.o -> C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/d/3f0890543fba1a8736864a95708340-5276277.o (copied)
+[2021-03-09T11:32:12.548898 404 ] Added object file hash to C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/4/56c4135e71e15a72ce1a130557ad6e-57111.manifest
+[2021-03-09T11:32:12.549900 404 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/stats.lock
+[2021-03-09T11:32:12.602810 404 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/d/stats.lock
+[2021-03-09T11:32:12.604810 404 ] Result: cache miss
+[2021-03-09T11:32:12.604810 404 ] Acquired lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/stats.lock
+[2021-03-09T11:32:12.605855 404 ] Releasing lock C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache/2/stats.lock
diff --git a/mtube.build/module.__main__.c b/mtube.build/module.__main__.c
new file mode 100644
index 0000000..9d375eb
--- /dev/null
+++ b/mtube.build/module.__main__.c
@@ -0,0 +1,616 @@
+/* Generated code for Python module '__main__'
+ * created by Nuitka version 0.6.12.3
+ *
+ * This code is in part copyright 2021 Kay Hayen.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "nuitka/prelude.h"
+
+#include "nuitka/unfreezing.h"
+
+#include "__helpers.h"
+
+/* The "module___main__" is a Python object pointer of module type.
+ *
+ * Note: For full compatibility with CPython, every module variable access
+ * needs to go through it except for cases where the module cannot possibly
+ * have changed in the mean time.
+ */
+
+PyObject *module___main__;
+PyDictObject *moduledict___main__;
+
+/* The declarations of module constants used, if any. */
+static PyObject *mod_consts[10];
+
+static PyObject *module_filename_obj = NULL;
+
+/* Indicator if this modules private constants were created yet. */
+static bool constants_created = false;
+
+/* Function to create module private constants. */
+static void createModuleConstants(void) {
+ loadConstantsBlob(&mod_consts[0], "__main__", 10);
+
+ constants_created = true;
+}
+
+/* For multiprocessing, we want to be able to initialize the __main__ constants. */
+#if (_NUITKA_PLUGIN_MULTIPROCESSING_ENABLED || _NUITKA_PLUGIN_TRACEBACK_ENCRYPTION_ENABLED) && 1
+void createMainModuleConstants(void) {
+ createModuleConstants();
+}
+#endif
+
+/* Function to verify module private constants for non-corruption. */
+#ifndef __NUITKA_NO_ASSERT__
+void checkModuleConstants___main__(void) {
+ // The module may not have been used at all, then ignore this.
+ if (constants_created == false) return;
+
+ checkConstantsBlob(&mod_consts[0], "__main__", 10);
+}
+#endif
+
+// The module code objects.
+static PyCodeObject *codeobj_57d06e5a2f4c3f4cc637c9312f5e9944;
+/* For use in "MainProgram.c". */
+PyCodeObject *codeobj_main = NULL;
+
+static void createModuleCodeObjects(void) {
+ module_filename_obj = mod_consts[1]; CHECK_OBJECT(module_filename_obj);
+ codeobj_57d06e5a2f4c3f4cc637c9312f5e9944 = MAKE_CODEOBJECT(module_filename_obj, 1, CO_NOFREE, mod_consts[9], NULL, NULL, 0, 0, 0);
+}
+
+// The module function declarations.
+
+
+// The module function definitions.
+
+
+extern void _initCompiledCellType();
+extern void _initCompiledGeneratorType();
+extern void _initCompiledFunctionType();
+extern void _initCompiledMethodType();
+extern void _initCompiledFrameType();
+
+extern PyTypeObject Nuitka_Loader_Type;
+
+#ifdef _NUITKA_PLUGIN_DILL_ENABLED
+// Provide a way to create find a function via its C code and create it back
+// in another process, useful for multiprocessing extensions like dill
+
+function_impl_code functable___main__[] = {
+
+ NULL
+};
+
+static char const *_reduce_compiled_function_argnames[] = {
+ "func",
+ NULL
+};
+
+static PyObject *_reduce_compiled_function(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *func;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:reduce_compiled_function", (char **)_reduce_compiled_function_argnames, &func, NULL)) {
+ return NULL;
+ }
+
+ if (Nuitka_Function_Check(func) == false) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "not a compiled function");
+ return NULL;
+ }
+
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)func;
+
+ function_impl_code *current = functable___main__;
+ int offset = 0;
+
+ while (*current != NULL) {
+ if (*current == function->m_c_code) {
+ break;
+ }
+
+ current += 1;
+ offset += 1;
+ }
+
+ if (*current == NULL) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "Cannot find compiled function in module.");
+ return NULL;
+ }
+
+ PyObject *code_object_desc = PyTuple_New(6);
+ PyTuple_SET_ITEM0(code_object_desc, 0, function->m_code_object->co_filename);
+ PyTuple_SET_ITEM0(code_object_desc, 1, function->m_code_object->co_name);
+ PyTuple_SET_ITEM(code_object_desc, 2, PyLong_FromLong(function->m_code_object->co_firstlineno));
+ PyTuple_SET_ITEM0(code_object_desc, 3, function->m_code_object->co_varnames);
+ PyTuple_SET_ITEM(code_object_desc, 4, PyLong_FromLong(function->m_code_object->co_argcount));
+ PyTuple_SET_ITEM(code_object_desc, 5, PyLong_FromLong(function->m_code_object->co_flags));
+
+ CHECK_OBJECT_DEEP(code_object_desc);
+
+ PyObject *result = PyTuple_New(4);
+ PyTuple_SET_ITEM(result, 0, PyLong_FromLong(offset));
+ PyTuple_SET_ITEM(result, 1, code_object_desc);
+ PyTuple_SET_ITEM0(result, 2, function->m_defaults);
+ PyTuple_SET_ITEM0(result, 3, function->m_doc != NULL ? function->m_doc : Py_None);
+
+ CHECK_OBJECT_DEEP(result);
+
+ return result;
+}
+
+static PyMethodDef _method_def_reduce_compiled_function = {"reduce_compiled_function", (PyCFunction)_reduce_compiled_function,
+ METH_VARARGS | METH_KEYWORDS, NULL};
+
+static char const *_create_compiled_function_argnames[] = {
+ "func",
+ "code_object_desc",
+ "defaults",
+ "doc",
+ NULL
+};
+
+
+static PyObject *_create_compiled_function(PyObject *self, PyObject *args, PyObject *kwds) {
+ CHECK_OBJECT_DEEP(args);
+
+ PyObject *func;
+ PyObject *code_object_desc;
+ PyObject *defaults;
+ PyObject *doc;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOO:create_compiled_function", (char **)_create_compiled_function_argnames, &func, &code_object_desc, &defaults, &doc, NULL)) {
+ return NULL;
+ }
+
+ int offset = PyLong_AsLong(func);
+
+ if (offset == -1 && ERROR_OCCURRED()) {
+ return NULL;
+ }
+
+ if (offset > sizeof(functable___main__) || offset < 0) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "Wrong offset for compiled function.");
+ return NULL;
+ }
+
+ PyObject *filename = PyTuple_GET_ITEM(code_object_desc, 0);
+ PyObject *function_name = PyTuple_GET_ITEM(code_object_desc, 1);
+ PyObject *line = PyTuple_GET_ITEM(code_object_desc, 2);
+ int line_int = PyLong_AsLong(line);
+ assert(!ERROR_OCCURRED());
+
+ PyObject *argnames = PyTuple_GET_ITEM(code_object_desc, 3);
+ PyObject *arg_count = PyTuple_GET_ITEM(code_object_desc, 4);
+ int arg_count_int = PyLong_AsLong(arg_count);
+ assert(!ERROR_OCCURRED());
+ PyObject *flags = PyTuple_GET_ITEM(code_object_desc, 5);
+ int flags_int = PyLong_AsLong(flags);
+ assert(!ERROR_OCCURRED());
+
+ PyCodeObject *code_object = MAKE_CODEOBJECT(
+ filename,
+ line_int,
+ flags_int,
+ function_name,
+ argnames,
+ NULL, // freevars
+ arg_count_int,
+ 0, // TODO: Missing kw_only_count
+ 0 // TODO: Missing pos_only_count
+ );
+
+ struct Nuitka_FunctionObject *result = Nuitka_Function_New(
+ functable___main__[offset],
+ code_object->co_name,
+#if PYTHON_VERSION >= 0x300
+ NULL, // TODO: Not transferring qualname yet
+#endif
+ code_object,
+ defaults,
+#if PYTHON_VERSION >= 0x300
+ NULL, // kwdefaults are done on the outside currently
+ NULL, // TODO: Not transferring annotations
+#endif
+ module___main__,
+ doc,
+ NULL,
+ 0
+ );
+
+ return (PyObject *)result;
+}
+
+static PyMethodDef _method_def_create_compiled_function = {
+ "create_compiled_function",
+ (PyCFunction)_create_compiled_function,
+ METH_VARARGS | METH_KEYWORDS, NULL
+};
+
+
+#endif
+
+// Actual name might be different when loaded as a package.
+NUITKA_MAY_BE_UNUSED static char const *module_full_name = "__main__";
+
+// Internal entry point for module code.
+PyObject *modulecode___main__(PyObject *module, struct Nuitka_MetaPathBasedLoaderEntry const *module_entry) {
+ module___main__ = module;
+
+#if defined(_NUITKA_EXE) || PYTHON_VERSION >= 0x300
+ static bool _init_done = false;
+
+ // Modules might be imported repeatedly, which is to be ignored.
+ if (_init_done) {
+#ifdef _NUITKA_TRACE
+ PRINT_STRING("__main__: Skipping module init, already done.\n");
+#endif
+
+ return module___main__;
+ } else {
+ _init_done = true;
+ }
+#endif
+
+#ifdef _NUITKA_MODULE
+ // In case of a stand alone extension module, need to call initialization
+ // the init here because that's the first and only time we are going to get
+ // called here.
+
+ // Initialize the constant values used.
+ _initBuiltinModule();
+ createGlobalConstants();
+
+ /* Initialize the compiled types of Nuitka. */
+ _initCompiledCellType();
+ _initCompiledGeneratorType();
+ _initCompiledFunctionType();
+ _initCompiledMethodType();
+ _initCompiledFrameType();
+
+#if PYTHON_VERSION < 0x300
+ _initSlotCompare();
+#endif
+#if PYTHON_VERSION >= 0x270
+ _initSlotIternext();
+#endif
+
+ patchBuiltinModule();
+ patchTypeComparison();
+
+ // Enable meta path based loader if not already done.
+#ifdef _NUITKA_TRACE
+ PRINT_STRING("__main__: Calling setupMetaPathBasedLoader().\n");
+#endif
+ setupMetaPathBasedLoader();
+
+#if PYTHON_VERSION >= 0x300
+ patchInspectModule();
+#endif
+
+#endif
+
+ /* The constants only used by this module are created now. */
+#ifdef _NUITKA_TRACE
+ PRINT_STRING("__main__: Calling createModuleConstants().\n");
+#endif
+ createModuleConstants();
+
+ /* The code objects used by this module are created now. */
+#ifdef _NUITKA_TRACE
+ PRINT_STRING("__main__: Calling createModuleCodeObjects().\n");
+#endif
+ createModuleCodeObjects();
+
+ // PRINT_STRING("in init__main__\n");
+
+ // Create the module object first. There are no methods initially, all are
+ // added dynamically in actual code only. Also no "__doc__" is initially
+ // set at this time, as it could not contain NUL characters this way, they
+ // are instead set in early module code. No "self" for modules, we have no
+ // use for it.
+
+ moduledict___main__ = MODULE_DICT(module___main__);
+
+#ifdef _NUITKA_PLUGIN_DILL_ENABLED
+ {
+ PyObject *function_tables = PyObject_GetAttrString((PyObject *)builtin_module, "compiled_function_tables");
+ if (function_tables == NULL) {
+ DROP_ERROR_OCCURRED();
+ function_tables = PyDict_New();
+ }
+ PyObject_SetAttrString((PyObject *)builtin_module, "compiled_function_tables", function_tables);
+ PyObject *funcs = PyTuple_New(2);
+ PyTuple_SET_ITEM(funcs, 0, PyCFunction_New(&_method_def_reduce_compiled_function, NULL));
+ PyTuple_SET_ITEM(funcs, 1, PyCFunction_New(&_method_def_create_compiled_function, NULL));
+ PyDict_SetItemString(function_tables, module_full_name, funcs);
+ }
+#endif
+
+ // Set "__compiled__" to what version information we have.
+ UPDATE_STRING_DICT0(
+ moduledict___main__,
+ (Nuitka_StringObject *)const_str_plain___compiled__,
+ Nuitka_dunder_compiled_value
+ );
+
+ // Update "__package__" value to what it ought to be.
+ {
+#if 0
+ UPDATE_STRING_DICT0(
+ moduledict___main__,
+ (Nuitka_StringObject *)const_str_plain___package__,
+ const_str_empty
+ );
+#elif 0
+ PyObject *module_name = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain___name__);
+
+ UPDATE_STRING_DICT0(
+ moduledict___main__,
+ (Nuitka_StringObject *)const_str_plain___package__,
+ module_name
+ );
+#else
+
+#if PYTHON_VERSION < 0x300
+ PyObject *module_name = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain___name__);
+ char const *module_name_cstr = PyString_AS_STRING(module_name);
+
+ char const *last_dot = strrchr(module_name_cstr, '.');
+
+ if (last_dot != NULL) {
+ UPDATE_STRING_DICT1(
+ moduledict___main__,
+ (Nuitka_StringObject *)const_str_plain___package__,
+ PyString_FromStringAndSize(module_name_cstr, last_dot - module_name_cstr)
+ );
+ }
+#else
+ PyObject *module_name = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain___name__);
+ Py_ssize_t dot_index = PyUnicode_Find(module_name, const_str_dot, 0, PyUnicode_GetLength(module_name), -1);
+
+ if (dot_index != -1) {
+ UPDATE_STRING_DICT1(
+ moduledict___main__,
+ (Nuitka_StringObject *)const_str_plain___package__,
+ PyUnicode_Substring(module_name, 0, dot_index)
+ );
+ }
+#endif
+#endif
+ }
+
+ CHECK_OBJECT(module___main__);
+
+ // For deep importing of a module we need to have "__builtins__", so we set
+ // it ourselves in the same way than CPython does. Note: This must be done
+ // before the frame object is allocated, or else it may fail.
+
+ if (GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain___builtins__) == NULL) {
+ PyObject *value = (PyObject *)builtin_module;
+
+ // Check if main module, not a dict then but the module itself.
+#if !defined(_NUITKA_EXE) || !1
+ value = PyModule_GetDict(value);
+#endif
+
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)const_str_plain___builtins__, value);
+ }
+
+#if PYTHON_VERSION >= 0x300
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)const_str_plain___loader__, (PyObject *)&Nuitka_Loader_Type);
+#endif
+
+#if PYTHON_VERSION >= 0x340
+// Set the "__spec__" value
+
+#if 1
+ // Main modules just get "None" as spec.
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)const_str_plain___spec__, Py_None);
+#else
+ // Other modules get a "ModuleSpec" from the standard mechanism.
+ {
+ PyObject *bootstrap_module = getImportLibBootstrapModule();
+ CHECK_OBJECT(bootstrap_module);
+
+ PyObject *_spec_from_module = PyObject_GetAttrString(bootstrap_module, "_spec_from_module");
+ CHECK_OBJECT(_spec_from_module);
+
+ PyObject *spec_value = CALL_FUNCTION_WITH_SINGLE_ARG(_spec_from_module, module___main__);
+ Py_DECREF(_spec_from_module);
+
+ // We can assume this to never fail, or else we are in trouble anyway.
+ // CHECK_OBJECT(spec_value);
+
+ if (spec_value == NULL) {
+ PyErr_PrintEx(0);
+ abort();
+ }
+
+// Mark the execution in the "__spec__" value.
+ SET_ATTRIBUTE(spec_value, const_str_plain__initializing, Py_True);
+
+ UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)const_str_plain___spec__, spec_value);
+ }
+#endif
+#endif
+
+ // Temp variables if any
+ struct Nuitka_FrameObject *frame_57d06e5a2f4c3f4cc637c9312f5e9944;
+ NUITKA_MAY_BE_UNUSED char const *type_description_1 = NULL;
+ NUITKA_MAY_BE_UNUSED nuitka_void tmp_unused;
+ PyObject *exception_type = NULL;
+ PyObject *exception_value = NULL;
+ PyTracebackObject *exception_tb = NULL;
+ NUITKA_MAY_BE_UNUSED int exception_lineno = 0;
+
+ // Module code.
+ // Frame without reuse.
+ frame_57d06e5a2f4c3f4cc637c9312f5e9944 = MAKE_MODULE_FRAME(codeobj_57d06e5a2f4c3f4cc637c9312f5e9944, module___main__);
+
+ // Push the new frame as the currently active one, and we should be exclusively
+ // owning it.
+ pushFrameStack(frame_57d06e5a2f4c3f4cc637c9312f5e9944);
+ assert(Py_REFCNT(frame_57d06e5a2f4c3f4cc637c9312f5e9944) == 2);
+
+ // Framed code:
+ {
+ PyObject *tmp_imported_value_1;
+ frame_57d06e5a2f4c3f4cc637c9312f5e9944->m_frame.f_lineno = 1;
+ tmp_imported_value_1 = IMPORT_HARD_SITE();
+ if (tmp_imported_value_1 == NULL) {
+ assert(ERROR_OCCURRED());
+
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+
+ exception_lineno = 1;
+
+ goto frame_exception_exit_1;
+ }
+ }
+ {
+ PyObject *tmp_assign_source_1;
+ tmp_assign_source_1 = Py_None;
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[0], tmp_assign_source_1);
+ }
+ {
+ PyObject *tmp_assign_source_2;
+ tmp_assign_source_2 = mod_consts[1];
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[2], tmp_assign_source_2);
+ }
+ {
+ PyObject *tmp_assign_source_3;
+ tmp_assign_source_3 = Py_None;
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[3], tmp_assign_source_3);
+ }
+ {
+ PyObject *tmp_assign_source_4;
+ tmp_assign_source_4 = PyDict_New();
+ UPDATE_STRING_DICT1(moduledict___main__, (Nuitka_StringObject *)mod_consts[4], tmp_assign_source_4);
+ }
+ {
+ PyObject *tmp_assign_source_5;
+ frame_57d06e5a2f4c3f4cc637c9312f5e9944->m_frame.f_lineno = 1;
+ tmp_assign_source_5 = IMPORT_HARD_OS();
+ assert(!(tmp_assign_source_5 == NULL));
+ UPDATE_STRING_DICT0(moduledict___main__, (Nuitka_StringObject *)mod_consts[5], tmp_assign_source_5);
+ }
+ {
+ PyObject *tmp_called_instance_1;
+ PyObject *tmp_call_result_1;
+ tmp_called_instance_1 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[5]);
+
+ if (unlikely(tmp_called_instance_1 == NULL)) {
+ tmp_called_instance_1 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[5]);
+ }
+
+ assert(!(tmp_called_instance_1 == NULL));
+ frame_57d06e5a2f4c3f4cc637c9312f5e9944->m_frame.f_lineno = 2;
+ tmp_call_result_1 = CALL_METHOD_WITH_ARGS1(
+ tmp_called_instance_1,
+ mod_consts[6],
+ &PyTuple_GET_ITEM(mod_consts[7], 0)
+ );
+
+ if (tmp_call_result_1 == NULL) {
+ assert(ERROR_OCCURRED());
+
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+
+ exception_lineno = 2;
+
+ goto frame_exception_exit_1;
+ }
+ Py_DECREF(tmp_call_result_1);
+ }
+ {
+ PyObject *tmp_called_instance_2;
+ PyObject *tmp_call_result_2;
+ tmp_called_instance_2 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)mod_consts[5]);
+
+ if (unlikely(tmp_called_instance_2 == NULL)) {
+ tmp_called_instance_2 = GET_MODULE_VARIABLE_VALUE_FALLBACK(mod_consts[5]);
+ }
+
+ if (tmp_called_instance_2 == NULL) {
+ assert(ERROR_OCCURRED());
+
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+
+ exception_lineno = 3;
+
+ goto frame_exception_exit_1;
+ }
+ frame_57d06e5a2f4c3f4cc637c9312f5e9944->m_frame.f_lineno = 3;
+ tmp_call_result_2 = CALL_METHOD_WITH_ARGS1(
+ tmp_called_instance_2,
+ mod_consts[6],
+ &PyTuple_GET_ITEM(mod_consts[8], 0)
+ );
+
+ if (tmp_call_result_2 == NULL) {
+ assert(ERROR_OCCURRED());
+
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+
+ exception_lineno = 3;
+
+ goto frame_exception_exit_1;
+ }
+ Py_DECREF(tmp_call_result_2);
+ }
+
+ // Restore frame exception if necessary.
+#if 0
+ RESTORE_FRAME_EXCEPTION(frame_57d06e5a2f4c3f4cc637c9312f5e9944);
+#endif
+ popFrameStack();
+
+ assertFrameObject(frame_57d06e5a2f4c3f4cc637c9312f5e9944);
+
+ goto frame_no_exception_1;
+
+ frame_exception_exit_1:;
+#if 0
+ RESTORE_FRAME_EXCEPTION(frame_57d06e5a2f4c3f4cc637c9312f5e9944);
+#endif
+
+ if (exception_tb == NULL) {
+ exception_tb = MAKE_TRACEBACK(frame_57d06e5a2f4c3f4cc637c9312f5e9944, exception_lineno);
+ } else if (exception_tb->tb_frame != &frame_57d06e5a2f4c3f4cc637c9312f5e9944->m_frame) {
+ exception_tb = ADD_TRACEBACK(exception_tb, frame_57d06e5a2f4c3f4cc637c9312f5e9944, exception_lineno);
+ }
+
+ // Put the previous frame back on top.
+ popFrameStack();
+
+ // Return the error.
+ goto module_exception_exit;
+
+ frame_no_exception_1:;
+
+ return module___main__;
+ module_exception_exit:
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+ return NULL;
+}
+
diff --git a/mtube.build/module.__main__.const b/mtube.build/module.__main__.const
new file mode 100644
index 0000000..192d868
Binary files /dev/null and b/mtube.build/module.__main__.const differ
diff --git a/mtube.build/module.__main__.o b/mtube.build/module.__main__.o
new file mode 100644
index 0000000..4fa5104
Binary files /dev/null and b/mtube.build/module.__main__.o differ
diff --git a/mtube.build/scons-report.txt b/mtube.build/scons-report.txt
new file mode 100644
index 0000000..1498f7d
--- /dev/null
+++ b/mtube.build/scons-report.txt
@@ -0,0 +1,71 @@
+AS=as
+CC=C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe "C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe"
+CCACHE_DIR=C:\Users\blzza\AppData\Local\Nuitka\Nuitka\Cache\ccache
+CCACHE_LOGFILE=C:\Users\blzza\OneDrive\Documents\mytube\mtube.build\ccache-15656.txt
+CCCOM=$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES
+CFILESUFFIX=.c
+CPPDEFINES=['_WIN32_WINNT=0x0501', '__NUITKA_NO_ASSERT__', 'MS_WIN64', '_NUITKA_CONSTANTS_FROM_RESOURCE', '_NUITKA_FROZEN=0', '_NUITKA_EXE']
+CPPDEFPREFIX=-D
+CPPDEFSUFFIX=
+CPPPATH=['C:\\Users\\blzza\\AppData\\Local\\Programs\\Python\\Python39\\include', '.', 'C:\\Users\\blzza\\venv\\lib\\SITE-P~1\\nuitka\\build\\include', 'C:\\Users\\blzza\\venv\\lib\\SITE-P~1\\nuitka\\build\\static_src']
+CPPSUFFIXES=['.c', '.C', '.cxx', '.cpp', '.c++', '.cc', '.h', '.H', '.hxx', '.hpp', '.hh', '.F', '.fpp', '.FPP', '.m', '.mm', '.S', '.spp', '.SPP', '.sx']
+CXX=C:\Users\blzza\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache.exe "C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe"
+CXXCOM=$CXX -o $TARGET -c $CXXFLAGS $CCFLAGS $_CCCOMCOM $SOURCES
+CXXFILESUFFIX=.cc
+HOST_ARCH=x86_64
+HOST_OS=win32
+INCPREFIX=-I
+INCSUFFIX=
+LDMODULE=$SHLINK
+LDMODULEFLAGS=$SHLINKFLAGS
+LDMODULENOVERSIONSYMLINKS=$SHLIBNOVERSIONSYMLINKS
+LDMODULEPREFIX=$SHLIBPREFIX
+LDMODULESUFFIX=$SHLIBSUFFIX
+LDMODULEVERSION=$SHLIBVERSION
+LDMODULEVERSIONFLAGS=$SHLIBVERSIONFLAGS
+LIBDIRPREFIX=-L
+LIBDIRSUFFIX=
+LIBLINKPREFIX=-l
+LIBLINKSUFFIX=
+LIBPATH=['C:\\Users\\blzza\\AppData\\Local\\Programs\\Python\\Python39\\libs']
+LIBPREFIX=lib
+LIBPREFIXES=['$LIBPREFIX']
+LIBS=['m', 'python39']
+LIBSUFFIX=.a
+LIBSUFFIXES=['$LIBSUFFIX']
+LINK=C:\Users\blzza\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\mingw64\bin\gcc.exe
+LINKCOM=$LINK -o $TARGET $LINKFLAGS $__RPATH @".\@link_input.txt" $_LIBDIRFLAGS $_LIBFLAGS
+OBJPREFIX=
+OBJSUFFIX=.o
+PLATFORM=win32
+PROGPREFIX=
+PROGSUFFIX=.exe
+RC=windres
+RCCOM=$RC $_CPPDEFFLAGS $RCINCFLAGS ${RCINCPREFIX} ${SOURCE.dir} $RCFLAGS -i $SOURCE -o $TARGET
+RCINCFLAGS=$( ${_concat(RCINCPREFIX, CPPPATH, RCINCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)
+RCINCPREFIX=--include-dir
+RCINCSUFFIX=
+RPATHPREFIX=-Wl,-rpath=
+RPATHSUFFIX=
+SHCC=$CC
+SHCCCOM=$SHCC -o $TARGET -c $SHCFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES
+SHCXX=$CXX
+SHCXXCOM=$SHCXX -o $TARGET -c $SHCXXFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES
+SHELL=C:\WINDOWS\System32\cmd.exe
+SHLIBPREFIX=
+SHLIBSUFFIX=.dll
+SHLINK=$LINK
+SHOBJPREFIX=$OBJPREFIX
+SHOBJSUFFIX=.o
+TARGET_ARCH=x86_64
+TEMPFILEARGJOIN=
+TEMPFILEPREFIX=@
+TOOLS=['mingw', 'gcc', 'g++', 'gnulink']
+WIN32DEFPREFIX=
+WIN32DEFSUFFIX=.def
+WINDOWSDEFPREFIX=${WIN32DEFPREFIX}
+WINDOWSDEFSUFFIX=${WIN32DEFSUFFIX}
+gcc_mode=True
+clang_mode=False
+msvc_mode=False
+clangcl_mode=False
diff --git a/mtube.build/static_src/CompiledCellType.c b/mtube.build/static_src/CompiledCellType.c
new file mode 100644
index 0000000..3bbccd0
--- /dev/null
+++ b/mtube.build/static_src/CompiledCellType.c
@@ -0,0 +1,245 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "nuitka/prelude.h"
+
+#include "nuitka/freelists.h"
+
+#define MAX_CELL_FREE_LIST_COUNT 1000
+static struct Nuitka_CellObject *free_list_cells = NULL;
+static int free_list_cells_count = 0;
+
+static void Nuitka_Cell_tp_dealloc(struct Nuitka_CellObject *cell) {
+ Nuitka_GC_UnTrack(cell);
+ Py_XDECREF(cell->ob_ref);
+
+ releaseToFreeList(free_list_cells, cell, MAX_CELL_FREE_LIST_COUNT);
+}
+
+#if PYTHON_VERSION < 0x300
+static int Nuitka_Cell_tp_compare(struct Nuitka_CellObject *cell_a, struct Nuitka_CellObject *cell_b) {
+ /* Empty cells compare specifically different. */
+ if (cell_a->ob_ref == NULL) {
+ if (cell_b->ob_ref == NULL) {
+ return 0;
+ }
+
+ return -1;
+ }
+
+ if (cell_b->ob_ref == NULL) {
+ return 1;
+ }
+
+ return PyObject_Compare(cell_a->ob_ref, cell_b->ob_ref);
+}
+#else
+static PyObject *Nuitka_Cell_tp_richcompare(PyObject *a, PyObject *b, int op) {
+ PyObject *result;
+
+ CHECK_OBJECT(a);
+ CHECK_OBJECT(b);
+
+ if (unlikely(!Nuitka_Cell_Check(a) || !Nuitka_Cell_Check(b))) {
+ result = Py_NotImplemented;
+ Py_INCREF(result);
+
+ return result;
+ }
+
+ /* Now just dereference, and compare from there by contents. */
+ a = ((struct Nuitka_CellObject *)a)->ob_ref;
+ b = ((struct Nuitka_CellObject *)b)->ob_ref;
+
+ if (a != NULL && b != NULL) {
+ return PyObject_RichCompare(a, b, op);
+ }
+
+ int res = (b == NULL) - (a == NULL);
+ switch (op) {
+ case Py_EQ:
+ result = BOOL_FROM(res == 0);
+ break;
+ case Py_NE:
+ result = BOOL_FROM(res != 0);
+ break;
+ case Py_LE:
+ result = BOOL_FROM(res <= 0);
+ break;
+ case Py_GE:
+ result = BOOL_FROM(res >= 0);
+ break;
+ case Py_LT:
+ result = BOOL_FROM(res < 0);
+ break;
+ case Py_GT:
+ result = BOOL_FROM(res > 0);
+ break;
+ default:
+ PyErr_BadArgument();
+ return NULL;
+ }
+
+ Py_INCREF(result);
+ return result;
+}
+
+#endif
+
+static PyObject *Nuitka_Cell_tp_repr(struct Nuitka_CellObject *cell) {
+ if (cell->ob_ref == NULL) {
+#if PYTHON_VERSION < 0x300
+ return PyString_FromFormat(
+#else
+ return PyUnicode_FromFormat(
+#endif
+ "", cell);
+ } else {
+#if PYTHON_VERSION < 0x300
+ return PyString_FromFormat(
+#else
+ return PyUnicode_FromFormat(
+#endif
+ "", cell, cell->ob_ref->ob_type->tp_name, cell->ob_ref);
+ }
+}
+
+static int Nuitka_Cell_tp_traverse(struct Nuitka_CellObject *cell, visitproc visit, void *arg) {
+ Py_VISIT(cell->ob_ref);
+
+ return 0;
+}
+
+static int Nuitka_Cell_tp_clear(struct Nuitka_CellObject *cell) {
+ Py_CLEAR(cell->ob_ref);
+
+ return 0;
+}
+
+static PyObject *Nuitka_Cell_get_contents(struct Nuitka_CellObject *cell, void *closure) {
+ if (cell->ob_ref == NULL) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ValueError, "Cell is empty");
+ return NULL;
+ }
+
+ Py_INCREF(cell->ob_ref);
+ return cell->ob_ref;
+}
+
+#if PYTHON_VERSION >= 0x370
+static int Nuitka_Cell_set_contents(struct Nuitka_CellObject *cell, PyObject *value) {
+ PyObject *old = cell->ob_ref;
+ cell->ob_ref = value;
+ Py_XINCREF(value);
+ Py_XDECREF(old);
+
+ // Cannot fail.
+ return 0;
+}
+#endif
+
+static PyGetSetDef Nuitka_Cell_getsetlist[] = {
+#if PYTHON_VERSION < 0x370
+ {(char *)"cell_contents", (getter)Nuitka_Cell_get_contents, NULL, NULL},
+#else
+ {(char *)"cell_contents", (getter)Nuitka_Cell_get_contents, (setter)Nuitka_Cell_set_contents, NULL},
+#endif
+ {NULL}};
+
+PyTypeObject Nuitka_Cell_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0) "compiled_cell",
+ sizeof(struct Nuitka_CellObject),
+ 0,
+ (destructor)Nuitka_Cell_tp_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+#if PYTHON_VERSION < 0x300
+ (cmpfunc)Nuitka_Cell_tp_compare, /* tp_compare */
+#else
+ 0, /* tp_reserved */
+#endif
+ (reprfunc)Nuitka_Cell_tp_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)Nuitka_Cell_tp_traverse, /* tp_traverse */
+ (inquiry)Nuitka_Cell_tp_clear, /* tp_clear */
+#if PYTHON_VERSION < 0x300
+ 0, /* tp_richcompare */
+#else
+ Nuitka_Cell_tp_richcompare, /* tp_richcompare */
+#endif
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ Nuitka_Cell_getsetlist, /* tp_getset */
+};
+
+void _initCompiledCellType(void) { PyType_Ready(&Nuitka_Cell_Type); }
+
+struct Nuitka_CellObject *Nuitka_Cell_Empty(void) {
+ struct Nuitka_CellObject *result;
+
+ allocateFromFreeListFixed(free_list_cells, struct Nuitka_CellObject, Nuitka_Cell_Type);
+
+ result->ob_ref = NULL;
+
+ Nuitka_GC_Track(result);
+
+ return result;
+}
+
+struct Nuitka_CellObject *Nuitka_Cell_New0(PyObject *value) {
+ CHECK_OBJECT(value);
+
+ struct Nuitka_CellObject *result;
+
+ allocateFromFreeListFixed(free_list_cells, struct Nuitka_CellObject, Nuitka_Cell_Type);
+
+ result->ob_ref = value;
+ Py_INCREF(value);
+
+ Nuitka_GC_Track(result);
+
+ return result;
+}
+
+struct Nuitka_CellObject *Nuitka_Cell_New1(PyObject *value) {
+ CHECK_OBJECT(value);
+
+ struct Nuitka_CellObject *result;
+
+ allocateFromFreeListFixed(free_list_cells, struct Nuitka_CellObject, Nuitka_Cell_Type);
+
+ result->ob_ref = value;
+
+ Nuitka_GC_Track(result);
+
+ return result;
+}
\ No newline at end of file
diff --git a/mtube.build/static_src/CompiledCellType.o b/mtube.build/static_src/CompiledCellType.o
new file mode 100644
index 0000000..af4e9ac
Binary files /dev/null and b/mtube.build/static_src/CompiledCellType.o differ
diff --git a/mtube.build/static_src/CompiledCodeHelpers.c b/mtube.build/static_src/CompiledCodeHelpers.c
new file mode 100644
index 0000000..7089a8c
--- /dev/null
+++ b/mtube.build/static_src/CompiledCodeHelpers.c
@@ -0,0 +1,2128 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/* Implementations of compiled code helpers.
+
+ * The definition of a compiled code helper is that it's being used in
+ * generated C code and provides part of the operations implementation.
+ *
+ * Currently we also have standalone mode related code here, patches to CPython
+ * runtime that we do, and e.g. the built-in module. TODO: Move these to their
+ * own files for clarity.
+ */
+
+#include "nuitka/prelude.h"
+
+#include "HelpersBuiltin.c"
+#include "HelpersClasses.c"
+#include "HelpersDictionaries.c"
+#include "HelpersExceptions.c"
+#include "HelpersHeapStorage.c"
+#include "HelpersImport.c"
+#include "HelpersImportHard.c"
+#include "HelpersRaising.c"
+#include "HelpersStrings.c"
+
+void copyStringSafe(char *buffer, char const *source, size_t buffer_size) {
+ if (strlen(source) >= buffer_size) {
+ abort();
+ }
+ strcpy(buffer, source);
+}
+
+void copyStringSafeN(char *buffer, char const *source, size_t n, size_t buffer_size) {
+ if (n >= buffer_size - 1) {
+ abort();
+ }
+ strncpy(buffer, source, n);
+ buffer[n] = 0;
+}
+
+void appendStringSafe(char *buffer, char const *source, size_t buffer_size) {
+ if (strlen(source) + strlen(buffer) >= buffer_size) {
+ abort();
+ }
+ strcat(buffer, source);
+}
+
+void appendCharSafe(char *buffer, char c, size_t buffer_size) {
+ char source[2] = {c, 0};
+
+ appendStringSafe(buffer, source, buffer_size);
+}
+
+void appendWStringSafeW(wchar_t *target, wchar_t const *source, size_t buffer_size) {
+ while (*target != 0) {
+ target++;
+ buffer_size -= 1;
+ }
+
+ while (*source != 0) {
+ if (buffer_size < 1) {
+ abort();
+ }
+
+ *target++ = *source++;
+ buffer_size -= 1;
+ }
+
+ *target = 0;
+}
+
+void appendCharSafeW(wchar_t *target, char c, size_t buffer_size) {
+ while (*target != 0) {
+ target++;
+ buffer_size -= 1;
+ }
+
+ if (buffer_size < 1) {
+ abort();
+ }
+
+ target += wcslen(target);
+ char buffer_c[2] = {c, 0};
+ size_t res = mbstowcs(target, buffer_c, 2);
+ assert(res == 1);
+}
+
+void appendStringSafeW(wchar_t *target, char const *source, size_t buffer_size) {
+ while (*target != 0) {
+ target++;
+ buffer_size -= 1;
+ }
+
+ while (*source != 0) {
+ appendCharSafeW(target, *source, buffer_size);
+ source++;
+ buffer_size -= 1;
+ }
+}
+
+#if PYTHON_VERSION < 0x300
+
+static Py_ssize_t ESTIMATE_RANGE(long low, long high, long step) {
+ if (low >= high) {
+ return 0;
+ } else {
+ return (high - low - 1) / step + 1;
+ }
+}
+
+static PyObject *_BUILTIN_RANGE_INT3(long low, long high, long step) {
+ assert(step != 0);
+
+ Py_ssize_t size;
+
+ if (step > 0) {
+ size = ESTIMATE_RANGE(low, high, step);
+ } else {
+ size = ESTIMATE_RANGE(high, low, -step);
+ }
+
+ PyObject *result = PyList_New(size);
+
+ long current = low;
+
+ for (int i = 0; i < size; i++) {
+ PyList_SET_ITEM(result, i, PyInt_FromLong(current));
+ current += step;
+ }
+
+ return result;
+}
+
+static PyObject *_BUILTIN_RANGE_INT2(long low, long high) { return _BUILTIN_RANGE_INT3(low, high, 1); }
+
+static PyObject *_BUILTIN_RANGE_INT(long boundary) { return _BUILTIN_RANGE_INT2(0, boundary); }
+
+static PyObject *TO_RANGE_ARG(PyObject *value, char const *name) {
+ if (likely(PyInt_Check(value) || PyLong_Check(value))) {
+ Py_INCREF(value);
+ return value;
+ }
+
+ PyTypeObject *type = Py_TYPE(value);
+ PyNumberMethods *tp_as_number = type->tp_as_number;
+
+ // Everything that casts to int is allowed.
+ if (
+#if PYTHON_VERSION >= 0x270
+ PyFloat_Check(value) ||
+#endif
+ tp_as_number == NULL || tp_as_number->nb_int == NULL) {
+ PyErr_Format(PyExc_TypeError, "range() integer %s argument expected, got %s.", name, type->tp_name);
+ return NULL;
+ }
+
+ PyObject *result = tp_as_number->nb_int(value);
+
+ if (unlikely(result == NULL)) {
+ return NULL;
+ }
+
+ return result;
+}
+#endif
+
+#if PYTHON_VERSION < 0x300
+
+NUITKA_DEFINE_BUILTIN(range);
+
+PyObject *BUILTIN_RANGE(PyObject *boundary) {
+ PyObject *boundary_temp = TO_RANGE_ARG(boundary, "end");
+
+ if (unlikely(boundary_temp == NULL)) {
+ return NULL;
+ }
+
+ long start = PyInt_AsLong(boundary_temp);
+
+ if (start == -1 && ERROR_OCCURRED()) {
+ CLEAR_ERROR_OCCURRED();
+
+ NUITKA_ASSIGN_BUILTIN(range);
+
+ PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(NUITKA_ACCESS_BUILTIN(range), boundary_temp);
+
+ Py_DECREF(boundary_temp);
+
+ return result;
+ }
+ Py_DECREF(boundary_temp);
+
+ return _BUILTIN_RANGE_INT(start);
+}
+
+PyObject *BUILTIN_RANGE2(PyObject *low, PyObject *high) {
+ PyObject *low_temp = TO_RANGE_ARG(low, "start");
+
+ if (unlikely(low_temp == NULL)) {
+ return NULL;
+ }
+
+ PyObject *high_temp = TO_RANGE_ARG(high, "end");
+
+ if (unlikely(high_temp == NULL)) {
+ Py_DECREF(low_temp);
+ return NULL;
+ }
+
+ bool fallback = false;
+
+ long start = PyInt_AsLong(low_temp);
+
+ if (unlikely(start == -1 && ERROR_OCCURRED())) {
+ CLEAR_ERROR_OCCURRED();
+ fallback = true;
+ }
+
+ long end = PyInt_AsLong(high_temp);
+
+ if (unlikely(end == -1 && ERROR_OCCURRED())) {
+ CLEAR_ERROR_OCCURRED();
+ fallback = true;
+ }
+
+ if (fallback) {
+ PyObject *pos_args = PyTuple_New(2);
+ PyTuple_SET_ITEM(pos_args, 0, low_temp);
+ PyTuple_SET_ITEM(pos_args, 1, high_temp);
+
+ NUITKA_ASSIGN_BUILTIN(range);
+
+ PyObject *result = CALL_FUNCTION_WITH_POSARGS(NUITKA_ACCESS_BUILTIN(range), pos_args);
+
+ Py_DECREF(pos_args);
+
+ return result;
+ } else {
+ Py_DECREF(low_temp);
+ Py_DECREF(high_temp);
+
+ return _BUILTIN_RANGE_INT2(start, end);
+ }
+}
+
+PyObject *BUILTIN_RANGE3(PyObject *low, PyObject *high, PyObject *step) {
+ PyObject *low_temp = TO_RANGE_ARG(low, "start");
+
+ if (unlikely(low_temp == NULL)) {
+ return NULL;
+ }
+
+ PyObject *high_temp = TO_RANGE_ARG(high, "end");
+
+ if (unlikely(high_temp == NULL)) {
+ Py_DECREF(low_temp);
+ return NULL;
+ }
+
+ PyObject *step_temp = TO_RANGE_ARG(step, "step");
+
+ if (unlikely(high_temp == NULL)) {
+ Py_DECREF(low_temp);
+ Py_DECREF(high_temp);
+ return NULL;
+ }
+
+ bool fallback = false;
+
+ long start = PyInt_AsLong(low_temp);
+
+ if (unlikely(start == -1 && ERROR_OCCURRED())) {
+ CLEAR_ERROR_OCCURRED();
+ fallback = true;
+ }
+
+ long end = PyInt_AsLong(high_temp);
+
+ if (unlikely(end == -1 && ERROR_OCCURRED())) {
+ CLEAR_ERROR_OCCURRED();
+ fallback = true;
+ }
+
+ long step_long = PyInt_AsLong(step_temp);
+
+ if (unlikely(step_long == -1 && ERROR_OCCURRED())) {
+ CLEAR_ERROR_OCCURRED();
+ fallback = true;
+ }
+
+ if (fallback) {
+ PyObject *pos_args = PyTuple_New(3);
+ PyTuple_SET_ITEM(pos_args, 0, low_temp);
+ PyTuple_SET_ITEM(pos_args, 1, high_temp);
+ PyTuple_SET_ITEM(pos_args, 2, step_temp);
+
+ NUITKA_ASSIGN_BUILTIN(range);
+
+ PyObject *result = CALL_FUNCTION_WITH_POSARGS(NUITKA_ACCESS_BUILTIN(range), pos_args);
+
+ Py_DECREF(pos_args);
+
+ return result;
+ } else {
+ Py_DECREF(low_temp);
+ Py_DECREF(high_temp);
+ Py_DECREF(step_temp);
+
+ if (unlikely(step_long == 0)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ValueError, "range() step argument must not be zero");
+ return NULL;
+ }
+
+ return _BUILTIN_RANGE_INT3(start, end, step_long);
+ }
+}
+
+#endif
+
+#if PYTHON_VERSION < 0x300
+
+/* Same as CPython2: */
+static unsigned long getLengthOfRange(long lo, long hi, long step) {
+ assert(step != 0);
+
+ if (step > 0 && lo < hi) {
+ return 1UL + (hi - 1UL - lo) / step;
+ } else if (step < 0 && lo > hi) {
+ return 1UL + (lo - 1UL - hi) / (0UL - step);
+ } else {
+ return 0UL;
+ }
+}
+
+/* Create a "xrange" object from C long values. Used for constant ranges. */
+PyObject *MAKE_XRANGE(long start, long stop, long step) {
+ /* TODO: It would be sweet to calculate that on user side already. */
+ unsigned long n = getLengthOfRange(start, stop, step);
+
+ if (n > (unsigned long)LONG_MAX || (long)n > PY_SSIZE_T_MAX) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_OverflowError, "xrange() result has too many items");
+
+ return NULL;
+ }
+
+ struct _rangeobject2 *result = (struct _rangeobject2 *)PyObject_New(struct _rangeobject2, &PyRange_Type);
+ assert(result != NULL);
+
+ result->start = start;
+ result->len = (long)n;
+ result->step = step;
+
+ return (PyObject *)result;
+}
+
+#else
+
+/* Same as CPython3: */
+static PyObject *getLengthOfRange(PyObject *start, PyObject *stop, PyObject *step) {
+ int res = PyObject_RichCompareBool(step, const_int_0, Py_GT);
+
+ if (unlikely(res == -1)) {
+ return NULL;
+ }
+
+ PyObject *lo, *hi;
+
+ // Make sure we use step as a positive number.
+ if (res == 1) {
+ lo = start;
+ hi = stop;
+
+ Py_INCREF(step);
+ } else {
+ lo = stop;
+ hi = start;
+
+ step = PyNumber_Negative(step);
+
+ if (unlikely(step == NULL)) {
+ return NULL;
+ }
+
+ res = PyObject_RichCompareBool(step, const_int_0, Py_EQ);
+
+ if (unlikely(res == -1)) {
+ return NULL;
+ }
+
+ if (res == 1) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ValueError, "range() arg 3 must not be zero");
+
+ return NULL;
+ }
+ }
+
+ // Negative difference, we got zero length.
+ res = PyObject_RichCompareBool(lo, hi, Py_GE);
+
+ if (res != 0) {
+ Py_XDECREF(step);
+
+ if (res < 0) {
+ return NULL;
+ }
+
+ Py_INCREF(const_int_0);
+ return const_int_0;
+ }
+
+ PyObject *tmp1 = PyNumber_Subtract(hi, lo);
+
+ if (unlikely(tmp1 == NULL)) {
+ Py_DECREF(step);
+ return NULL;
+ }
+
+ PyObject *diff = PyNumber_Subtract(tmp1, const_int_pos_1);
+ Py_DECREF(tmp1);
+
+ if (unlikely(diff == NULL)) {
+ Py_DECREF(step);
+ Py_DECREF(tmp1);
+
+ return NULL;
+ }
+
+ tmp1 = PyNumber_FloorDivide(diff, step);
+ Py_DECREF(diff);
+ Py_DECREF(step);
+
+ if (unlikely(tmp1 == NULL)) {
+ return NULL;
+ }
+
+ PyObject *result = PyNumber_Add(tmp1, const_int_pos_1);
+ Py_DECREF(tmp1);
+
+ return result;
+}
+
+static PyObject *MAKE_XRANGE(PyObject *start, PyObject *stop, PyObject *step) {
+ start = PyNumber_Index(start);
+ if (unlikely(start == NULL)) {
+ return NULL;
+ }
+ stop = PyNumber_Index(stop);
+ if (unlikely(stop == NULL)) {
+ return NULL;
+ }
+ step = PyNumber_Index(step);
+ if (unlikely(step == NULL)) {
+ return NULL;
+ }
+
+ PyObject *length = getLengthOfRange(start, stop, step);
+ if (unlikely(length == NULL)) {
+ return NULL;
+ }
+
+ struct _rangeobject3 *result = (struct _rangeobject3 *)PyObject_New(struct _rangeobject3, &PyRange_Type);
+ assert(result != NULL);
+
+ result->start = start;
+ result->stop = stop;
+ result->step = step;
+ result->length = length;
+
+ return (PyObject *)result;
+}
+#endif
+
+/* Built-in xrange (Python2) or xrange (Python3) with one argument. */
+PyObject *BUILTIN_XRANGE1(PyObject *high) {
+#if PYTHON_VERSION < 0x300
+ if (unlikely(PyFloat_Check(high))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "integer argument expected, got float");
+
+ return NULL;
+ }
+
+ long int_high = PyInt_AsLong(high);
+
+ if (unlikely(int_high == -1 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ return MAKE_XRANGE(0, int_high, 1);
+#else
+ PyObject *stop = PyNumber_Index(high);
+
+ if (unlikely(stop == NULL)) {
+ return NULL;
+ }
+
+ struct _rangeobject3 *result = (struct _rangeobject3 *)PyObject_New(struct _rangeobject3, &PyRange_Type);
+ assert(result != NULL);
+
+ result->start = const_int_0;
+ Py_INCREF(const_int_0);
+ result->stop = stop;
+ result->step = const_int_pos_1;
+ Py_INCREF(const_int_pos_1);
+
+ result->length = stop;
+ Py_INCREF(stop);
+
+ return (PyObject *)result;
+#endif
+}
+
+/* Built-in xrange (Python2) or xrange (Python3) with two arguments. */
+PyObject *BUILTIN_XRANGE2(PyObject *low, PyObject *high) {
+#if PYTHON_VERSION < 0x300
+ if (unlikely(PyFloat_Check(low))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "integer argument expected, got float");
+
+ return NULL;
+ }
+
+ long int_low = PyInt_AsLong(low);
+
+ if (unlikely(int_low == -1 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ if (unlikely(PyFloat_Check(high))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "integer argument expected, got float");
+
+ return NULL;
+ }
+
+ long int_high = PyInt_AsLong(high);
+
+ if (unlikely(int_high == -1 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ return MAKE_XRANGE(int_low, int_high, 1);
+#else
+ return MAKE_XRANGE(low, high, const_int_pos_1);
+#endif
+}
+
+/* Built-in xrange (Python2) or xrange (Python3) with three arguments. */
+PyObject *BUILTIN_XRANGE3(PyObject *low, PyObject *high, PyObject *step) {
+#if PYTHON_VERSION < 0x300
+ if (unlikely(PyFloat_Check(low))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "integer argument expected, got float");
+
+ return NULL;
+ }
+
+ long int_low = PyInt_AsLong(low);
+
+ if (unlikely(int_low == -1 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ if (unlikely(PyFloat_Check(high))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "integer argument expected, got float");
+
+ return NULL;
+ }
+
+ long int_high = PyInt_AsLong(high);
+
+ if (unlikely(int_high == -1 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ if (unlikely(PyFloat_Check(step))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "integer argument expected, got float");
+
+ return NULL;
+ }
+
+ long int_step = PyInt_AsLong(step);
+
+ if (unlikely(int_step == -1 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ if (unlikely(int_step == 0)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ValueError, "range() arg 3 must not be zero");
+
+ return NULL;
+ }
+
+ return MAKE_XRANGE(int_low, int_high, int_step);
+#else
+ return MAKE_XRANGE(low, high, step);
+#endif
+}
+
+PyObject *BUILTIN_ALL(PyObject *value) {
+ CHECK_OBJECT(value);
+
+ PyObject *it = PyObject_GetIter(value);
+
+ if (unlikely((it == NULL))) {
+ return NULL;
+ }
+
+ iternextfunc iternext = Py_TYPE(it)->tp_iternext;
+ for (;;) {
+ PyObject *item = iternext(it);
+
+ if (unlikely((item == NULL)))
+ break;
+ int cmp = PyObject_IsTrue(item);
+ Py_DECREF(item);
+ if (unlikely(cmp < 0)) {
+ Py_DECREF(it);
+ return NULL;
+ }
+ if (cmp == 0) {
+ Py_DECREF(it);
+ Py_INCREF(Py_False);
+ return Py_False;
+ }
+ }
+
+ Py_DECREF(it);
+ if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED())) {
+ return NULL;
+ }
+
+ Py_INCREF(Py_True);
+ return Py_True;
+}
+
+PyObject *BUILTIN_LEN(PyObject *value) {
+ CHECK_OBJECT(value);
+
+ Py_ssize_t res = PyObject_Size(value);
+
+ if (unlikely(res < 0 && ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ return PyInt_FromSsize_t(res);
+}
+
+PyObject *BUILTIN_ANY(PyObject *value) {
+ CHECK_OBJECT(value);
+
+ PyObject *it = PyObject_GetIter(value);
+
+ if (unlikely((it == NULL))) {
+ return NULL;
+ }
+
+ iternextfunc iternext = Py_TYPE(it)->tp_iternext;
+ for (;;) {
+ PyObject *item = iternext(it);
+
+ if (unlikely((item == NULL)))
+ break;
+ int cmp = PyObject_IsTrue(item);
+ Py_DECREF(item);
+ if (unlikely(cmp < 0)) {
+ Py_DECREF(it);
+ return NULL;
+ }
+ if (cmp > 0) {
+ Py_DECREF(it);
+ Py_INCREF(Py_True);
+ return Py_True;
+ }
+ }
+
+ Py_DECREF(it);
+ if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED())) {
+ return NULL;
+ }
+
+ Py_INCREF(Py_False);
+ return Py_False;
+}
+
+PyObject *BUILTIN_ABS(PyObject *o) {
+ CHECK_OBJECT(o);
+
+ PyNumberMethods *m = o->ob_type->tp_as_number;
+ if (likely(m && m->nb_absolute)) {
+ return m->nb_absolute(o);
+ }
+
+ return PyErr_Format(PyExc_TypeError, "bad operand type for abs(): '%s'", Py_TYPE(o)->tp_name);
+}
+
+NUITKA_DEFINE_BUILTIN(format);
+
+PyObject *BUILTIN_FORMAT(PyObject *value, PyObject *format_spec) {
+ CHECK_OBJECT(value);
+ CHECK_OBJECT(format_spec);
+
+ NUITKA_ASSIGN_BUILTIN(format);
+
+ PyObject *args[2] = {value, format_spec};
+
+ return CALL_FUNCTION_WITH_ARGS2(NUITKA_ACCESS_BUILTIN(format), args);
+}
+
+// Helper functions for print. Need to play nice with Python softspace
+// behaviour.
+
+#if PYTHON_VERSION >= 0x300
+NUITKA_DEFINE_BUILTIN(print);
+#endif
+
+bool PRINT_NEW_LINE_TO(PyObject *file) {
+#if PYTHON_VERSION < 0x300
+ if (file == NULL || file == Py_None) {
+ file = GET_STDOUT();
+
+ if (unlikely(file == NULL)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "lost sys.stdout");
+ return false;
+ }
+ }
+
+ // need to hold a reference to the file or else __getattr__ may release
+ // "file" in the mean time.
+ Py_INCREF(file);
+
+ if (unlikely(PyFile_WriteString("\n", file) == -1)) {
+ Py_DECREF(file);
+ return false;
+ }
+
+ PyFile_SoftSpace(file, 0);
+ CHECK_OBJECT(file);
+
+ Py_DECREF(file);
+ return true;
+#else
+ NUITKA_ASSIGN_BUILTIN(print);
+
+ PyObject *exception_type, *exception_value;
+ PyTracebackObject *exception_tb;
+
+ FETCH_ERROR_OCCURRED_UNTRACED(&exception_type, &exception_value, &exception_tb);
+
+ PyObject *result;
+
+ if (likely(file == NULL)) {
+ result = CALL_FUNCTION_NO_ARGS(NUITKA_ACCESS_BUILTIN(print));
+ } else {
+ PyObject *kw_args = PyDict_New();
+ PyDict_SetItem(kw_args, const_str_plain_file, GET_STDOUT());
+
+ result = CALL_FUNCTION_WITH_KEYARGS(NUITKA_ACCESS_BUILTIN(print), kw_args);
+
+ Py_DECREF(kw_args);
+ }
+
+ Py_XDECREF(result);
+
+ RESTORE_ERROR_OCCURRED_UNTRACED(exception_type, exception_value, exception_tb);
+
+ return result != NULL;
+#endif
+}
+
+bool PRINT_ITEM_TO(PyObject *file, PyObject *object) {
+// The print built-in function cannot replace "softspace" behavior of CPython
+// print statement, so this code is really necessary.
+#if PYTHON_VERSION < 0x300
+ if (file == NULL || file == Py_None) {
+ file = GET_STDOUT();
+
+ if (unlikely(file == NULL)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "lost sys.stdout");
+ return false;
+ }
+ }
+
+ CHECK_OBJECT(file);
+ CHECK_OBJECT(object);
+
+ // need to hold a reference to the file or else "__getattr__" code may
+ // release "file" in the mean time.
+ Py_INCREF(file);
+
+ // Check for soft space indicator
+ if (PyFile_SoftSpace(file, 0)) {
+ if (unlikely(PyFile_WriteString(" ", file) == -1)) {
+ Py_DECREF(file);
+ return false;
+ }
+ }
+
+ if (unlikely(PyFile_WriteObject(object, file, Py_PRINT_RAW) == -1)) {
+ Py_DECREF(file);
+ return false;
+ }
+
+ if (PyString_Check(object)) {
+ char *buffer;
+ Py_ssize_t length;
+
+#ifndef __NUITKA_NO_ASSERT__
+ int status =
+#endif
+ PyString_AsStringAndSize(object, &buffer, &length);
+ assert(status != -1);
+
+ if (length == 0 || !isspace(Py_CHARMASK(buffer[length - 1])) || buffer[length - 1] == ' ') {
+ PyFile_SoftSpace(file, 1);
+ }
+ } else if (PyUnicode_Check(object)) {
+ Py_UNICODE *buffer = PyUnicode_AS_UNICODE(object);
+ Py_ssize_t length = PyUnicode_GET_SIZE(object);
+
+ if (length == 0 || !Py_UNICODE_ISSPACE(buffer[length - 1]) || buffer[length - 1] == ' ') {
+ PyFile_SoftSpace(file, 1);
+ }
+ } else {
+ PyFile_SoftSpace(file, 1);
+ }
+
+ CHECK_OBJECT(file);
+ Py_DECREF(file);
+
+ return true;
+#else
+ NUITKA_ASSIGN_BUILTIN(print);
+
+ PyObject *exception_type, *exception_value;
+ PyTracebackObject *exception_tb;
+
+ FETCH_ERROR_OCCURRED_UNTRACED(&exception_type, &exception_value, &exception_tb);
+
+ PyObject *print_kw = PyDict_New();
+ PyDict_SetItem(print_kw, const_str_plain_end, const_str_empty);
+
+ if (file == NULL) {
+ PyDict_SetItem(print_kw, const_str_plain_file, GET_STDOUT());
+ } else {
+ PyDict_SetItem(print_kw, const_str_plain_file, file);
+ }
+
+ PyObject *print_args = PyTuple_New(1);
+ PyTuple_SET_ITEM(print_args, 0, object);
+ Py_INCREF(object);
+
+ PyObject *result = CALL_FUNCTION(NUITKA_ACCESS_BUILTIN(print), print_args, print_kw);
+
+ Py_DECREF(print_args);
+ Py_DECREF(print_kw);
+
+ Py_XDECREF(result);
+
+ RESTORE_ERROR_OCCURRED_UNTRACED(exception_type, exception_value, exception_tb);
+
+ return result != NULL;
+#endif
+}
+
+void PRINT_REFCOUNT(PyObject *object) {
+ if (object) {
+ char buffer[1024];
+ snprintf(buffer, sizeof(buffer) - 1, " refcnt %" PY_FORMAT_SIZE_T "d ", Py_REFCNT(object));
+
+ PRINT_STRING(buffer);
+ } else {
+ PRINT_STRING("");
+ }
+}
+
+bool PRINT_STRING(char const *str) {
+ PyObject *tmp = PyUnicode_FromString(str);
+ bool res = PRINT_ITEM(tmp);
+ Py_DECREF(tmp);
+
+ return res;
+}
+
+bool PRINT_FORMAT(char const *fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+
+ // Only used for debug purposes, lets be unsafe here.
+ char buffer[4096];
+
+ vsprintf(buffer, fmt, args);
+ return PRINT_STRING(buffer);
+}
+
+bool PRINT_REPR(PyObject *object) {
+ PyObject *exception_type, *exception_value;
+ PyTracebackObject *exception_tb;
+
+ FETCH_ERROR_OCCURRED_UNTRACED(&exception_type, &exception_value, &exception_tb);
+
+ bool res;
+
+ if (object != NULL) {
+ CHECK_OBJECT(object);
+
+ // Cannot have error set for this function, it asserts against that
+ // in debug builds.
+ PyObject *repr = PyObject_Repr(object);
+
+ res = PRINT_ITEM(repr);
+ Py_DECREF(repr);
+ } else {
+ res = PRINT_NULL();
+ }
+
+ RESTORE_ERROR_OCCURRED_UNTRACED(exception_type, exception_value, exception_tb);
+
+ return res;
+}
+
+bool PRINT_NULL(void) { return PRINT_STRING(""); }
+
+void _PRINT_EXCEPTION(PyObject *exception_type, PyObject *exception_value, PyObject *exception_tb) {
+ PRINT_REPR(exception_type);
+ if (exception_type) {
+ PRINT_REFCOUNT(exception_type);
+ }
+ PRINT_STRING("|");
+ PRINT_REPR(exception_value);
+ if (exception_value) {
+ PRINT_REFCOUNT(exception_value);
+ }
+#if PYTHON_VERSION >= 0x300
+ if (exception_value != NULL && PyExceptionInstance_Check(exception_value)) {
+ PRINT_STRING(" <- context ");
+ PyObject *context = PyException_GetContext(exception_value);
+ PRINT_REPR(context);
+ Py_XDECREF(context);
+ }
+#endif
+ PRINT_STRING("|");
+ PRINT_REPR(exception_tb);
+
+ PRINT_NEW_LINE();
+}
+
+void PRINT_CURRENT_EXCEPTION(void) {
+ PyThreadState *tstate = PyThreadState_GET();
+
+ PRINT_STRING("current_exc=");
+ PRINT_EXCEPTION(tstate->curexc_type, tstate->curexc_value, tstate->curexc_traceback);
+}
+
+void PRINT_PUBLISHED_EXCEPTION(void) {
+ PyThreadState *tstate = PyThreadState_GET();
+
+ PRINT_STRING("thread_exc=");
+ PRINT_EXCEPTION(EXC_TYPE(tstate), EXC_VALUE(tstate), EXC_TRACEBACK(tstate));
+}
+
+// TODO: Could be ported, the "printf" stuff would need to be split. On Python3
+// the normal C print output gets lost.
+#if PYTHON_VERSION < 0x300
+void PRINT_TRACEBACK(PyTracebackObject *traceback) {
+ PRINT_STRING("Dumping traceback:\n");
+
+ if (traceback == NULL)
+ PRINT_STRING("\n");
+
+ while (traceback != NULL) {
+ printf(" line %d (frame object chain):\n", traceback->tb_lineno);
+
+ PyFrameObject *frame = traceback->tb_frame;
+
+ while (frame != NULL) {
+ printf(" Frame at %s\n", PyString_AsString(PyObject_Str((PyObject *)frame->f_code)));
+
+ frame = frame->f_back;
+ }
+
+ assert(traceback->tb_next != traceback);
+ traceback = traceback->tb_next;
+ }
+
+ PRINT_STRING("End of Dump.\n");
+}
+#endif
+
+PyObject *GET_STDOUT() {
+ PyObject *result = PySys_GetObject((char *)"stdout");
+
+ if (unlikely(result == NULL)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "lost sys.stdout");
+ return NULL;
+ }
+
+ return result;
+}
+
+PyObject *GET_STDERR() {
+ PyObject *result = PySys_GetObject((char *)"stderr");
+
+ if (unlikely(result == NULL)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "lost sys.stderr");
+ return NULL;
+ }
+
+ return result;
+}
+
+bool PRINT_NEW_LINE(void) { return PRINT_NEW_LINE_TO(NULL); }
+
+bool PRINT_ITEM(PyObject *object) {
+ if (object == NULL) {
+ return PRINT_NULL();
+ } else {
+ return PRINT_ITEM_TO(NULL, object);
+ }
+}
+
+#if PYTHON_VERSION < 0x300
+
+static void set_slot(PyObject **slot, PyObject *value) {
+ PyObject *temp = *slot;
+ Py_XINCREF(value);
+ *slot = value;
+ Py_XDECREF(temp);
+}
+
+static void set_attr_slots(PyClassObject *klass) {
+ set_slot(&klass->cl_getattr, FIND_ATTRIBUTE_IN_CLASS(klass, const_str_plain___getattr__));
+ set_slot(&klass->cl_setattr, FIND_ATTRIBUTE_IN_CLASS(klass, const_str_plain___setattr__));
+ set_slot(&klass->cl_delattr, FIND_ATTRIBUTE_IN_CLASS(klass, const_str_plain___delattr__));
+}
+
+static bool set_dict(PyClassObject *klass, PyObject *value) {
+ if (value == NULL || !PyDict_Check(value)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__dict__ must be a dictionary object");
+ return false;
+ } else {
+ set_slot(&klass->cl_dict, value);
+ set_attr_slots(klass);
+
+ return true;
+ }
+}
+
+static bool set_bases(PyClassObject *klass, PyObject *value) {
+ if (value == NULL || !PyTuple_Check(value)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__bases__ must be a tuple object");
+ return false;
+ } else {
+ Py_ssize_t n = PyTuple_GET_SIZE(value);
+
+ for (Py_ssize_t i = 0; i < n; i++) {
+ PyObject *base = PyTuple_GET_ITEM(value, i);
+
+ if (unlikely(!PyClass_Check(base))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__bases__ items must be classes");
+ return false;
+ }
+
+ if (unlikely(PyClass_IsSubclass(base, (PyObject *)klass))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "a __bases__ item causes an inheritance cycle");
+ return false;
+ }
+ }
+
+ set_slot(&klass->cl_bases, value);
+ set_attr_slots(klass);
+
+ return true;
+ }
+}
+
+static bool set_name(PyClassObject *klass, PyObject *value) {
+ if (value == NULL || !PyDict_Check(value)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__name__ must be a string object");
+ return false;
+ }
+
+ if (strlen(PyString_AS_STRING(value)) != (size_t)PyString_GET_SIZE(value)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__name__ must not contain null bytes");
+ return false;
+ }
+
+ set_slot(&klass->cl_name, value);
+ return true;
+}
+
+static int nuitka_class_setattr(PyClassObject *klass, PyObject *attr_name, PyObject *value) {
+ char const *sattr_name = PyString_AsString(attr_name);
+
+ if (sattr_name[0] == '_' && sattr_name[1] == '_') {
+ Py_ssize_t n = PyString_Size(attr_name);
+
+ if (sattr_name[n - 2] == '_' && sattr_name[n - 1] == '_') {
+ if (strcmp(sattr_name, "__dict__") == 0) {
+ if (set_dict(klass, value) == false) {
+ return -1;
+ } else {
+ return 0;
+ }
+ } else if (strcmp(sattr_name, "__bases__") == 0) {
+ if (set_bases(klass, value) == false) {
+ return -1;
+ } else {
+ return 0;
+ }
+ } else if (strcmp(sattr_name, "__name__") == 0) {
+ if (set_name(klass, value) == false) {
+ return -1;
+ } else {
+ return 0;
+ }
+ } else if (strcmp(sattr_name, "__getattr__") == 0) {
+ set_slot(&klass->cl_getattr, value);
+ } else if (strcmp(sattr_name, "__setattr__") == 0) {
+ set_slot(&klass->cl_setattr, value);
+ } else if (strcmp(sattr_name, "__delattr__") == 0) {
+ set_slot(&klass->cl_delattr, value);
+ }
+ }
+ }
+
+ if (value == NULL) {
+ int status = PyDict_DelItem(klass->cl_dict, attr_name);
+
+ if (status < 0) {
+ PyErr_Format(PyExc_AttributeError, "class %s has no attribute '%s'", PyString_AS_STRING(klass->cl_name),
+ sattr_name);
+ }
+
+ return status;
+ } else {
+ return PyDict_SetItem(klass->cl_dict, attr_name, value);
+ }
+}
+
+static PyObject *nuitka_class_getattr(PyClassObject *klass, PyObject *attr_name) {
+ char const *sattr_name = PyString_AsString(attr_name);
+
+ if (sattr_name[0] == '_' && sattr_name[1] == '_') {
+ if (strcmp(sattr_name, "__dict__") == 0) {
+ Py_INCREF(klass->cl_dict);
+ return klass->cl_dict;
+ } else if (strcmp(sattr_name, "__bases__") == 0) {
+ Py_INCREF(klass->cl_bases);
+ return klass->cl_bases;
+ } else if (strcmp(sattr_name, "__name__") == 0) {
+ if (klass->cl_name == NULL) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ } else {
+ Py_INCREF(klass->cl_name);
+ return klass->cl_name;
+ }
+ }
+ }
+
+ PyObject *value = FIND_ATTRIBUTE_IN_CLASS(klass, attr_name);
+
+ if (unlikely(value == NULL)) {
+ PyErr_Format(PyExc_AttributeError, "class %s has no attribute '%s'", PyString_AS_STRING(klass->cl_name),
+ sattr_name);
+ return NULL;
+ }
+
+ PyTypeObject *type = Py_TYPE(value);
+
+ descrgetfunc tp_descr_get = PyType_HasFeature(type, Py_TPFLAGS_HAVE_CLASS) ? type->tp_descr_get : NULL;
+
+ if (tp_descr_get == NULL) {
+ Py_INCREF(value);
+ return value;
+ } else {
+ return tp_descr_get(value, (PyObject *)NULL, (PyObject *)klass);
+ }
+}
+
+#endif
+
+void enhancePythonTypes(void) {
+#if PYTHON_VERSION < 0x300
+ // Our own variant won't call PyEval_GetRestricted, saving quite some cycles
+ // not doing that.
+ PyClass_Type.tp_setattro = (setattrofunc)nuitka_class_setattr;
+ PyClass_Type.tp_getattro = (getattrofunc)nuitka_class_getattr;
+#endif
+}
+
+#ifdef __APPLE__
+#ifdef __cplusplus
+extern "C"
+#endif
+ wchar_t *
+ _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size);
+#endif
+
+#ifdef __FreeBSD__
+#include
+#endif
+
+PyObject *original_isinstance = NULL;
+
+// Note: Installed and used by "InspectPatcher" as "instance" too.
+int Nuitka_IsInstance(PyObject *inst, PyObject *cls) {
+ CHECK_OBJECT(original_isinstance);
+ CHECK_OBJECT(inst);
+ CHECK_OBJECT(cls);
+
+ // Quick paths
+ if (Py_TYPE(inst) == (PyTypeObject *)cls) {
+ return true;
+ }
+
+ // Our paths for the types we need to hook.
+ if (cls == (PyObject *)&PyFunction_Type && Nuitka_Function_Check(inst)) {
+ return true;
+ }
+
+ if (cls == (PyObject *)&PyGen_Type && Nuitka_Generator_Check(inst)) {
+ return true;
+ }
+
+ if (cls == (PyObject *)&PyMethod_Type && Nuitka_Method_Check(inst)) {
+ return true;
+ }
+
+ if (cls == (PyObject *)&PyFrame_Type && Nuitka_Frame_Check(inst)) {
+ return true;
+ }
+
+#if PYTHON_VERSION >= 0x350
+ if (cls == (PyObject *)&PyCoro_Type && Nuitka_Coroutine_Check(inst)) {
+ return true;
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x360
+ if (cls == (PyObject *)&PyAsyncGen_Type && Nuitka_Asyncgen_Check(inst)) {
+ return true;
+ }
+#endif
+
+ // May need to be recursive for tuple arguments.
+ if (PyTuple_Check(cls)) {
+ for (Py_ssize_t i = 0, size = PyTuple_GET_SIZE(cls); i < size; i++) {
+ PyObject *element = PyTuple_GET_ITEM(cls, i);
+
+ if (unlikely(Py_EnterRecursiveCall((char *)" in __instancecheck__"))) {
+ return -1;
+ }
+
+ int res = Nuitka_IsInstance(inst, element);
+
+ Py_LeaveRecursiveCall();
+
+ if (res != 0) {
+ return res;
+ }
+ }
+
+ return 0;
+ } else {
+ PyObject *args[] = {inst, cls};
+ PyObject *result = CALL_FUNCTION_WITH_ARGS2(original_isinstance, args);
+
+ if (result == NULL) {
+ return -1;
+ }
+
+ int res = CHECK_IF_TRUE(result);
+ Py_DECREF(result);
+
+ if (res == 0) {
+ if (cls == (PyObject *)&PyFunction_Type) {
+ args[1] = (PyObject *)&Nuitka_Function_Type;
+ } else if (cls == (PyObject *)&PyMethod_Type) {
+ args[1] = (PyObject *)&Nuitka_Method_Type;
+ } else if (cls == (PyObject *)&PyFrame_Type) {
+ args[1] = (PyObject *)&Nuitka_Frame_Type;
+ }
+#if PYTHON_VERSION >= 0x350
+ else if (cls == (PyObject *)&PyCoro_Type) {
+ args[1] = (PyObject *)&Nuitka_Coroutine_Type;
+ }
+#endif
+#if PYTHON_VERSION >= 0x360
+ else if (cls == (PyObject *)&PyAsyncGen_Type) {
+ args[1] = (PyObject *)&Nuitka_Asyncgen_Type;
+ }
+#endif
+ else {
+ return 0;
+ }
+
+ result = CALL_FUNCTION_WITH_ARGS2(original_isinstance, args);
+
+ if (result == NULL) {
+ return -1;
+ }
+
+ res = CHECK_IF_TRUE(result);
+ Py_DECREF(result);
+ }
+
+ return res;
+ }
+}
+
+#define ITERATOR_GENERIC 0
+#define ITERATOR_COMPILED_GENERATOR 1
+#define ITERATOR_TUPLE 2
+#define ITERATOR_LIST 3
+
+struct Nuitka_QuickIterator {
+ int iterator_mode;
+
+ union {
+ // ITERATOR_GENERIC
+ PyObject *iter;
+
+ // ITERATOR_COMPILED_GENERATOR
+ struct Nuitka_GeneratorObject *generator;
+
+ // ITERATOR_TUPLE
+ struct {
+ PyTupleObject *tuple;
+ Py_ssize_t tuple_index;
+ } tuple_data;
+
+ // ITERATOR_LIST
+ struct {
+ PyListObject *list;
+ Py_ssize_t list_index;
+ } list_data;
+ } iterator_data;
+};
+
+static bool MAKE_QUICK_ITERATOR(PyObject *sequence, struct Nuitka_QuickIterator *qiter) {
+ if (Nuitka_Generator_Check(sequence)) {
+ qiter->iterator_mode = ITERATOR_COMPILED_GENERATOR;
+ qiter->iterator_data.generator = (struct Nuitka_GeneratorObject *)sequence;
+ } else if (PyTuple_CheckExact(sequence)) {
+ qiter->iterator_mode = ITERATOR_TUPLE;
+ qiter->iterator_data.tuple_data.tuple = (PyTupleObject *)sequence;
+ qiter->iterator_data.tuple_data.tuple_index = 0;
+ } else if (PyList_CheckExact(sequence)) {
+ qiter->iterator_mode = ITERATOR_LIST;
+ qiter->iterator_data.list_data.list = (PyListObject *)sequence;
+ qiter->iterator_data.list_data.list_index = 0;
+ } else {
+ qiter->iterator_mode = ITERATOR_GENERIC;
+
+ qiter->iterator_data.iter = MAKE_ITERATOR(sequence);
+ if (unlikely(qiter->iterator_data.iter == NULL)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static PyObject *QUICK_ITERATOR_NEXT(struct Nuitka_QuickIterator *qiter, bool *finished) {
+ PyObject *result;
+
+ switch (qiter->iterator_mode) {
+ case ITERATOR_GENERIC:
+ result = ITERATOR_NEXT(qiter->iterator_data.iter);
+
+ if (result == NULL) {
+ Py_DECREF(qiter->iterator_data.iter);
+
+ if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED())) {
+ *finished = false;
+ return NULL;
+ }
+
+ *finished = true;
+ return NULL;
+ }
+
+ *finished = false;
+ return result;
+ case ITERATOR_COMPILED_GENERATOR:
+ result = Nuitka_Generator_qiter(qiter->iterator_data.generator, finished);
+
+ return result;
+ case ITERATOR_TUPLE:
+ if (qiter->iterator_data.tuple_data.tuple_index < PyTuple_GET_SIZE(qiter->iterator_data.tuple_data.tuple)) {
+ result =
+ PyTuple_GET_ITEM(qiter->iterator_data.tuple_data.tuple, qiter->iterator_data.tuple_data.tuple_index);
+ qiter->iterator_data.tuple_data.tuple_index += 1;
+
+ *finished = false;
+
+ Py_INCREF(result);
+ return result;
+ } else {
+ *finished = true;
+ return NULL;
+ }
+ case ITERATOR_LIST:
+ if (qiter->iterator_data.list_data.list_index < PyList_GET_SIZE(qiter->iterator_data.list_data.list)) {
+ result = PyList_GET_ITEM(qiter->iterator_data.list_data.list, qiter->iterator_data.list_data.list_index);
+ qiter->iterator_data.list_data.list_index += 1;
+
+ *finished = false;
+
+ Py_INCREF(result);
+ return result;
+ } else {
+ *finished = true;
+ return NULL;
+ }
+ }
+
+ assert(false);
+ return NULL;
+}
+
+PyObject *BUILTIN_SUM1(PyObject *sequence) {
+ struct Nuitka_QuickIterator qiter;
+
+ if (unlikely(MAKE_QUICK_ITERATOR(sequence, &qiter) == false)) {
+ return NULL;
+ }
+
+ PyObject *result;
+
+ long int_result = 0;
+
+ PyObject *item;
+
+ for (;;) {
+ bool finished;
+
+ item = QUICK_ITERATOR_NEXT(&qiter, &finished);
+
+ if (finished) {
+#if PYTHON_VERSION < 0x300
+ return PyInt_FromLong(int_result);
+#else
+ return PyLong_FromLong(int_result);
+#endif
+ } else if (item == NULL) {
+ return NULL;
+ }
+
+ CHECK_OBJECT(item);
+
+// For Python2 int objects:
+#if PYTHON_VERSION < 0x300
+ if (PyInt_CheckExact(item)) {
+ long b = PyInt_AS_LONG(item);
+ long x = int_result + b;
+
+ if ((x ^ int_result) >= 0 || (x ^ b) >= 0) {
+ int_result = x;
+ Py_DECREF(item);
+
+ continue;
+ }
+ }
+#endif
+
+// For Python2 long, Python3 int objects
+#if PYTHON_VERSION >= 0x270
+ if (PyLong_CheckExact(item)) {
+ int overflow;
+ long b = PyLong_AsLongAndOverflow(item, &overflow);
+
+ if (overflow) {
+ break;
+ }
+
+ long x = int_result + b;
+
+ if ((x ^ int_result) >= 0 || (x ^ b) >= 0) {
+ int_result = x;
+ Py_DECREF(item);
+
+ continue;
+ }
+ }
+#endif
+
+ if (item == Py_False) {
+ Py_DECREF(item);
+ continue;
+ }
+
+ if (item == Py_True) {
+ long b = 1;
+ long x = int_result + b;
+
+ if ((x ^ int_result) >= 0 || (x ^ b) >= 0) {
+ int_result = x;
+ Py_DECREF(item);
+
+ continue;
+ }
+ }
+
+ /* Either overflowed or not one of the supported int alike types. */
+ break;
+ }
+
+/* Switch over to objects, and redo last step. */
+#if PYTHON_VERSION < 0x300
+ result = PyInt_FromLong(int_result);
+#else
+ result = PyLong_FromLong(int_result);
+#endif
+ CHECK_OBJECT(result);
+
+ PyObject *temp = PyNumber_Add(result, item);
+ Py_DECREF(result);
+ Py_DECREF(item);
+ result = temp;
+
+ if (unlikely(result == NULL)) {
+ return NULL;
+ }
+
+ for (;;) {
+ CHECK_OBJECT(result);
+
+ bool finished;
+ item = QUICK_ITERATOR_NEXT(&qiter, &finished);
+
+ if (finished) {
+ break;
+ } else if (item == NULL) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ CHECK_OBJECT(item);
+
+ PyObject *temp2 = PyNumber_Add(result, item);
+
+ Py_DECREF(item);
+ Py_DECREF(result);
+
+ if (unlikely(temp2 == NULL)) {
+ return NULL;
+ }
+
+ result = temp2;
+ }
+
+ CHECK_OBJECT(result);
+
+ return result;
+}
+
+NUITKA_DEFINE_BUILTIN(sum);
+
+PyObject *BUILTIN_SUM2(PyObject *sequence, PyObject *start) {
+ NUITKA_ASSIGN_BUILTIN(sum);
+
+ CHECK_OBJECT(sequence);
+ CHECK_OBJECT(start);
+
+ PyObject *pos_args = PyTuple_New(2);
+ PyTuple_SET_ITEM(pos_args, 0, sequence);
+ Py_INCREF(sequence);
+ PyTuple_SET_ITEM(pos_args, 1, start);
+ Py_INCREF(start);
+
+ PyObject *result = CALL_FUNCTION_WITH_POSARGS(NUITKA_ACCESS_BUILTIN(sum), pos_args);
+
+ Py_DECREF(pos_args);
+ return result;
+}
+
+PyDictObject *dict_builtin = NULL;
+PyModuleObject *builtin_module = NULL;
+
+static PyTypeObject Nuitka_BuiltinModule_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0) "compiled_module", // tp_name
+ sizeof(PyModuleObject), // tp_size
+};
+
+int Nuitka_BuiltinModule_SetAttr(PyModuleObject *module, PyObject *name, PyObject *value) {
+ CHECK_OBJECT(module);
+ CHECK_OBJECT(name);
+
+ // This is used for "del" as well.
+ assert(value == NULL || Py_REFCNT(value) > 0);
+
+ // only checks the builtins that we can refresh at this time, if we have
+ // many value to check maybe need create a dict first.
+ bool found = false;
+
+ int res = PyObject_RichCompareBool(name, const_str_plain_open, Py_EQ);
+
+ if (unlikely(res == -1)) {
+ return -1;
+ }
+ if (res == 1) {
+ NUITKA_UPDATE_BUILTIN(open, value);
+ found = true;
+ }
+
+ if (found == false) {
+ res = PyObject_RichCompareBool(name, const_str_plain___import__, Py_EQ);
+
+ if (unlikely(res == -1)) {
+ return -1;
+ }
+
+ if (res == 1) {
+ NUITKA_UPDATE_BUILTIN(__import__, value);
+ found = true;
+ }
+ }
+
+#if PYTHON_VERSION >= 0x300
+ if (found == false) {
+ res = PyObject_RichCompareBool(name, const_str_plain_print, Py_EQ);
+
+ if (unlikely(res == -1)) {
+ return -1;
+ }
+
+ if (res == 1) {
+ NUITKA_UPDATE_BUILTIN(print, value);
+ found = true;
+ }
+ }
+#endif
+
+ return PyObject_GenericSetAttr((PyObject *)module, name, value);
+}
+
+#include
+
+#if defined(_WIN32)
+#include
+#elif defined(__APPLE__)
+#include
+#include
+#include
+#else
+#include
+#include
+#endif
+
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
+#include
+#endif
+
+PyObject *JOIN_PATH2(PyObject *dirname, PyObject *filename) {
+ static PyObject *sep_object = NULL;
+
+ if (sep_object == NULL) {
+ static char const sep[2] = {SEP, 0};
+ sep_object = Nuitka_String_FromString(sep);
+ }
+
+ // Avoid string APIs, so str, unicode doesn't matter for input.
+ PyObject *result = PyNumber_Add(dirname, sep_object);
+ CHECK_OBJECT(result);
+
+ result = PyNumber_InPlaceAdd(result, filename);
+ CHECK_OBJECT(result);
+
+ return result;
+}
+
+#if defined(_NUITKA_EXE)
+
+#ifndef _WIN32
+char const *getBinaryDirectoryHostEncoded() {
+ static char binary_directory[MAXPATHLEN + 1];
+ static bool init_done = false;
+
+ if (init_done) {
+ return binary_directory;
+ }
+
+#if defined(__APPLE__)
+ uint32_t bufsize = sizeof(binary_directory);
+ int res = _NSGetExecutablePath(binary_directory, &bufsize);
+
+ if (unlikely(res != 0)) {
+ abort();
+ }
+
+ // On macOS, the "dirname" call creates a separate internal string, we can
+ // safely copy back.
+ copyStringSafe(binary_directory, dirname(binary_directory), sizeof(binary_directory));
+
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
+ /* Not all of FreeBSD has /proc file system, so use the appropriate
+ * "sysctl" instead.
+ */
+ int mib[4];
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PATHNAME;
+ mib[3] = -1;
+ size_t cb = sizeof(binary_directory);
+ int res = sysctl(mib, 4, binary_directory, &cb, NULL, 0);
+
+ if (unlikely(res != 0)) {
+ abort();
+ }
+
+ /* We want the directory name, the above gives the full executable name. */
+ copyStringSafe(binary_directory, dirname(binary_directory), sizeof(binary_directory));
+#else
+ /* The remaining platforms, mostly Linux or compatible. */
+
+ /* The "readlink" call does not terminate result, so fill zeros there, then
+ * it is a proper C string right away. */
+ memset(binary_directory, 0, sizeof(binary_directory));
+ ssize_t res = readlink("/proc/self/exe", binary_directory, sizeof(binary_directory) - 1);
+
+ if (unlikely(res == -1)) {
+ abort();
+ }
+
+ copyStringSafe(binary_directory, dirname(binary_directory), sizeof(binary_directory));
+#endif
+ init_done = true;
+ return binary_directory;
+}
+#endif
+
+#if defined(_WIN32)
+// Replacement for RemoveFileSpecW, slightly smaller.
+static void stripFilenameW(wchar_t *path) {
+ wchar_t *last_slash = NULL;
+
+ while (*path != 0) {
+ if (*path == L'\\') {
+ last_slash = path;
+ }
+
+ path++;
+ }
+
+ if (last_slash != NULL) {
+ *last_slash = 0;
+ }
+}
+#endif
+
+wchar_t const *getBinaryDirectoryWideChars() {
+ static wchar_t binary_directory[MAXPATHLEN + 1];
+ static bool init_done = false;
+
+ if (init_done == false) {
+ binary_directory[0] = 0;
+
+#ifdef _WIN32
+ DWORD res = GetModuleFileNameW(NULL, binary_directory, sizeof(binary_directory));
+ assert(res != 0);
+
+ stripFilenameW(binary_directory);
+
+ // Query length of result first.
+ DWORD length = GetShortPathNameW(binary_directory, NULL, 0);
+ assert(length != 0);
+
+ wchar_t *short_binary_directory = (wchar_t *)malloc((length + 1) * sizeof(wchar_t));
+ res = GetShortPathNameW(binary_directory, short_binary_directory, length);
+ assert(res != 0);
+
+ if (unlikely(res > length)) {
+ abort();
+ }
+
+ binary_directory[0] = 0;
+ appendWStringSafeW(binary_directory, short_binary_directory, sizeof(binary_directory) / sizeof(wchar_t));
+
+ free(short_binary_directory);
+#else
+ appendStringSafeW(binary_directory, getBinaryDirectoryHostEncoded(),
+ sizeof(binary_directory) / sizeof(wchar_t));
+#endif
+
+ init_done = true;
+ }
+ return (wchar_t const *)binary_directory;
+}
+
+#if defined(_WIN32) && PYTHON_VERSION < 0x300
+char const *getBinaryDirectoryHostEncoded() {
+ static char *binary_directory = NULL;
+
+ if (binary_directory != NULL) {
+ return binary_directory;
+ }
+ wchar_t const *w = getBinaryDirectoryWideChars();
+
+ DWORD bufsize = WideCharToMultiByte(CP_ACP, 0, w, -1, NULL, 0, NULL, NULL);
+ assert(bufsize != 0);
+
+ binary_directory = (char *)malloc(bufsize + 1);
+ assert(binary_directory);
+
+ DWORD res2 = WideCharToMultiByte(CP_ACP, 0, w, -1, binary_directory, bufsize, NULL, NULL);
+ assert(res2 != 0);
+
+ if (unlikely(res2 > bufsize)) {
+ abort();
+ }
+
+ return (char const *)binary_directory;
+}
+#endif
+
+static PyObject *getBinaryDirectoryObject() {
+ static PyObject *binary_directory = NULL;
+
+ if (binary_directory != NULL) {
+ CHECK_OBJECT(binary_directory);
+
+ return binary_directory;
+ }
+
+// On Python3, this must be a unicode object, it cannot be on Python2,
+// there e.g. code objects expect Python2 strings.
+#if PYTHON_VERSION >= 0x300
+#ifdef _WIN32
+ wchar_t const *bin_directory = getBinaryDirectoryWideChars();
+ binary_directory = PyUnicode_FromWideChar(bin_directory, wcslen(bin_directory));
+#else
+ binary_directory = PyUnicode_DecodeFSDefault(getBinaryDirectoryHostEncoded());
+#endif
+#else
+ binary_directory = PyString_FromString(getBinaryDirectoryHostEncoded());
+#endif
+
+ if (unlikely(binary_directory == NULL)) {
+ PyErr_Print();
+ abort();
+ }
+
+ // Make sure it's usable for caching.
+ Py_INCREF(binary_directory);
+
+ return binary_directory;
+}
+
+#ifdef _NUITKA_STANDALONE
+// Helper function to create path.
+PyObject *getStandaloneSysExecutablePath(PyObject *basename) {
+ PyObject *dir_name = getBinaryDirectoryObject();
+ PyObject *sys_executable = JOIN_PATH2(dir_name, basename);
+
+ return sys_executable;
+}
+#endif
+
+#else
+
+#if defined(_WIN32)
+/* Small helper function to get current DLL handle. */
+static HMODULE getDllModuleHandle() {
+ static HMODULE hm = NULL;
+
+ if (hm == NULL) {
+ int res =
+ GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ (LPCSTR)&getDllModuleHandle, &hm);
+ assert(res != 0);
+ }
+
+ assert(hm != NULL);
+ return hm;
+}
+#endif
+
+#if defined(_WIN32)
+// Replacement for RemoveFileSpecA, slightly smaller.
+static void stripFilenameA(char *path) {
+ char *last_slash = NULL;
+
+ while (*path != 0) {
+ if (*path == '\\') {
+ last_slash = path;
+ }
+
+ path++;
+ }
+
+ if (last_slash != NULL) {
+ *last_slash = 0;
+ }
+}
+#endif
+
+static char const *getDllDirectory() {
+#if defined(_WIN32)
+ static char path[MAXPATHLEN + 1];
+ path[0] = '\0';
+
+#if PYTHON_VERSION >= 0x300
+ WCHAR path2[MAXPATHLEN + 1];
+ path2[0] = 0;
+
+ int res = GetModuleFileNameW(getDllModuleHandle(), path2, MAXPATHLEN + 1);
+ assert(res != 0);
+
+ int res2 = WideCharToMultiByte(CP_UTF8, 0, path2, -1, path, MAXPATHLEN + 1, NULL, NULL);
+ assert(res2 != 0);
+#else
+ int res = GetModuleFileNameA(getDllModuleHandle(), path, MAXPATHLEN + 1);
+ assert(res != 0);
+#endif
+
+ stripFilenameA(path);
+
+ return path;
+
+#else
+ Dl_info where;
+ int res = dladdr((void *)getDllDirectory, &where);
+ assert(res != 0);
+
+ return dirname((char *)where.dli_fname);
+#endif
+}
+#endif
+
+void _initBuiltinModule() {
+#if _NUITKA_MODULE
+ if (builtin_module != NULL) {
+ return;
+ }
+#else
+ assert(builtin_module == NULL);
+#endif
+
+#if PYTHON_VERSION < 0x300
+ builtin_module = (PyModuleObject *)PyImport_ImportModule("__builtin__");
+#else
+ builtin_module = (PyModuleObject *)PyImport_ImportModule("builtins");
+#endif
+ assert(builtin_module);
+ dict_builtin = (PyDictObject *)builtin_module->md_dict;
+ assert(PyDict_Check(dict_builtin));
+
+#ifdef _NUITKA_STANDALONE
+ int res = PyDict_SetItemString((PyObject *)dict_builtin, "__nuitka_binary_dir", getBinaryDirectoryObject());
+ assert(res == 0);
+#endif
+
+ // init Nuitka_BuiltinModule_Type, PyType_Ready won't copy all member from
+ // base type, so we need copy all members from PyModule_Type manual for
+ // safety. PyType_Ready will change tp_flags, we need define it again. Set
+ // tp_setattro to Nuitka_BuiltinModule_SetAttr and we can detect value
+ // change. Set tp_base to PyModule_Type and PyModule_Check will pass.
+ Nuitka_BuiltinModule_Type.tp_dealloc = PyModule_Type.tp_dealloc;
+ Nuitka_BuiltinModule_Type.tp_repr = PyModule_Type.tp_repr;
+ Nuitka_BuiltinModule_Type.tp_setattro = (setattrofunc)Nuitka_BuiltinModule_SetAttr;
+ Nuitka_BuiltinModule_Type.tp_getattro = PyModule_Type.tp_getattro;
+ Nuitka_BuiltinModule_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE;
+ Nuitka_BuiltinModule_Type.tp_doc = PyModule_Type.tp_doc;
+ Nuitka_BuiltinModule_Type.tp_traverse = PyModule_Type.tp_traverse;
+ Nuitka_BuiltinModule_Type.tp_members = PyModule_Type.tp_members;
+ Nuitka_BuiltinModule_Type.tp_base = &PyModule_Type;
+ Nuitka_BuiltinModule_Type.tp_dictoffset = PyModule_Type.tp_dictoffset;
+ Nuitka_BuiltinModule_Type.tp_init = PyModule_Type.tp_init;
+ Nuitka_BuiltinModule_Type.tp_alloc = PyModule_Type.tp_alloc;
+ Nuitka_BuiltinModule_Type.tp_new = PyModule_Type.tp_new;
+ Nuitka_BuiltinModule_Type.tp_free = PyModule_Type.tp_free;
+ int ret = PyType_Ready(&Nuitka_BuiltinModule_Type);
+ assert(ret == 0);
+
+ // Replace type of builtin module to take over.
+ ((PyObject *)builtin_module)->ob_type = &Nuitka_BuiltinModule_Type;
+ assert(PyModule_Check(builtin_module) == 1);
+}
+
+#include "HelpersCalling.c"
+
+PyObject *MAKE_RELATIVE_PATH(PyObject *relative) {
+ CHECK_OBJECT(relative);
+
+ static PyObject *our_path_object = NULL;
+
+ if (our_path_object == NULL) {
+#if defined(_NUITKA_EXE)
+ our_path_object = getBinaryDirectoryObject();
+#else
+ our_path_object = Nuitka_String_FromString(getDllDirectory());
+#endif
+ }
+
+ return JOIN_PATH2(our_path_object, relative);
+}
+
+#ifdef _NUITKA_EXE
+
+NUITKA_DEFINE_BUILTIN(type)
+NUITKA_DEFINE_BUILTIN(len)
+NUITKA_DEFINE_BUILTIN(repr)
+NUITKA_DEFINE_BUILTIN(int)
+NUITKA_DEFINE_BUILTIN(iter)
+#if PYTHON_VERSION < 0x300
+NUITKA_DEFINE_BUILTIN(long)
+#else
+NUITKA_DEFINE_BUILTIN(range);
+#endif
+
+void _initBuiltinOriginalValues() {
+ NUITKA_ASSIGN_BUILTIN(type);
+ NUITKA_ASSIGN_BUILTIN(len);
+ NUITKA_ASSIGN_BUILTIN(range);
+ NUITKA_ASSIGN_BUILTIN(repr);
+ NUITKA_ASSIGN_BUILTIN(int);
+ NUITKA_ASSIGN_BUILTIN(iter);
+#if PYTHON_VERSION < 0x300
+ NUITKA_ASSIGN_BUILTIN(long);
+#endif
+
+ CHECK_OBJECT(_python_original_builtin_value_range);
+}
+
+#endif
+
+// Used for threading.
+#if PYTHON_VERSION >= 0x300
+volatile int _Py_Ticker = _Py_CheckInterval;
+#endif
+
+#if PYTHON_VERSION >= 0x270
+iternextfunc default_iternext;
+
+void _initSlotIternext() {
+ PyObject *pos_args = PyTuple_New(1);
+ PyTuple_SET_ITEM(pos_args, 0, (PyObject *)&PyBaseObject_Type);
+ Py_INCREF(&PyBaseObject_Type);
+
+ PyObject *kw_args = PyDict_New();
+ PyDict_SetItem(kw_args, const_str_plain___iter__, Py_True);
+
+ PyObject *c =
+ PyObject_CallFunctionObjArgs((PyObject *)&PyType_Type, const_str_plain___iter__, pos_args, kw_args, NULL);
+ Py_DECREF(pos_args);
+ Py_DECREF(kw_args);
+
+ PyObject *r = PyObject_CallFunctionObjArgs(c, NULL);
+ Py_DECREF(c);
+
+ CHECK_OBJECT(r);
+ assert(Py_TYPE(r)->tp_iternext);
+
+ default_iternext = Py_TYPE(r)->tp_iternext;
+
+ Py_DECREF(r);
+}
+#endif
+
+#include "HelpersDeepcopy.c"
+
+#include "HelpersAttributes.c"
+#include "HelpersLists.c"
+
+#include "HelpersOperationBinaryAdd.c"
+#include "HelpersOperationBinaryBitand.c"
+#include "HelpersOperationBinaryBitor.c"
+#include "HelpersOperationBinaryBitxor.c"
+#include "HelpersOperationBinaryDivmod.c"
+#include "HelpersOperationBinaryFloordiv.c"
+#include "HelpersOperationBinaryLshift.c"
+#include "HelpersOperationBinaryMod.c"
+#include "HelpersOperationBinaryMult.c"
+#include "HelpersOperationBinaryPow.c"
+#include "HelpersOperationBinaryRshift.c"
+#include "HelpersOperationBinarySub.c"
+#include "HelpersOperationBinaryTruediv.c"
+#if PYTHON_VERSION < 0x300
+#include "HelpersOperationBinaryOlddiv.c"
+#endif
+#if PYTHON_VERSION >= 0x350
+#include "HelpersOperationBinaryMatmult.c"
+#endif
+
+#include "HelpersOperationInplaceAdd.c"
+#include "HelpersOperationInplaceBitand.c"
+#include "HelpersOperationInplaceBitor.c"
+#include "HelpersOperationInplaceBitxor.c"
+#include "HelpersOperationInplaceFloordiv.c"
+#include "HelpersOperationInplaceLshift.c"
+#include "HelpersOperationInplaceMod.c"
+#include "HelpersOperationInplaceMult.c"
+#include "HelpersOperationInplacePow.c"
+#include "HelpersOperationInplaceRshift.c"
+#include "HelpersOperationInplaceSub.c"
+#include "HelpersOperationInplaceTruediv.c"
+#if PYTHON_VERSION < 0x300
+#include "HelpersOperationInplaceOlddiv.c"
+#endif
+#if PYTHON_VERSION >= 0x350
+#include "HelpersOperationInplaceMatmult.c"
+#endif
+
+#include "HelpersComparisonEq.c"
+#include "HelpersComparisonGe.c"
+#include "HelpersComparisonGt.c"
+#include "HelpersComparisonLe.c"
+#include "HelpersComparisonLt.c"
+#include "HelpersComparisonNe.c"
+
+#include "HelpersConstantsBlob.c"
+
+#if _NUITKA_PROFILE
+#include "HelpersProfiling.c"
+#endif
diff --git a/mtube.build/static_src/CompiledCodeHelpers.o b/mtube.build/static_src/CompiledCodeHelpers.o
new file mode 100644
index 0000000..f461124
Binary files /dev/null and b/mtube.build/static_src/CompiledCodeHelpers.o differ
diff --git a/mtube.build/static_src/CompiledFunctionType.c b/mtube.build/static_src/CompiledFunctionType.c
new file mode 100644
index 0000000..4ea4ef4
--- /dev/null
+++ b/mtube.build/static_src/CompiledFunctionType.c
@@ -0,0 +1,2325 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "nuitka/prelude.h"
+
+#include "nuitka/compiled_method.h"
+
+#include "nuitka/freelists.h"
+
+// Needed for offsetof
+#include
+
+// tp_descr_get slot, bind a function to an object.
+static PyObject *Nuitka_Function_descr_get(PyObject *function, PyObject *object, PyObject *klass) {
+ assert(Nuitka_Function_Check(function));
+
+#if PYTHON_VERSION >= 0x300
+ if (object == NULL || object == Py_None) {
+ Py_INCREF(function);
+ return function;
+ }
+#endif
+
+ return Nuitka_Method_New((struct Nuitka_FunctionObject *)function, object == Py_None ? NULL : object, klass);
+}
+
+// tp_repr slot, decide how compiled function shall be output to "repr" built-in
+static PyObject *Nuitka_Function_tp_repr(struct Nuitka_FunctionObject *function) {
+#if PYTHON_VERSION < 0x300
+ return PyString_FromFormat(
+#else
+ return PyUnicode_FromFormat(
+#endif
+ "",
+#if PYTHON_VERSION < 0x300
+ Nuitka_String_AsString(function->m_name),
+#else
+ Nuitka_String_AsString(function->m_qualname),
+#endif
+ function);
+}
+
+static PyObject *Nuitka_Function_tp_call(struct Nuitka_FunctionObject *function, PyObject *tuple_args, PyObject *kw) {
+ CHECK_OBJECT(tuple_args);
+ assert(PyTuple_CheckExact(tuple_args));
+
+ if (kw == NULL) {
+ PyObject **args = &PyTuple_GET_ITEM(tuple_args, 0);
+ Py_ssize_t args_size = PyTuple_GET_SIZE(tuple_args);
+
+ if (function->m_args_simple && args_size == function->m_args_positional_count) {
+ for (Py_ssize_t i = 0; i < args_size; i++) {
+ Py_INCREF(args[i]);
+ }
+
+ return function->m_c_code(function, args);
+ } else if (function->m_args_simple &&
+ args_size + function->m_defaults_given == function->m_args_positional_count) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memcpy(python_pars, args, args_size * sizeof(PyObject *));
+ memcpy(python_pars + args_size, &PyTuple_GET_ITEM(function->m_defaults, 0),
+ function->m_defaults_given * sizeof(PyObject *));
+
+ for (Py_ssize_t i = 0; i < function->m_args_overall_count; i++) {
+ Py_INCREF(python_pars[i]);
+ }
+
+ return function->m_c_code(function, python_pars);
+ } else {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (parseArgumentsPos(function, python_pars, args, args_size)) {
+ return function->m_c_code(function, python_pars);
+ } else {
+ return NULL;
+ }
+ }
+ } else {
+ return Nuitka_CallFunctionPosArgsKwArgs(function, &PyTuple_GET_ITEM(tuple_args, 0),
+ PyTuple_GET_SIZE(tuple_args), kw);
+ }
+}
+
+static long Nuitka_Function_tp_traverse(struct Nuitka_FunctionObject *function, visitproc visit, void *arg) {
+ // TODO: Identify the impact of not visiting other owned objects. It appears
+ // to be mostly harmless, as these are strings.
+ Py_VISIT(function->m_dict);
+
+ for (Py_ssize_t i = 0; i < function->m_closure_given; i++) {
+ Py_VISIT(function->m_closure[i]);
+ }
+
+ return 0;
+}
+
+static long Nuitka_Function_tp_hash(struct Nuitka_FunctionObject *function) { return function->m_counter; }
+
+static PyObject *Nuitka_Function_get_name(struct Nuitka_FunctionObject *object) {
+ PyObject *result = object->m_name;
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Function_set_name(struct Nuitka_FunctionObject *object, PyObject *value) {
+#if PYTHON_VERSION < 0x300
+ if (unlikely(value == NULL || PyString_Check(value) == 0))
+#else
+ if (unlikely(value == NULL || PyUnicode_Check(value) == 0))
+#endif
+ {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__name__ must be set to a string object");
+ return -1;
+ }
+
+ PyObject *old = object->m_name;
+ Py_INCREF(value);
+ object->m_name = value;
+ Py_DECREF(old);
+
+ return 0;
+}
+
+#if PYTHON_VERSION >= 0x300
+static PyObject *Nuitka_Function_get_qualname(struct Nuitka_FunctionObject *object) {
+ PyObject *result = object->m_qualname;
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Function_set_qualname(struct Nuitka_FunctionObject *object, PyObject *value) {
+ if (unlikely(value == NULL || PyUnicode_Check(value) == 0)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__qualname__ must be set to a string object");
+ return -1;
+ }
+
+ PyObject *old = object->m_qualname;
+ Py_INCREF(value);
+ object->m_qualname = value;
+ Py_DECREF(old);
+
+ return 0;
+}
+#endif
+
+static PyObject *Nuitka_Function_get_doc(struct Nuitka_FunctionObject *object) {
+ PyObject *result = object->m_doc;
+
+ if (result == NULL) {
+ result = Py_None;
+ }
+
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Function_set_doc(struct Nuitka_FunctionObject *object, PyObject *value) {
+ PyObject *old = object->m_doc;
+
+ object->m_doc = value;
+ Py_XINCREF(value);
+
+ Py_XDECREF(old);
+
+ return 0;
+}
+
+static PyObject *Nuitka_Function_get_dict(struct Nuitka_FunctionObject *object) {
+ if (object->m_dict == NULL) {
+ object->m_dict = PyDict_New();
+ }
+
+ Py_INCREF(object->m_dict);
+ return object->m_dict;
+}
+
+static int Nuitka_Function_set_dict(struct Nuitka_FunctionObject *object, PyObject *value) {
+ if (unlikely(value == NULL)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "function's dictionary may not be deleted");
+ return -1;
+ }
+
+ if (likely(PyDict_Check(value))) {
+ PyObject *old = object->m_dict;
+ Py_INCREF(value);
+ object->m_dict = value;
+ Py_XDECREF(old);
+
+ return 0;
+ } else {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "setting function's dictionary to a non-dict");
+ return -1;
+ }
+}
+
+static PyObject *Nuitka_Function_get_code(struct Nuitka_FunctionObject *object) {
+ PyObject *result = (PyObject *)object->m_code_object;
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Function_set_code(struct Nuitka_FunctionObject *object, PyObject *value) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "__code__ is not writable in Nuitka");
+ return -1;
+}
+
+static PyObject *Nuitka_Function_get_closure(struct Nuitka_FunctionObject *object) {
+ if (object->m_closure_given > 0) {
+ PyObject *result = PyTuple_New(object->m_closure_given);
+
+ for (Py_ssize_t i = 0; i < object->m_closure_given; i++) {
+ PyTuple_SET_ITEM0(result, i, (PyObject *)object->m_closure[i]);
+ }
+
+ return result;
+ } else {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+}
+
+static int Nuitka_Function_set_closure(struct Nuitka_FunctionObject *object, PyObject *value) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
+#if PYTHON_VERSION < 0x300
+ PyExc_TypeError,
+#else
+ PyExc_AttributeError,
+#endif
+ "readonly attribute");
+
+ return -1;
+}
+
+static PyObject *Nuitka_Function_get_defaults(struct Nuitka_FunctionObject *object) {
+ PyObject *result = (PyObject *)object->m_defaults;
+ Py_INCREF(result);
+ return result;
+}
+
+static void onUpdatedDefaultsValue(struct Nuitka_FunctionObject *function) {
+ if (function->m_defaults == Py_None) {
+ function->m_defaults_given = 0;
+ } else {
+ function->m_defaults_given = PyTuple_GET_SIZE(function->m_defaults);
+ }
+}
+
+static int Nuitka_Function_set_defaults(struct Nuitka_FunctionObject *object, PyObject *value) {
+ if (value == NULL) {
+ value = Py_None;
+ }
+
+ if (unlikely(value != Py_None && PyTuple_Check(value) == false)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__defaults__ must be set to a tuple object");
+ return -1;
+ }
+
+// TODO: Do we actually need this ever, probably not, as we don't generate argument
+// parsing per function anymore.
+#ifndef _NUITKA_PLUGIN_DILL_ENABLED
+ if (object->m_defaults == Py_None && value != Py_None) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "Nuitka doesn't support __defaults__ size changes");
+ return -1;
+ }
+
+ if (object->m_defaults != Py_None &&
+ (value == Py_None || PyTuple_GET_SIZE(object->m_defaults) != PyTuple_GET_SIZE(value))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "Nuitka doesn't support __defaults__ size changes");
+ return -1;
+ }
+#endif
+
+ PyObject *old = object->m_defaults;
+ Py_INCREF(value);
+ object->m_defaults = value;
+ Py_DECREF(old);
+
+ onUpdatedDefaultsValue(object);
+
+ return 0;
+}
+
+#if PYTHON_VERSION >= 0x300
+static PyObject *Nuitka_Function_get_kwdefaults(struct Nuitka_FunctionObject *object) {
+ PyObject *result = object->m_kwdefaults;
+
+ if (result == NULL) {
+ result = Py_None;
+ }
+
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Function_set_kwdefaults(struct Nuitka_FunctionObject *object, PyObject *value) {
+ if (value == NULL) {
+ value = Py_None;
+ }
+
+ if (unlikely(value != Py_None && PyDict_Check(value) == false)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__kwdefaults__ must be set to a dict object");
+ return -1;
+ }
+
+ if (value == Py_None) {
+ value = NULL;
+ }
+
+ PyObject *old = object->m_kwdefaults;
+ Py_XINCREF(value);
+ object->m_kwdefaults = value;
+ Py_XDECREF(old);
+
+ return 0;
+}
+
+static PyObject *Nuitka_Function_get_annotations(struct Nuitka_FunctionObject *object) {
+ if (object->m_annotations == NULL) {
+ object->m_annotations = PyDict_New();
+ }
+
+ Py_INCREF(object->m_annotations);
+ return object->m_annotations;
+}
+
+static int Nuitka_Function_set_annotations(struct Nuitka_FunctionObject *object, PyObject *value) {
+ if (unlikely(value != NULL && PyDict_Check(value) == false)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__annotations__ must be set to a dict object");
+ return -1;
+ }
+
+ PyObject *old = object->m_annotations;
+ Py_XINCREF(value);
+ object->m_annotations = value;
+ Py_XDECREF(old);
+
+ return 0;
+}
+
+#endif
+
+static int Nuitka_Function_set_globals(struct Nuitka_FunctionObject *function, PyObject *value) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "readonly attribute");
+ return -1;
+}
+
+static PyObject *Nuitka_Function_get_globals(struct Nuitka_FunctionObject *function) {
+ PyObject *result = PyModule_GetDict(function->m_module);
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Function_set_module(struct Nuitka_FunctionObject *object, PyObject *value) {
+ if (object->m_dict == NULL) {
+ object->m_dict = PyDict_New();
+ }
+
+ if (value == NULL) {
+ value = Py_None;
+ }
+
+ return PyDict_SetItem(object->m_dict, const_str_plain___module__, value);
+}
+
+static PyObject *Nuitka_Function_get_module(struct Nuitka_FunctionObject *object) {
+ PyObject *result;
+
+ // The __dict__ might overrule this.
+ if (object->m_dict) {
+ result = DICT_GET_ITEM1(object->m_dict, const_str_plain___module__);
+
+ if (result != NULL) {
+ return result;
+ }
+ }
+
+ result = MODULE_NAME1(object->m_module);
+ return result;
+}
+
+static PyGetSetDef Nuitka_Function_getset[] = {
+#if PYTHON_VERSION >= 0x300
+ {(char *)"__qualname__", (getter)Nuitka_Function_get_qualname, (setter)Nuitka_Function_set_qualname, NULL},
+#endif
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_name", (getter)Nuitka_Function_get_name, (setter)Nuitka_Function_set_name, NULL},
+#endif
+ {(char *)"__name__", (getter)Nuitka_Function_get_name, (setter)Nuitka_Function_set_name, NULL},
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_doc", (getter)Nuitka_Function_get_doc, (setter)Nuitka_Function_set_doc, NULL},
+#endif
+ {(char *)"__doc__", (getter)Nuitka_Function_get_doc, (setter)Nuitka_Function_set_doc, NULL},
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_dict", (getter)Nuitka_Function_get_dict, (setter)Nuitka_Function_set_dict, NULL},
+#endif
+ {(char *)"__dict__", (getter)Nuitka_Function_get_dict, (setter)Nuitka_Function_set_dict, NULL},
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_code", (getter)Nuitka_Function_get_code, (setter)Nuitka_Function_set_code, NULL},
+#endif
+ {(char *)"__code__", (getter)Nuitka_Function_get_code, (setter)Nuitka_Function_set_code, NULL},
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_defaults", (getter)Nuitka_Function_get_defaults, (setter)Nuitka_Function_set_defaults, NULL},
+#endif
+ {(char *)"__defaults__", (getter)Nuitka_Function_get_defaults, (setter)Nuitka_Function_set_defaults, NULL},
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_globals", (getter)Nuitka_Function_get_globals, (setter)Nuitka_Function_set_globals, NULL},
+#endif
+ {(char *)"__closure__", (getter)Nuitka_Function_get_closure, (setter)Nuitka_Function_set_closure, NULL},
+#if PYTHON_VERSION < 0x300
+ {(char *)"func_closure", (getter)Nuitka_Function_get_closure, (setter)Nuitka_Function_set_closure, NULL},
+#endif
+ {(char *)"__globals__", (getter)Nuitka_Function_get_globals, (setter)Nuitka_Function_set_globals, NULL},
+ {(char *)"__module__", (getter)Nuitka_Function_get_module, (setter)Nuitka_Function_set_module, NULL},
+#if PYTHON_VERSION >= 0x300
+ {(char *)"__kwdefaults__", (getter)Nuitka_Function_get_kwdefaults, (setter)Nuitka_Function_set_kwdefaults, NULL},
+ {(char *)"__annotations__", (getter)Nuitka_Function_get_annotations, (setter)Nuitka_Function_set_annotations, NULL},
+
+#endif
+ {NULL}};
+
+static PyObject *Nuitka_Function_reduce(struct Nuitka_FunctionObject *function) {
+ PyObject *result;
+
+#if PYTHON_VERSION < 0x300
+ result = function->m_name;
+#else
+ result = function->m_qualname;
+#endif
+
+ Py_INCREF(result);
+ return result;
+}
+
+#define MAX_FUNCTION_FREE_LIST_COUNT 100
+static struct Nuitka_FunctionObject *free_list_functions = NULL;
+static int free_list_functions_count = 0;
+
+static void Nuitka_Function_tp_dealloc(struct Nuitka_FunctionObject *function) {
+#ifndef __NUITKA_NO_ASSERT__
+ // Save the current exception, if any, we must to not corrupt it.
+ PyObject *save_exception_type, *save_exception_value;
+ PyTracebackObject *save_exception_tb;
+ FETCH_ERROR_OCCURRED(&save_exception_type, &save_exception_value, &save_exception_tb);
+ RESTORE_ERROR_OCCURRED(save_exception_type, save_exception_value, save_exception_tb);
+#endif
+
+ Nuitka_GC_UnTrack(function);
+
+ if (function->m_weakrefs != NULL) {
+ PyObject_ClearWeakRefs((PyObject *)function);
+ }
+
+ Py_DECREF(function->m_name);
+#if PYTHON_VERSION >= 0x300
+ Py_DECREF(function->m_qualname);
+#endif
+
+ // These may actually re-surrect the object, not?
+ Py_XDECREF(function->m_dict);
+ Py_DECREF(function->m_defaults);
+
+ Py_XDECREF(function->m_doc);
+
+#if PYTHON_VERSION >= 0x300
+ Py_XDECREF(function->m_kwdefaults);
+ Py_XDECREF(function->m_annotations);
+#endif
+
+ for (Py_ssize_t i = 0; i < function->m_closure_given; i++) {
+ assert(function->m_closure[i]);
+ Py_DECREF(function->m_closure[i]);
+
+ // Note: No need to set to NULL, each function creation makes
+ // a full copy, doing the init.
+ }
+
+ /* Put the object into freelist or release to GC */
+ releaseToFreeList(free_list_functions, function, MAX_FUNCTION_FREE_LIST_COUNT);
+
+#ifndef __NUITKA_NO_ASSERT__
+ PyThreadState *tstate = PyThreadState_GET();
+
+ assert(tstate->curexc_type == save_exception_type);
+ assert(tstate->curexc_value == save_exception_value);
+ assert((PyTracebackObject *)tstate->curexc_traceback == save_exception_tb);
+#endif
+}
+
+static PyMethodDef Nuitka_Function_methods[] = {{"__reduce__", (PyCFunction)Nuitka_Function_reduce, METH_NOARGS, NULL},
+ {NULL}};
+
+PyTypeObject Nuitka_Function_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0) "compiled_function", /* tp_name */
+ sizeof(struct Nuitka_FunctionObject), /* tp_basicsize */
+ sizeof(struct Nuitka_CellObject *), /* tp_itemsize */
+ (destructor)Nuitka_Function_tp_dealloc, /* tp_dealloc */
+#if PYTHON_VERSION < 0x380
+ 0, /* tp_print */
+#else
+ offsetof(struct Nuitka_FunctionObject, m_vectorcall), /* tp_vectorcall_offset */
+#endif
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ (reprfunc)Nuitka_Function_tp_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ (hashfunc)Nuitka_Function_tp_hash, /* tp_hash */
+ (ternaryfunc)Nuitka_Function_tp_call, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT |
+#if PYTHON_VERSION < 0x300
+ Py_TPFLAGS_HAVE_WEAKREFS |
+#endif
+#if PYTHON_VERSION >= 0x380
+ _Py_TPFLAGS_HAVE_VECTORCALL | Py_TPFLAGS_METHOD_DESCRIPTOR |
+#endif
+ Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)Nuitka_Function_tp_traverse, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ offsetof(struct Nuitka_FunctionObject, m_weakrefs), /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Nuitka_Function_methods, /* tp_methods */
+ 0, /* tp_members */
+ Nuitka_Function_getset, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ Nuitka_Function_descr_get, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ offsetof(struct Nuitka_FunctionObject, m_dict), /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+ 0, /* tp_bases */
+ 0, /* tp_mro */
+ 0, /* tp_cache */
+ 0, /* tp_subclasses */
+ 0, /* tp_weaklist */
+ 0, /* tp_del */
+ 0 /* tp_version_tag */
+#if PYTHON_VERSION >= 0x340
+ ,
+ 0 /* tp_finalizer */
+#endif
+};
+
+void _initCompiledFunctionType(void) {
+
+ PyType_Ready(&Nuitka_Function_Type);
+
+#ifdef _NUITKA_PLUGIN_DILL_ENABLED
+ // TODO: Move this to a __nuitka__ module maybe
+ PyObject_SetAttrString((PyObject *)builtin_module, "compiled_function", (PyObject *)&Nuitka_Function_Type);
+#endif
+}
+
+// Shared implementations for empty functions. When a function body is empty, but
+// still needs to exist, e.g. overloaded functions, this is saving the effort to
+// produce one.
+static PyObject *_Nuitka_FunctionEmptyCodeNoneImpl(struct Nuitka_FunctionObject const *function,
+ PyObject **python_pars) {
+ Py_ssize_t arg_count = function->m_args_overall_count;
+
+ for (Py_ssize_t i = 0; i < arg_count; i++) {
+ Py_DECREF(python_pars[i]);
+ }
+
+ PyObject *result = Py_None;
+
+ Py_INCREF(result);
+ return result;
+}
+
+static PyObject *_Nuitka_FunctionEmptyCodeTrueImpl(struct Nuitka_FunctionObject const *function,
+ PyObject **python_pars) {
+ Py_ssize_t arg_count = function->m_args_overall_count;
+
+ for (Py_ssize_t i = 0; i < arg_count; i++) {
+ Py_DECREF(python_pars[i]);
+ }
+
+ PyObject *result = Py_True;
+
+ Py_INCREF(result);
+ return result;
+}
+
+static PyObject *_Nuitka_FunctionEmptyCodeFalseImpl(struct Nuitka_FunctionObject const *function,
+ PyObject **python_pars) {
+ Py_ssize_t arg_count = function->m_args_overall_count;
+
+ for (Py_ssize_t i = 0; i < arg_count; i++) {
+ Py_DECREF(python_pars[i]);
+ }
+
+ PyObject *result = Py_False;
+
+ Py_INCREF(result);
+ return result;
+}
+
+static PyObject *_Nuitka_FunctionEmptyCodeGenericImpl(struct Nuitka_FunctionObject const *function,
+ PyObject **python_pars) {
+ Py_ssize_t arg_count = function->m_args_overall_count;
+
+ for (Py_ssize_t i = 0; i < arg_count; i++) {
+ Py_DECREF(python_pars[i]);
+ }
+
+ PyObject *result = function->m_constant_return_value;
+
+ Py_INCREF(result);
+ return result;
+}
+
+void Nuitka_Function_EnableConstReturnTrue(struct Nuitka_FunctionObject *function) {
+ function->m_constant_return_value = Py_True;
+ function->m_c_code = _Nuitka_FunctionEmptyCodeTrueImpl;
+}
+
+void Nuitka_Function_EnableConstReturnFalse(struct Nuitka_FunctionObject *function) {
+ function->m_constant_return_value = Py_False;
+ function->m_c_code = _Nuitka_FunctionEmptyCodeFalseImpl;
+}
+
+void Nuitka_Function_EnableConstReturnGeneric(struct Nuitka_FunctionObject *function, PyObject *value) {
+ function->m_constant_return_value = value;
+ function->m_c_code = _Nuitka_FunctionEmptyCodeGenericImpl;
+}
+
+#if PYTHON_VERSION >= 0x380
+static PyObject *Nuitka_Function_tp_vectorcall(struct Nuitka_FunctionObject *function, PyObject *const *stack,
+ size_t nargsf, PyObject *kwnames);
+#endif
+
+// Make a function with closure.
+#if PYTHON_VERSION < 0x300
+struct Nuitka_FunctionObject *Nuitka_Function_New(function_impl_code c_code, PyObject *name, PyCodeObject *code_object,
+ PyObject *defaults, PyObject *module, PyObject *doc,
+ struct Nuitka_CellObject **closure, Py_ssize_t closure_given)
+#else
+struct Nuitka_FunctionObject *Nuitka_Function_New(function_impl_code c_code, PyObject *name, PyObject *qualname,
+ PyCodeObject *code_object, PyObject *defaults, PyObject *kwdefaults,
+ PyObject *annotations, PyObject *module, PyObject *doc,
+ struct Nuitka_CellObject **closure, Py_ssize_t closure_given)
+#endif
+{
+ struct Nuitka_FunctionObject *result;
+
+ // Macro to assign result memory from GC or free list.
+ allocateFromFreeList(free_list_functions, struct Nuitka_FunctionObject, Nuitka_Function_Type, closure_given);
+
+ memcpy(&result->m_closure[0], closure, closure_given * sizeof(struct Nuitka_CellObject *));
+ result->m_closure_given = closure_given;
+
+ if (c_code != NULL) {
+ result->m_c_code = c_code;
+#ifndef __NUITKA_NO_ASSERT__
+ result->m_constant_return_value = NULL;
+#endif
+ } else {
+ result->m_c_code = _Nuitka_FunctionEmptyCodeNoneImpl;
+ result->m_constant_return_value = Py_None;
+ }
+
+ Py_INCREF(name);
+ result->m_name = name;
+
+#if PYTHON_VERSION >= 0x300
+ // The "qualname" defaults to NULL for most compact C code.
+ if (qualname == NULL) {
+ qualname = name;
+ }
+ CHECK_OBJECT(qualname);
+
+ Py_INCREF(qualname);
+ result->m_qualname = qualname;
+#endif
+
+ if (defaults == NULL) {
+ Py_INCREF(Py_None);
+ defaults = Py_None;
+ }
+ CHECK_OBJECT(defaults);
+ assert(defaults == Py_None || (PyTuple_Check(defaults) && PyTuple_GET_SIZE(defaults) > 0));
+ result->m_defaults = defaults;
+
+ onUpdatedDefaultsValue(result);
+
+#if PYTHON_VERSION >= 0x300
+ assert(kwdefaults == NULL || (PyDict_Check(kwdefaults) && DICT_SIZE(kwdefaults) > 0));
+ result->m_kwdefaults = kwdefaults;
+
+ assert(annotations == NULL || (PyDict_Check(annotations) && DICT_SIZE(annotations) > 0));
+ result->m_annotations = annotations;
+#endif
+
+ result->m_code_object = code_object;
+ result->m_args_positional_count = code_object->co_argcount;
+ result->m_args_keywords_count = result->m_args_positional_count;
+#if PYTHON_VERSION >= 0x300
+ result->m_args_keywords_count += code_object->co_kwonlyargcount;
+#endif
+#if PYTHON_VERSION >= 0x380
+ result->m_args_pos_only_count = code_object->co_posonlyargcount;
+#endif
+
+ result->m_args_overall_count = result->m_args_keywords_count + ((code_object->co_flags & CO_VARARGS) ? 1 : 0) +
+ ((code_object->co_flags & CO_VARKEYWORDS) ? 1 : 0);
+
+ result->m_args_simple = (code_object->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) == 0;
+#if PYTHON_VERSION >= 0x300
+ if (code_object->co_kwonlyargcount > 0) {
+ result->m_args_simple = false;
+ }
+#endif
+
+ if ((code_object->co_flags & CO_VARARGS) != 0) {
+ result->m_args_star_list_index = result->m_args_keywords_count;
+ } else {
+ result->m_args_star_list_index = -1;
+ }
+
+ if ((code_object->co_flags & CO_VARKEYWORDS) != 0) {
+ result->m_args_star_dict_index = result->m_args_keywords_count;
+
+ if (code_object->co_flags & CO_VARARGS) {
+ result->m_args_star_dict_index += 1;
+ }
+ } else {
+ result->m_args_star_dict_index = -1;
+ }
+
+ result->m_varnames = &PyTuple_GET_ITEM(code_object->co_varnames, 0);
+
+ result->m_module = module;
+
+ Py_XINCREF(doc);
+ result->m_doc = doc;
+
+ result->m_dict = NULL;
+ result->m_weakrefs = NULL;
+
+ static long Nuitka_Function_counter = 0;
+ result->m_counter = Nuitka_Function_counter++;
+
+#if PYTHON_VERSION >= 0x380
+ result->m_vectorcall = (vectorcallfunc)Nuitka_Function_tp_vectorcall;
+#endif
+
+ Nuitka_GC_Track(result);
+
+ assert(Py_REFCNT(result) == 1);
+
+ return result;
+}
+
+static void formatErrorNoArgumentAllowed(struct Nuitka_FunctionObject const *function,
+#if PYTHON_VERSION >= 0x300
+ PyObject *kw,
+#endif
+ Py_ssize_t given) {
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+
+#if PYTHON_VERSION < 0x300
+ PyErr_Format(PyExc_TypeError, "%s() takes no arguments (%zd given)", function_name, given);
+#else
+ if (kw == NULL) {
+ PyErr_Format(PyExc_TypeError, "%s() takes 0 positional arguments but %zd was given", function_name, given);
+ } else {
+ PyObject *tmp_iter = PyObject_GetIter(kw);
+ PyObject *tmp_arg_name = PyIter_Next(tmp_iter);
+ Py_DECREF(tmp_iter);
+
+ PyErr_Format(PyExc_TypeError, "%s() got an unexpected keyword argument '%s'", function_name,
+ Nuitka_String_AsString(tmp_arg_name));
+
+ Py_DECREF(tmp_arg_name);
+ }
+#endif
+}
+
+static void formatErrorMultipleValuesGiven(struct Nuitka_FunctionObject const *function, Py_ssize_t index) {
+#if PYTHON_VERSION < 0x390
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+#else
+ char const *function_name = Nuitka_String_AsString(function->m_qualname);
+#endif
+
+ PyErr_Format(PyExc_TypeError,
+#if PYTHON_VERSION < 0x300
+ "%s() got multiple values for keyword argument '%s'",
+#else
+ "%s() got multiple values for argument '%s'",
+#endif
+ function_name, Nuitka_String_AsString(function->m_varnames[index]));
+}
+
+#if PYTHON_VERSION < 0x300
+static void formatErrorTooFewArguments(struct Nuitka_FunctionObject const *function,
+#if PYTHON_VERSION < 0x270
+ Py_ssize_t kw_size,
+#endif
+ Py_ssize_t given) {
+ Py_ssize_t required_parameter_count = function->m_args_positional_count - function->m_defaults_given;
+
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+ char const *violation =
+ (function->m_defaults != Py_None || function->m_args_star_list_index != -1) ? "at least" : "exactly";
+ char const *plural = required_parameter_count == 1 ? "" : "s";
+
+#if PYTHON_VERSION < 0x270
+ if (kw_size > 0) {
+ PyErr_Format(PyExc_TypeError, "%s() takes %s %zd non-keyword argument%s (%zd given)", function_name, violation,
+ required_parameter_count, plural, given - function->m_defaults_given);
+ } else {
+ PyErr_Format(PyExc_TypeError, "%s() takes %s %zd argument%s (%zd given)", function_name, violation,
+ required_parameter_count, plural, given);
+ }
+#else
+ PyErr_Format(PyExc_TypeError, "%s() takes %s %zd argument%s (%zd given)", function_name, violation,
+ required_parameter_count, plural, given);
+#endif
+}
+#else
+static void formatErrorTooFewArguments(struct Nuitka_FunctionObject const *function, PyObject **values) {
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+
+ Py_ssize_t max_missing = 0;
+
+ for (Py_ssize_t i = function->m_args_positional_count - 1 - function->m_defaults_given; i >= 0; --i) {
+ if (values[i] == NULL) {
+ max_missing += 1;
+ }
+ }
+
+ PyObject *list_str = PyUnicode_FromString("");
+
+ PyObject *comma_str = PyUnicode_FromString(", ");
+ PyObject *and_str = PyUnicode_FromString(max_missing == 2 ? " and " : ", and ");
+
+ Py_ssize_t missing = 0;
+ for (Py_ssize_t i = function->m_args_positional_count - 1 - function->m_defaults_given; i >= 0; --i) {
+ if (values[i] == NULL) {
+ PyObject *current_str = function->m_varnames[i];
+
+ PyObject *current = PyObject_Repr(current_str);
+
+ if (missing == 0) {
+ PyObject *old = list_str;
+
+ list_str = UNICODE_CONCAT(list_str, current);
+
+ Py_DECREF(old);
+ } else if (missing == 1) {
+ PyObject *old = list_str;
+
+ list_str = UNICODE_CONCAT(and_str, list_str);
+
+ Py_DECREF(old);
+ old = list_str;
+
+ list_str = UNICODE_CONCAT(current, list_str);
+
+ Py_DECREF(old);
+ } else {
+ PyObject *old = list_str;
+
+ list_str = UNICODE_CONCAT(comma_str, list_str);
+
+ Py_DECREF(old);
+ old = list_str;
+
+ list_str = UNICODE_CONCAT(current, list_str);
+
+ Py_DECREF(old);
+ }
+
+ Py_DECREF(current);
+
+ missing += 1;
+ }
+ }
+
+ Py_DECREF(comma_str);
+ Py_DECREF(and_str);
+
+ PyErr_Format(PyExc_TypeError, "%s() missing %zd required positional argument%s: %s", function_name, max_missing,
+ max_missing > 1 ? "s" : "", Nuitka_String_AsString(list_str));
+
+ Py_DECREF(list_str);
+}
+#endif
+
+static void formatErrorTooManyArguments(struct Nuitka_FunctionObject const *function, Py_ssize_t given
+#if PYTHON_VERSION < 0x270
+ ,
+ Py_ssize_t kw_size
+
+#endif
+#if PYTHON_VERSION >= 0x300
+ ,
+ Py_ssize_t kw_only
+#endif
+) {
+ Py_ssize_t top_level_parameter_count = function->m_args_positional_count;
+
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+#if PYTHON_VERSION < 0x300
+ char const *violation = function->m_defaults != Py_None ? "at most" : "exactly";
+#endif
+ char const *plural = top_level_parameter_count == 1 ? "" : "s";
+
+#if PYTHON_VERSION < 0x270
+ PyErr_Format(PyExc_TypeError, "%s() takes %s %zd %sargument%s (%zd given)", function_name, violation,
+ top_level_parameter_count, kw_size > 0 ? "non-keyword " : "", plural, given);
+#elif PYTHON_VERSION < 0x300
+ PyErr_Format(PyExc_TypeError, "%s() takes %s %zd argument%s (%zd given)", function_name, violation,
+ top_level_parameter_count, plural, given);
+#else
+ char keyword_only_part[100];
+
+ if (kw_only > 0) {
+ snprintf(keyword_only_part, sizeof(keyword_only_part) - 1,
+ " positional argument%s (and %" PY_FORMAT_SIZE_T "d keyword-only argument%s)", given != 1 ? "s" : "",
+ kw_only, kw_only != 1 ? "s" : "");
+ } else {
+ keyword_only_part[0] = 0;
+ }
+
+ if (function->m_defaults_given == 0) {
+ PyErr_Format(PyExc_TypeError, "%s() takes %zd positional argument%s but %zd%s were given", function_name,
+ top_level_parameter_count, plural, given, keyword_only_part);
+ } else {
+ PyErr_Format(PyExc_TypeError, "%s() takes from %zd to %zd positional argument%s but %zd%s were given",
+ function_name, top_level_parameter_count - function->m_defaults_given, top_level_parameter_count,
+ plural, given, keyword_only_part);
+ }
+#endif
+}
+
+#if PYTHON_VERSION >= 0x300
+static void formatErrorTooFewKwOnlyArguments(struct Nuitka_FunctionObject const *function, PyObject **kw_vars) {
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+
+ Py_ssize_t kwonlyargcount = function->m_code_object->co_kwonlyargcount;
+
+ Py_ssize_t max_missing = 0;
+
+ for (Py_ssize_t i = kwonlyargcount - 1; i >= 0; --i) {
+ if (kw_vars[i] == NULL) {
+ max_missing += 1;
+ }
+ }
+
+ PyObject *list_str = PyUnicode_FromString("");
+
+ PyObject *comma_str = PyUnicode_FromString(", ");
+ PyObject *and_str = PyUnicode_FromString(max_missing == 2 ? " and " : ", and ");
+
+ Py_ssize_t missing = 0;
+ for (Py_ssize_t i = kwonlyargcount - 1; i >= 0; --i) {
+ if (kw_vars[i] == NULL) {
+ PyObject *current_str = function->m_varnames[function->m_args_positional_count + i];
+
+ PyObject *current = PyObject_Repr(current_str);
+
+ if (missing == 0) {
+ PyObject *old = list_str;
+
+ list_str = UNICODE_CONCAT(list_str, current);
+
+ Py_DECREF(old);
+ } else if (missing == 1) {
+ PyObject *old = list_str;
+
+ list_str = UNICODE_CONCAT(and_str, list_str);
+
+ Py_DECREF(old);
+ old = list_str;
+
+ list_str = UNICODE_CONCAT(current, list_str);
+
+ Py_DECREF(old);
+ } else {
+ PyObject *old = list_str;
+
+ list_str = UNICODE_CONCAT(comma_str, list_str);
+
+ Py_DECREF(old);
+ old = list_str;
+
+ list_str = UNICODE_CONCAT(current, list_str);
+
+ Py_DECREF(old);
+ }
+
+ Py_DECREF(current);
+
+ missing += 1;
+ }
+ }
+
+ Py_DECREF(comma_str);
+ Py_DECREF(and_str);
+
+ PyErr_Format(PyExc_TypeError, "%s() missing %zd required keyword-only argument%s: %s", function_name, max_missing,
+ max_missing > 1 ? "s" : "", Nuitka_String_AsString(list_str));
+
+ Py_DECREF(list_str);
+}
+#endif
+
+static void formatErrorKeywordsMustBeString(struct Nuitka_FunctionObject const *function) {
+#if PYTHON_VERSION < 0x390
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+ PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name);
+#else
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "keywords must be strings");
+#endif
+}
+
+#if PYTHON_VERSION < 0x300
+static Py_ssize_t handleKeywordArgs(struct Nuitka_FunctionObject const *function, PyObject **python_pars, PyObject *kw)
+#else
+static Py_ssize_t handleKeywordArgs(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ Py_ssize_t *kw_only_found, PyObject *kw)
+#endif
+{
+ Py_ssize_t keywords_count = function->m_args_keywords_count;
+
+#if PYTHON_VERSION >= 0x300
+ Py_ssize_t keyword_after_index = function->m_args_positional_count;
+#endif
+
+ assert(function->m_args_star_dict_index == -1);
+
+ Py_ssize_t kw_found = 0;
+ Py_ssize_t ppos = 0;
+ PyObject *key, *value;
+
+ while (PyDict_Next(kw, &ppos, &key, &value)) {
+#if PYTHON_VERSION < 0x300
+ if (unlikely(!PyString_Check(key) && !PyUnicode_Check(key)))
+#else
+ if (unlikely(!PyUnicode_Check(key)))
+#endif
+ {
+ formatErrorKeywordsMustBeString(function);
+ return -1;
+ }
+
+ NUITKA_MAY_BE_UNUSED bool found = false;
+
+ Py_INCREF(key);
+ Py_INCREF(value);
+
+#if PYTHON_VERSION < 0x380
+ Py_ssize_t kw_arg_start = 0;
+#else
+ Py_ssize_t kw_arg_start = function->m_args_pos_only_count;
+#endif
+
+ for (Py_ssize_t i = kw_arg_start; i < keywords_count; i++) {
+ if (function->m_varnames[i] == key) {
+ assert(python_pars[i] == NULL);
+ python_pars[i] = value;
+
+#if PYTHON_VERSION >= 0x300
+ if (i >= keyword_after_index) {
+ *kw_only_found += 1;
+ }
+#endif
+
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false) {
+ PyObject **varnames = function->m_varnames;
+
+ for (Py_ssize_t i = kw_arg_start; i < keywords_count; i++) {
+ if (RICH_COMPARE_EQ_CBOOL_OBJECT_OBJECT(varnames[i], key)) {
+ assert(python_pars[i] == NULL);
+ python_pars[i] = value;
+
+#if PYTHON_VERSION >= 0x300
+ if (i >= keyword_after_index) {
+ *kw_only_found += 1;
+ }
+#endif
+
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if (unlikely(found == false)) {
+ bool pos_only_error = false;
+
+ for (Py_ssize_t i = 0; i < kw_arg_start; i++) {
+ PyObject **varnames = function->m_varnames;
+
+ if (RICH_COMPARE_EQ_CBOOL_OBJECT_OBJECT(varnames[i], key)) {
+ pos_only_error = true;
+ break;
+ }
+ }
+
+ if (pos_only_error == true) {
+ PyErr_Format(PyExc_TypeError,
+ "%s() got some positional-only arguments passed as keyword arguments: '%s'",
+ Nuitka_String_AsString(function->m_name),
+ Nuitka_String_Check(key) ? Nuitka_String_AsString(key) : "");
+
+ } else {
+
+ PyErr_Format(PyExc_TypeError, "%s() got an unexpected keyword argument '%s'",
+ Nuitka_String_AsString(function->m_name),
+ Nuitka_String_Check(key) ? Nuitka_String_AsString(key) : "");
+ }
+
+ Py_DECREF(key);
+ Py_DECREF(value);
+
+ return -1;
+ }
+
+ Py_DECREF(key);
+
+ kw_found += 1;
+ }
+
+ return kw_found;
+}
+
+static bool MAKE_STAR_DICT_DICTIONARY_COPY(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *kw) {
+ Py_ssize_t star_dict_index = function->m_args_star_dict_index;
+ assert(star_dict_index != -1);
+
+ if (kw == NULL) {
+ python_pars[star_dict_index] = PyDict_New();
+ } else if (((PyDictObject *)kw)->ma_used > 0) {
+#if PYTHON_VERSION < 0x300
+ python_pars[star_dict_index] = _PyDict_NewPresized(((PyDictObject *)kw)->ma_used);
+
+ for (int i = 0; i <= ((PyDictObject *)kw)->ma_mask; i++) {
+ PyDictEntry *entry = &((PyDictObject *)kw)->ma_table[i];
+
+ if (entry->me_value != NULL) {
+
+ if (unlikely(!PyString_Check(entry->me_key) && !PyUnicode_Check(entry->me_key))) {
+ formatErrorKeywordsMustBeString(function);
+ return false;
+ }
+
+ int res = PyDict_SetItem(python_pars[star_dict_index], entry->me_key, entry->me_value);
+
+ if (unlikely(res != 0)) {
+ return false;
+ }
+ }
+ }
+#else
+ if (_PyDict_HasSplitTable((PyDictObject *)kw)) {
+ PyDictObject *mp = (PyDictObject *)kw;
+
+ PyObject **newvalues = PyMem_NEW(PyObject *, mp->ma_keys->dk_size);
+ assert(newvalues != NULL);
+
+ PyDictObject *split_copy = PyObject_GC_New(PyDictObject, &PyDict_Type);
+ assert(split_copy != NULL);
+
+ split_copy->ma_values = newvalues;
+ split_copy->ma_keys = mp->ma_keys;
+ split_copy->ma_used = mp->ma_used;
+
+ mp->ma_keys->dk_refcnt += 1;
+
+ Nuitka_GC_Track(split_copy);
+
+#if PYTHON_VERSION < 0x360
+ Py_ssize_t size = mp->ma_keys->dk_size;
+#else
+ Py_ssize_t size = DK_USABLE_FRACTION(DK_SIZE(mp->ma_keys));
+#endif
+ for (Py_ssize_t i = 0; i < size; i++) {
+#if PYTHON_VERSION < 0x360
+ PyDictKeyEntry *entry = &split_copy->ma_keys->dk_entries[i];
+#else
+ PyDictKeyEntry *entry = &DK_ENTRIES(split_copy->ma_keys)[i];
+#endif
+ if ((entry->me_key != NULL) && unlikely(!PyUnicode_Check(entry->me_key))) {
+ formatErrorKeywordsMustBeString(function);
+ return false;
+ }
+
+ split_copy->ma_values[i] = mp->ma_values[i];
+ Py_XINCREF(split_copy->ma_values[i]);
+ }
+
+ python_pars[star_dict_index] = (PyObject *)split_copy;
+ } else {
+ python_pars[star_dict_index] = PyDict_New();
+
+ PyDictObject *mp = (PyDictObject *)kw;
+
+#if PYTHON_VERSION < 0x360
+ Py_ssize_t size = mp->ma_keys->dk_size;
+#else
+ Py_ssize_t size = mp->ma_keys->dk_nentries;
+#endif
+ for (Py_ssize_t i = 0; i < size; i++) {
+#if PYTHON_VERSION < 0x360
+ PyDictKeyEntry *entry = &mp->ma_keys->dk_entries[i];
+#else
+ PyDictKeyEntry *entry = &DK_ENTRIES(mp->ma_keys)[i];
+#endif
+
+ PyObject *value = entry->me_value;
+
+ if (value != NULL) {
+ if (unlikely(!PyUnicode_Check(entry->me_key))) {
+ formatErrorKeywordsMustBeString(function);
+ return false;
+ }
+
+ int res = PyDict_SetItem(python_pars[star_dict_index], entry->me_key, value);
+
+ if (unlikely(res != 0)) {
+ return false;
+ }
+ }
+ }
+ }
+#endif
+ } else {
+ python_pars[star_dict_index] = PyDict_New();
+ }
+
+ return true;
+}
+
+#if PYTHON_VERSION < 0x300
+static Py_ssize_t handleKeywordArgsWithStarDict(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *kw)
+#else
+static Py_ssize_t handleKeywordArgsWithStarDict(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ Py_ssize_t *kw_only_found, PyObject *kw)
+#endif
+{
+ assert(function->m_args_star_dict_index != -1);
+
+ if (unlikely(MAKE_STAR_DICT_DICTIONARY_COPY(function, python_pars, kw) == false)) {
+ return -1;
+ }
+
+ Py_ssize_t kw_found = 0;
+ Py_ssize_t keywords_count = function->m_args_keywords_count;
+#if PYTHON_VERSION >= 0x300
+ Py_ssize_t keyword_after_index = function->m_args_positional_count;
+#endif
+
+ Py_ssize_t dict_star_index = function->m_args_star_dict_index;
+
+ PyObject **varnames = function->m_varnames;
+
+#if PYTHON_VERSION < 0x380
+ Py_ssize_t kw_arg_start = 0;
+#else
+ Py_ssize_t kw_arg_start = function->m_args_pos_only_count;
+#endif
+
+ for (Py_ssize_t i = kw_arg_start; i < keywords_count; i++) {
+ PyObject *arg_name = varnames[i];
+
+ PyObject *kw_arg_value = DICT_GET_ITEM1(python_pars[dict_star_index], arg_name);
+
+ if (kw_arg_value != NULL) {
+ assert(python_pars[i] == NULL);
+
+ python_pars[i] = kw_arg_value;
+
+ PyDict_DelItem(python_pars[dict_star_index], arg_name);
+
+ kw_found += 1;
+
+#if PYTHON_VERSION >= 0x300
+ if (i >= keyword_after_index) {
+ *kw_only_found += 1;
+ }
+#endif
+ }
+ }
+
+ return kw_found;
+}
+
+static void makeStarListTupleCopy(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size) {
+ assert(function->m_args_star_list_index != -1);
+ Py_ssize_t list_star_index = function->m_args_star_list_index;
+
+ // Copy left-over argument values to the star list parameter given.
+ if (args_size > function->m_args_positional_count) {
+ python_pars[list_star_index] = PyTuple_New(args_size - function->m_args_positional_count);
+
+ for (Py_ssize_t i = 0; i < args_size - function->m_args_positional_count; i++) {
+ PyObject *value = args[function->m_args_positional_count + i];
+
+ PyTuple_SET_ITEM(python_pars[list_star_index], i, value);
+ Py_INCREF(value);
+ }
+ } else {
+ python_pars[list_star_index] = const_tuple_empty;
+ Py_INCREF(const_tuple_empty);
+ }
+}
+
+static void makeStarListTupleCopyMethod(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size) {
+ assert(function->m_args_star_list_index != -1);
+ Py_ssize_t list_star_index = function->m_args_star_list_index;
+
+ // Copy left-over argument values to the star list parameter given.
+ if (args_size + 1 > function->m_args_positional_count) {
+ python_pars[list_star_index] = PyTuple_New(args_size + 1 - function->m_args_positional_count);
+
+ for (Py_ssize_t i = 0; i < args_size + 1 - function->m_args_positional_count; i++) {
+ PyObject *value = args[function->m_args_positional_count + i - 1];
+
+ PyTuple_SET_ITEM(python_pars[list_star_index], i, value);
+ Py_INCREF(value);
+ }
+ } else {
+ python_pars[list_star_index] = const_tuple_empty;
+ Py_INCREF(const_tuple_empty);
+ }
+}
+
+static bool _handleArgumentsPlainOnly(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size) {
+ Py_ssize_t arg_count = function->m_args_positional_count;
+
+ // Check if too many arguments were given in case of non list star arg.
+ // For Python3.3 it's done only later, when more knowledge has
+ // been gained. TODO: Could be done this way for improved mode
+ // on all versions.
+#if PYTHON_VERSION < 0x300
+ if (function->m_args_star_list_index == -1) {
+ if (unlikely(args_size > arg_count)) {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooManyArguments(function, args_size, 0);
+#else
+ formatErrorTooManyArguments(function, args_size);
+#endif
+ return false;
+ }
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ bool parameter_error = false;
+#endif
+
+ Py_ssize_t defaults_given = function->m_defaults_given;
+
+ if (args_size + defaults_given < arg_count) {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooFewArguments(function, 0, args_size);
+ return false;
+#elif PYTHON_VERSION < 0x300
+ formatErrorTooFewArguments(function, args_size);
+ return false;
+#else
+ parameter_error = true;
+#endif
+ }
+
+ for (Py_ssize_t i = 0; i < args_size; i++) {
+ if (i >= arg_count)
+ break;
+
+ assert(python_pars[i] == NULL);
+
+ python_pars[i] = args[i];
+ Py_INCREF(python_pars[i]);
+ }
+
+#if PYTHON_VERSION >= 0x300
+ if (parameter_error == false) {
+#endif
+ PyObject *source = function->m_defaults;
+
+ for (Py_ssize_t i = args_size; i < arg_count; i++) {
+ assert(python_pars[i] == NULL);
+ assert(i + defaults_given >= arg_count);
+
+ python_pars[i] = PyTuple_GET_ITEM(source, defaults_given + i - arg_count);
+ Py_INCREF(python_pars[i]);
+ }
+#if PYTHON_VERSION >= 0x300
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ if (unlikely(parameter_error)) {
+ formatErrorTooFewArguments(function, python_pars);
+ return false;
+ }
+
+ if (function->m_args_star_list_index == -1) {
+ // Check if too many arguments were given in case of non list star arg
+ if (unlikely(args_size > arg_count)) {
+ formatErrorTooManyArguments(function, args_size, 0);
+ return false;
+ }
+ }
+#endif
+
+ if (function->m_args_star_list_index != -1) {
+ makeStarListTupleCopy(function, python_pars, args, args_size);
+ }
+
+ return true;
+}
+
+static bool handleMethodArgumentsPlainOnly(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *object, PyObject **args, Py_ssize_t args_size) {
+ Py_ssize_t arg_count = function->m_args_positional_count;
+
+ // There may be no self, otherwise we can directly assign it.
+ if (arg_count >= 1) {
+ python_pars[0] = object;
+ Py_INCREF(object);
+ } else {
+ // Without self, there can only be star list to get the object as its
+ // first element. Or we complain about illegal arguments.
+ if (function->m_args_star_list_index == 0) {
+ python_pars[0] = PyTuple_New(args_size + 1);
+ PyTuple_SET_ITEM(python_pars[0], 0, object);
+ Py_INCREF(object);
+
+ for (Py_ssize_t i = 0; i < args_size; i++) {
+ PyTuple_SET_ITEM(python_pars[0], i + 1, args[i]);
+ Py_INCREF(args[i]);
+ }
+
+ return true;
+ }
+ }
+
+ // Check if too many arguments were given in case of non list star arg.
+ // For Python3.3 it's done only later, when more knowledge has
+ // been gained. TODO: Could be done this way for improved mode
+ // on all versions.
+#if PYTHON_VERSION < 0x300
+ if (function->m_args_star_list_index == -1) {
+ if (unlikely(args_size + 1 > arg_count)) {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooManyArguments(function, args_size + 1, 0);
+#else
+ formatErrorTooManyArguments(function, args_size + 1);
+#endif
+ return false;
+ }
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ bool parameter_error = false;
+#endif
+ Py_ssize_t defaults_given = function->m_defaults_given;
+
+ if (args_size + 1 + defaults_given < arg_count) {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooFewArguments(function, 0, args_size + 1);
+ return false;
+#elif PYTHON_VERSION < 0x300
+ formatErrorTooFewArguments(function, args_size + 1);
+ return false;
+#else
+ parameter_error = true;
+#endif
+ }
+
+ for (Py_ssize_t i = 0; i < args_size; i++) {
+ if (i + 1 >= arg_count)
+ break;
+
+ assert(python_pars[i + 1] == NULL);
+
+ python_pars[i + 1] = args[i];
+ Py_INCREF(python_pars[i + 1]);
+ }
+
+#if PYTHON_VERSION >= 0x300
+ if (parameter_error == false) {
+#endif
+ for (Py_ssize_t i = args_size + 1; i < arg_count; i++) {
+ assert(python_pars[i] == NULL);
+ assert(i + defaults_given >= arg_count);
+
+ python_pars[i] = PyTuple_GET_ITEM(function->m_defaults, defaults_given + i - arg_count);
+ Py_INCREF(python_pars[i]);
+ }
+#if PYTHON_VERSION >= 0x300
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ if (unlikely(parameter_error)) {
+ formatErrorTooFewArguments(function, python_pars);
+ return false;
+ }
+
+ if (function->m_args_star_list_index == -1) {
+ // Check if too many arguments were given in case of non list star arg
+ if (unlikely(args_size + 1 > arg_count)) {
+ formatErrorTooManyArguments(function, args_size + 1, 0);
+ return false;
+ }
+ }
+#endif
+
+ if (function->m_args_star_list_index != -1) {
+ makeStarListTupleCopyMethod(function, python_pars, args, args_size);
+ }
+
+ return true;
+}
+
+#if PYTHON_VERSION < 0x270
+static bool _handleArgumentsPlain(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size, Py_ssize_t kw_found, Py_ssize_t kw_size)
+#elif PYTHON_VERSION < 0x300
+static bool _handleArgumentsPlain(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size, Py_ssize_t kw_found)
+#else
+static bool _handleArgumentsPlain(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size, Py_ssize_t kw_found,
+ Py_ssize_t kw_only_found)
+#endif
+{
+ Py_ssize_t arg_count = function->m_args_positional_count;
+
+ // Check if too many arguments were given in case of non list star arg.
+ // For Python3.3 it's done only later, when more knowledge has
+ // been gained. TODO: Could be done this way for improved mode
+ // on all versions.
+#if PYTHON_VERSION < 0x300
+ if (function->m_args_star_list_index == -1) {
+ if (unlikely(args_size > arg_count)) {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooManyArguments(function, args_size, kw_size);
+#else
+ formatErrorTooManyArguments(function, args_size + kw_found);
+#endif
+ return false;
+ }
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ bool parameter_error = false;
+#endif
+
+ if (kw_found > 0) {
+ Py_ssize_t i;
+ for (i = 0; i < (args_size < arg_count ? args_size : arg_count); i++) {
+ if (unlikely(python_pars[i] != NULL)) {
+ formatErrorMultipleValuesGiven(function, i);
+ return false;
+ }
+
+ python_pars[i] = args[i];
+ Py_INCREF(python_pars[i]);
+ }
+
+ Py_ssize_t defaults_given = function->m_defaults_given;
+
+ for (; i < arg_count; i++) {
+ if (python_pars[i] == NULL) {
+
+ if (i + defaults_given >= arg_count) {
+ python_pars[i] = PyTuple_GET_ITEM(function->m_defaults, defaults_given + i - arg_count);
+ Py_INCREF(python_pars[i]);
+ } else {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooFewArguments(function, kw_size, args_size + kw_found);
+ return false;
+#elif PYTHON_VERSION < 0x300
+ formatErrorTooFewArguments(function, args_size + kw_found);
+ return false;
+#else
+ parameter_error = true;
+#endif
+ }
+ }
+ }
+ } else {
+ Py_ssize_t usable = (args_size < arg_count ? args_size : arg_count);
+ Py_ssize_t defaults_given = function->m_defaults_given;
+
+ if (defaults_given < arg_count - usable) {
+#if PYTHON_VERSION < 0x270
+ formatErrorTooFewArguments(function, kw_size, args_size + kw_found);
+ return false;
+#elif PYTHON_VERSION < 0x300
+ formatErrorTooFewArguments(function, args_size + kw_found);
+ return false;
+#else
+ parameter_error = true;
+#endif
+ }
+
+ for (Py_ssize_t i = 0; i < usable; i++) {
+ assert(python_pars[i] == NULL);
+
+ python_pars[i] = args[i];
+ Py_INCREF(python_pars[i]);
+ }
+
+#if PYTHON_VERSION >= 0x300
+ if (parameter_error == false) {
+#endif
+ for (Py_ssize_t i = usable; i < arg_count; i++) {
+ assert(python_pars[i] == NULL);
+ assert(i + defaults_given >= arg_count);
+
+ python_pars[i] = PyTuple_GET_ITEM(function->m_defaults, defaults_given + i - arg_count);
+ Py_INCREF(python_pars[i]);
+ }
+#if PYTHON_VERSION >= 0x300
+ }
+#endif
+ }
+
+#if PYTHON_VERSION >= 0x300
+ if (unlikely(parameter_error)) {
+ formatErrorTooFewArguments(function, python_pars);
+ return false;
+ }
+
+ if (function->m_args_star_list_index == -1) {
+ // Check if too many arguments were given in case of non list star arg
+ if (unlikely(args_size > arg_count)) {
+ formatErrorTooManyArguments(function, args_size, kw_only_found);
+ return false;
+ }
+ }
+#endif
+
+ if (function->m_args_star_list_index != -1) {
+ makeStarListTupleCopy(function, python_pars, args, args_size);
+ }
+
+ return true;
+}
+
+// Release them all in case of an error.
+static void releaseParameters(struct Nuitka_FunctionObject const *function, PyObject *const *python_pars) {
+ Py_ssize_t arg_count = function->m_args_overall_count;
+
+ for (Py_ssize_t i = 0; i < arg_count; i++) {
+ Py_XDECREF(python_pars[i]);
+ }
+}
+
+bool parseArgumentsPos(struct Nuitka_FunctionObject const *function, PyObject **python_pars, PyObject **args,
+ Py_ssize_t args_size) {
+ bool result;
+
+ Py_ssize_t arg_count = function->m_args_positional_count;
+
+#if PYTHON_VERSION >= 0x300
+ bool kw_only_error;
+#endif
+
+ if (unlikely(arg_count == 0 && function->m_args_simple && args_size != 0)) {
+#if PYTHON_VERSION < 0x300
+ formatErrorNoArgumentAllowed(function, args_size);
+#else
+ formatErrorNoArgumentAllowed(function, NULL, args_size);
+#endif
+
+ goto error_exit;
+ }
+
+ result = _handleArgumentsPlainOnly(function, python_pars, args, args_size);
+
+ if (result == false) {
+ goto error_exit;
+ }
+
+#if PYTHON_VERSION >= 0x300
+
+ // For Python3.3 the keyword only errors are all reported at once.
+ kw_only_error = false;
+
+ for (Py_ssize_t i = function->m_args_positional_count; i < function->m_args_keywords_count; i++) {
+ if (python_pars[i] == NULL) {
+ PyObject *arg_name = function->m_varnames[i];
+
+ if (function->m_kwdefaults != NULL) {
+ python_pars[i] = DICT_GET_ITEM1(function->m_kwdefaults, arg_name);
+ }
+
+ if (unlikely(python_pars[i] == NULL)) {
+ kw_only_error = true;
+ }
+ }
+ }
+
+ if (unlikely(kw_only_error)) {
+ formatErrorTooFewKwOnlyArguments(function, &python_pars[function->m_args_positional_count]);
+
+ goto error_exit;
+ }
+
+#endif
+
+ if (function->m_args_star_dict_index != -1) {
+ python_pars[function->m_args_star_dict_index] = PyDict_New();
+ }
+
+ return true;
+
+error_exit:
+
+ releaseParameters(function, python_pars);
+ return false;
+}
+
+bool parseArgumentsMethodPos(struct Nuitka_FunctionObject const *function, PyObject **python_pars, PyObject *object,
+ PyObject **args, Py_ssize_t args_size) {
+ bool result;
+
+#if PYTHON_VERSION >= 0x300
+ bool kw_only_error;
+#endif
+
+ result = handleMethodArgumentsPlainOnly(function, python_pars, object, args, args_size);
+
+ if (result == false) {
+ goto error_exit;
+ }
+
+#if PYTHON_VERSION >= 0x300
+
+ // For Python3 the keyword only errors are all reported at once.
+ kw_only_error = false;
+
+ for (Py_ssize_t i = function->m_args_positional_count; i < function->m_args_keywords_count; i++) {
+ if (python_pars[i] == NULL) {
+ PyObject *arg_name = function->m_varnames[i];
+
+ if (function->m_kwdefaults != NULL) {
+ python_pars[i] = DICT_GET_ITEM1(function->m_kwdefaults, arg_name);
+ }
+
+ if (unlikely(python_pars[i] == NULL)) {
+ kw_only_error = true;
+ }
+ }
+ }
+
+ if (unlikely(kw_only_error)) {
+ formatErrorTooFewKwOnlyArguments(function, &python_pars[function->m_args_positional_count]);
+
+ goto error_exit;
+ }
+
+#endif
+
+ if (function->m_args_star_dict_index != -1) {
+ python_pars[function->m_args_star_dict_index] = PyDict_New();
+ }
+
+ return true;
+
+error_exit:
+
+ releaseParameters(function, python_pars);
+ return false;
+}
+
+static bool parseArgumentsFull(struct Nuitka_FunctionObject const *function, PyObject **python_pars, PyObject **args,
+ Py_ssize_t args_size, PyObject *kw) {
+ Py_ssize_t kw_size = kw ? DICT_SIZE(kw) : 0;
+ Py_ssize_t kw_found;
+ bool result;
+#if PYTHON_VERSION >= 0x300
+ Py_ssize_t kw_only_found;
+ bool kw_only_error;
+#endif
+
+ Py_ssize_t arg_count = function->m_args_keywords_count;
+
+ assert(kw == NULL || PyDict_CheckExact(kw));
+
+ if (unlikely(arg_count == 0 && function->m_args_simple && args_size + kw_size > 0)) {
+#if PYTHON_VERSION < 0x300
+ formatErrorNoArgumentAllowed(function, args_size + kw_size);
+#else
+ formatErrorNoArgumentAllowed(function, kw_size > 0 ? kw : NULL, args_size);
+#endif
+
+ goto error_exit;
+ }
+
+#if PYTHON_VERSION >= 0x300
+ kw_only_found = 0;
+#endif
+ if (function->m_args_star_dict_index != -1) {
+#if PYTHON_VERSION < 0x300
+ kw_found = handleKeywordArgsWithStarDict(function, python_pars, kw);
+#else
+ kw_found = handleKeywordArgsWithStarDict(function, python_pars, &kw_only_found, kw);
+#endif
+ if (kw_found == -1) {
+ goto error_exit;
+ }
+ } else if (kw == NULL || DICT_SIZE(kw) == 0) {
+ kw_found = 0;
+ } else {
+#if PYTHON_VERSION < 0x300
+ kw_found = handleKeywordArgs(function, python_pars, kw);
+#else
+ kw_found = handleKeywordArgs(function, python_pars, &kw_only_found, kw);
+#endif
+ if (kw_found == -1) {
+ goto error_exit;
+ }
+ }
+
+#if PYTHON_VERSION < 0x270
+ result = _handleArgumentsPlain(function, python_pars, args, args_size, kw_found, kw_size);
+#elif PYTHON_VERSION < 0x300
+ result = _handleArgumentsPlain(function, python_pars, args, args_size, kw_found);
+#else
+ result = _handleArgumentsPlain(function, python_pars, args, args_size, kw_found, kw_only_found);
+#endif
+
+ if (result == false) {
+ goto error_exit;
+ }
+
+#if PYTHON_VERSION >= 0x300
+
+ // For Python3.3 the keyword only errors are all reported at once.
+ kw_only_error = false;
+
+ for (Py_ssize_t i = function->m_args_positional_count; i < function->m_args_keywords_count; i++) {
+ if (python_pars[i] == NULL) {
+ PyObject *arg_name = function->m_varnames[i];
+
+ if (function->m_kwdefaults != NULL) {
+ python_pars[i] = DICT_GET_ITEM1(function->m_kwdefaults, arg_name);
+ }
+
+ if (unlikely(python_pars[i] == NULL)) {
+ kw_only_error = true;
+ }
+ }
+ }
+
+ if (unlikely(kw_only_error)) {
+ formatErrorTooFewKwOnlyArguments(function, &python_pars[function->m_args_positional_count]);
+
+ goto error_exit;
+ }
+
+#endif
+
+ return true;
+
+error_exit:
+
+ releaseParameters(function, python_pars);
+ return false;
+}
+
+PyObject *Nuitka_CallFunctionPosArgsKwArgs(struct Nuitka_FunctionObject const *function, PyObject **args,
+ Py_ssize_t args_size, PyObject *kw) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (!parseArgumentsFull(function, python_pars, args, args_size, kw))
+ return NULL;
+ return function->m_c_code(function, python_pars);
+}
+
+PyObject *Nuitka_CallMethodFunctionNoArgs(struct Nuitka_FunctionObject const *function, PyObject *object) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ bool result = handleMethodArgumentsPlainOnly(function, python_pars, object, NULL, 0);
+ // For Python3.3 the keyword only errors are all reported at once.
+#if PYTHON_VERSION >= 0x300
+ bool kw_only_error;
+#endif
+
+ if (result == false) {
+ goto error_exit;
+ }
+
+#if PYTHON_VERSION >= 0x300
+
+ kw_only_error = false;
+
+ for (Py_ssize_t i = function->m_args_positional_count; i < function->m_args_keywords_count; i++) {
+ if (python_pars[i] == NULL) {
+ PyObject *arg_name = function->m_varnames[i];
+
+ if (function->m_kwdefaults != NULL) {
+ python_pars[i] = DICT_GET_ITEM1(function->m_kwdefaults, arg_name);
+ }
+
+ if (unlikely(python_pars[i] == NULL)) {
+ kw_only_error = true;
+ }
+ }
+ }
+
+ if (unlikely(kw_only_error)) {
+ formatErrorTooFewKwOnlyArguments(function, &python_pars[function->m_args_positional_count]);
+
+ goto error_exit;
+ }
+
+#endif
+
+ if (function->m_args_star_dict_index != -1) {
+ python_pars[function->m_args_star_dict_index] = PyDict_New();
+ }
+
+ return function->m_c_code(function, python_pars);
+
+error_exit:
+
+ releaseParameters(function, python_pars);
+ return NULL;
+}
+
+PyObject *Nuitka_CallMethodFunctionPosArgs(struct Nuitka_FunctionObject const *function, PyObject *object,
+ PyObject **args, Py_ssize_t args_size) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ bool result = handleMethodArgumentsPlainOnly(function, python_pars, object, args, args_size);
+ // For Python3.3 the keyword only errors are all reported at once.
+#if PYTHON_VERSION >= 0x300
+ bool kw_only_error;
+#endif
+
+ if (result == false) {
+ goto error_exit;
+ }
+
+#if PYTHON_VERSION >= 0x300
+ kw_only_error = false;
+
+ for (Py_ssize_t i = function->m_args_positional_count; i < function->m_args_keywords_count; i++) {
+ if (python_pars[i] == NULL) {
+ PyObject *arg_name = function->m_varnames[i];
+
+ if (function->m_kwdefaults != NULL) {
+ python_pars[i] = DICT_GET_ITEM1(function->m_kwdefaults, arg_name);
+ }
+
+ if (unlikely(python_pars[i] == NULL)) {
+ kw_only_error = true;
+ }
+ }
+ }
+
+ if (unlikely(kw_only_error)) {
+ formatErrorTooFewKwOnlyArguments(function, &python_pars[function->m_args_positional_count]);
+
+ goto error_exit;
+ }
+
+#endif
+
+ if (function->m_args_star_dict_index != -1) {
+ python_pars[function->m_args_star_dict_index] = PyDict_New();
+ }
+
+ return function->m_c_code(function, python_pars);
+
+error_exit:
+
+ releaseParameters(function, python_pars);
+ return NULL;
+}
+
+PyObject *Nuitka_CallMethodFunctionPosArgsKwArgs(struct Nuitka_FunctionObject const *function, PyObject *object,
+ PyObject **args, Py_ssize_t args_size, PyObject *kw) {
+#ifdef _MSC_VER
+ PyObject **new_args = (PyObject **)_alloca(sizeof(PyObject *) * (args_size + 1));
+#else
+ PyObject *new_args[args_size + 1];
+#endif
+ new_args[0] = object;
+ memcpy(new_args + 1, args, args_size * sizeof(PyObject *));
+
+ // TODO: Specialize implementation for massive gains.
+ return Nuitka_CallFunctionPosArgsKwArgs(function, new_args, args_size + 1, kw);
+}
+
+#if PYTHON_VERSION >= 0x380
+
+static Py_ssize_t handleVectorcallKeywordArgs(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ Py_ssize_t *kw_only_found, PyObject *const *kw_names,
+ PyObject *const *kw_values, Py_ssize_t kw_size) {
+ Py_ssize_t keywords_count = function->m_args_keywords_count;
+
+ Py_ssize_t keyword_after_index = function->m_args_positional_count;
+
+ assert(function->m_args_star_dict_index == -1);
+
+ Py_ssize_t kw_found = 0;
+
+ for (Py_ssize_t ppos = 0; ppos < kw_size; ++ppos) {
+ PyObject *key = kw_names[ppos];
+
+ if (unlikely(!PyUnicode_Check(key))) {
+ formatErrorKeywordsMustBeString(function);
+ return -1;
+ }
+
+ NUITKA_MAY_BE_UNUSED bool found = false;
+
+ Py_ssize_t kw_arg_start = function->m_args_pos_only_count;
+
+ for (Py_ssize_t i = kw_arg_start; i < keywords_count; i++) {
+ if (function->m_varnames[i] == key) {
+ assert(python_pars[i] == NULL);
+ python_pars[i] = kw_values[ppos];
+ Py_INCREF(python_pars[i]);
+
+ if (i >= keyword_after_index) {
+ *kw_only_found += 1;
+ }
+
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false) {
+ PyObject **varnames = function->m_varnames;
+
+ for (Py_ssize_t i = kw_arg_start; i < keywords_count; i++) {
+ if (RICH_COMPARE_EQ_CBOOL_OBJECT_OBJECT_NORECURSE(varnames[i], key)) {
+ assert(python_pars[i] == NULL);
+ python_pars[i] = kw_values[ppos];
+ Py_INCREF(python_pars[i]);
+
+ if (i >= keyword_after_index) {
+ *kw_only_found += 1;
+ }
+
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if (unlikely(found == false)) {
+ bool pos_only_error = false;
+
+ for (Py_ssize_t i = 0; i < kw_arg_start; i++) {
+ PyObject **varnames = function->m_varnames;
+
+ if (RICH_COMPARE_EQ_CBOOL_OBJECT_OBJECT_NORECURSE(varnames[i], key)) {
+ pos_only_error = true;
+ break;
+ }
+ }
+
+ if (pos_only_error == true) {
+ PyErr_Format(PyExc_TypeError,
+ "%s() got some positional-only arguments passed as keyword arguments: '%s'",
+ Nuitka_String_AsString(function->m_name),
+ Nuitka_String_Check(key) ? Nuitka_String_AsString(key) : "");
+
+ } else {
+
+ PyErr_Format(PyExc_TypeError, "%s() got an unexpected keyword argument '%s'",
+ Nuitka_String_AsString(function->m_name),
+ Nuitka_String_Check(key) ? Nuitka_String_AsString(key) : "");
+ }
+
+ return -1;
+ }
+
+ kw_found += 1;
+ }
+
+ return kw_found;
+}
+
+static bool MAKE_STAR_DICT_DICTIONARY_COPY38(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *kw_names, PyObject *const *kw_values,
+ Py_ssize_t kw_size) {
+ Py_ssize_t star_dict_index = function->m_args_star_dict_index;
+ assert(star_dict_index != -1);
+
+ python_pars[star_dict_index] = _PyDict_NewPresized(kw_size);
+
+ for (int i = 0; i < kw_size; i++) {
+ PyObject *key = kw_names[i];
+
+ if (unlikely(!PyUnicode_Check(key))) {
+ formatErrorKeywordsMustBeString(function);
+ return false;
+ }
+
+ int res = PyDict_SetItem(python_pars[star_dict_index], key, kw_values[i]);
+
+ if (unlikely(res != 0)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static Py_ssize_t handleVectorcallKeywordArgsWithStarDict(struct Nuitka_FunctionObject const *function,
+ PyObject **python_pars, Py_ssize_t *kw_only_found,
+ PyObject *const *kw_names, PyObject *const *kw_values,
+ Py_ssize_t kw_size) {
+ assert(function->m_args_star_dict_index != -1);
+
+ if (unlikely(MAKE_STAR_DICT_DICTIONARY_COPY38(function, python_pars, kw_names, kw_values, kw_size) == false)) {
+ return -1;
+ }
+
+ Py_ssize_t kw_found = 0;
+ Py_ssize_t keywords_count = function->m_args_keywords_count;
+ Py_ssize_t keyword_after_index = function->m_args_positional_count;
+
+ Py_ssize_t dict_star_index = function->m_args_star_dict_index;
+
+ PyObject **varnames = function->m_varnames;
+
+ for (Py_ssize_t i = 0; i < keywords_count; i++) {
+ PyObject *arg_name = varnames[i];
+
+ PyObject *kw_arg_value = DICT_GET_ITEM1(python_pars[dict_star_index], arg_name);
+
+ if (kw_arg_value != NULL) {
+ assert(python_pars[i] == NULL);
+
+ python_pars[i] = kw_arg_value;
+
+ PyDict_DelItem(python_pars[dict_star_index], arg_name);
+
+ kw_found += 1;
+
+ if (i >= keyword_after_index) {
+ *kw_only_found += 1;
+ }
+ }
+ }
+
+ return kw_found;
+}
+
+static bool parseArgumentsVectorcall(struct Nuitka_FunctionObject const *function, PyObject **python_pars,
+ PyObject *const *args, Py_ssize_t args_size, PyObject *const *kw_names,
+ Py_ssize_t kw_size) {
+ Py_ssize_t kw_found;
+ bool result;
+ Py_ssize_t kw_only_found;
+ bool kw_only_error;
+
+ Py_ssize_t arg_count = function->m_args_keywords_count;
+
+ if (unlikely(arg_count == 0 && function->m_args_simple && args_size + kw_size > 0)) {
+ char const *function_name = Nuitka_String_AsString(function->m_name);
+ if (kw_size == 0) {
+ PyErr_Format(PyExc_TypeError, "%s() takes 0 positional arguments but %zd was given", function_name,
+ args_size);
+ } else {
+ PyErr_Format(PyExc_TypeError, "%s() got an unexpected keyword argument '%s'", function_name,
+ Nuitka_String_AsString(kw_names[0]));
+ }
+
+ goto error_exit;
+ }
+
+ kw_only_found = 0;
+ if (function->m_args_star_dict_index != -1) {
+ kw_found = handleVectorcallKeywordArgsWithStarDict(function, python_pars, &kw_only_found, kw_names,
+ args + args_size, kw_size);
+ if (kw_found == -1) {
+ goto error_exit;
+ }
+ } else if (kw_size == 0) {
+ kw_found = 0;
+ } else {
+ kw_found =
+ handleVectorcallKeywordArgs(function, python_pars, &kw_only_found, kw_names, args + args_size, kw_size);
+
+ if (kw_found == -1) {
+ goto error_exit;
+ }
+ }
+
+ result = _handleArgumentsPlain(function, python_pars, args, args_size, kw_found, kw_only_found);
+
+ if (result == false) {
+ goto error_exit;
+ }
+
+ // For Python3.3 the keyword only errors are all reported at once.
+ kw_only_error = false;
+
+ for (Py_ssize_t i = function->m_args_positional_count; i < function->m_args_keywords_count; i++) {
+ if (python_pars[i] == NULL) {
+ PyObject *arg_name = function->m_varnames[i];
+
+ if (function->m_kwdefaults != NULL) {
+ python_pars[i] = DICT_GET_ITEM1(function->m_kwdefaults, arg_name);
+ }
+
+ if (unlikely(python_pars[i] == NULL)) {
+ kw_only_error = true;
+ }
+ }
+ }
+
+ if (unlikely(kw_only_error)) {
+ formatErrorTooFewKwOnlyArguments(function, &python_pars[function->m_args_positional_count]);
+
+ goto error_exit;
+ }
+
+ return true;
+
+error_exit:
+
+ releaseParameters(function, python_pars);
+ return false;
+}
+
+static PyObject *Nuitka_CallFunctionVectorcall(struct Nuitka_FunctionObject const *function, PyObject *const *args,
+ Py_ssize_t args_size, PyObject *const *kw_names, Py_ssize_t kw_size) {
+#ifdef _MSC_VER
+ PyObject **python_pars = (PyObject **)_alloca(sizeof(PyObject *) * function->m_args_overall_count);
+#else
+ PyObject *python_pars[function->m_args_overall_count];
+#endif
+ memset(python_pars, 0, function->m_args_overall_count * sizeof(PyObject *));
+
+ if (!parseArgumentsVectorcall(function, python_pars, args, args_size, kw_names, kw_size))
+ return NULL;
+ return function->m_c_code(function, python_pars);
+}
+
+static PyObject *Nuitka_Function_tp_vectorcall(struct Nuitka_FunctionObject *function, PyObject *const *stack,
+ size_t nargsf, PyObject *kwnames) {
+ assert(kwnames == NULL || PyTuple_CheckExact(kwnames));
+ Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
+
+ Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+ assert(nargs >= 0);
+ assert((nargs == 0 && nkwargs == 0) || stack != NULL);
+
+ return Nuitka_CallFunctionVectorcall(function, stack, nargs, kwnames ? &PyTuple_GET_ITEM(kwnames, 0) : NULL,
+ nkwargs);
+}
+#endif
+
+#include "CompiledMethodType.c"
diff --git a/mtube.build/static_src/CompiledFunctionType.o b/mtube.build/static_src/CompiledFunctionType.o
new file mode 100644
index 0000000..3503b89
Binary files /dev/null and b/mtube.build/static_src/CompiledFunctionType.o differ
diff --git a/mtube.build/static_src/CompiledGeneratorType.c b/mtube.build/static_src/CompiledGeneratorType.c
new file mode 100644
index 0000000..190bea3
--- /dev/null
+++ b/mtube.build/static_src/CompiledGeneratorType.c
@@ -0,0 +1,1582 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/** Compiled Generators.
+ *
+ * Unlike in CPython, we have one type for just generators, this doesn't do coroutines
+ * nor asyncgen.
+ *
+ * It strives to be full replacement for normal generators, while providing also an
+ * interface for quick iteration from compiled code.
+ *
+ */
+
+#include "nuitka/prelude.h"
+
+#include "nuitka/freelists.h"
+
+// In a separate file, code to interact with uncompiled generators, that does
+// all the quirks necessary to get those working.
+#include "CompiledGeneratorTypeUncompiledIntegration.c"
+
+// Debugging output tools
+#if _DEBUG_GENERATOR
+NUITKA_MAY_BE_UNUSED static void _PRINT_GENERATOR_STATUS(char const *descriptor, char const *context,
+ struct Nuitka_GeneratorObject *generator) {
+ char const *status;
+
+ switch (generator->m_status) {
+ case status_Finished:
+ status = "(finished)";
+ break;
+ case status_Running:
+ status = "(running)";
+ break;
+ case status_Unused:
+ status = "(unused)";
+ break;
+ default:
+ status = "(ILLEGAL)";
+ break;
+ }
+
+ PRINT_STRING(descriptor);
+ PRINT_STRING(" : ");
+ PRINT_STRING(context);
+ PRINT_STRING(" ");
+ PRINT_ITEM((PyObject *)generator);
+ PRINT_STRING(" ");
+ PRINT_STRING(status);
+ PRINT_STRING(" ");
+ PRINT_REFCOUNT((PyObject *)generator);
+ PRINT_NEW_LINE();
+}
+
+#define PRINT_GENERATOR_STATUS(context, generator) _PRINT_GENERATOR_STATUS(__FUNCTION__, context, generator)
+
+#endif
+
+#if _DEBUG_GENERATOR || _DEBUG_COROUTINE || _DEBUG_ASYNCGEN
+
+NUITKA_MAY_BE_UNUSED static void PRINT_COROUTINE_VALUE(char const *name, PyObject *value) {
+ PRINT_STRING(name);
+ PRINT_STRING("=");
+ PRINT_ITEM(value);
+ if (value) {
+ PRINT_REFCOUNT(value);
+ }
+ PRINT_NEW_LINE();
+}
+
+NUITKA_MAY_BE_UNUSED static void PRINT_COROUTINE_STRING(char const *name, char const *value) {
+ PRINT_STRING(name);
+ PRINT_STRING("=");
+ PRINT_STRING(value);
+ PRINT_NEW_LINE();
+}
+
+#endif
+
+static PyObject *Nuitka_Generator_tp_repr(struct Nuitka_GeneratorObject *generator) {
+#if PYTHON_VERSION < 0x300
+ return PyString_FromFormat("", Nuitka_String_AsString(generator->m_name),
+ generator);
+#else
+ return PyUnicode_FromFormat("",
+#if PYTHON_VERSION < 0x350
+ Nuitka_String_AsString(generator->m_name),
+#else
+ Nuitka_String_AsString(generator->m_qualname),
+#endif
+ generator);
+#endif
+}
+
+static long Nuitka_Generator_tp_traverse(struct Nuitka_GeneratorObject *generator, visitproc visit, void *arg) {
+ CHECK_OBJECT(generator);
+
+ // TODO: Identify the impact of not visiting owned objects like module and
+ // frame.
+#if PYTHON_VERSION >= 0x300
+ Py_VISIT(generator->m_yieldfrom);
+#endif
+
+ for (Py_ssize_t i = 0; i < generator->m_closure_given; i++) {
+ Py_VISIT(generator->m_closure[i]);
+ }
+
+ return 0;
+}
+
+static void Nuitka_Generator_release_closure(struct Nuitka_GeneratorObject *generator) {
+ for (Py_ssize_t i = 0; i < generator->m_closure_given; i++) {
+ CHECK_OBJECT(generator->m_closure[i]);
+ Py_DECREF(generator->m_closure[i]);
+ }
+
+ generator->m_closure_given = 0;
+}
+
+#if PYTHON_VERSION >= 0x300
+
+// Note: Shared with coroutines and asyncgen code.
+static PyObject *ERROR_GET_STOP_ITERATION_VALUE() {
+ assert(PyErr_ExceptionMatches(PyExc_StopIteration));
+
+ PyObject *exception_type, *exception_value;
+ PyTracebackObject *exception_tb;
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_tb);
+
+ PyObject *value = NULL;
+
+ if (exception_value) {
+ if (EXCEPTION_MATCH_BOOL_SINGLE(exception_value, PyExc_StopIteration)) {
+ value = ((PyStopIterationObject *)exception_value)->value;
+ Py_XINCREF(value);
+ Py_DECREF(exception_value);
+ } else {
+ value = exception_value;
+ }
+ }
+
+ if (value == NULL) {
+ Py_INCREF(Py_None);
+ value = Py_None;
+ }
+
+ return value;
+}
+
+static PyObject *_Nuitka_Generator_throw2(struct Nuitka_GeneratorObject *generator, PyObject *exception_type,
+ PyObject *exception_value, PyTracebackObject *exception_tb);
+#if PYTHON_VERSION >= 0x350
+static PyObject *_Nuitka_Coroutine_throw2(struct Nuitka_CoroutineObject *coroutine, bool closing,
+ PyObject *exception_type, PyObject *exception_value,
+ PyTracebackObject *exception_tb);
+#endif
+
+static PyObject *_Nuitka_YieldFromPassExceptionTo(PyObject *value, PyObject *exception_type, PyObject *exception_value,
+ PyTracebackObject *exception_tb) {
+ // The yielding generator is being closed, but we also are tasked to
+ // immediately close the currently running sub-generator.
+ if (EXCEPTION_MATCH_BOOL_SINGLE(exception_type, PyExc_GeneratorExit)) {
+ PyObject *close_method = PyObject_GetAttr(value, const_str_plain_close);
+
+ if (close_method) {
+ PyObject *close_value = PyObject_Call(close_method, const_tuple_empty, NULL);
+ Py_DECREF(close_method);
+
+ if (unlikely(close_value == NULL)) {
+ // Release exception, we are done with it, raising the one from close instead.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+
+ return NULL;
+ }
+
+ Py_DECREF(close_value);
+ } else {
+ PyObject *error = GET_ERROR_OCCURRED();
+
+ if (error != NULL && !EXCEPTION_MATCH_BOOL_SINGLE(error, PyExc_AttributeError)) {
+ PyErr_WriteUnraisable((PyObject *)value);
+ }
+ }
+
+ // Transfer exception ownership to pusblished.
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+
+ return NULL;
+ }
+
+#if NUITKA_UNCOMPILED_THROW_INTEGRATION
+ if (PyGen_CheckExact(value)
+#if PYTHON_VERSION >= 0x350
+ || PyCoro_CheckExact(value)
+#endif
+ ) {
+ PyGenObject *gen = (PyGenObject *)value;
+
+ // Handing exception ownership over.
+ PyObject *result = Nuitka_UncompiledGenerator_throw(gen, 1, exception_type, exception_value, exception_tb);
+
+ return result;
+ }
+#endif
+
+ if (Nuitka_Generator_Check(value)) {
+ struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)value);
+
+ return _Nuitka_Generator_throw2(gen, exception_type, exception_value, exception_tb);
+ }
+
+#if PYTHON_VERSION >= 0x350
+ if (Nuitka_Coroutine_Check(value)) {
+ struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)value);
+ // Handing exception ownership over.
+ return _Nuitka_Coroutine_throw2(coro, true, exception_type, exception_value, exception_tb);
+ }
+
+ if (Nuitka_CoroutineWrapper_Check(value)) {
+ struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineWrapperObject *)value)->m_coroutine;
+ // Handing exception ownership over.
+ return _Nuitka_Coroutine_throw2(coro, true, exception_type, exception_value, exception_tb);
+ }
+#endif
+
+ PyObject *throw_method = PyObject_GetAttr(value, const_str_plain_throw);
+
+ if (throw_method) {
+ PyObject *result =
+ PyObject_CallFunctionObjArgs(throw_method, exception_type, exception_value, exception_tb, NULL);
+ Py_DECREF(throw_method);
+
+ // Releasing exception we own.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+
+ return result;
+ } else if (EXCEPTION_MATCH_BOOL_SINGLE(GET_ERROR_OCCURRED(), PyExc_AttributeError)) {
+ // Restoring the exception we own, to be released when handling it.
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+
+ return NULL;
+ } else {
+ assert(ERROR_OCCURRED());
+
+ // Releasing exception we own.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+
+ return NULL;
+ }
+}
+
+static PyObject *_Nuitka_YieldFromGeneratorCore(struct Nuitka_GeneratorObject *generator, PyObject *yieldfrom,
+ PyObject *send_value) {
+ // Send iteration value to the sub-generator, which may be a CPython
+ // generator object, something with an iterator next, or a send method,
+ // where the later is only required if values other than "None" need to
+ // be passed in.
+ CHECK_OBJECT(yieldfrom);
+ assert(send_value != NULL || ERROR_OCCURRED());
+
+ PyObject *retval;
+
+#if 0
+ PRINT_STRING("YIELD CORE:");
+ PRINT_ITEM( value );
+ PRINT_ITEM( send_value );
+
+ PRINT_NEW_LINE();
+#endif
+
+ assert(send_value != NULL || ERROR_OCCURRED());
+
+ PyObject *exception_type, *exception_value;
+ PyTracebackObject *exception_tb;
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+ // Exception, was thrown into us, need to send that to sub-generator.
+ if (exception_type != NULL) {
+ // Passing ownership of exception fetch to it.
+ retval = _Nuitka_YieldFromPassExceptionTo(yieldfrom, exception_type, exception_value, exception_tb);
+
+ if (unlikely(send_value == NULL)) {
+ PyObject *error = GET_ERROR_OCCURRED();
+
+ if (error != NULL && EXCEPTION_MATCH_BOOL_SINGLE(error, PyExc_StopIteration)) {
+ generator->m_returned = ERROR_GET_STOP_ITERATION_VALUE();
+
+ assert(!ERROR_OCCURRED());
+ return NULL;
+ }
+ }
+ } else if (PyGen_CheckExact(yieldfrom)) {
+ retval = Nuitka_PyGen_Send((PyGenObject *)yieldfrom, Py_None);
+ }
+#if PYTHON_VERSION >= 0x350
+ else if (PyCoro_CheckExact(yieldfrom)) {
+ retval = Nuitka_PyGen_Send((PyGenObject *)yieldfrom, Py_None);
+ }
+#endif
+ else if (send_value == Py_None && Py_TYPE(yieldfrom)->tp_iternext != NULL) {
+ retval = Py_TYPE(yieldfrom)->tp_iternext(yieldfrom);
+ } else {
+ // Bug compatibility here, before 3.3 tuples were unrolled in calls, which is what
+ // PyObject_CallMethod does.
+#if PYTHON_VERSION >= 0x340
+ retval = PyObject_CallMethodObjArgs(yieldfrom, const_str_plain_send, send_value, NULL);
+#else
+ retval = PyObject_CallMethod(yieldfrom, (char *)"send", (char *)"O", send_value);
+#endif
+ }
+
+ // Check the sub-generator result
+ if (retval == NULL) {
+ PyObject *error = GET_ERROR_OCCURRED();
+
+ if (error == NULL) {
+ Py_INCREF(Py_None);
+ generator->m_returned = Py_None;
+ } else if (likely(EXCEPTION_MATCH_BOOL_SINGLE(error, PyExc_StopIteration))) {
+ // The sub-generator has given an exception. In case of
+ // StopIteration, we need to check the value, as it is going to be
+ // the expression value of this "yield from", and we are done. All
+ // other errors, we need to raise.
+ generator->m_returned = ERROR_GET_STOP_ITERATION_VALUE();
+ assert(!ERROR_OCCURRED());
+ }
+
+ return NULL;
+ } else {
+ return retval;
+ }
+}
+
+static PyObject *Nuitka_YieldFromGeneratorCore(struct Nuitka_GeneratorObject *generator, PyObject *send_value) {
+ CHECK_OBJECT(generator);
+ CHECK_OBJECT_X(send_value);
+
+ PyObject *yieldfrom = generator->m_yieldfrom;
+ CHECK_OBJECT(yieldfrom);
+
+ // Need to make it unaccessible while using it.
+ generator->m_yieldfrom = NULL;
+ PyObject *yielded = _Nuitka_YieldFromGeneratorCore(generator, yieldfrom, send_value);
+
+ if (yielded == NULL) {
+ Py_DECREF(yieldfrom);
+
+ if (generator->m_returned != NULL) {
+ PyObject *yield_from_result = generator->m_returned;
+ generator->m_returned = NULL;
+
+ yielded = ((generator_code)generator->m_code)(generator, yield_from_result);
+ } else {
+ assert(ERROR_OCCURRED());
+ yielded = ((generator_code)generator->m_code)(generator, NULL);
+ }
+
+ } else {
+ generator->m_yieldfrom = yieldfrom;
+ }
+
+ return yielded;
+}
+
+static PyObject *Nuitka_YieldFromGeneratorNext(struct Nuitka_GeneratorObject *generator) {
+ CHECK_OBJECT(generator);
+
+ // Coroutines are already perfect for yielding from.
+#if PYTHON_VERSION >= 0x350
+ if (PyCoro_CheckExact(generator->m_yieldfrom) || Nuitka_Coroutine_Check(generator->m_yieldfrom)) {
+ if (unlikely((generator->m_code_object->co_flags & CO_ITERABLE_COROUTINE) == 0)) {
+ Py_DECREF(generator->m_yieldfrom);
+ generator->m_yieldfrom = NULL;
+
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError,
+ "cannot 'yield from' a coroutine object in a non-coroutine generator");
+ return NULL;
+ }
+ } else
+#endif
+ {
+ PyObject *old = generator->m_yieldfrom;
+ generator->m_yieldfrom = MAKE_ITERATOR(generator->m_yieldfrom);
+ Py_DECREF(old);
+
+ if (unlikely(generator->m_yieldfrom == NULL)) {
+ return NULL;
+ }
+ }
+
+ return Nuitka_YieldFromGeneratorCore(generator, Py_None);
+}
+
+static PyObject *Nuitka_YieldFromGeneratorInitial(struct Nuitka_GeneratorObject *generator, PyObject *send_value) {
+ PyObject *result = Nuitka_YieldFromGeneratorCore(generator, send_value);
+
+#if 0
+ PRINT_STRING("RES:");
+ PRINT_ITEM( result );
+ PRINT_NEW_LINE();
+#endif
+
+ return result;
+}
+
+#endif
+
+static PyObject *_Nuitka_Generator_send(struct Nuitka_GeneratorObject *generator, PyObject *value,
+ PyObject *exception_type, PyObject *exception_value,
+ PyTracebackObject *exception_tb) {
+ CHECK_OBJECT(generator);
+ assert(Nuitka_Generator_Check((PyObject *)generator));
+ CHECK_OBJECT_X(exception_type);
+ CHECK_OBJECT_X(exception_value);
+ CHECK_OBJECT_X(exception_tb);
+ CHECK_OBJECT_X(value);
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Enter", generator);
+ PRINT_COROUTINE_VALUE("value", value);
+ PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+#endif
+
+ if (value != NULL) {
+ assert(exception_type == NULL);
+ assert(exception_value == NULL);
+ assert(exception_tb == NULL);
+ }
+
+ if (generator->m_status != status_Finished) {
+ if (generator->m_running) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ValueError, "generator already executing");
+ return NULL;
+ }
+
+ PyThreadState *thread_state = PyThreadState_GET();
+
+#if PYTHON_VERSION < 0x300
+ PyObject *saved_exception_type = thread_state->exc_type;
+ PyObject *saved_exception_value = NULL;
+ PyTracebackObject *saved_exception_traceback = NULL;
+
+ if (saved_exception_type != Py_None && saved_exception_type != NULL) {
+ saved_exception_value = thread_state->exc_value;
+ Py_INCREF(saved_exception_type);
+ Py_XINCREF(saved_exception_value);
+ saved_exception_traceback = (PyTracebackObject *)thread_state->exc_traceback;
+ Py_XINCREF(saved_exception_traceback);
+ }
+#endif
+
+ // Put the generator back on the frame stack.
+
+ // First take of running frame from the stack, owning a reference.
+ PyFrameObject *return_frame = thread_state->frame;
+#ifndef __NUITKA_NO_ASSERT__
+ if (return_frame) {
+ assertFrameObject((struct Nuitka_FrameObject *)return_frame);
+ }
+#endif
+
+ if (generator->m_frame) {
+ // It would be nice if our frame were still alive. Nobody had the
+ // right to release it.
+ assertFrameObject(generator->m_frame);
+
+ // It's not supposed to be on the top right now.
+ assert(return_frame != &generator->m_frame->m_frame);
+
+ Py_XINCREF(return_frame);
+ generator->m_frame->m_frame.f_back = return_frame;
+
+ thread_state->frame = &generator->m_frame->m_frame;
+ }
+
+ if (generator->m_status == status_Unused) {
+ generator->m_status = status_Running;
+ }
+
+ // Continue the yielder function while preventing recursion.
+ generator->m_running = true;
+
+ // Check for thrown exception, publish it to the generator code.
+ if (unlikely(exception_type)) {
+ assert(value == NULL);
+
+ // Transfer exception ownership to published.
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+ }
+
+ if (generator->m_frame) {
+ Nuitka_Frame_MarkAsExecuting(generator->m_frame);
+ }
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Switching to coroutine", generator);
+ PRINT_COROUTINE_VALUE("value", value);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+ // dumpFrameStack();
+#endif
+
+ PyObject *yielded;
+
+#if PYTHON_VERSION >= 0x300
+ if (generator->m_yieldfrom == NULL) {
+ yielded = ((generator_code)generator->m_code)(generator, value);
+ } else {
+ yielded = Nuitka_YieldFromGeneratorInitial(generator, value);
+ }
+#else
+ yielded = ((generator_code)generator->m_code)(generator, value);
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ // If the generator returns with m_yieldfrom set, it wants us to yield
+ // from that value from now on.
+ while (yielded == NULL && generator->m_yieldfrom != NULL) {
+ yielded = Nuitka_YieldFromGeneratorNext(generator);
+ }
+#endif
+ if (generator->m_frame) {
+ Nuitka_Frame_MarkAsNotExecuting(generator->m_frame);
+ }
+
+ generator->m_running = false;
+
+ thread_state = PyThreadState_GET();
+
+ // Remove the generator from the frame stack.
+ if (generator->m_frame) {
+ // assert(thread_state->frame == &generator->m_frame->m_frame);
+ assertFrameObject(generator->m_frame);
+
+ Py_CLEAR(generator->m_frame->m_frame.f_back);
+ }
+
+ thread_state->frame = return_frame;
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Returned from coroutine", generator);
+ // dumpFrameStack();
+#endif
+
+ if (yielded == NULL) {
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("finishing from yield", generator);
+ PRINT_STRING("-> finishing sets status_Finished\n");
+ PRINT_COROUTINE_VALUE("return_value", generator->m_returned);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+#endif
+ generator->m_status = status_Finished;
+
+ if (generator->m_frame != NULL) {
+#if PYTHON_VERSION >= 0x340
+ generator->m_frame->m_frame.f_gen = NULL;
+#endif
+ Py_DECREF(generator->m_frame);
+ generator->m_frame = NULL;
+ }
+
+ Nuitka_Generator_release_closure(generator);
+
+#if PYTHON_VERSION < 0x300
+ if (saved_exception_type != NULL && saved_exception_type != Py_None) {
+ Py_DECREF(saved_exception_type);
+ Py_XDECREF(saved_exception_value);
+ Py_XDECREF(saved_exception_traceback);
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x350
+ if (
+#if PYTHON_VERSION < 0x370
+ generator->m_code_object->co_flags & CO_FUTURE_GENERATOR_STOP &&
+#endif
+ GET_ERROR_OCCURRED() == PyExc_StopIteration) {
+ PyObject *saved_exception_type, *saved_exception_value;
+ PyTracebackObject *saved_exception_tb;
+
+ FETCH_ERROR_OCCURRED(&saved_exception_type, &saved_exception_value, &saved_exception_tb);
+ NORMALIZE_EXCEPTION(&saved_exception_type, &saved_exception_value, &saved_exception_tb);
+
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "generator raised StopIteration");
+
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+
+ RAISE_EXCEPTION_WITH_CAUSE(&exception_type, &exception_value, &exception_tb, saved_exception_value);
+
+ CHECK_OBJECT(exception_value);
+ CHECK_OBJECT(saved_exception_value);
+
+ Py_INCREF(saved_exception_value);
+ PyException_SetContext(exception_value, saved_exception_value);
+
+ Py_DECREF(saved_exception_type);
+ Py_XDECREF(saved_exception_tb);
+
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+
+ return NULL;
+ }
+#endif
+
+ // Create StopIteration if necessary, i.e. return value that is not "None" was
+ // given. TODO: Push this further down the user line, we might be able to avoid
+ // it for some uses, e.g. quick iteration entirely.
+#if PYTHON_VERSION >= 0x300
+ if (generator->m_returned) {
+ if (generator->m_returned != Py_None) {
+ Nuitka_SetStopIterationValue(generator->m_returned);
+ }
+
+ Py_DECREF(generator->m_returned);
+ generator->m_returned = NULL;
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Return value to exception set", generator);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+#endif
+ }
+#endif
+
+ return NULL;
+ } else {
+#if PYTHON_VERSION < 0x300
+ PyObject *old_type = thread_state->exc_type;
+ PyObject *old_value = thread_state->exc_value;
+ PyTracebackObject *old_tb = (PyTracebackObject *)thread_state->exc_traceback;
+
+ // Set sys attributes in the fastest possible way.
+ PyObject *sys_dict = thread_state->interp->sysdict;
+ CHECK_OBJECT(sys_dict);
+
+ if (saved_exception_type != NULL && saved_exception_type != Py_None) {
+ thread_state->exc_type = saved_exception_type;
+ thread_state->exc_value = saved_exception_value;
+ thread_state->exc_traceback = (PyObject *)saved_exception_traceback;
+
+ Py_XDECREF(old_type);
+ Py_XDECREF(old_value);
+ Py_XDECREF(old_tb);
+
+ if (old_type != saved_exception_type) {
+ PyDict_SetItem(sys_dict, const_str_plain_exc_type, saved_exception_type);
+ }
+ if (saved_exception_value != old_value) {
+ PyDict_SetItem(sys_dict, const_str_plain_exc_value,
+ saved_exception_value ? saved_exception_value : Py_None);
+ }
+ if (saved_exception_traceback != old_tb) {
+ PyDict_SetItem(sys_dict, const_str_plain_exc_traceback,
+ saved_exception_traceback ? (PyObject *)saved_exception_traceback : Py_None);
+ }
+ } else {
+ thread_state->exc_type = Py_None;
+ thread_state->exc_value = Py_None;
+ thread_state->exc_traceback = (PyObject *)Py_None;
+
+ Py_INCREF(Py_None);
+ Py_INCREF(Py_None);
+ Py_INCREF(Py_None);
+
+ Py_XDECREF(old_type);
+ Py_XDECREF(old_value);
+ Py_XDECREF(old_tb);
+
+ if (old_type != Py_None) {
+ PyDict_SetItem(sys_dict, const_str_plain_exc_type, Py_None);
+ }
+ if (old_value != Py_None) {
+ PyDict_SetItem(sys_dict, const_str_plain_exc_value, Py_None);
+ }
+ if (old_tb != (PyTracebackObject *)Py_None) {
+ PyDict_SetItem(sys_dict, const_str_plain_exc_traceback, Py_None);
+ }
+ }
+#endif
+
+ return yielded;
+ }
+ } else {
+ return NULL;
+ }
+}
+
+static PyObject *Nuitka_Generator_send(struct Nuitka_GeneratorObject *generator, PyObject *value) {
+ if (generator->m_status == status_Unused && value != NULL && value != Py_None) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "can't send non-None value to a just-started generator");
+ return NULL;
+ }
+
+ PyObject *result = _Nuitka_Generator_send(generator, value, NULL, NULL, NULL);
+
+ if (result == NULL) {
+ if (GET_ERROR_OCCURRED() == NULL) {
+ SET_CURRENT_EXCEPTION_TYPE0(PyExc_StopIteration);
+ }
+ }
+
+ return result;
+}
+
+static PyObject *Nuitka_Generator_tp_iternext(struct Nuitka_GeneratorObject *generator) {
+ return _Nuitka_Generator_send(generator, Py_None, NULL, NULL, NULL);
+}
+
+/* Our own qiter interface, which is for quicker simple loop style iteration,
+ that does not send anything in. */
+PyObject *Nuitka_Generator_qiter(struct Nuitka_GeneratorObject *generator, bool *finished) {
+ PyObject *result = _Nuitka_Generator_send(generator, Py_None, NULL, NULL, NULL);
+
+ if (result == NULL) {
+ if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED())) {
+ *finished = false;
+ return NULL;
+ }
+
+ *finished = true;
+ return NULL;
+ }
+
+ *finished = false;
+ return result;
+}
+
+// Note: Used by compiled frames.
+static bool _Nuitka_Generator_close(struct Nuitka_GeneratorObject *generator) {
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Enter", generator);
+#endif
+ CHECK_OBJECT(generator);
+
+ if (generator->m_status == status_Running) {
+ Py_INCREF(PyExc_GeneratorExit);
+
+ PyObject *result = _Nuitka_Generator_send(generator, NULL, PyExc_GeneratorExit, NULL, NULL);
+
+ if (unlikely(result)) {
+ Py_DECREF(result);
+
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "generator ignored GeneratorExit");
+ return false;
+ } else {
+ PyObject *error = GET_ERROR_OCCURRED();
+
+ // StopIteration as exception.
+ if (error == NULL) {
+ return true;
+ }
+
+ // Maybe another acceptable exception for generator exit.
+ if (EXCEPTION_MATCH_GENERATOR(error)) {
+ CLEAR_ERROR_OCCURRED();
+
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static PyObject *Nuitka_Generator_close(struct Nuitka_GeneratorObject *generator) {
+ bool r = _Nuitka_Generator_close(generator);
+
+ if (unlikely(r == false)) {
+ return NULL;
+ } else {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+}
+
+// Shared code for checking a thrown exception, coroutines, asyncgen, uncompiled ones do this too.
+static bool _Nuitka_Generator_check_throw2(PyObject **exception_type, PyObject **exception_value,
+ PyTracebackObject **exception_tb) {
+ CHECK_OBJECT(*exception_type);
+ CHECK_OBJECT_X(*exception_value);
+ CHECK_OBJECT_X(*exception_tb);
+
+ if (*exception_tb == (PyTracebackObject *)Py_None) {
+ Py_DECREF(*exception_tb);
+ *exception_tb = NULL;
+ } else if (*exception_tb != NULL && !PyTraceBack_Check(*exception_tb)) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "throw() third argument must be a traceback object");
+ goto failed_throw;
+ }
+
+ if (PyExceptionClass_Check(*exception_type)) {
+ // TODO: Must not normalize here.
+ NORMALIZE_EXCEPTION(exception_type, exception_value, exception_tb);
+ } else if (PyExceptionInstance_Check(*exception_type)) {
+ if (*exception_value != NULL && *exception_value != Py_None) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "instance exception may not have a separate value");
+ goto failed_throw;
+ }
+
+ // Release old None value and replace it with the object, then set the exception type
+ // from the class.
+ Py_XDECREF(*exception_value);
+ *exception_value = *exception_type;
+
+ *exception_type = PyExceptionInstance_Class(*exception_type);
+ Py_INCREF(*exception_type);
+ } else {
+#if PYTHON_VERSION < 0x300
+ PyErr_Format(PyExc_TypeError, "exceptions must be classes, or instances, not %s",
+ Py_TYPE(*exception_type)->tp_name);
+#else
+ PyErr_Format(PyExc_TypeError, "exceptions must be classes or instances deriving from BaseException, not %s",
+ Py_TYPE(*exception_type)->tp_name);
+#endif
+
+ goto failed_throw;
+ }
+
+ return true;
+
+failed_throw:
+ // Release exception, we are done with it now.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+
+ return false;
+}
+
+#if PYTHON_VERSION >= 0x300
+
+static bool _Nuitka_Generator_close(struct Nuitka_GeneratorObject *generator);
+#if PYTHON_VERSION >= 0x350
+static bool _Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine);
+#if PYTHON_VERSION >= 0x360
+static bool _Nuitka_Asyncgen_close(struct Nuitka_AsyncgenObject *asyncgen);
+#endif
+#endif
+
+// Note: This is also used for coroutines and asyncgen
+static bool Nuitka_gen_close_iter(PyObject *yieldfrom) {
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Enter\n");
+#endif
+
+ CHECK_OBJECT(yieldfrom);
+
+ // TODO: Could specialize depending in yieldfrom type for performance. Many
+ // times these will be our own ones, or known ones like uncompiled
+ // generators.
+ if (Nuitka_Generator_Check(yieldfrom)) {
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Defer to _Nuitka_Generator_close\n");
+#endif
+ return _Nuitka_Generator_close((struct Nuitka_GeneratorObject *)yieldfrom);
+ }
+
+#if PYTHON_VERSION >= 0x350
+ if (Nuitka_Coroutine_Check(yieldfrom)) {
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Defer to _Nuitka_Coroutine_close\n");
+#endif
+ return _Nuitka_Coroutine_close((struct Nuitka_CoroutineObject *)yieldfrom);
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x360
+ if (Nuitka_Asyncgen_Check(yieldfrom)) {
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Defer to _Nuitka_Asyncgen_close\n");
+#endif
+ return _Nuitka_Asyncgen_close((struct Nuitka_AsyncgenObject *)yieldfrom);
+ }
+#endif
+
+ PyObject *meth = PyObject_GetAttr(yieldfrom, const_str_plain_close);
+
+ if (unlikely(meth == NULL)) {
+ if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) {
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Strange error while looking up close method.\n");
+#endif
+ PyErr_WriteUnraisable(yieldfrom);
+ }
+
+ CLEAR_ERROR_OCCURRED();
+
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Leave, has no close method.\n");
+#endif
+ return true;
+ }
+
+ PyObject *retval = CALL_FUNCTION_NO_ARGS(meth);
+ Py_DECREF(meth);
+
+ if (unlikely(retval == NULL)) {
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Leave, exception from close.\n");
+#endif
+ return false;
+ }
+
+ CHECK_OBJECT(retval);
+ Py_DECREF(retval);
+
+#if _DEBUG_GENERATOR
+ PRINT_STRING("Nuitka_gen_close_iter: Leave, closed.\n");
+#endif
+
+ return true;
+}
+#endif
+
+#if PYTHON_VERSION >= 0x360
+static bool Nuitka_AsyncgenAsend_Check(PyObject *object);
+struct Nuitka_AsyncgenAsendObject;
+static PyObject *_Nuitka_AsyncgenAsend_throw2(struct Nuitka_AsyncgenAsendObject *asyncgen_asend,
+ PyObject *exception_type, PyObject *exception_value,
+ PyTracebackObject *exception_tb);
+#endif
+
+static PyObject *_Nuitka_Generator_throw2(struct Nuitka_GeneratorObject *generator, PyObject *exception_type,
+ PyObject *exception_value, PyTracebackObject *exception_tb) {
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Enter", generator);
+ PRINT_COROUTINE_VALUE("yieldfrom", generator->m_yieldfrom);
+ PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
+ PRINT_NEW_LINE();
+#endif
+
+ CHECK_OBJECT(generator);
+ assert(Nuitka_Generator_Check((PyObject *)generator));
+ CHECK_OBJECT(exception_type);
+ CHECK_OBJECT_X(exception_value);
+ CHECK_OBJECT_X(exception_tb);
+
+#if PYTHON_VERSION >= 0x300
+ if (generator->m_yieldfrom != NULL) {
+ // TODO: This probably should be changed to EXCEPTION_MATCH_BOOL_SINGLE for performance.
+ if (PyErr_GivenExceptionMatches(exception_type, PyExc_GeneratorExit)) {
+ // Generators need to close the yield_from.
+ generator->m_running = 1;
+ bool res = Nuitka_gen_close_iter(generator->m_yieldfrom);
+ generator->m_running = 0;
+
+ if (res == false) {
+ // Release exception, we are done with it now and pick up the new one.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+
+ FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
+ }
+
+ // Transferred exception ownership to "_Nuitka_Generator_send".
+ return _Nuitka_Generator_send(generator, NULL, exception_type, exception_value, exception_tb);
+ }
+
+ PyObject *ret;
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Passing to yielded from", generator);
+ PRINT_COROUTINE_VALUE("m_yieldfrom", generator->m_yieldfrom);
+ PRINT_NEW_LINE();
+#endif
+
+ if (Nuitka_Generator_Check(generator->m_yieldfrom)) {
+ struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)generator->m_yieldfrom);
+ // Transferred exception ownership to "_Nuitka_Generator_throw2".
+ generator->m_running = 1;
+ ret = _Nuitka_Generator_throw2(gen, exception_type, exception_value, exception_tb);
+ generator->m_running = 0;
+#if NUITKA_UNCOMPILED_THROW_INTEGRATION
+ } else if (PyGen_CheckExact(generator->m_yieldfrom)) {
+ PyGenObject *gen = (PyGenObject *)generator->m_yieldfrom;
+
+ // Transferred exception ownership to "Nuitka_UncompiledGenerator_throw".
+ generator->m_running = 1;
+ ret = Nuitka_UncompiledGenerator_throw(gen, 1, exception_type, exception_value, exception_tb);
+ generator->m_running = 0;
+#endif
+#if PYTHON_VERSION >= 0x350
+ } else if (Nuitka_Coroutine_Check(generator->m_yieldfrom)) {
+ struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)generator->m_yieldfrom);
+ // Transferred exception ownership to "_Nuitka_Coroutine_throw2".
+ generator->m_running = 1;
+ ret = _Nuitka_Coroutine_throw2(coro, true, exception_type, exception_value, exception_tb);
+ generator->m_running = 0;
+ } else if (Nuitka_CoroutineWrapper_Check(generator->m_yieldfrom)) {
+ struct Nuitka_CoroutineObject *coro =
+ ((struct Nuitka_CoroutineWrapperObject *)generator->m_yieldfrom)->m_coroutine;
+
+ // Transferred exception ownership to "_Nuitka_Coroutine_throw2".
+ generator->m_running = 1;
+ ret = _Nuitka_Coroutine_throw2(coro, true, exception_type, exception_value, exception_tb);
+ generator->m_running = 0;
+ } else if (PyCoro_CheckExact(generator->m_yieldfrom)) {
+ PyGenObject *gen = (PyGenObject *)generator->m_yieldfrom;
+
+ // Transferred exception ownership to "Nuitka_UncompiledGenerator_throw".
+ generator->m_running = 1;
+ ret = Nuitka_UncompiledGenerator_throw(gen, 1, exception_type, exception_value, exception_tb);
+ generator->m_running = 0;
+#if PYTHON_VERSION >= 0x360
+ } else if (Nuitka_AsyncgenAsend_Check(generator->m_yieldfrom)) {
+ struct Nuitka_AsyncgenAsendObject *asyncgen_asend =
+ ((struct Nuitka_AsyncgenAsendObject *)generator->m_yieldfrom);
+
+ // Transferred exception ownership to "_Nuitka_AsyncgenAsend_throw2".
+ generator->m_running = 1;
+ ret = _Nuitka_AsyncgenAsend_throw2(asyncgen_asend, exception_type, exception_value, exception_tb);
+ generator->m_running = 0;
+#endif
+#endif
+ } else {
+ PyObject *meth = PyObject_GetAttr(generator->m_yieldfrom, const_str_plain_throw);
+ if (unlikely(meth == NULL)) {
+ if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ // Release exception, we are done with it now.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+
+ return NULL;
+ }
+
+ CLEAR_ERROR_OCCURRED();
+
+ // Passing exception ownership to that code.
+ goto throw_here;
+ }
+
+ CHECK_OBJECT(exception_type);
+
+#if 0
+ // TODO: Add slow mode traces.
+ PRINT_ITEM(coroutine->m_yieldfrom);
+ PRINT_NEW_LINE();
+#endif
+ generator->m_running = 1;
+ ret = PyObject_CallFunctionObjArgs(meth, exception_type, exception_value, exception_tb, NULL);
+ generator->m_running = 0;
+
+ Py_DECREF(meth);
+
+ // Release exception, we are done with it now.
+ Py_DECREF(exception_type);
+ Py_XDECREF(exception_value);
+ Py_XDECREF(exception_tb);
+ }
+
+ if (unlikely(ret == NULL)) {
+ // Return value or exception, not to continue with yielding from.
+ if (generator->m_yieldfrom != NULL) {
+ CHECK_OBJECT(generator->m_yieldfrom);
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Null return, yield from removal:", generator);
+ PRINT_COROUTINE_VALUE("yieldfrom", generator->m_yieldfrom);
+#endif
+ Py_DECREF(generator->m_yieldfrom);
+ generator->m_yieldfrom = NULL;
+ }
+
+ PyObject *val;
+ if (_PyGen_FetchStopIterationValue(&val) == 0) {
+ CHECK_OBJECT(val);
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Sending return value into ourselves", generator);
+ PRINT_COROUTINE_VALUE("value", val);
+ PRINT_NEW_LINE();
+#endif
+
+ ret = _Nuitka_Generator_send(generator, val, NULL, NULL, NULL);
+ } else {
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Sending exception value into ourselves", generator);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+#endif
+ ret = _Nuitka_Generator_send(generator, NULL, NULL, NULL, NULL);
+ }
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Leave with value/exception from sending into ourselves:", generator);
+ PRINT_COROUTINE_VALUE("return_value", ret);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+#endif
+ } else {
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Leave with return value:", generator);
+ PRINT_COROUTINE_VALUE("return_value", ret);
+ PRINT_CURRENT_EXCEPTION();
+ PRINT_NEW_LINE();
+#endif
+ }
+
+ return ret;
+ }
+
+throw_here:
+#endif
+
+ // We continue to have exception ownership here.
+
+ if (unlikely(_Nuitka_Generator_check_throw2(&exception_type, &exception_value, &exception_tb) == false)) {
+ // Exception was released by _Nuitka_Generator_check_throw2 already.
+ return NULL;
+ }
+
+ if (generator->m_status == status_Running) {
+ // Passing exception ownership to _Nuitka_Generator_send
+ PyObject *result = _Nuitka_Generator_send(generator, NULL, exception_type, exception_value, exception_tb);
+
+ if (result == NULL) {
+ if (GET_ERROR_OCCURRED() == NULL) {
+ SET_CURRENT_EXCEPTION_TYPE0(PyExc_StopIteration);
+ }
+ }
+
+ return result;
+ } else if (generator->m_status == status_Finished) {
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+
+ return NULL;
+ } else {
+ if (exception_tb == NULL) {
+ // TODO: Our compiled objects really need a way to store common
+ // stuff in a "shared" part across all instances, and outside of
+ // run time, so we could reuse this.
+ struct Nuitka_FrameObject *frame = MAKE_FUNCTION_FRAME(generator->m_code_object, generator->m_module, 0);
+ exception_tb = MAKE_TRACEBACK(frame, generator->m_code_object->co_firstlineno);
+ Py_DECREF(frame);
+ }
+
+ RESTORE_ERROR_OCCURRED(exception_type, exception_value, exception_tb);
+
+ generator->m_status = status_Finished;
+
+ return NULL;
+ }
+}
+
+static PyObject *Nuitka_Generator_throw(struct Nuitka_GeneratorObject *generator, PyObject *args) {
+ PyObject *exception_type;
+ PyObject *exception_value = NULL;
+ PyTracebackObject *exception_tb = NULL;
+
+ // This takes no references, that is for us to do.
+ int res = PyArg_UnpackTuple(args, "throw", 1, 3, &exception_type, &exception_value, &exception_tb);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ // Handing ownership of exception over, we need not release it ourselves
+ Py_INCREF(exception_type);
+ Py_XINCREF(exception_value);
+ Py_XINCREF(exception_tb);
+
+ PyObject *result = _Nuitka_Generator_throw2(generator, exception_type, exception_value, exception_tb);
+
+ if (result == NULL) {
+ if (GET_ERROR_OCCURRED() == NULL) {
+ SET_CURRENT_EXCEPTION_TYPE0(PyExc_StopIteration);
+ }
+ }
+
+#if _DEBUG_GENERATOR
+ PRINT_GENERATOR_STATUS("Leave", generator);
+ PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
+ PRINT_COROUTINE_VALUE("return value", result);
+ PRINT_CURRENT_EXCEPTION();
+#endif
+
+ return result;
+}
+
+#if PYTHON_VERSION >= 0x340
+static void Nuitka_Generator_tp_finalizer(struct Nuitka_GeneratorObject *generator) {
+ if (generator->m_status != status_Running) {
+ return;
+ }
+
+ PyObject *save_exception_type, *save_exception_value;
+ PyTracebackObject *save_exception_tb;
+ FETCH_ERROR_OCCURRED(&save_exception_type, &save_exception_value, &save_exception_tb);
+
+ bool close_result = _Nuitka_Generator_close(generator);
+
+ if (unlikely(close_result == false)) {
+ PyErr_WriteUnraisable((PyObject *)generator);
+ }
+
+ /* Restore the saved exception if any. */
+ RESTORE_ERROR_OCCURRED(save_exception_type, save_exception_value, save_exception_tb);
+}
+#endif
+
+#define MAX_GENERATOR_FREE_LIST_COUNT 100
+static struct Nuitka_GeneratorObject *free_list_generators = NULL;
+static int free_list_generators_count = 0;
+
+static void Nuitka_Generator_tp_dealloc(struct Nuitka_GeneratorObject *generator) {
+ // Revive temporarily.
+ assert(Py_REFCNT(generator) == 0);
+ Py_REFCNT(generator) = 1;
+
+ // Save the current exception, if any, we must preserve it.
+ PyObject *save_exception_type, *save_exception_value;
+ PyTracebackObject *save_exception_tb;
+ FETCH_ERROR_OCCURRED(&save_exception_type, &save_exception_value, &save_exception_tb);
+
+ if (generator->m_status == status_Running) {
+ bool close_result = _Nuitka_Generator_close(generator);
+ CHECK_OBJECT(generator);
+
+ if (unlikely(close_result == false)) {
+ PyErr_WriteUnraisable((PyObject *)generator);
+ }
+ }
+
+ Nuitka_Generator_release_closure(generator);
+
+ // Allow for above code to resurrect the generator.
+ Py_REFCNT(generator) -= 1;
+ if (Py_REFCNT(generator) >= 1) {
+ return;
+ }
+
+ if (generator->m_frame != NULL) {
+#if PYTHON_VERSION >= 0x340
+ generator->m_frame->m_frame.f_gen = NULL;
+#endif
+ Py_DECREF(generator->m_frame);
+ generator->m_frame = NULL;
+ }
+
+ // Now it is safe to release references and memory for it.
+ Nuitka_GC_UnTrack(generator);
+
+ if (generator->m_weakrefs != NULL) {
+ PyObject_ClearWeakRefs((PyObject *)generator);
+ assert(!ERROR_OCCURRED());
+ }
+
+ Py_DECREF(generator->m_name);
+
+#if PYTHON_VERSION >= 0x350
+ Py_DECREF(generator->m_qualname);
+#endif
+
+ /* Put the object into freelist or release to GC */
+ releaseToFreeList(free_list_generators, generator, MAX_GENERATOR_FREE_LIST_COUNT);
+
+ RESTORE_ERROR_OCCURRED(save_exception_type, save_exception_value, save_exception_tb);
+}
+
+static PyObject *Nuitka_Generator_get_name(struct Nuitka_GeneratorObject *generator) {
+ PyObject *result = generator->m_name;
+ Py_INCREF(result);
+ return result;
+}
+
+#if PYTHON_VERSION >= 0x350
+static int Nuitka_Generator_set_name(struct Nuitka_GeneratorObject *generator, PyObject *value) {
+ // Cannot be deleted, not be non-unicode value.
+ if (unlikely((value == NULL) || !PyUnicode_Check(value))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__name__ must be set to a string object");
+
+ return -1;
+ }
+
+ PyObject *tmp = generator->m_name;
+ Py_INCREF(value);
+ generator->m_name = value;
+ Py_DECREF(tmp);
+
+ return 0;
+}
+
+static PyObject *Nuitka_Generator_get_qualname(struct Nuitka_GeneratorObject *generator) {
+ PyObject *result = generator->m_qualname;
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Generator_set_qualname(struct Nuitka_GeneratorObject *generator, PyObject *value) {
+ // Cannot be deleted, not be non-unicode value.
+ if (unlikely((value == NULL) || !PyUnicode_Check(value))) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_TypeError, "__qualname__ must be set to a string object");
+
+ return -1;
+ }
+
+ PyObject *tmp = generator->m_qualname;
+ Py_INCREF(value);
+ generator->m_qualname = value;
+ Py_DECREF(tmp);
+
+ return 0;
+}
+
+static PyObject *Nuitka_Generator_get_yieldfrom(struct Nuitka_GeneratorObject *generator) {
+ if (generator->m_yieldfrom) {
+ Py_INCREF(generator->m_yieldfrom);
+ return generator->m_yieldfrom;
+ } else {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+}
+
+#endif
+
+static PyObject *Nuitka_Generator_get_code(struct Nuitka_GeneratorObject *generator) {
+ PyObject *result = (PyObject *)generator->m_code_object;
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Generator_set_code(struct Nuitka_GeneratorObject *generator, PyObject *value) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "gi_code is not writable in Nuitka");
+ return -1;
+}
+
+static PyObject *Nuitka_Generator_get_frame(struct Nuitka_GeneratorObject *generator) {
+ PyObject *result;
+
+ if (generator->m_frame) {
+ result = (PyObject *)generator->m_frame;
+ } else {
+ result = Py_None;
+ }
+
+ Py_INCREF(result);
+ return result;
+}
+
+static int Nuitka_Generator_set_frame(struct Nuitka_GeneratorObject *generator, PyObject *value) {
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_RuntimeError, "gi_frame is not writable in Nuitka");
+ return -1;
+}
+
+static PyGetSetDef Nuitka_Generator_getsetlist[] = {
+#if PYTHON_VERSION < 0x350
+ {(char *)"__name__", (getter)Nuitka_Generator_get_name, NULL, NULL},
+#else
+ {(char *)"__name__", (getter)Nuitka_Generator_get_name, (setter)Nuitka_Generator_set_name, NULL},
+ {(char *)"__qualname__", (getter)Nuitka_Generator_get_qualname, (setter)Nuitka_Generator_set_qualname, NULL},
+ {(char *)"gi_yieldfrom", (getter)Nuitka_Generator_get_yieldfrom, NULL, NULL},
+#endif
+ {(char *)"gi_code", (getter)Nuitka_Generator_get_code, (setter)Nuitka_Generator_set_code, NULL},
+ {(char *)"gi_frame", (getter)Nuitka_Generator_get_frame, (setter)Nuitka_Generator_set_frame, NULL},
+
+ {NULL}};
+
+static PyMethodDef Nuitka_Generator_methods[] = {{"send", (PyCFunction)Nuitka_Generator_send, METH_O, NULL},
+ {"throw", (PyCFunction)Nuitka_Generator_throw, METH_VARARGS, NULL},
+ {"close", (PyCFunction)Nuitka_Generator_close, METH_NOARGS, NULL},
+ {NULL}};
+
+#include
+
+static PyMemberDef Nuitka_Generator_members[] = {
+/* The type of "gi_running" changed in Python3. */
+#if PYTHON_VERSION < 0x300
+ {(char *)"gi_running", T_INT, offsetof(struct Nuitka_GeneratorObject, m_running), READONLY},
+#else
+ {(char *)"gi_running", T_BOOL, offsetof(struct Nuitka_GeneratorObject, m_running), READONLY},
+#endif
+ {NULL}};
+
+PyTypeObject Nuitka_Generator_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0) "compiled_generator", /* tp_name */
+ sizeof(struct Nuitka_GeneratorObject), /* tp_basicsize */
+ sizeof(struct Nuitka_CellObject *), /* tp_itemsize */
+ (destructor)Nuitka_Generator_tp_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ (reprfunc)Nuitka_Generator_tp_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+#if PYTHON_VERSION < 0x340
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+#else
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE,
+#endif
+ /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)Nuitka_Generator_tp_traverse, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ offsetof(struct Nuitka_GeneratorObject, m_weakrefs), /* tp_weaklistoffset */
+ PyObject_SelfIter, /* tp_iter */
+ (iternextfunc)Nuitka_Generator_tp_iternext, /* tp_iternext */
+ Nuitka_Generator_methods, /* tp_methods */
+ Nuitka_Generator_members, /* tp_members */
+ Nuitka_Generator_getsetlist, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+ 0, /* tp_bases */
+ 0, /* tp_mro */
+ 0, /* tp_cache */
+ 0, /* tp_subclasses */
+ 0, /* tp_weaklist */
+ 0, /* tp_del */
+ 0 /* tp_version_tag */
+#if PYTHON_VERSION >= 0x340
+ ,
+ (destructor)Nuitka_Generator_tp_finalizer /* tp_finalizer */
+#endif
+};
+
+#if PYTHON_VERSION >= 0x350
+static void _initCompiledCoroutineTypes();
+#endif
+#if PYTHON_VERSION >= 0x360
+static void _initCompiledAsyncgenTypes();
+#endif
+
+void _initCompiledGeneratorType(void) {
+ PyType_Ready(&Nuitka_Generator_Type);
+
+#if PYTHON_VERSION >= 0x350
+ // Also initialize coroutines if necessary
+ _initCompiledCoroutineTypes();
+#endif
+
+#if PYTHON_VERSION >= 0x360
+ // Also initialize asyncgen if necessary
+ _initCompiledAsyncgenTypes();
+#endif
+}
+
+PyObject *Nuitka_Generator_New(generator_code code, PyObject *module, PyObject *name,
+#if PYTHON_VERSION >= 0x350
+ PyObject *qualname,
+#endif
+ PyCodeObject *code_object, struct Nuitka_CellObject **closure, Py_ssize_t closure_given,
+ Py_ssize_t heap_storage_size) {
+ struct Nuitka_GeneratorObject *result;
+
+ // TODO: Change the var part of the type to 1 maybe
+ Py_ssize_t full_size = closure_given + (heap_storage_size + sizeof(void *) - 1) / sizeof(void *);
+
+ // Macro to assign result memory from GC or free list.
+ allocateFromFreeList(free_list_generators, struct Nuitka_GeneratorObject, Nuitka_Generator_Type, full_size);
+
+ // For quicker access of generator heap.
+ result->m_heap_storage = &result->m_closure[closure_given];
+
+ assert(result != NULL);
+ CHECK_OBJECT(result);
+
+ assert(Py_SIZE(result) >= closure_given);
+
+ result->m_code = (void *)code;
+
+ CHECK_OBJECT(module);
+ result->m_module = module;
+
+ CHECK_OBJECT(name);
+ result->m_name = name;
+ Py_INCREF(name);
+
+#if PYTHON_VERSION >= 0x350
+ // The "qualname" defaults to NULL for most compact C code.
+ if (qualname == NULL) {
+ qualname = name;
+ }
+ CHECK_OBJECT(qualname);
+
+ result->m_qualname = qualname;
+ Py_INCREF(qualname);
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ result->m_yieldfrom = NULL;
+#endif
+
+ memcpy(&result->m_closure[0], closure, closure_given * sizeof(struct Nuitka_CellObject *));
+ result->m_closure_given = closure_given;
+
+ result->m_weakrefs = NULL;
+
+ result->m_status = status_Unused;
+ result->m_running = false;
+
+ result->m_yield_return_index = 0;
+
+#if PYTHON_VERSION >= 0x300
+ result->m_returned = NULL;
+#endif
+
+ result->m_frame = NULL;
+ result->m_code_object = code_object;
+
+#if PYTHON_VERSION >= 0x370
+ result->m_exc_state.exc_type = NULL;
+ result->m_exc_state.exc_value = NULL;
+ result->m_exc_state.exc_traceback = NULL;
+#endif
+
+ Nuitka_GC_Track(result);
+ return (PyObject *)result;
+}
+
+static PyObject *_EMPTY_GENERATOR_CONTEXT(struct Nuitka_GeneratorObject *generator, PyObject *yield_return_value) {
+ return NULL;
+}
+
+PyObject *Nuitka_Generator_NewEmpty(PyObject *module, PyObject *name,
+#if PYTHON_VERSION >= 0x350
+ PyObject *qualname,
+#endif
+ PyCodeObject *code_object, struct Nuitka_CellObject **closure,
+ Py_ssize_t closure_given) {
+ return Nuitka_Generator_New(_EMPTY_GENERATOR_CONTEXT, module, name,
+#if PYTHON_VERSION >= 0x350
+ qualname,
+#endif
+ code_object, closure, closure_given, 0);
+}
+
+// Chain coroutine code to generator code, as it uses same functions, and then we can
+// have some things static if both are in the same compilation unit. This also loads
+// the asyncgen for 3.6 and higher.
+#if PYTHON_VERSION >= 0x350
+#include "CompiledCoroutineType.c"
+#endif
+
+// Chain frames to generator and asyncgen code, as they need to close them with access
+// to best functions.
+#include "CompiledFrameType.c"
\ No newline at end of file
diff --git a/mtube.build/static_src/CompiledGeneratorType.o b/mtube.build/static_src/CompiledGeneratorType.o
new file mode 100644
index 0000000..55427fe
Binary files /dev/null and b/mtube.build/static_src/CompiledGeneratorType.o differ
diff --git a/mtube.build/static_src/InspectPatcher.c b/mtube.build/static_src/InspectPatcher.c
new file mode 100644
index 0000000..9788775
--- /dev/null
+++ b/mtube.build/static_src/InspectPatcher.c
@@ -0,0 +1,382 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/**
+ * This is responsible for updating parts of CPython to better work with Nuitka
+ * by replacing CPython implementations with enhanced versions.
+ */
+
+#include "nuitka/prelude.h"
+
+#if PYTHON_VERSION >= 0x300
+static PyObject *module_inspect;
+#if PYTHON_VERSION >= 0x350
+static PyObject *module_types;
+#endif
+
+static char *kwlist[] = {(char *)"object", NULL};
+
+static PyObject *old_getgeneratorstate = NULL;
+
+static PyObject *_inspect_getgeneratorstate_replacement(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *object;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:getgeneratorstate", kwlist, &object, NULL)) {
+ return NULL;
+ }
+
+ if (Nuitka_Generator_Check(object)) {
+ struct Nuitka_GeneratorObject *generator = (struct Nuitka_GeneratorObject *)object;
+
+ if (generator->m_running) {
+ return PyObject_GetAttrString(module_inspect, "GEN_RUNNING");
+ } else if (generator->m_status == status_Finished) {
+ return PyObject_GetAttrString(module_inspect, "GEN_CLOSED");
+ } else if (generator->m_status == status_Unused) {
+ return PyObject_GetAttrString(module_inspect, "GEN_CREATED");
+ } else {
+ return PyObject_GetAttrString(module_inspect, "GEN_SUSPENDED");
+ }
+ } else {
+ return old_getgeneratorstate->ob_type->tp_call(old_getgeneratorstate, args, kwds);
+ }
+}
+
+#if PYTHON_VERSION >= 0x350
+static PyObject *old_getcoroutinestate = NULL;
+
+static PyObject *_inspect_getcoroutinestate_replacement(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *object;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:getcoroutinestate", kwlist, &object, NULL)) {
+ return NULL;
+ }
+
+ if (Nuitka_Coroutine_Check(object)) {
+ struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)object;
+
+ if (coroutine->m_running) {
+ return PyObject_GetAttrString(module_inspect, "CORO_RUNNING");
+ } else if (coroutine->m_status == status_Finished) {
+ return PyObject_GetAttrString(module_inspect, "CORO_CLOSED");
+ } else if (coroutine->m_status == status_Unused) {
+ return PyObject_GetAttrString(module_inspect, "CORO_CREATED");
+ } else {
+ return PyObject_GetAttrString(module_inspect, "CORO_SUSPENDED");
+ }
+ } else {
+ return old_getcoroutinestate->ob_type->tp_call(old_getcoroutinestate, args, kwds);
+ }
+}
+
+static PyObject *old_types_coroutine = NULL;
+
+static char *kwlist_func[] = {(char *)"func", NULL};
+
+static PyObject *_types_coroutine_replacement(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *func;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:coroutine", kwlist_func, &func, NULL)) {
+ return NULL;
+ }
+
+ if (Nuitka_Function_Check(func)) {
+ struct Nuitka_FunctionObject *function = (struct Nuitka_FunctionObject *)func;
+
+ if (function->m_code_object->co_flags & CO_GENERATOR) {
+ function->m_code_object->co_flags |= 0x100;
+ }
+ }
+
+ return old_types_coroutine->ob_type->tp_call(old_types_coroutine, args, kwds);
+}
+
+#endif
+
+#endif
+
+#if PYTHON_VERSION >= 0x300
+static PyMethodDef _method_def_inspect_getgeneratorstate_replacement = {
+ "getgeneratorstate", (PyCFunction)_inspect_getgeneratorstate_replacement, METH_VARARGS | METH_KEYWORDS, NULL};
+
+#if PYTHON_VERSION >= 0x350
+static PyMethodDef _method_def_inspect_getcoroutinestate_replacement = {
+ "getcoroutinestate", (PyCFunction)_inspect_getcoroutinestate_replacement, METH_VARARGS | METH_KEYWORDS, NULL};
+
+static PyMethodDef _method_def_types_coroutine_replacement = {"coroutine", (PyCFunction)_types_coroutine_replacement,
+ METH_VARARGS | METH_KEYWORDS, NULL};
+
+#endif
+
+/* Replace inspect functions with ones that handle compiles types too. */
+void patchInspectModule(void) {
+ static bool is_done = false;
+ if (is_done)
+ return;
+
+#if PYTHON_VERSION >= 0x300
+#ifdef _NUITKA_EXE
+ // May need to import the "site" module, because otherwise the patching can
+ // fail with it being unable to load it.
+ if (Py_NoSiteFlag == 0) {
+ PyObject *site_module = IMPORT_MODULE5(const_str_plain_site, Py_None, Py_None, const_tuple_empty, const_int_0);
+
+ if (site_module == NULL) {
+ // Ignore "ImportError", having a "site" module is not a must.
+ CLEAR_ERROR_OCCURRED();
+ }
+ }
+#endif
+
+ // TODO: Change this into an import hook that is executed after it is imported.
+ module_inspect = IMPORT_MODULE5(const_str_plain_inspect, Py_None, Py_None, const_tuple_empty, const_int_0);
+
+ if (module_inspect == NULL) {
+ PyErr_PrintEx(0);
+ Py_Exit(1);
+ }
+ CHECK_OBJECT(module_inspect);
+
+ // Patch "inspect.getgeneratorstate" unless it is already patched.
+ old_getgeneratorstate = PyObject_GetAttrString(module_inspect, "getgeneratorstate");
+ CHECK_OBJECT(old_getgeneratorstate);
+
+ if (PyFunction_Check(old_getgeneratorstate)) {
+ PyObject *inspect_getgeneratorstate_replacement =
+ PyCFunction_New(&_method_def_inspect_getgeneratorstate_replacement, NULL);
+ CHECK_OBJECT(inspect_getgeneratorstate_replacement);
+
+ PyObject_SetAttrString(module_inspect, "getgeneratorstate", inspect_getgeneratorstate_replacement);
+ }
+
+#if PYTHON_VERSION >= 0x350
+ // Patch "inspect.getcoroutinestate" unless it is already patched.
+ old_getcoroutinestate = PyObject_GetAttrString(module_inspect, "getcoroutinestate");
+ CHECK_OBJECT(old_getcoroutinestate);
+
+ if (PyFunction_Check(old_getcoroutinestate)) {
+ PyObject *inspect_getcoroutinestate_replacement =
+ PyCFunction_New(&_method_def_inspect_getcoroutinestate_replacement, NULL);
+ CHECK_OBJECT(inspect_getcoroutinestate_replacement);
+
+ PyObject_SetAttrString(module_inspect, "getcoroutinestate", inspect_getcoroutinestate_replacement);
+ }
+
+ module_types = IMPORT_MODULE5(const_str_plain_types, Py_None, Py_None, const_tuple_empty, const_int_0);
+
+ if (module_types == NULL) {
+ PyErr_PrintEx(0);
+ Py_Exit(1);
+ }
+ CHECK_OBJECT(module_types);
+
+ // Patch "types.coroutine" unless it is already patched.
+ old_types_coroutine = PyObject_GetAttrString(module_types, "coroutine");
+ CHECK_OBJECT(old_types_coroutine);
+
+ if (PyFunction_Check(old_types_coroutine)) {
+ PyObject *types_coroutine_replacement = PyCFunction_New(&_method_def_types_coroutine_replacement, NULL);
+ CHECK_OBJECT(types_coroutine_replacement);
+
+ PyObject_SetAttrString(module_types, "coroutine", types_coroutine_replacement);
+ }
+
+ static char const *wrapper_enhancement_code = "\n\
+import types\n\
+_old_GeneratorWrapper = types._GeneratorWrapper\n\
+class GeneratorWrapperEnhanced(_old_GeneratorWrapper):\n\
+ def __init__(self, gen):\n\
+ _old_GeneratorWrapper.__init__(self, gen)\n\
+\n\
+ if hasattr(gen, 'gi_code'):\n\
+ if gen.gi_code.co_flags & 0x0020:\n\
+ self._GeneratorWrapper__isgen = True\n\
+\n\
+types._GeneratorWrapper = GeneratorWrapperEnhanced\
+";
+
+ PyObject *wrapper_enhencement_codeobject = Py_CompileString(wrapper_enhancement_code, "", Py_file_input);
+ CHECK_OBJECT(wrapper_enhencement_codeobject);
+
+ {
+ PyObject *module = PyImport_ExecCodeModule("nuitka_types_patch", wrapper_enhencement_codeobject);
+ CHECK_OBJECT(module);
+
+ int res = PyDict_DelItemString(PyImport_GetModuleDict(), "nuitka_types_patch");
+ assert(res == 0);
+
+ Py_DECREF(module);
+ }
+
+#endif
+
+#endif
+
+ is_done = true;
+}
+#endif
+
+extern int Nuitka_IsInstance(PyObject *inst, PyObject *cls);
+extern PyObject *original_isinstance;
+
+static PyObject *_builtin_isinstance_replacement(PyObject *self, PyObject *args) {
+ PyObject *inst, *cls;
+
+ if (unlikely(PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls) == 0)) {
+ return NULL;
+ }
+
+ int res = Nuitka_IsInstance(inst, cls);
+
+ if (unlikely(res < 0)) {
+ return NULL;
+ }
+
+ PyObject *result = BOOL_FROM(res != 0);
+ Py_INCREF(result);
+ return result;
+}
+
+static PyMethodDef _method_def_builtin_isinstance_replacement = {
+ "isinstance", (PyCFunction)_builtin_isinstance_replacement, METH_VARARGS, NULL};
+
+extern PyModuleObject *builtin_module;
+
+void patchBuiltinModule() {
+#if defined(_NUITKA_MODULE)
+ static bool init_done = false;
+
+ if (init_done == true)
+ return;
+ init_done = true;
+#endif
+ CHECK_OBJECT(builtin_module);
+
+ // Patch "inspect.isinstance" unless it is already patched.
+ original_isinstance = PyObject_GetAttrString((PyObject *)builtin_module, "isinstance");
+ CHECK_OBJECT(original_isinstance);
+
+ // Copy the doc attribute over, needed for "inspect.signature" at least.
+ if (PyCFunction_Check(original_isinstance)) {
+ _method_def_builtin_isinstance_replacement.ml_doc = ((PyCFunctionObject *)original_isinstance)->m_ml->ml_doc;
+ }
+
+ PyObject *builtin_isinstance_replacement = PyCFunction_New(&_method_def_builtin_isinstance_replacement, NULL);
+ CHECK_OBJECT(builtin_isinstance_replacement);
+
+ PyObject_SetAttrString((PyObject *)builtin_module, "isinstance", builtin_isinstance_replacement);
+}
+
+static richcmpfunc original_PyType_tp_richcompare = NULL;
+
+static PyObject *Nuitka_type_tp_richcompare(PyObject *a, PyObject *b, int op) {
+ if (likely(op == Py_EQ || op == Py_NE)) {
+ if (a == (PyObject *)&Nuitka_Function_Type) {
+ a = (PyObject *)&PyFunction_Type;
+ } else if (a == (PyObject *)&Nuitka_Method_Type) {
+ a = (PyObject *)&PyMethod_Type;
+ } else if (a == (PyObject *)&Nuitka_Generator_Type) {
+ a = (PyObject *)&PyGen_Type;
+ }
+
+ if (b == (PyObject *)&Nuitka_Function_Type) {
+ b = (PyObject *)&PyFunction_Type;
+ } else if (b == (PyObject *)&Nuitka_Method_Type) {
+ b = (PyObject *)&PyMethod_Type;
+ } else if (b == (PyObject *)&Nuitka_Generator_Type) {
+ b = (PyObject *)&PyGen_Type;
+ }
+ }
+
+ CHECK_OBJECT(a);
+ CHECK_OBJECT(b);
+
+ assert(original_PyType_tp_richcompare);
+
+ return original_PyType_tp_richcompare(a, b, op);
+}
+
+void patchTypeComparison() {
+ if (original_PyType_tp_richcompare == NULL) {
+ original_PyType_tp_richcompare = PyType_Type.tp_richcompare;
+ PyType_Type.tp_richcompare = Nuitka_type_tp_richcompare;
+ }
+}
+
+#include "nuitka/freelists.h"
+
+#define MAX_TRACEBACK_FREE_LIST_COUNT 1000
+static PyTracebackObject *free_list_tracebacks = NULL;
+static int free_list_tracebacks_count = 0;
+
+// Create a traceback for a given frame, using a freelist hacked into the
+// existing type.
+PyTracebackObject *MAKE_TRACEBACK(struct Nuitka_FrameObject *frame, int lineno) {
+#if 0
+ PRINT_STRING("MAKE_TRACEBACK: Enter");
+ PRINT_ITEM((PyObject *)frame);
+ PRINT_NEW_LINE();
+
+ dumpFrameStack();
+#endif
+
+ CHECK_OBJECT(frame);
+ assert(lineno != 0);
+
+ PyTracebackObject *result;
+
+ allocateFromFreeListFixed(free_list_tracebacks, PyTracebackObject, PyTraceBack_Type);
+
+ result->tb_next = NULL;
+ result->tb_frame = (PyFrameObject *)frame;
+ Py_INCREF(frame);
+
+ result->tb_lasti = 0;
+ result->tb_lineno = lineno;
+
+ Nuitka_GC_Track(result);
+
+ return result;
+}
+
+static void Nuitka_tb_dealloc(PyTracebackObject *tb) {
+ // Need to use official method as it checks for recursion.
+ PyObject_GC_UnTrack(tb);
+
+#if 0
+#if PYTHON_VERSION >= 0x380
+ Py_TRASHCAN_BEGIN(tb, Nuitka_tb_dealloc);
+#else
+ Py_TRASHCAN_SAFE_BEGIN(tb);
+#endif
+#endif
+
+ Py_XDECREF(tb->tb_next);
+ Py_XDECREF(tb->tb_frame);
+
+ releaseToFreeList(free_list_tracebacks, tb, MAX_TRACEBACK_FREE_LIST_COUNT);
+
+#if 0
+#if PYTHON_VERSION >= 0x380
+ Py_TRASHCAN_END;
+#else
+ Py_TRASHCAN_SAFE_END(tb);
+#endif
+#endif
+}
+
+void patchTracebackDealloc(void) { PyTraceBack_Type.tp_dealloc = (destructor)Nuitka_tb_dealloc; }
diff --git a/mtube.build/static_src/InspectPatcher.o b/mtube.build/static_src/InspectPatcher.o
new file mode 100644
index 0000000..df315ef
Binary files /dev/null and b/mtube.build/static_src/InspectPatcher.o differ
diff --git a/mtube.build/static_src/MainProgram.c b/mtube.build/static_src/MainProgram.c
new file mode 100644
index 0000000..cfee42b
--- /dev/null
+++ b/mtube.build/static_src/MainProgram.c
@@ -0,0 +1,760 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/* The main program for a compiled program.
+ *
+ * It needs to prepare the interpreter and then loads and executes
+ * the "__main__" module.
+ *
+ */
+
+#include "nuitka/prelude.h"
+
+#ifndef __IDE_ONLY__
+// Generated during build with optional defines.
+#include "build_definitions.h"
+#else
+// For the IDE to know these exist.
+#define SYSFLAG_PY3K_WARNING 0
+#define SYSFLAG_DIVISION_WARNING 0
+#define SYSFLAG_UNICODE 0
+#define SYSFLAG_OPTIMIZE 0
+#define SYSFLAG_NO_SITE 0
+#define SYSFLAG_VERBOSE 0
+#define SYSFLAG_BYTES_WARNING 0
+#define SYSFLAG_UTF8 0
+#endif
+
+#include
+#include
+
+#if defined(_WIN32)
+#include
+#endif
+
+extern PyCodeObject *codeobj_main;
+
+/* For later use in "Py_GetArgcArgv" */
+static char **orig_argv;
+static int orig_argc;
+#if PYTHON_VERSION >= 0x300
+static wchar_t **argv_unicode;
+#endif
+
+#ifdef _NUITKA_STANDALONE
+
+#if _NUITKA_FROZEN > 0
+extern void copyFrozenModulesTo(struct _frozen *destination);
+
+// The original frozen modules list.
+#if PYTHON_VERSION < 0x340
+static struct _frozen *old_frozen = NULL;
+#else
+static struct _frozen const *old_frozen = NULL;
+#endif
+#endif
+
+static void prepareStandaloneEnvironment() {
+ // Tell the CPython library to use our pre-compiled modules as frozen
+ // modules. This for those modules/packages like "encoding" that will be
+ // loaded during "Py_Initialize" already, for the others they may be
+ // compiled.
+
+#if _NUITKA_FROZEN > 0
+ // The CPython library has some pre-existing frozen modules, we only append
+ // to that.
+ struct _frozen const *search = PyImport_FrozenModules;
+ while (search->name) {
+ search++;
+ }
+ int pre_existing_count = (int)(search - PyImport_FrozenModules);
+
+ /* Allocate new memory and merge the tables. Keeping the old ones has
+ * the advantage that e.g. "import this" is going to work well.
+ */
+ struct _frozen *merged =
+ (struct _frozen *)malloc(sizeof(struct _frozen) * (_NUITKA_FROZEN + pre_existing_count + 1));
+
+ memcpy(merged, PyImport_FrozenModules, pre_existing_count * sizeof(struct _frozen));
+ copyFrozenModulesTo(merged + pre_existing_count);
+ old_frozen = PyImport_FrozenModules;
+ PyImport_FrozenModules = merged;
+#endif
+
+ /* Setup environment variables to tell CPython that we would like it to use
+ * the provided binary directory as the place to look for DLLs and for
+ * extension modules.
+ */
+#if defined(_WIN32)
+ SetDllDirectoryW(getBinaryDirectoryWideChars());
+#endif
+
+#if PYTHON_VERSION < 0x300
+ char *binary_directory = (char *)getBinaryDirectoryHostEncoded();
+ NUITKA_PRINTF_TRACE("main(): Binary dir is %s\n", binary_directory);
+
+ Py_SetPythonHome(binary_directory);
+#else
+ wchar_t *binary_directory = (wchar_t *)getBinaryDirectoryWideChars();
+ NUITKA_PRINTF_TRACE("main(): Binary dir is %S\n", binary_directory);
+
+ Py_SetPythonHome(binary_directory);
+
+#endif
+}
+
+static void restoreStandaloneEnvironment() {
+ /* Make sure to use the optimal value for standalone mode only. */
+#if PYTHON_VERSION < 0x300
+ PySys_SetPath((char *)getBinaryDirectoryHostEncoded());
+ // NUITKA_PRINTF_TRACE("Final PySys_GetPath is 's'.\n", PySys_GetPath());
+#else
+ PySys_SetPath(getBinaryDirectoryWideChars());
+ Py_SetPath(getBinaryDirectoryWideChars());
+ NUITKA_PRINTF_TRACE("Final Py_GetPath is '%ls'.\n", Py_GetPath());
+#endif
+}
+
+#endif
+
+extern void _initCompiledCellType();
+extern void _initCompiledGeneratorType();
+extern void _initCompiledFunctionType();
+extern void _initCompiledMethodType();
+extern void _initCompiledFrameType();
+
+#include
+
+// Types of command line arguments are different between Python2/3.
+#if PYTHON_VERSION >= 0x300
+typedef wchar_t **argv_type_t;
+static argv_type_t convertCommandLineParameters(int argc, char **argv) {
+#if _WIN32
+ int new_argc;
+
+ argv_type_t result = CommandLineToArgvW(GetCommandLineW(), &new_argc);
+ assert(new_argc == argc);
+ return result;
+#else
+ // Originally taken from CPython3: There seems to be no sane way to use
+ static wchar_t **argv_copy;
+ argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t *) * argc);
+
+ // Temporarily disable locale for conversions to not use it.
+ char *oldloc = strdup(setlocale(LC_ALL, NULL));
+ setlocale(LC_ALL, "");
+
+ for (int i = 0; i < argc; i++) {
+#if PYTHON_VERSION >= 0x350
+ argv_copy[i] = Py_DecodeLocale(argv[i], NULL);
+#elif defined(__APPLE__) && PYTHON_VERSION >= 0x320
+ argv_copy[i] = _Py_DecodeUTF8_surrogateescape(argv[i], strlen(argv[i]));
+#else
+ argv_copy[i] = _Py_char2wchar(argv[i], NULL);
+#endif
+
+ assert(argv_copy[i]);
+ }
+
+ setlocale(LC_ALL, oldloc);
+ free(oldloc);
+
+ return argv_copy;
+#endif
+}
+#else
+typedef char **argv_type_t;
+#endif
+
+#ifdef _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
+extern void SvcInstall();
+extern void SvcLaunchService();
+
+// Callback from Windows Service logic.
+DWORD WINAPI SvcStartPython(LPVOID lpParam) {
+ IMPORT_EMBEDDED_MODULE("__main__");
+
+ // TODO: Log exception and call ReportSvcStatus
+ if (ERROR_OCCURRED()) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+#endif
+
+// Parse the command line parameters and provide it to "sys" built-in module,
+// as well as decide if it's a multiprocessing usage.
+static bool is_multiprocessing_fork = false;
+
+static void setCommandLineParameters(int argc, argv_type_t argv, bool initial) {
+ if (initial) {
+ /* We might need to handle special parameters from plugins that are
+ very deeply woven into command line handling. These are right now
+ multiprocessing, which indicates that it's forking via extra
+ command line argument. And Windows Service indicates need to
+ install and exit here too.
+ */
+ for (int i = 1; i < argc; i++) {
+#if PYTHON_VERSION < 0x300
+ if ((strcmp(argv[i], "--multiprocessing-fork")) == 0 && (i + 1 < argc))
+#else
+ // TODO: Should simply use wide char literal
+ if ((wcscmp(argv[i], L"--multiprocessing-fork")) == 0 && (i + 1 < argc))
+#endif
+ {
+ is_multiprocessing_fork = true;
+ break;
+ }
+
+#ifdef _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
+ if (i == 1) {
+#if PYTHON_VERSION < 0x300
+ if (strcmp(argv[i], "install") == 0)
+#else
+ if (wcscmp(argv[i], L"install") == 0)
+#endif
+ {
+ NUITKA_PRINT_TRACE("main(): Calling plugin SvcInstall().");
+
+ SvcInstall();
+ NUITKA_CANNOT_GET_HERE("SvcInstall must not return");
+ }
+ }
+#endif
+ }
+ }
+
+ if (initial) {
+ // Py_SetProgramName(argv[0]);
+ } else {
+ PySys_SetArgv(argc, argv);
+ }
+}
+
+#if defined(_WIN32) && PYTHON_VERSION >= 0x300 && SYSFLAG_NO_RANDOMIZATION == 1
+static void setenv(char const *name, char const *value, int overwrite) {
+ assert(overwrite);
+
+ SetEnvironmentVariableA(name, value);
+}
+
+static void unsetenv(char const *name) { SetEnvironmentVariableA(name, NULL); }
+#endif
+
+#if _DEBUG_REFCOUNTS
+static void PRINT_REFCOUNTS() {
+ PRINT_STRING("REFERENCE counts at program end:\n");
+ PRINT_STRING("active | allocated | released\n");
+ PRINT_FORMAT("Compiled Coroutines: %d | %d | %d\n", count_active_Nuitka_Coroutine_Type,
+ count_allocated_Nuitka_Coroutine_Type, count_released_Nuitka_Coroutine_Type);
+ PRINT_FORMAT("Compiled Coroutines Wrappers: %d | %d | %d\n", count_active_Nuitka_CoroutineWrapper_Type,
+ count_allocated_Nuitka_CoroutineWrapper_Type, count_released_Nuitka_CoroutineWrapper_Type);
+
+ PRINT_FORMAT("Compiled Coroutines AIter Wrappers: %d | %d | %d\n", count_active_Nuitka_AIterWrapper_Type,
+ count_allocated_Nuitka_AIterWrapper_Type, count_released_Nuitka_AIterWrapper_Type);
+#if PYTHON_VERSION >= 0x360
+ PRINT_FORMAT("Compiled Asyncgen: %d | %d | %d\n", count_active_Nuitka_Asyncgen_Type,
+ count_allocated_Nuitka_Asyncgen_Type, count_released_Nuitka_Asyncgen_Type);
+ PRINT_FORMAT("Compiled Asyncgen Wrappers: %d | %d | %d\n", count_active_Nuitka_AsyncgenValueWrapper_Type,
+ count_allocated_Nuitka_AsyncgenValueWrapper_Type, count_released_Nuitka_AsyncgenValueWrapper_Type);
+ PRINT_FORMAT("Compiled Asyncgen Asend: %d | %d | %d\n", count_active_Nuitka_AsyncgenAsend_Type,
+ count_allocated_Nuitka_AsyncgenAsend_Type, count_released_Nuitka_AsyncgenAsend_Type);
+ PRINT_FORMAT("Compiled Asyncgen Athrow: %d | %d | %d\n", count_active_Nuitka_AsyncgenAthrow_Type,
+ count_allocated_Nuitka_AsyncgenAthrow_Type, count_released_Nuitka_AsyncgenAthrow_Type);
+#endif
+
+ PRINT_FORMAT("Compiled Frames: %d | %d | %d (cache usage may occur)\n", count_active_Nuitka_Frame_Type,
+ count_allocated_Nuitka_Frame_Type, count_released_Nuitka_Frame_Type);
+ PRINT_STRING("CACHED counts at program end:\n");
+ PRINT_STRING("active | allocated | released | hits\n");
+ PRINT_FORMAT("Cached Frames: %d | %d | %d | %d\n", count_active_frame_cache_instances,
+ count_allocated_frame_cache_instances, count_released_frame_cache_instances,
+ count_hit_frame_cache_instances);
+}
+#endif
+
+// Small helper to open files with few arguments.
+static PyObject *BUILTIN_OPEN_SIMPLE(PyObject *filename, char const *mode) {
+#if PYTHON_VERSION < 0x300
+ return BUILTIN_OPEN(filename, Nuitka_String_FromString(mode), NULL);
+#else
+ return BUILTIN_OPEN(filename, Nuitka_String_FromString(mode), NULL, NULL, NULL, NULL, NULL, NULL);
+#endif
+}
+
+#if defined(_NUITKA_ONEFILE) && defined(_WIN32)
+
+static long onefile_ppid;
+
+DWORD WINAPI doOnefileParentMonitoring(LPVOID lpParam) {
+ for (;;) {
+ Sleep(1000);
+
+ HANDLE handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, onefile_ppid);
+
+ if (handle == NULL) {
+ if (GetLastError() == ERROR_INVALID_PARAMETER) {
+ break;
+ } else {
+ continue;
+ }
+ } else {
+ DWORD ret = WaitForSingleObject(handle, 0);
+
+ CloseHandle(handle);
+
+ if (ret == WAIT_OBJECT_0) {
+ break;
+ }
+ }
+ }
+
+ // puts("Onefile parent monitoring kicks in.");
+
+ PyErr_SetInterrupt();
+
+ return 0;
+}
+#endif
+
+#ifdef _NUITKA_WINMAIN_ENTRY_POINT
+int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char *lpCmdLine, int nCmdShow) {
+#if defined(__MINGW32__) && !defined(_W64)
+ /* MINGW32 */
+ int argc = _argc;
+ char **argv = _argv;
+#else
+ /* MSVC, MINGW64 */
+ int argc = __argc;
+ char **argv = __argv;
+#endif
+#else
+int main(int argc, char **argv) {
+#endif
+ NUITKA_PRINT_TRACE("main(): Entered.");
+
+ orig_argv = argv;
+ orig_argc = argc;
+
+#ifdef __FreeBSD__
+ /* 754 requires that FP exceptions run in "no stop" mode by default, and
+ *
+ * until C vendors implement C99's ways to control FP exceptions, Python
+ * requires non-stop mode. Alas, some platforms enable FP exceptions by
+ * default. Here we disable them.
+ */
+
+ fp_except_t m;
+
+ m = fpgetmask();
+ fpsetmask(m & ~FP_X_OFL);
+#endif
+
+#ifdef _NUITKA_STANDALONE
+ NUITKA_PRINT_TRACE("main(): Prepare standalone environment.");
+ prepareStandaloneEnvironment();
+#else
+
+#if PYTHON_VERSION >= 0x350 && defined(DLL_EXTRA_PATH)
+ NUITKA_PRINT_TRACE("main(): Prepare DLL extra path.");
+ SetDllDirectory(DLL_EXTRA_PATH);
+#endif
+
+#endif
+
+ /* Initialize CPython library environment. */
+ Py_DebugFlag = 0;
+#if PYTHON_VERSION < 0x300
+ Py_Py3kWarningFlag = SYSFLAG_PY3K_WARNING;
+ Py_DivisionWarningFlag = SYSFLAG_DIVISION_WARNING;
+ Py_UnicodeFlag = SYSFLAG_UNICODE;
+ Py_TabcheckFlag = 0;
+#endif
+ Py_InspectFlag = 0;
+ Py_InteractiveFlag = 0;
+ Py_OptimizeFlag = SYSFLAG_OPTIMIZE;
+ Py_DontWriteBytecodeFlag = 0;
+ Py_NoUserSiteDirectory = SYSFLAG_NO_SITE;
+ Py_IgnoreEnvironmentFlag = 0;
+ Py_VerboseFlag = SYSFLAG_VERBOSE;
+ Py_BytesWarningFlag = SYSFLAG_BYTES_WARNING;
+#if SYSFLAG_NO_RANDOMIZATION == 1
+ Py_HashRandomizationFlag = 0;
+#if PYTHON_VERSION < 0x300
+ // For Python2 this is all it takes to have static hashes.
+ _PyRandom_Init();
+#endif
+#endif
+#if PYTHON_VERSION >= 0x370
+ Py_UTF8Mode = SYSFLAG_UTF8;
+#endif
+
+ /* This suppresses warnings from getpath.c */
+ Py_FrozenFlag = 1;
+
+ /* We want to import the site module, but only after we finished our own
+ * setup. The site module import will be the first thing, the main module
+ * does.
+ */
+ Py_NoSiteFlag = 1;
+
+ /* Initial command line handling only. */
+
+#if PYTHON_VERSION >= 0x300
+ NUITKA_PRINT_TRACE("main(): Calling convertCommandLineParameters.");
+ argv_unicode = convertCommandLineParameters(argc, argv);
+#endif
+
+ NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
+
+#if PYTHON_VERSION < 0x300
+ setCommandLineParameters(argc, argv, true);
+#else
+ setCommandLineParameters(argc, argv_unicode, true);
+#endif
+
+ /* For Python installations that need the home set, we inject it back here. */
+#if defined(PYTHON_HOME_PATH)
+#if PYTHON_VERSION < 0x300
+ NUITKA_PRINT_TRACE("main(): Prepare run environment '" PYTHON_HOME_PATH "'.");
+ Py_SetPythonHome(PYTHON_HOME_PATH);
+#else
+ NUITKA_PRINTF_TRACE("main(): Prepare run environment '%S'.\n", L"" PYTHON_HOME_PATH);
+ Py_SetPythonHome(L"" PYTHON_HOME_PATH);
+ // Make sure the above Py_SetPythonHome call has effect already.
+ Py_GetPath();
+#endif
+#endif
+
+#if PYTHON_VERSION >= 0x300 && SYSFLAG_NO_RANDOMIZATION == 1
+ char const *old_env = getenv("PYTHONHASHSEED");
+ setenv("PYTHONHASHSEED", "0", 1);
+#endif
+ /* Initialize the embedded CPython interpreter. */
+ NUITKA_PRINT_TRACE("main(): Calling Py_Initialize to initialize interpreter.");
+ Py_Initialize();
+
+#if PYTHON_VERSION >= 0x300 && SYSFLAG_NO_RANDOMIZATION == 1
+ if (old_env) {
+ setenv("PYTHONHASHSEED", old_env, 1);
+
+ PyObject *env_value = PyUnicode_FromString(old_env);
+ PyObject *hashseed_str = PyUnicode_FromString("PYTHONHASHSEED");
+
+ int res =
+ PyObject_SetItem(PyObject_GetAttrString(PyImport_ImportModule("os"), "environ"), hashseed_str, env_value);
+ assert(res == 0);
+
+ Py_DECREF(env_value);
+ Py_DECREF(hashseed_str);
+ } else {
+ unsetenv("PYTHONHASHSEED");
+
+ int res =
+ PyObject_DelItemString(PyObject_GetAttrString(PyImport_ImportModule("os"), "environ"), "PYTHONHASHSEED");
+ assert(res == 0);
+ }
+#endif
+
+#ifdef _NUITKA_STANDALONE
+ NUITKA_PRINT_TRACE("main(): Restore standalone environment.");
+ restoreStandaloneEnvironment();
+#endif
+
+ /* Lie about it, believe it or not, there are "site" files, that check
+ * against later imports, see below.
+ */
+ Py_NoSiteFlag = SYSFLAG_NO_SITE;
+
+ /* Set the command line parameters for run time usage. */
+ NUITKA_PRINT_TRACE("main(): Calling setCommandLineParameters.");
+
+#if PYTHON_VERSION < 0x300
+ setCommandLineParameters(argc, argv, false);
+#else
+ setCommandLineParameters(argc, argv_unicode, false);
+#endif
+
+ /* Initialize the built-in module tricks used. */
+ NUITKA_PRINT_TRACE("main(): Calling _initBuiltinModule().");
+ _initBuiltinModule();
+
+ /* Initialize the Python constant values used. This also sets
+ * "sys.executable" while at it.
+ */
+ NUITKA_PRINT_TRACE("main(): Calling createGlobalConstants().");
+ createGlobalConstants();
+
+ /* Complex call helpers need "__main__" constants, even if we only
+ * go into "__parents__main__" module as a start point.
+ */
+#if _NUITKA_PLUGIN_MULTIPROCESSING_ENABLED || _NUITKA_PLUGIN_TRACEBACK_ENCRYPTION_ENABLED
+ createMainModuleConstants();
+#endif
+
+ NUITKA_PRINT_TRACE("main(): Calling _initBuiltinOriginalValues().");
+ _initBuiltinOriginalValues();
+
+ /* Revert the wrong "sys.flags" value, it's used by "site" on at least
+ * Debian for Python 3.3, more uses may exist.
+ */
+#if SYSFLAG_NO_SITE == 0
+#if PYTHON_VERSION < 0x300
+ PyStructSequence_SET_ITEM(PySys_GetObject((char *)"flags"), 9, const_int_0);
+#else
+ PyStructSequence_SetItem(PySys_GetObject("flags"), 6, const_int_0);
+#endif
+#endif
+
+ /* Initialize the compiled types of Nuitka. */
+ _initCompiledCellType();
+ _initCompiledGeneratorType();
+ _initCompiledFunctionType();
+ _initCompiledMethodType();
+ _initCompiledFrameType();
+
+#if PYTHON_VERSION < 0x300
+ _initSlotCompare();
+#endif
+#if PYTHON_VERSION >= 0x270
+ _initSlotIternext();
+#endif
+
+ NUITKA_PRINT_TRACE("main(): Calling enhancePythonTypes().");
+ enhancePythonTypes();
+
+ NUITKA_PRINT_TRACE("main(): Calling patchBuiltinModule().");
+ patchBuiltinModule();
+
+ NUITKA_PRINT_TRACE("main(): Calling patchTypeComparison().");
+ patchTypeComparison();
+
+ NUITKA_PRINT_TRACE("main(): Calling patchTracebackDealloc().");
+ patchTracebackDealloc();
+
+ /* Allow to override the ticker value, to remove checks for threads in
+ * CPython core from impact on benchmarks. */
+ char const *ticker_value = getenv("NUITKA_TICKER");
+ if (ticker_value != NULL) {
+ _Py_Ticker = atoi(ticker_value);
+ assert(_Py_Ticker >= 20);
+ }
+
+ /* At least on Windows, we support disabling the console via linker flag, but now
+ need to provide the NUL standard file handles manually in this case. */
+ {
+ PyObject *nul_filename = Nuitka_String_FromString("NUL:");
+
+ if (PySys_GetObject((char *)"stdin") == NULL) {
+ PyObject *stdin_file = BUILTIN_OPEN_SIMPLE(nul_filename, "r");
+
+ CHECK_OBJECT(stdin_file);
+ PySys_SetObject((char *)"stdin", stdin_file);
+ }
+
+ if (PySys_GetObject((char *)"stdout") == NULL) {
+ PyObject *stdout_file = BUILTIN_OPEN_SIMPLE(nul_filename, "w");
+
+ CHECK_OBJECT(stdout_file);
+ PySys_SetObject((char *)"stdout", stdout_file);
+ }
+
+ if (PySys_GetObject((char *)"stderr") == NULL) {
+ PyObject *stderr_file = BUILTIN_OPEN_SIMPLE(nul_filename, "w");
+
+ CHECK_OBJECT(stderr_file);
+
+ PySys_SetObject((char *)"stderr", stderr_file);
+ }
+
+ Py_DECREF(nul_filename);
+ }
+
+#ifdef _NUITKA_STANDALONE
+ NUITKA_PRINT_TRACE("main(): Calling setEarlyFrozenModulesFileAttribute().");
+
+ setEarlyFrozenModulesFileAttribute();
+#endif
+
+#if _NUITKA_FROZEN > 0
+ NUITKA_PRINT_TRACE("main(): Removing early frozen module table again.");
+ PyImport_FrozenModules = old_frozen;
+ assert(old_frozen != NULL);
+#endif
+
+ NUITKA_PRINT_TRACE("main(): Calling setupMetaPathBasedLoader().");
+ /* Enable meta path based loader. */
+ setupMetaPathBasedLoader();
+
+ _PyWarnings_Init();
+
+ /* Disable CPython warnings if requested to. */
+#if NO_PYTHON_WARNINGS
+ {
+#if PYTHON_VERSION >= 0x300
+ wchar_t ignore[] = L"ignore";
+#else
+ char ignore[] = "ignore";
+#endif
+
+ PySys_AddWarnOption(ignore);
+
+#if PYTHON_VERSION >= 0x342 && defined(_NUITKA_FULL_COMPAT)
+ // For full compatibility bump the warnings registry version,
+ // otherwise modules "__warningsregistry__" will mismatch.
+ PyObject *warnings_module = PyImport_ImportModule("warnings");
+ PyObject *meth = PyObject_GetAttrString(warnings_module, "_filters_mutated");
+
+ CALL_FUNCTION_NO_ARGS(meth);
+#endif
+ }
+#endif
+
+#if PYTHON_VERSION >= 0x300
+ NUITKA_PRINT_TRACE("main(): Calling patchInspectModule().");
+ patchInspectModule();
+#endif
+
+#if _NUITKA_PROFILE
+ startProfiling();
+#endif
+
+ /* Execute the main module unless plugins want to do something else. In case of
+ multiprocessing making a fork on Windows, we should execute __parents_main__
+ instead. And for Windows Service we call the plugin C code to call us back
+ to launch main code in a callback. */
+#ifdef _NUITKA_PLUGIN_MULTIPROCESSING_ENABLED
+ if (unlikely(is_multiprocessing_fork)) {
+ NUITKA_PRINT_TRACE("main(): Calling __parents_main__.");
+ IMPORT_EMBEDDED_MODULE("__parents_main__");
+ } else {
+#endif
+#if defined(_NUITKA_ONEFILE) && defined(_WIN32)
+ {
+ char buffer[128] = {0};
+ DWORD size = GetEnvironmentVariableA("NUITKA_ONEFILE_PARENT", buffer, sizeof(buffer));
+
+ if (size > 0 && size < 127) {
+ onefile_ppid = atol(buffer);
+
+ HANDLE onefile_thread = CreateThread(NULL, 0, doOnefileParentMonitoring, NULL, 0, NULL);
+ }
+ }
+#endif
+ PyDict_DelItem(PyImport_GetModuleDict(), const_str_plain___main__);
+
+#if _NUITKA_PLUGIN_WINDOWS_SERVICE_ENABLED
+ NUITKA_PRINT_TRACE("main(): Calling plugin SvcLaunchService() entry point.");
+ SvcLaunchService();
+#else
+ /* Execute the "__main__" module. */
+ NUITKA_PRINT_TRACE("main(): Calling __main__.");
+
+ IMPORT_EMBEDDED_MODULE("__main__");
+#endif
+#ifdef _NUITKA_PLUGIN_MULTIPROCESSING_ENABLED
+ }
+#endif
+
+#if _NUITKA_PROFILE
+ stopProfiling();
+#endif
+
+#ifndef __NUITKA_NO_ASSERT__
+ checkGlobalConstants();
+
+ /* TODO: Walk over all loaded compiled modules, and make this kind of checks. */
+#if 0
+ checkModuleConstants___main__();
+#endif
+
+#endif
+
+ int exit_code;
+
+ if (ERROR_OCCURRED()) {
+#if PYTHON_VERSION >= 0x300
+ /* Remove the frozen importlib traceback part, which would not be compatible. */
+ PyThreadState *thread_state = PyThreadState_GET();
+
+ while (thread_state->curexc_traceback) {
+ PyTracebackObject *tb = (PyTracebackObject *)thread_state->curexc_traceback;
+ PyFrameObject *frame = tb->tb_frame;
+
+ if (0 == strcmp(PyUnicode_AsUTF8(frame->f_code->co_filename), "")) {
+ thread_state->curexc_traceback = (PyObject *)tb->tb_next;
+ Py_INCREF(tb->tb_next);
+
+ continue;
+ }
+
+ break;
+ }
+#endif
+
+ PyErr_PrintEx(0);
+
+ exit_code = 1;
+ } else {
+ exit_code = 0;
+ }
+
+#if _DEBUG_REFCOUNTS
+ PRINT_REFCOUNTS();
+#endif
+
+ Py_Exit(exit_code);
+ /* The above branches both do "Py_Exit()" calls which are not supposed to
+ * return.
+ */
+ NUITKA_CANNOT_GET_HERE("Py_Exit does not return");
+}
+
+/* This is an unofficial API, not available on Windows, but on Linux and others
+ * it is exported, and has been used by some code.
+ */
+#ifndef _WIN32
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if PYTHON_VERSION >= 0x300
+#if defined(__GNUC__)
+__attribute__((weak))
+__attribute__((visibility("default")))
+#endif
+void Py_GetArgcArgv(int *argc, wchar_t ***argv) {
+ *argc = orig_argc;
+ *argv = argv_unicode;
+}
+
+#else
+#if defined(__GNUC__)
+__attribute__((weak))
+__attribute__((visibility("default")))
+#endif
+void Py_GetArgcArgv(int *argc, char ***argv) {
+ *argc = orig_argc;
+ *argv = orig_argv;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/mtube.build/static_src/MainProgram.o b/mtube.build/static_src/MainProgram.o
new file mode 100644
index 0000000..071b91d
Binary files /dev/null and b/mtube.build/static_src/MainProgram.o differ
diff --git a/mtube.build/static_src/MetaPathBasedLoader.c b/mtube.build/static_src/MetaPathBasedLoader.c
new file mode 100644
index 0000000..069d0b9
--- /dev/null
+++ b/mtube.build/static_src/MetaPathBasedLoader.c
@@ -0,0 +1,1620 @@
+// Copyright 2021, Kay Hayen, mailto:kay.hayen@gmail.com
+//
+// Part of "Nuitka", an optimizing Python compiler that is compatible and
+// integrates with CPython, but also works on its own.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// This implements the loading of C compiled modules and shared library
+// extension modules bundled for standalone mode.
+
+// This is achieved mainly by registered a "sys.meta_path" loader, that then
+// gets asked for module names, and responds if knows about one. It's fed by
+// a table created at compile time.
+
+// The nature and use of these 2 loaded module kinds is very different, but
+// having them as distinct loaders would only require to duplicate the search
+// and registering of stuff.
+
+#include
+
+#ifdef _WIN32
+#undef SEP
+#define SEP '\\'
+#endif
+
+#include "nuitka/prelude.h"
+// Include definition of PyInterpreterState, hidden since Python 3.8
+#if PYTHON_VERSION >= 0x380
+#define Py_BUILD_CORE
+#include "internal/pycore_pystate.h"
+#undef Py_BUILD_CORE
+#endif
+#include "nuitka/unfreezing.h"
+
+#ifdef _WIN32
+#include
+#endif
+
+extern PyTypeObject Nuitka_Loader_Type;
+
+struct Nuitka_LoaderObject {
+ /* Python object folklore: */
+ PyObject_HEAD;
+
+ /* The loader entry, to know what was loaded exactly. */
+ struct Nuitka_MetaPathBasedLoaderEntry const *m_loader_entry;
+};
+
+#ifdef _NUITKA_EXE
+static inline bool isVerbose(void) { return Py_VerboseFlag != 0; }
+#elif _NUITKA_SYSFLAG_VERBOSE
+static inline bool isVerbose(void) { return true; }
+#else
+static inline bool isVerbose(void) { return false; }
+#endif
+
+static struct Nuitka_MetaPathBasedLoaderEntry *loader_entries = NULL;
+
+static bool hasFrozenModule(char const *name) {
+ for (struct _frozen const *p = PyImport_FrozenModules;; p++) {
+ if (p->name == NULL) {
+ return false;
+ }
+
+ if (strcmp(p->name, name) == 0) {
+ break;
+ }
+ }
+
+ return true;
+}
+
+static char *appendModulenameAsPath(char *buffer, char const *module_name, size_t buffer_size) {
+ // Skip to the end
+ while (*buffer != 0) {
+ buffer++;
+ }
+
+ while (*module_name) {
+ if (buffer_size < 1) {
+ abort();
+ }
+
+ if (*module_name == '.') {
+ *buffer++ = SEP;
+ module_name++;
+ } else {
+ *buffer++ = *module_name++;
+ }
+
+ buffer_size -= 1;
+ }
+
+ *buffer = 0;
+
+ return buffer;
+}
+
+#if defined(_WIN32) && defined(_NUITKA_STANDALONE)
+
+static void appendModulenameAsPathW(wchar_t *buffer, char const *module_name, size_t buffer_size) {
+ // Skip to the end
+ while (*buffer != 0) {
+ buffer++;
+ }
+
+ while (*module_name) {
+ char c = *module_name++;
+
+ if (c == '.') {
+ c = SEP;
+ }
+
+ appendCharSafeW(buffer, c, buffer_size);
+ }
+}
+#endif
+
+// TODO: This updates the wrong absolute path. We ought to change it to
+// the "module_path_name" at the time of writing it, then we save a few
+// bytes in the blob, and don't have to create that string here.
+#ifdef _NUITKA_STANDALONE
+static void patchCodeObjectPaths(PyCodeObject *code_object, PyObject *module_path) {
+ code_object->co_filename = module_path;
+ Py_INCREF(module_path);
+
+ Py_ssize_t nconsts = PyTuple_GET_SIZE(code_object->co_consts);
+
+ for (int i = 0; i < nconsts; i++) {
+ PyObject *constant = PyTuple_GET_ITEM(code_object->co_consts, i);
+
+ if (PyCode_Check(constant)) {
+ patchCodeObjectPaths((PyCodeObject *)constant, module_path);
+ }
+ }
+}
+#endif
+
+NUITKA_MAY_BE_UNUSED static PyObject *MAKE_RELATIVE_PATH_FROM_NAME(char const *name, bool is_package) {
+ char buffer[MAXPATHLEN + 1] = {0};
+
+ appendModulenameAsPath(buffer, name, sizeof(buffer));
+
+ if (is_package) {
+ appendCharSafe(buffer, SEP, sizeof(buffer));
+ appendStringSafe(buffer, "__init__.py", sizeof(buffer));
+ } else {
+ appendStringSafe(buffer, ".py", sizeof(buffer));
+ }
+
+ PyObject *module_path_entry_base = Nuitka_String_FromString(buffer);
+
+ PyObject *result = MAKE_RELATIVE_PATH(module_path_entry_base);
+
+ Py_DECREF(module_path_entry_base);
+
+ return result;
+}
+
+static PyObject *loadModuleFromCodeObject(PyObject *module, PyCodeObject *code_object, char const *name,
+ bool is_package) {
+ assert(code_object != NULL);
+
+ // TODO: This should not actually trigger, but it does.
+ // assert(PyDict_GetItemString(modules, name) == NULL);
+ bool b_res = Nuitka_SetModuleString(name, module);
+ assert(b_res != false);
+
+ char buffer[MAXPATHLEN + 1] = {0};
+
+ PyObject *module_path_entry = NULL;
+
+ if (is_package) {
+ appendModulenameAsPath(buffer, name, sizeof(buffer));
+ PyObject *module_path_entry_base = Nuitka_String_FromString(buffer);
+
+ module_path_entry = MAKE_RELATIVE_PATH(module_path_entry_base);
+ Py_DECREF(module_path_entry_base);
+
+ appendCharSafe(buffer, SEP, sizeof(buffer));
+ appendStringSafe(buffer, "__init__.py", sizeof(buffer));
+ } else {
+ appendModulenameAsPath(buffer, name, sizeof(buffer));
+ appendStringSafe(buffer, ".py", sizeof(buffer));
+ }
+
+ PyObject *module_path_name = Nuitka_String_FromString(buffer);
+
+ PyObject *module_path = MAKE_RELATIVE_PATH(module_path_name);
+ Py_DECREF(module_path_name);
+
+ if (is_package) {
+ /* Set __path__ properly, unlike frozen module importer does. */
+ PyObject *path_list = PyList_New(1);
+ if (unlikely(path_list == NULL))
+ return NULL;
+
+ int res = PyList_SetItem(path_list, 0, module_path_entry);
+ if (unlikely(res != 0)) {
+ return NULL;
+ }
+ Py_INCREF(module_path_entry);
+
+ res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
+ if (unlikely(res != 0)) {
+ return NULL;
+ }
+
+ Py_DECREF(path_list);
+
+ PyObject *module_name = PyObject_GetAttr(module, const_str_plain___name__);
+ CHECK_OBJECT(module_name);
+
+ res = PyObject_SetAttr(module, const_str_plain___package__, module_name);
+
+ if (unlikely(res != 0)) {
+ return NULL;
+ }
+ }
+
+#ifdef _NUITKA_STANDALONE
+ patchCodeObjectPaths(code_object, module_path);
+#endif
+
+ module = PyImport_ExecCodeModuleEx((char *)name, (PyObject *)code_object, Nuitka_String_AsString(module_path));
+
+ Py_DECREF(module_path);
+
+ return module;
+}
+
+static struct Nuitka_MetaPathBasedLoaderEntry *findEntry(char const *name) {
+ struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
+ assert(current);
+
+ while (current->name != NULL) {
+ if (strcmp(name, current->name) == 0) {
+ return current;
+ }
+
+ current++;
+ }
+
+ return NULL;
+}
+
+#ifndef _NUITKA_STANDALONE
+static struct Nuitka_MetaPathBasedLoaderEntry *findContainingPackageEntry(char const *name) {
+ struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
+
+ // Consider the package name of the searched entry.
+ char const *package_name_end = strrchr(name, '.');
+ if (package_name_end == NULL) {
+ return NULL;
+ }
+
+ size_t length = package_name_end - name;
+
+ while (current->name != NULL) {
+ if ((current->flags & NUITKA_PACKAGE_FLAG) != 0) {
+ if (strlen(current->name) == length && strncmp(name, current->name, length) == 0) {
+ return current;
+ }
+ }
+
+ current++;
+ }
+
+ return NULL;
+}
+
+static PyObject *getFileList(PyObject *dirname) {
+ static PyObject *listdir_func = NULL;
+
+ if (listdir_func == NULL) {
+ PyObject *os_module = PyImport_ImportModule("os");
+ listdir_func = PyObject_GetAttrString(os_module, "listdir");
+ }
+
+ if (unlikely(listdir_func == NULL)) {
+ return NULL;
+ }
+
+ return CALL_FUNCTION_WITH_SINGLE_ARG(listdir_func, dirname);
+}
+
+static PyObject *getImportingSuffixesByPriority(int kind) {
+ static PyObject *result = NULL;
+
+ if (result == NULL) {
+ result = PyList_New(0);
+
+ PyObject *imp_module = PyImport_ImportModule("imp");
+ PyObject *get_suffixes_func = PyObject_GetAttrString(imp_module, "get_suffixes");
+
+ PyObject *suffix_list = CALL_FUNCTION_NO_ARGS(get_suffixes_func);
+
+ for (int i = 0; i < PyList_GET_SIZE(suffix_list); i++) {
+ PyObject *module_kind = PyTuple_GET_ITEM(PyList_GET_ITEM(suffix_list, i), 2);
+
+ if (PyInt_AsLong(module_kind) == kind) {
+ LIST_APPEND0(result, PyTuple_GET_ITEM(PyList_GET_ITEM(suffix_list, i), 0));
+ }
+ }
+ }
+
+ return result;
+}
+
+static PyObject *installed_extension_modules = NULL;
+
+static bool scanModuleInPackagePath(PyObject *module_name, char const *parent_module_name) {
+ PyObject *sys_modules = PyImport_GetModuleDict();
+
+ PyObject *parent_module = PyDict_GetItemString(sys_modules, parent_module_name);
+ CHECK_OBJECT(parent_module);
+
+ PyObject *parent_path = PyObject_GetAttr(parent_module, const_str_plain___path__);
+
+ // Accept that it might be deleted.
+ if (parent_path == NULL || !PyList_Check(parent_path)) {
+ return false;
+ }
+
+ PyObject *candidates = PyList_New(0);
+
+ // Search only relative to the parent name of course.
+ char const *module_relname_str = Nuitka_String_AsString(module_name) + strlen(parent_module_name) + 1;
+
+ Py_ssize_t parent_path_size = PyList_GET_SIZE(parent_path);
+
+ for (Py_ssize_t i = 0; i < parent_path_size; i += 1) {
+ PyObject *path_element = PyList_GET_ITEM(parent_path, i);
+
+ PyObject *filenames_list = getFileList(path_element);
+
+ if (filenames_list == NULL) {
+ DROP_ERROR_OCCURRED();
+ continue;
+ }
+
+ Py_ssize_t filenames_list_size = PyList_GET_SIZE(filenames_list);
+
+ for (Py_ssize_t j = 0; j < filenames_list_size; j += 1) {
+ PyObject *filename = PyList_GET_ITEM(filenames_list, j);
+
+ if (Nuitka_String_CheckExact(filename)) {
+ char const *filename_str = Nuitka_String_AsString(filename);
+
+ if (strncmp(filename_str, module_relname_str, strlen(module_relname_str)) == 0 &&
+ filename_str[strlen(module_relname_str)] == '.') {
+ LIST_APPEND1(candidates, PyTuple_Pack(2, path_element, filename));
+ }
+ }
+ }
+ }
+
+#if 0
+ PRINT_STRING("CANDIDATES:");
+ PRINT_STRING(Nuitka_String_AsString(module_name));
+ PRINT_STRING(module_relname_str);
+ PRINT_ITEM(candidates);
+ PRINT_NEW_LINE();
+#endif
+
+ // Look up C-extension suffixes, these are used with highest priority.
+ PyObject *suffix_list = getImportingSuffixesByPriority(3);
+
+ for (Py_ssize_t i = 0; i < PyList_GET_SIZE(suffix_list); i += 1) {
+ PyObject *suffix = PyList_GET_ITEM(suffix_list, i);
+
+ char const *suffix_str = Nuitka_String_AsString(suffix);
+
+ for (Py_ssize_t j = 0; j < PyList_GET_SIZE(candidates); j += 1) {
+ PyObject *entry = PyList_GET_ITEM(candidates, j);
+
+ PyObject *directory = PyTuple_GET_ITEM(entry, 0);
+ PyObject *candidate = PyTuple_GET_ITEM(entry, 1);
+
+ char const *candidate_str = Nuitka_String_AsString(candidate);
+
+ if (strcmp(suffix_str, candidate_str + strlen(module_relname_str)) == 0) {
+ PyObject *fullpath = JOIN_PATH2(directory, candidate);
+
+ if (installed_extension_modules == NULL) {
+ installed_extension_modules = PyDict_New();
+ }
+
+// Force path to unicode, to have easier consumption, as we need a wchar_t or char *
+// from it later, and we don't want to test there.
+#if PYTHON_VERSION < 0x300 && defined(_WIN32)
+ PyObject *tmp = PyUnicode_FromObject(fullpath);
+ Py_DECREF(fullpath);
+ fullpath = tmp;
+#endif
+
+ DICT_SET_ITEM(installed_extension_modules, module_name, fullpath);
+
+ Py_DECREF(candidates);
+
+ return true;
+ }
+ }
+ }
+
+ Py_DECREF(candidates);
+
+ return false;
+}
+
+#ifdef _WIN32
+static PyObject *callIntoShlibModule(char const *full_name, const wchar_t *filename);
+#else
+static PyObject *callIntoShlibModule(char const *full_name, const char *filename);
+#endif
+
+static PyObject *callIntoInstalledShlibModule(PyObject *module_name, PyObject *extension_module_filename) {
+#if _WIN32
+ // We can rely on unicode object to be there in case of Windows, to have an easier time to
+ // create the string needed.
+ assert(PyUnicode_CheckExact(extension_module_filename));
+
+#if PYTHON_VERSION < 0x300
+ wchar_t const *extension_module_filename_str = PyUnicode_AS_UNICODE(extension_module_filename);
+#else
+ wchar_t const *extension_module_filename_str = PyUnicode_AsWideCharString(extension_module_filename, NULL);
+#endif
+#else
+ char const *extension_module_filename_str = Nuitka_String_AsString(extension_module_filename);
+#endif
+
+ return callIntoShlibModule(Nuitka_String_AsString(module_name), extension_module_filename_str);
+}
+
+#endif
+
+static char *_kwlist[] = {(char *)"fullname", (char *)"unused", NULL};
+
+static PyObject *_path_unfreezer_find_module(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *module_name;
+ PyObject *unused;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O|O:find_module", (char **)_kwlist, &module_name, &unused);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ char const *name = Nuitka_String_AsString(module_name);
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # considering responsibility (find_module)\n", name);
+ }
+
+ struct Nuitka_MetaPathBasedLoaderEntry *entry = findEntry(name);
+
+ if (entry) {
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # claimed responsibility (compiled)\n", name);
+ }
+
+ PyObject *metapath_based_loader = (PyObject *)&Nuitka_Loader_Type;
+
+ Py_INCREF(metapath_based_loader);
+ return metapath_based_loader;
+ }
+
+ if (hasFrozenModule(name)) {
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # claimed responsibility (frozen)\n", name);
+ }
+
+ PyObject *metapath_based_loader = (PyObject *)&Nuitka_Loader_Type;
+
+ Py_INCREF(metapath_based_loader);
+ return metapath_based_loader;
+ }
+
+#ifndef _NUITKA_STANDALONE
+ entry = findContainingPackageEntry(name);
+
+ if (entry != NULL) {
+ bool result = scanModuleInPackagePath(module_name, entry->name);
+
+ if (result) {
+ PyObject *metapath_based_loader = (PyObject *)&Nuitka_Loader_Type;
+
+ Py_INCREF(metapath_based_loader);
+ return metapath_based_loader;
+ }
+ }
+#endif
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # denied responsibility\n", name);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static char const *_kwlist_get_data[] = {"filename", NULL};
+
+static PyObject *_path_unfreezer_get_data(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *filename;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O:get_data", (char **)_kwlist_get_data, &filename);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+#if PYTHON_VERSION < 0x300
+ PyObject *data_file = BUILTIN_OPEN(filename, const_str_plain_rb, NULL);
+#else
+ PyObject *data_file = BUILTIN_OPEN(filename, const_str_plain_rb, NULL, NULL, NULL, NULL, NULL, NULL);
+#endif
+ if (unlikely(data_file == NULL)) {
+ // TODO: Issue a runtime warning maybe.
+ return NULL;
+ }
+
+ PyObject *read_method = PyObject_GetAttr(data_file, const_str_plain_read);
+ Py_DECREF(data_file);
+
+ if (unlikely(read_method == NULL)) {
+ return NULL;
+ }
+
+ PyObject *result = CALL_FUNCTION_NO_ARGS(read_method);
+ Py_DECREF(read_method);
+ return result;
+}
+
+#if PYTHON_VERSION < 0x300
+typedef void (*entrypoint_t)(void);
+#else
+typedef PyObject *(*entrypoint_t)(void);
+#endif
+
+#ifndef _WIN32
+// Shared libraries loading.
+#include
+#endif
+
+#if PYTHON_VERSION >= 0x350
+static PyObject *createModuleSpec(PyObject *module_name, bool is_package);
+#endif
+
+#ifdef _WIN32
+static PyObject *callIntoShlibModule(char const *full_name, const wchar_t *filename) {
+#else
+static PyObject *callIntoShlibModule(char const *full_name, const char *filename) {
+#endif
+ // Determine the package name and basename of the module to load.
+ char const *dot = strrchr(full_name, '.');
+ char const *name;
+ char const *package;
+
+ if (dot == NULL) {
+ package = NULL;
+ name = full_name;
+ } else {
+ // The extension modules do expect it to be full name in context.
+ package = (char *)full_name;
+ name = dot + 1;
+ }
+
+ char entry_function_name[1024];
+ snprintf(entry_function_name, sizeof(entry_function_name),
+#if PYTHON_VERSION < 0x300
+ "init%s",
+#else
+ "PyInit_%s",
+#endif
+ name);
+
+#ifdef _WIN32
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # LoadLibraryExW(\"%S\");\n", full_name, filename);
+ }
+
+ unsigned int old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
+
+ HINSTANCE hDLL = LoadLibraryExW(filename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+ SetErrorMode(old_mode);
+
+ if (unlikely(hDLL == NULL)) {
+ char buffer[1024];
+
+ char error_message[1024];
+ int size;
+
+ unsigned int error_code = GetLastError();
+
+ size = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error_code, 0,
+ (LPTSTR)error_message, sizeof(error_message), NULL);
+
+ // Report either way even if failed to get error message.
+ if (size == 0) {
+ PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed with error code %d", filename,
+ error_code);
+ } else {
+ // Strip trailing newline.
+ if (size >= 2 && error_message[size - 2] == '\r' && error_message[size - 1] == '\n') {
+ size -= 2;
+ error_message[size] = '\0';
+ }
+ PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed: %s", filename, error_message);
+ }
+
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ImportError, buffer);
+ return NULL;
+ }
+
+ entrypoint_t entrypoint = (entrypoint_t)GetProcAddress(hDLL, entry_function_name);
+#else
+#if PYTHON_VERSION < 0x390
+ int dlopenflags = PyThreadState_GET()->interp->dlopenflags;
+#else
+ // This code would work for all versions, but we are avoiding it where possible.
+ PyObject *dlopenflags_object = CALL_FUNCTION_NO_ARGS(PySys_GetObject("getdlopenflags"));
+ int dlopenflags = PyInt_AsLong(dlopenflags_object);
+#endif
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # dlopen(\"%s\", %x);\n", full_name, filename, dlopenflags);
+ }
+
+ void *handle = dlopen(filename, dlopenflags);
+
+ if (unlikely(handle == NULL)) {
+ const char *error = dlerror();
+
+ if (unlikely(error == NULL)) {
+ error = "unknown dlopen() error";
+ }
+
+ SET_CURRENT_EXCEPTION_TYPE0_STR(PyExc_ImportError, error);
+ return NULL;
+ }
+
+ entrypoint_t entrypoint = (entrypoint_t)dlsym(handle, entry_function_name);
+#endif
+ assert(entrypoint);
+
+#if PYTHON_VERSION < 0x370
+ char *old_context = _Py_PackageContext;
+#else
+ char const *old_context = _Py_PackageContext;
+#endif
+
+ _Py_PackageContext = (char *)package;
+
+ // Finally call into the DLL.
+#if PYTHON_VERSION < 0x300
+ (*entrypoint)();
+#else
+ PyObject *module = (*entrypoint)();
+#endif
+
+ _Py_PackageContext = old_context;
+
+#if PYTHON_VERSION < 0x300
+ PyObject *module = Nuitka_GetModuleString(full_name);
+#endif
+
+ if (unlikely(module == NULL)) {
+ if (!ERROR_OCCURRED()) {
+ PyErr_Format(PyExc_SystemError, "dynamic module '%s' not initialized properly", full_name);
+ }
+
+ return NULL;
+ }
+
+#if PYTHON_VERSION >= 0x300
+#if PYTHON_VERSION >= 0x350
+ PyModuleDef *def;
+
+ if (Py_TYPE(module) == &PyModuleDef_Type) {
+ def = (PyModuleDef *)module;
+
+ PyObject *full_name_obj = Nuitka_String_FromString(full_name);
+
+ PyObject *spec = createModuleSpec(full_name_obj, false);
+
+ module = PyModule_FromDefAndSpec(def, spec);
+ Py_DECREF(spec);
+
+ if (unlikely(module == NULL)) {
+ PyErr_Format(PyExc_SystemError, "dynamic module '%s' not initialized properly from def", full_name);
+
+ return NULL;
+ }
+
+ Nuitka_SetModule(full_name_obj, module);
+ Py_DECREF(full_name_obj);
+
+ int res = PyModule_ExecDef(module, def);
+
+ if (unlikely(res == -1)) {
+ return NULL;
+ }
+
+ return module;
+ } else {
+ def = PyModule_GetDef(module);
+ }
+
+ if (likely(def != NULL)) {
+ def->m_base.m_init = entrypoint;
+ }
+#else
+ PyModuleDef *def = PyModule_GetDef(module);
+
+ if (unlikely(def == NULL)) {
+ PyErr_Format(PyExc_SystemError, "initialization of %s did not return an extension module", filename);
+
+ return NULL;
+ }
+
+ def->m_base.m_init = entrypoint;
+#endif
+
+#endif
+
+ // Set filename attribute
+#ifdef _WIN32
+ int res = PyModule_AddObject(module, "__file__", PyUnicode_FromWideChar(filename, -1));
+#else
+ int res = PyModule_AddObject(module, "__file__", PyUnicode_FromString(filename));
+#endif
+ if (unlikely(res < 0)) {
+ // Might be refuted, which wouldn't be harmful.
+ CLEAR_ERROR_OCCURRED();
+ }
+
+ // Call the standard import fix-ups for extension modules. Their interface
+ // changed over releases.
+#if PYTHON_VERSION < 0x300
+ PyObject *res2 = _PyImport_FixupExtension((char *)full_name, (char *)filename);
+
+ if (unlikely(res2 == NULL)) {
+ return NULL;
+ }
+#else
+ PyObject *full_name_obj = PyUnicode_FromString(full_name);
+ CHECK_OBJECT(full_name_obj);
+#ifdef _WIN32
+ PyObject *filename_obj = PyUnicode_FromWideChar(filename, -1);
+#else
+ PyObject *filename_obj = PyUnicode_FromString(filename);
+#endif
+ CHECK_OBJECT(filename_obj);
+
+ res = _PyImport_FixupExtensionObject(module, full_name_obj, filename_obj
+#if PYTHON_VERSION >= 0x370
+ ,
+ PyImport_GetModuleDict()
+#endif
+
+ );
+
+ Py_DECREF(full_name_obj);
+ Py_DECREF(filename_obj);
+
+ if (unlikely(res == -1)) {
+ return NULL;
+ }
+#endif
+
+ return module;
+}
+
+static void loadTriggeredModule(char const *name, char const *trigger_name) {
+ char trigger_module_name[2048];
+
+ copyStringSafe(trigger_module_name, name, sizeof(trigger_module_name));
+ appendStringSafe(trigger_module_name, trigger_name, sizeof(trigger_module_name));
+
+ struct Nuitka_MetaPathBasedLoaderEntry *entry = findEntry(trigger_module_name);
+
+ if (entry != NULL) {
+ if (isVerbose()) {
+ PySys_WriteStderr("Loading %s\n", trigger_module_name);
+ }
+
+ IMPORT_EMBEDDED_MODULE(trigger_module_name);
+
+ if (unlikely(ERROR_OCCURRED())) {
+ if ((entry->flags & NUITKA_ABORT_MODULE_FLAG) != 0) {
+ printf("Critical error loading %s.\n", trigger_module_name);
+ abort();
+ } else {
+ PyObject *trigger_module_name_str = Nuitka_String_FromString(trigger_module_name);
+ PyErr_WriteUnraisable(trigger_module_name_str);
+ Py_DECREF(trigger_module_name_str);
+ }
+ }
+ }
+}
+
+#if PYTHON_VERSION >= 0x340
+static void _fixupSpecAttribute(PyObject *module) {
+ PyObject *spec_value = LOOKUP_ATTRIBUTE(module, const_str_plain___spec__);
+
+ if (spec_value && spec_value != Py_None) {
+ if (HAS_ATTR_BOOL(spec_value, const_str_plain__initializing)) {
+ SET_ATTRIBUTE(spec_value, const_str_plain__initializing, Py_False);
+ }
+ }
+}
+#endif
+
+// Pointers to bytecode data.
+static char **_bytecode_data = NULL;
+
+static PyObject *loadModule(PyObject *module, PyObject *module_name,
+ struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
+#ifdef _NUITKA_STANDALONE
+ if ((entry->flags & NUITKA_SHLIB_FLAG) != 0) {
+ // Append the the entry name from full path module name with dots,
+ // and translate these into directory separators.
+#ifdef _WIN32
+ wchar_t filename[MAXPATHLEN + 1] = {0};
+
+ appendWStringSafeW(filename, getBinaryDirectoryWideChars(), sizeof(filename) / sizeof(wchar_t));
+ appendCharSafeW(filename, SEP, sizeof(filename) / sizeof(wchar_t));
+ appendModulenameAsPathW(filename, entry->name, sizeof(filename) / sizeof(wchar_t));
+ appendStringSafeW(filename, ".pyd", sizeof(filename) / sizeof(wchar_t));
+#else
+ char filename[MAXPATHLEN + 1] = {0};
+
+ appendStringSafe(filename, getBinaryDirectoryHostEncoded(), sizeof(filename));
+ appendCharSafe(filename, SEP, sizeof(filename));
+ appendModulenameAsPath(filename, entry->name, sizeof(filename));
+ appendStringSafe(filename, ".so", sizeof(filename));
+
+#endif
+ // Not used unfortunately. TODO: Check if we can make it so.
+ Py_DECREF(module);
+
+ callIntoShlibModule(entry->name, filename);
+ } else
+#endif
+ if ((entry->flags & NUITKA_BYTECODE_FLAG) != 0) {
+ // TODO: Do node use marshal, but our own stuff, once we
+ // can do code objects too.
+
+ PyCodeObject *code_object =
+ (PyCodeObject *)PyMarshal_ReadObjectFromString(_bytecode_data[entry->bytecode_index], entry->bytecode_size);
+
+ // TODO: Probably a bit harsh reaction.
+ if (unlikely(code_object == NULL)) {
+ PyErr_Print();
+ abort();
+ }
+
+ return loadModuleFromCodeObject(module, code_object, entry->name, (entry->flags & NUITKA_PACKAGE_FLAG) != 0);
+ } else {
+ assert((entry->flags & NUITKA_SHLIB_FLAG) == 0);
+ assert(entry->python_initfunc);
+
+ bool res = Nuitka_SetModule(module_name, module);
+ assert(res != false);
+
+ // Run the compiled module code, we get the module returned.
+ PyObject *result = entry->python_initfunc(module, entry);
+ CHECK_OBJECT_X(result);
+
+#if PYTHON_VERSION >= 0x340
+ if (result != NULL) {
+ _fixupSpecAttribute(result);
+ }
+#endif
+ }
+
+ if (unlikely(ERROR_OCCURRED())) {
+ return NULL;
+ }
+
+ if (isVerbose()) {
+ PySys_WriteStderr("Loaded %s\n", entry->name);
+ }
+
+ return Nuitka_GetModule(module_name);
+}
+
+static PyObject *_EXECUTE_EMBEDDED_MODULE(PyObject *module, PyObject *module_name, char const *name) {
+ CHECK_OBJECT(module);
+ CHECK_OBJECT(module_name);
+
+ struct Nuitka_MetaPathBasedLoaderEntry *entry = findEntry(name);
+ bool frozen_import = entry == NULL && hasFrozenModule(name);
+
+ if (entry != NULL || frozen_import) {
+ // Execute the "preLoad" code produced for the module potentially. This
+ // is from plug-ins typically, that want to modify things for the the
+ // module before loading, to e.g. set a plug-in path, or do some monkey
+ // patching in order to make things compatible.
+ loadTriggeredModule(name, "-preLoad");
+ }
+
+ PyObject *result = NULL;
+
+ if (entry != NULL) {
+ result = loadModule(module, module_name, entry);
+
+ if (unlikely(result == NULL)) {
+ return NULL;
+ }
+ }
+
+ if (frozen_import) {
+ int res = PyImport_ImportFrozenModule((char *)name);
+
+ if (unlikely(res == -1)) {
+ return NULL;
+ }
+
+ if (res == 1) {
+ result = Nuitka_GetModule(module_name);
+ }
+ }
+
+ if (result != NULL) {
+ // Execute the "postLoad" code produced for the module potentially. This
+ // is from plug-ins typically, that want to modify the module immediately
+ // after loading, to e.g. set a plug-in path, or do some monkey patching
+ // in order to make things compatible.
+ loadTriggeredModule(name, "-postLoad");
+
+ return result;
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+// Note: This may become an entry point for hard coded imports of compiled
+// stuff.
+PyObject *IMPORT_EMBEDDED_MODULE(char const *name) {
+
+ PyObject *module_name = Nuitka_String_FromString(name);
+#if PYTHON_VERSION < 0x300
+ PyObject *module = PyModule_New(name);
+#else
+ PyObject *module = PyModule_NewObject(module_name);
+#endif
+
+ return _EXECUTE_EMBEDDED_MODULE(module, module_name, name);
+}
+
+PyObject *EXECUTE_EMBEDDED_MODULE(PyObject *module) {
+ PyObject *module_name = LOOKUP_ATTRIBUTE(module, const_str_plain___name__);
+ assert(module_name);
+
+ char const *name = Nuitka_String_AsString(module_name);
+
+ return _EXECUTE_EMBEDDED_MODULE(module, module_name, name);
+}
+
+static PyObject *_path_unfreezer_load_module(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *module_name;
+ PyObject *unused;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O|O:load_module", (char **)_kwlist, &module_name, &unused);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ assert(module_name);
+ assert(Nuitka_String_Check(module_name));
+
+ char const *name = Nuitka_String_AsString(module_name);
+
+ if (isVerbose()) {
+ PySys_WriteStderr("Loading %s\n", name);
+ }
+
+#ifndef _NUITKA_STANDALONE
+ if (installed_extension_modules != NULL) {
+ PyObject *extension_module_filename = DICT_GET_ITEM0(installed_extension_modules, module_name);
+
+ if (extension_module_filename != NULL) {
+
+ return callIntoInstalledShlibModule(module_name, extension_module_filename);
+ }
+ }
+#endif
+
+ return IMPORT_EMBEDDED_MODULE(name);
+}
+
+static char const *_kwlist_is_package[] = {"fullname", NULL};
+
+static PyObject *_path_unfreezer_is_package(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *module_name;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O:is_package", (char **)_kwlist_is_package, &module_name);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ assert(module_name);
+ assert(Nuitka_String_Check(module_name));
+
+ char const *name = Nuitka_String_AsString(module_name);
+
+ struct Nuitka_MetaPathBasedLoaderEntry *entry = findEntry(name);
+
+ PyObject *result;
+
+ if (entry) {
+ result = BOOL_FROM((entry->flags & NUITKA_PACKAGE_FLAG) != 0);
+ } else {
+ // TODO: Maybe needs to be an exception.
+ result = Py_None;
+ }
+
+ Py_INCREF(result);
+ return result;
+}
+
+static char const *_kwlist_iter_modules[] = {"package", NULL};
+
+static PyObject *_path_unfreezer_iter_modules(struct Nuitka_LoaderObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *prefix;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O:iter_modules", (char **)_kwlist_iter_modules, &prefix);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ PyObject *result = PyList_New(0);
+
+ struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
+ assert(current);
+
+ char const *s = self->m_loader_entry->name;
+
+ while (current->name != NULL) {
+ int c = strncmp(s, current->name, strlen(s));
+
+ if (c != 0) {
+ current++;
+ continue;
+ }
+
+ if (current->name[strlen(s)] == 0) {
+ current++;
+ continue;
+ }
+
+ char const *sub = strchr(current->name + strlen(s) + 1, '.');
+
+ if (sub != NULL) {
+ current++;
+ continue;
+ }
+
+ PyObject *r = PyTuple_New(2);
+
+ PyObject *name = Nuitka_String_FromString(current->name + strlen(s) + 1);
+
+ if (CHECK_IF_TRUE(prefix)) {
+ PyObject *old = name;
+ name = PyUnicode_Concat(prefix, name);
+ Py_DECREF(old);
+ }
+
+ PyTuple_SET_ITEM(r, 0, name);
+ PyTuple_SET_ITEM0(r, 1, BOOL_FROM((current->flags & NUITKA_PACKAGE_FLAG) != 0));
+
+ LIST_APPEND1(result, r);
+
+ current++;
+ }
+
+ return result;
+}
+
+#if PYTHON_VERSION >= 0x300
+// Used in module template too, therefore exported.
+PyObject *getImportLibBootstrapModule() {
+ static PyObject *importlib = NULL;
+ if (importlib == NULL) {
+ importlib = PyImport_ImportModule("importlib._bootstrap");
+ }
+
+ return importlib;
+}
+#endif
+
+#if PYTHON_VERSION >= 0x340
+static PyObject *_path_unfreezer_repr_module(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *module;
+ PyObject *unused;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O|O:module_repr", (char **)_kwlist, &module, &unused);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ return PyUnicode_FromFormat("", PyModule_GetName(module), PyModule_GetFilenameObject(module));
+}
+
+static PyObject *getModuleSpecClass(PyObject *importlib_module) {
+ static PyObject *module_spec_class = NULL;
+
+ if (module_spec_class == NULL) {
+ module_spec_class = PyObject_GetAttrString(importlib_module, "ModuleSpec");
+ }
+
+ return module_spec_class;
+}
+
+static PyObject *createModuleSpec(PyObject *module_name, bool is_package) {
+ CHECK_OBJECT(module_name);
+ assert(Nuitka_String_Check(module_name));
+
+ PyObject *importlib_module = getImportLibBootstrapModule();
+
+ if (unlikely(importlib_module == NULL)) {
+ return NULL;
+ }
+
+ PyObject *module_spec_class = getModuleSpecClass(importlib_module);
+
+ if (unlikely(module_spec_class == NULL)) {
+ return NULL;
+ }
+
+ PyObject *args = PyTuple_New(2);
+ PyTuple_SET_ITEM0(args, 0, module_name);
+ PyTuple_SET_ITEM0(args, 1, (PyObject *)&Nuitka_Loader_Type);
+
+ PyObject *kwargs = PyDict_New();
+ PyDict_SetItemString(kwargs, "is_package", is_package ? Py_True : Py_False);
+
+ PyObject *result = CALL_FUNCTION(module_spec_class, args, kwargs);
+
+ Py_DECREF(args);
+ Py_DECREF(kwargs);
+
+ return result;
+}
+
+#ifndef _NUITKA_STANDALONE
+// We might have to load stuff from installed modules in our package namespaces.
+static PyObject *createModuleSpecViaPathFinder(PyObject *module_name, char const *parent_module_name) {
+ if (scanModuleInPackagePath(module_name, parent_module_name)) {
+ return createModuleSpec(module_name, false);
+ } else {
+ // Without error this means we didn't make it.
+ return NULL;
+ }
+}
+#endif
+
+static char const *_kwlist_find_spec[] = {"fullname", "is_package", "path", NULL};
+
+static PyObject *_path_unfreezer_find_spec(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *module_name;
+ PyObject *unused1; // We ignore "is_package"
+ PyObject *unused2; // We ignore "path"
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:find_spec", (char **)_kwlist_find_spec, &module_name,
+ &unused1, &unused2);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ char const *full_name = Nuitka_String_AsString(module_name);
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # considering responsibility (find_spec)\n", full_name);
+ }
+
+ struct Nuitka_MetaPathBasedLoaderEntry const *entry = findEntry(full_name);
+
+#ifndef _NUITKA_STANDALONE
+ // We need to deal with things located in compiled packages, that were not included,
+ // e.g. extension modules, but also other files, that were asked to not be included
+ // or added later.
+ if (entry == NULL) {
+ entry = findContainingPackageEntry(full_name);
+
+ if (entry != NULL) {
+ PyObject *result = createModuleSpecViaPathFinder(module_name, entry->name);
+
+ if (result != NULL) {
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # claimed responsibility (contained in compiled package %s)\n",
+ full_name, entry->name);
+ }
+
+ return result;
+ }
+
+ if (ERROR_OCCURRED()) {
+ return NULL;
+ }
+
+ entry = NULL;
+ }
+ }
+#endif
+
+ if (entry == NULL) {
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # denied responsibility\n", full_name);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # claimed responsibility (%s)\n", Nuitka_String_AsString(module_name),
+ (entry->flags & NUITKA_BYTECODE_FLAG) != 0 ? "bytecode" : "compiled");
+ }
+
+ return createModuleSpec(module_name, (entry->flags & NUITKA_PACKAGE_FLAG) != 0);
+}
+
+#if PYTHON_VERSION >= 0x350
+static char const *_kwlist_create_module[] = {"spec", NULL};
+
+static PyObject *_path_unfreezer_create_module(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *spec;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O:create_module", (char **)_kwlist_create_module, &spec);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ PyObject *module_name = PyObject_GetAttr(spec, const_str_plain_name);
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # created module\n", Nuitka_String_AsString(module_name));
+ }
+ // TODO: Should we clean it up here?
+ return PyModule_NewObject(module_name);
+}
+
+static char const *_kwlist_exec_module[] = {"module", NULL};
+
+static PyObject *_path_unfreezer_exec_module(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *module;
+
+ int res = PyArg_ParseTupleAndKeywords(args, kwds, "O:exec_module", (char **)_kwlist_exec_module, &module);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ PyObject *module_name = PyObject_GetAttr(module, const_str_plain___name__);
+ CHECK_OBJECT(module_name);
+
+ if (isVerbose()) {
+ PySys_WriteStderr("import %s # execute module\n", Nuitka_String_AsString(module_name));
+ }
+
+ // During spec creation, we have populated the dictionary with a filename to load from
+ // for extension modules that were found installed in the system and below our package.
+#ifndef _NUITKA_STANDALONE
+ if (installed_extension_modules != NULL) {
+ PyObject *extension_module_filename = DICT_GET_ITEM0(installed_extension_modules, module_name);
+
+ if (extension_module_filename != NULL) {
+ return callIntoInstalledShlibModule(module_name, extension_module_filename);
+ }
+ }
+#endif
+
+ return EXECUTE_EMBEDDED_MODULE(module);
+}
+
+#endif
+
+#endif
+
+#if _NUITKA_EXPERIMENTAL_METADATA
+
+struct Nuitka_DistributionObject {
+ /* Python object folklore: */
+ PyObject_HEAD;
+
+ /* The loader entry, to know this is about exactly. */
+ struct Nuitka_MetaPathBasedLoaderEntry const *m_loader_entry;
+};
+
+static void Nuitka_Distribution_tp_dealloc(struct Nuitka_DistributionObject *distribution) {
+ Nuitka_GC_UnTrack(distribution);
+
+ PyObject_GC_Del(distribution);
+}
+
+static PyObject *Nuitka_Distribution_tp_repr(struct Nuitka_DistributionObject *loader) {
+#if PYTHON_VERSION < 0x300
+ return PyString_FromFormat(
+#else
+ return PyUnicode_FromFormat(
+#endif
+ "", loader->m_loader_entry->name);
+}
+
+static PyObject *_nuitka_distribution_metainfo(struct Nuitka_DistributionObject *distribution) {
+ CHECK_OBJECT(distribution);
+
+ PyObject *result = Nuitka_String_FromString("");
+
+ return result;
+}
+
+static PyMethodDef Nuitka_Distribution_methods[] = {
+ {"metainfo", (PyCFunction)_nuitka_distribution_metainfo, METH_NOARGS, NULL},
+
+ {NULL, NULL}};
+
+static PyObject *Nuitka_Distribution_get_version(struct Nuitka_DistributionObject *distribution) {
+ CHECK_OBJECT(distribution);
+
+ // TODO: Don't lie, but this will allow some things to proceed.
+ return Nuitka_String_FromString("0.0.0");
+}
+
+static PyGetSetDef Nuitka_Distribution_getsetlist[] = {
+ {(char *)"version", (getter)Nuitka_Distribution_get_version, (setter)NULL, NULL}, {NULL}};
+
+static PyTypeObject Nuitka_Distribution_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0) "nuitka_distribution",
+ sizeof(struct Nuitka_DistributionObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Nuitka_Distribution_tp_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc)Nuitka_Distribution_tp_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Nuitka_Distribution_methods, /* tp_methods */
+ 0, /* tp_members */
+ Nuitka_Distribution_getsetlist, /* tp_getset */
+};
+
+PyObject *Nuitka_Distribution_New(struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
+ struct Nuitka_DistributionObject *result;
+
+ result = (struct Nuitka_DistributionObject *)PyObject_GC_New(struct Nuitka_DistributionObject,
+ &Nuitka_Distribution_Type);
+ Nuitka_GC_Track(result);
+
+ result->m_loader_entry = entry;
+
+ return (PyObject *)result;
+}
+
+static char const *_kwlist_find_distributions[] = {"context", NULL};
+
+static PyObject *_path_unfreezer_find_distributions(PyObject *self, PyObject *args, PyObject *kwds) {
+ PyObject *context;
+
+ int res =
+ PyArg_ParseTupleAndKeywords(args, kwds, "O:find_distributions", (char **)_kwlist_find_distributions, &context);
+
+ if (unlikely(res == 0)) {
+ return NULL;
+ }
+
+ PyObject *name = PyObject_GetAttr(context, const_str_plain_name);
+
+ if (unlikely(name == 0)) {
+ return NULL;
+ }
+
+ struct Nuitka_MetaPathBasedLoaderEntry *entry = findEntry(Nuitka_String_AsString(name));
+
+ PyObject *temp;
+
+ if (entry) {
+ temp = PyTuple_New(1);
+
+ // Create a distribution object for the entry
+ PyObject *distribution = Nuitka_Distribution_New(entry);
+ PyTuple_SET_ITEM(temp, 0, distribution);
+
+ } else {
+ temp = PyTuple_New(0);
+ }
+
+ // We are expected to return an iterator.
+ PyObject *result = MAKE_ITERATOR(temp);
+
+ Py_DECREF(temp);
+ return result;
+}
+
+#endif
+
+static PyMethodDef Nuitka_Loader_methods[] = {
+ {"iter_modules", (PyCFunction)_path_unfreezer_iter_modules, METH_VARARGS | METH_KEYWORDS, NULL},
+ {"get_data", (PyCFunction)_path_unfreezer_get_data, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+ {"find_module", (PyCFunction)_path_unfreezer_find_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+ {"load_module", (PyCFunction)_path_unfreezer_load_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+ {"is_package", (PyCFunction)_path_unfreezer_is_package, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+#if PYTHON_VERSION >= 0x340
+ {"module_repr", (PyCFunction)_path_unfreezer_repr_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+ {"find_spec", (PyCFunction)_path_unfreezer_find_spec, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+#endif
+#if PYTHON_VERSION >= 0x350
+ {"create_module", (PyCFunction)_path_unfreezer_create_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+ {"exec_module", (PyCFunction)_path_unfreezer_exec_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
+#endif
+#if _NUITKA_EXPERIMENTAL_METADATA
+ {"find_distributions", (PyCFunction)_path_unfreezer_find_distributions, METH_STATIC | METH_VARARGS | METH_KEYWORDS,
+ NULL},
+#endif
+
+ {NULL, NULL}
+};
+
+static PyObject *Nuitka_Loader_tp_repr(struct Nuitka_LoaderObject *loader) {
+#if PYTHON_VERSION < 0x300
+ return PyString_FromFormat(
+#else
+ return PyUnicode_FromFormat(
+#endif
+ "", loader->m_loader_entry->name);
+}
+
+#include "nuitka/freelists.h"
+
+// TODO: A freelist is not the right thing for those, they are probably living forever, but it's
+// no big harm too, but make it small.
+
+#define MAX_LOADER_FREE_LIST_COUNT 10
+static struct Nuitka_LoaderObject *free_list_loaders = NULL;
+static int free_list_loaders_count = 0;
+
+static void Nuitka_Loader_tp_dealloc(struct Nuitka_LoaderObject *loader) {
+ Nuitka_GC_UnTrack(loader);
+
+ releaseToFreeList(free_list_loaders, loader, MAX_LOADER_FREE_LIST_COUNT);
+}
+
+static int Nuitka_Loader_tp_traverse(struct Nuitka_LoaderObject *loader, visitproc visit, void *arg) { return 0; }
+
+PyTypeObject Nuitka_Loader_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0) "nuitka_module_loader",
+ sizeof(struct Nuitka_LoaderObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Nuitka_Loader_tp_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ (reprfunc)Nuitka_Loader_tp_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ 0, /* tp_doc */
+ (traverseproc)Nuitka_Loader_tp_traverse, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Nuitka_Loader_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+};
+
+/* Used by modules to register child loaders for packages. */
+PyObject *Nuitka_Loader_New(struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
+ struct Nuitka_LoaderObject *result;
+
+ allocateFromFreeListFixed(free_list_loaders, struct Nuitka_LoaderObject, Nuitka_Loader_Type);
+ Nuitka_GC_Track(result);
+
+ result->m_loader_entry = entry;
+
+ return (PyObject *)result;
+}
+
+void registerMetaPathBasedUnfreezer(struct Nuitka_MetaPathBasedLoaderEntry *_loader_entries,
+ unsigned char **bytecode_data) {
+ // Do it only once.
+ if (loader_entries) {
+ assert(_loader_entries == loader_entries);
+
+ return;
+ }
+
+ _bytecode_data = (char **)bytecode_data;
+
+ if (isVerbose()) {
+ PySys_WriteStderr("Setup nuitka compiled module/bytecode/shlib importer.\n");
+ }
+
+#ifdef _NUITKA_MODULE
+ if (_Py_PackageContext != NULL) {
+ char const *last_dot = strrchr(_Py_PackageContext, '.');
+
+ if (last_dot != NULL) {
+ struct Nuitka_MetaPathBasedLoaderEntry *current = _loader_entries;
+ assert(current);
+
+ while (current->name != NULL) {
+ char name[2048];
+
+ if (strcmp(last_dot + 1, current->name) == 0) {
+ copyStringSafeN(name, _Py_PackageContext, last_dot - _Py_PackageContext + 1, sizeof(name));
+ appendStringSafe(name, current->name, sizeof(name));
+
+ current->name = strdup(name);
+ } else if (strncmp(last_dot + 1, current->name, strlen(last_dot + 1)) == 0 &&
+ current->name[strlen(last_dot + 1)] == '.') {
+ copyStringSafeN(name, _Py_PackageContext, last_dot - _Py_PackageContext + 1, sizeof(name));
+ appendStringSafe(name, current->name, sizeof(name));
+
+ current->name = strdup(name);
+ }
+
+ current++;
+ }
+ }
+ }
+#endif
+
+ loader_entries = _loader_entries;
+
+ PyType_Ready(&Nuitka_Loader_Type);
+
+#if _NUITKA_EXPERIMENTAL_METADATA
+ PyType_Ready(&Nuitka_Distribution_Type);
+#endif
+
+ // Register it as a meta path loader.
+ int res = PyList_Insert(PySys_GetObject((char *)"meta_path"),
+#if PYTHON_VERSION < 0x300
+ 0,
+#else
+ 2,
+#endif
+
+ (PyObject *)&Nuitka_Loader_Type);
+ assert(res == 0);
+}
+
+#if defined(_NUITKA_STANDALONE) || _NUITKA_FROZEN > 0
+// This is called for the technical module imported early on during interpreter
+// into, to still get compatible "__file__" attributes.
+void setEarlyFrozenModulesFileAttribute(void) {
+#if PYTHON_VERSION >= 0x300
+ // Make sure the importlib fully bootstraps before doing this.
+ PyObject *importlib_module = getImportLibBootstrapModule();
+ CHECK_OBJECT(importlib_module);
+#endif
+
+ PyObject *sys_modules = PyImport_GetModuleDict();
+ Py_ssize_t ppos = 0;
+ PyObject *key, *value;
+
+ while (PyDict_Next(sys_modules, &ppos, &key, &value)) {
+ if (key != NULL && value != NULL && PyModule_Check(value)) {
+ if (HAS_ATTR_BOOL(value, const_str_plain___file__)) {
+ bool is_package = HAS_ATTR_BOOL(value, const_str_plain___path__);
+
+ PyObject *file_value = MAKE_RELATIVE_PATH_FROM_NAME(Nuitka_String_AsString(key), is_package);
+ PyObject_SetAttr(value, const_str_plain___file__, file_value);
+ Py_DECREF(file_value);
+ }
+ }
+ }
+
+ assert(!ERROR_OCCURRED());
+}
+
+#endif
diff --git a/mtube.build/static_src/MetaPathBasedLoader.o b/mtube.build/static_src/MetaPathBasedLoader.o
new file mode 100644
index 0000000..1814305
Binary files /dev/null and b/mtube.build/static_src/MetaPathBasedLoader.o differ
diff --git a/mtube.exe b/mtube.exe
new file mode 100644
index 0000000..71c4d12
Binary files /dev/null and b/mtube.exe differ
diff --git a/mtube.py b/mtube.py
new file mode 100644
index 0000000..7dd0914
--- /dev/null
+++ b/mtube.py
@@ -0,0 +1,3 @@
+import os
+os.system("start.sh")
+os.system("node bin/www")
\ No newline at end of file
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
new file mode 100644
index 0000000..4c2087a
--- /dev/null
+++ b/npm-shrinkwrap.json
@@ -0,0 +1,6961 @@
+{
+ "name": "MyTube",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@electron/get": {
+ "version": "1.12.4",
+ "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz",
+ "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "env-paths": "^2.2.0",
+ "fs-extra": "^8.1.0",
+ "global-agent": "^2.0.2",
+ "global-tunnel-ng": "^2.7.1",
+ "got": "^9.6.0",
+ "progress": "^2.0.3",
+ "semver": "^6.2.0",
+ "sumchecker": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@sindresorhus/is": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "dev": true
+ },
+ "@szmarczak/http-timer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+ "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^1.0.1"
+ }
+ },
+ "@types/node": {
+ "version": "14.14.31",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
+ "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+ "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
+ "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base62": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
+ "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=",
+ "dev": true
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
+ },
+ "basic-auth": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz",
+ "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "bl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
+ },
+ "bn.js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
+ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz",
+ "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=",
+ "requires": {
+ "bytes": "2.1.0",
+ "content-type": "~1.0.1",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "http-errors": "~1.3.1",
+ "iconv-lite": "0.4.11",
+ "on-finished": "~2.3.0",
+ "qs": "4.0.0",
+ "raw-body": "~2.1.2",
+ "type-is": "~1.6.6"
+ }
+ },
+ "boolean": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz",
+ "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz",
+ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.1.2",
+ "buffer": "^4.1.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.1",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "~1.1.0",
+ "duplexer2": "~0.1.2",
+ "events": "~1.1.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "~0.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "module-deps": "^4.0.8",
+ "os-browserify": "~0.1.1",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "string_decoder": "~0.10.0",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "~0.0.0",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "~0.0.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "bson": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
+ "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz",
+ "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ }
+ }
+ },
+ "cacheable-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+ "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^3.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^1.0.2"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz",
+ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==",
+ "dev": true
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "cardinal": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
+ "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=",
+ "dev": true,
+ "requires": {
+ "ansicolors": "~0.3.2",
+ "redeyed": "~2.1.0"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ }
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-table": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.5.tgz",
+ "integrity": "sha512-7uo2+RMNQUZ13M199udxqwk1qxTOS53EUak4gmu/aioUpdH5RvBz0JkJslcWz6ABKedZNqXXzikMZgHh+qF16A==",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ }
+ }
+ },
+ "cli-usage": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.10.tgz",
+ "integrity": "sha512-Q/s1S4Jz5LYI0LQ+XiFQCXkhMzn244ddyIffni8JIq/kL95DvQomVQ0cJC41c76hH9/FmZGY7rZB53y/bXHtRA==",
+ "dev": true,
+ "requires": {
+ "marked": "^0.7.0",
+ "marked-terminal": "^3.3.0"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
+ },
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "commoner": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
+ "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.5.0",
+ "detective": "^4.3.1",
+ "glob": "^5.0.15",
+ "graceful-fs": "^4.1.2",
+ "iconv-lite": "^0.4.5",
+ "mkdirp": "^0.5.0",
+ "private": "^0.1.6",
+ "q": "^1.1.2",
+ "recast": "^0.11.17"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+ },
+ "component-emitter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
+ "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM="
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~2.0.0",
+ "typedarray": "~0.0.5"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "concat-with-sourcemaps": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz",
+ "integrity": "sha1-h0dsamfI2qh+Muh2Ft+IO6f7Bxs="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ },
+ "cookie-parser": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz",
+ "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=",
+ "requires": {
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6"
+ }
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz",
+ "integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==",
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
+ },
+ "dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
+ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "deap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.1.tgz",
+ "integrity": "sha512-k75KYNZMvwAwes2xIPry/QTffXIchjD8QfABvvfTr80P85jv5ZcKqcoDo+vMe71nNnVnXYe8MA28weyqcf/DKw==",
+ "dev": true
+ },
+ "deasync": {
+ "version": "0.1.21",
+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.21.tgz",
+ "integrity": "sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w==",
+ "requires": {
+ "bindings": "^1.5.0",
+ "node-addon-api": "^1.7.1"
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "deep-equal": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
+ "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0="
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "defer-to-connect": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
+ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "denque": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
+ "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ=="
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo="
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
+ "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum-object": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true,
+ "optional": true
+ },
+ "detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true
+ }
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.3.4.tgz",
+ "integrity": "sha1-PHbKoJZks1g7ADevncE2557Gi5g="
+ },
+ "electron": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-12.0.0.tgz",
+ "integrity": "sha512-p6oxZ4LG82hopPGAsIMOjyoL49fr6cexyFNH0kADA9Yf+mJ72DN7bjvBG+6V7r6QKhwYgsSsW8RpxBeVOUbxVQ==",
+ "dev": true,
+ "requires": {
+ "@electron/get": "^1.0.1",
+ "@types/node": "^14.6.2",
+ "extract-zip": "^1.0.3"
+ }
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true,
+ "optional": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz",
+ "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==",
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "ws": "~1.1.5"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "requires": {
+ "mime-types": "~2.1.11",
+ "negotiator": "0.6.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz",
+ "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parsejson": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~1.1.5",
+ "xmlhttprequest-ssl": "1.5.3",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
+ "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.6",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary": "0.1.7",
+ "wtf-8": "1.0.0"
+ }
+ },
+ "env-paths": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
+ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+ "dev": true
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true,
+ "optional": true
+ },
+ "es6-promise": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
+ "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "optional": true
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg="
+ },
+ "event-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz",
+ "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==",
+ "requires": {
+ "duplexer": "^0.1.1",
+ "from": "^0.1.7",
+ "map-stream": "0.0.7",
+ "pause-stream": "^0.0.11",
+ "split": "^1.0.1",
+ "stream-combiner": "^0.2.2",
+ "through": "^2.3.8"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.13.4",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz",
+ "integrity": "sha1-PAt288d1kMg0VzkGHsC9O6Bn7CQ=",
+ "requires": {
+ "accepts": "~1.2.12",
+ "array-flatten": "1.1.1",
+ "content-disposition": "0.5.1",
+ "content-type": "~1.0.1",
+ "cookie": "0.1.5",
+ "cookie-signature": "1.0.6",
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "finalhandler": "0.4.1",
+ "fresh": "0.3.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.1",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~1.0.10",
+ "qs": "4.0.0",
+ "range-parser": "~1.0.3",
+ "send": "0.13.1",
+ "serve-static": "~1.10.2",
+ "type-is": "~1.6.6",
+ "utils-merge": "1.0.0",
+ "vary": "~1.0.1"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
+ "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
+ "requires": {
+ "mime-types": "~2.1.6",
+ "negotiator": "0.5.3"
+ }
+ },
+ "cookie": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz",
+ "integrity": "sha1-armUiksa4hlSzSWIUwpHItQETXw="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "negotiator": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz",
+ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g="
+ },
+ "vary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
+ "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extract-zip": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
+ "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.6.2",
+ "debug": "^2.6.9",
+ "mkdirp": "^0.5.4",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
+ },
+ "fancy-log": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+ "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "fast-safe-stringify": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
+ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz",
+ "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=",
+ "requires": {
+ "debug": "~2.2.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8="
+ },
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4="
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "~0.1.0"
+ }
+ },
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "^4.3.1",
+ "glob2base": "^0.0.12",
+ "minimatch": "^2.0.1",
+ "ordered-read-streams": "^0.1.0",
+ "through2": "^0.6.1",
+ "unique-stream": "^1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "^0.5.1"
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "^0.1.1"
+ }
+ },
+ "global-agent": {
+ "version": "2.1.12",
+ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
+ "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "core-js": "^3.6.5",
+ "es6-error": "^4.1.1",
+ "matcher": "^3.0.0",
+ "roarr": "^2.15.3",
+ "semver": "^7.3.2",
+ "serialize-error": "^7.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+ "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "global-tunnel-ng": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
+ "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "encodeurl": "^1.0.2",
+ "lodash": "^4.17.10",
+ "npm-conf": "^1.1.3",
+ "tunnel": "^0.0.6"
+ }
+ },
+ "globalthis": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
+ "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "got": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+ "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.14.0",
+ "@szmarczak/http-timer": "^1.1.2",
+ "cacheable-request": "^6.0.0",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^4.1.0",
+ "lowercase-keys": "^1.0.1",
+ "mimic-response": "^1.0.1",
+ "p-cancelable": "^1.0.0",
+ "to-readable-stream": "^1.0.0",
+ "url-parse-lax": "^3.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+ "dev": true
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "chalk": "^1.0.0",
+ "deprecated": "^0.0.1",
+ "gulp-util": "^3.0.0",
+ "interpret": "^1.0.0",
+ "liftoff": "^2.1.0",
+ "minimist": "^1.1.0",
+ "orchestrator": "^0.3.0",
+ "pretty-hrtime": "^1.0.0",
+ "semver": "^4.1.0",
+ "tildify": "^1.0.0",
+ "v8flags": "^2.0.2",
+ "vinyl-fs": "^0.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-concat": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
+ "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
+ "dev": true,
+ "requires": {
+ "concat-with-sourcemaps": "^1.0.0",
+ "through2": "^2.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ }
+ }
+ },
+ "gulp-notify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-2.2.0.tgz",
+ "integrity": "sha1-BGyChcKS6X7tThWgCcJsu+XO8TU=",
+ "dev": true,
+ "requires": {
+ "gulp-util": "^3.0.2",
+ "lodash.template": "^3.0.0",
+ "node-notifier": "^4.1.0",
+ "node.extend": "^1.1.3",
+ "through2": "^0.6.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "gulp-plumber": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.1.tgz",
+ "integrity": "sha512-mctAi9msEAG7XzW5ytDVZ9PxWMzzi1pS2rBH7lA095DhMa6KEXjm+St0GOCc567pJKJ/oCvosVAZEpAey0q2eQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "fancy-log": "^1.3.2",
+ "plugin-error": "^0.1.2",
+ "through2": "^2.0.3"
+ }
+ },
+ "gulp-uglify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz",
+ "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=",
+ "dev": true,
+ "requires": {
+ "deap": "^1.0.0",
+ "fancy-log": "^1.0.0",
+ "gulp-util": "^3.0.0",
+ "isobject": "^2.0.0",
+ "through2": "^2.0.0",
+ "uglify-js": "2.6.4",
+ "uglify-save-license": "^0.4.1",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "^1.0.0",
+ "array-uniq": "^1.0.2",
+ "beeper": "^1.0.0",
+ "chalk": "^1.0.0",
+ "dateformat": "^2.0.0",
+ "fancy-log": "^1.1.0",
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash._reescape": "^3.0.0",
+ "lodash._reevaluate": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.template": "^3.0.0",
+ "minimist": "^1.1.0",
+ "multipipe": "^0.1.2",
+ "object-assign": "^3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "^2.0.0",
+ "vinyl": "^0.5.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-binary": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
+ "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hooks-fixed": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz",
+ "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ=="
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "statuses": "1"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "i": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz",
+ "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0="
+ },
+ "iconv-lite": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz",
+ "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4="
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz",
+ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ }
+ }
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
+ "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c="
+ },
+ "is": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz",
+ "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
+ "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jstransform": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-10.1.0.tgz",
+ "integrity": "sha1-tMSb9j8WLBCLA0g5moc3xxOwqDo=",
+ "dev": true,
+ "requires": {
+ "base62": "0.1.1",
+ "esprima-fb": "13001.1001.0-dev-harmony-fb",
+ "source-map": "0.1.31"
+ },
+ "dependencies": {
+ "esprima-fb": {
+ "version": "13001.1001.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-13001.1001.0-dev-harmony-fb.tgz",
+ "integrity": "sha1-YzrNtA2b1NuKHB1owGqUKVn60rA=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
+ "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "kareem": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.5.0.tgz",
+ "integrity": "sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg="
+ },
+ "keyv": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+ "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
+ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "stream-splicer": "^2.0.0"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^2.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash._arraycopy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
+ "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=",
+ "dev": true
+ },
+ "lodash._arrayeach": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
+ "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "lodash._baseclone": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz",
+ "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=",
+ "dev": true,
+ "requires": {
+ "lodash._arraycopy": "^3.0.0",
+ "lodash._arrayeach": "^3.0.0",
+ "lodash._baseassign": "^3.0.0",
+ "lodash._basefor": "^3.0.0",
+ "lodash.isarray": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basefor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
+ "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
+ },
+ "lodash.clonedeep": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz",
+ "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=",
+ "dev": true,
+ "requires": {
+ "lodash._baseclone": "^3.0.0",
+ "lodash._bindcallback": "^3.0.0"
+ }
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "^3.0.0"
+ }
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ }
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash._basetostring": "^3.0.0",
+ "lodash._basevalues": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0",
+ "lodash.keys": "^3.0.0",
+ "lodash.restparam": "^3.0.0",
+ "lodash.templatesettings": "^3.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0"
+ }
+ },
+ "lodash.toarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
+ "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "marked": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
+ "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==",
+ "dev": true
+ },
+ "marked-terminal": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz",
+ "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.1.0",
+ "cardinal": "^2.1.1",
+ "chalk": "^2.4.1",
+ "cli-table": "^0.3.1",
+ "node-emoji": "^1.4.1",
+ "supports-hyperlinks": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "matcher": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
+ "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "escape-string-regexp": "^4.0.0"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
+ },
+ "mime-db": {
+ "version": "1.46.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+ "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
+ },
+ "mime-types": {
+ "version": "2.1.29",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+ "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+ "requires": {
+ "mime-db": "1.46.0"
+ }
+ },
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
+ "mingo": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/mingo/-/mingo-1.3.3.tgz",
+ "integrity": "sha1-aSLE0Ufvx3GgFCWixMj3eER4xUY="
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "module-deps": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
+ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.0",
+ "defined": "^1.0.0",
+ "detective": "^4.0.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.3",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "mongodb": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.4.tgz",
+ "integrity": "sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw==",
+ "requires": {
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "require_optional": "^1.0.1",
+ "safe-buffer": "^5.1.2",
+ "saslprep": "^1.0.0"
+ }
+ },
+ "mongodb-core": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz",
+ "integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=",
+ "requires": {
+ "bson": "~1.0.4",
+ "require_optional": "~1.0.0"
+ },
+ "dependencies": {
+ "bson": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
+ "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
+ }
+ }
+ },
+ "mongoose": {
+ "version": "4.13.21",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.21.tgz",
+ "integrity": "sha512-0VZtQu1rSUPwUtbb7zh6CymI0nNkVInOIDbtWNlna070qnUO14On8PpSVSwlx3gwmkKL2OkP4ioCj5YHC6trMg==",
+ "requires": {
+ "async": "2.6.0",
+ "bson": "~1.0.4",
+ "hooks-fixed": "2.0.2",
+ "kareem": "1.5.0",
+ "lodash.get": "4.4.2",
+ "mongodb": "2.2.34",
+ "mpath": "0.5.1",
+ "mpromise": "0.5.5",
+ "mquery": "2.3.3",
+ "ms": "2.0.0",
+ "muri": "1.3.0",
+ "regexp-clone": "0.0.1",
+ "sliced": "1.0.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "^4.14.0"
+ }
+ },
+ "bson": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
+ "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
+ },
+ "mongodb": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz",
+ "integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=",
+ "requires": {
+ "es6-promise": "3.2.1",
+ "mongodb-core": "2.1.18",
+ "readable-stream": "2.2.7"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "readable-stream": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
+ "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
+ "requires": {
+ "buffer-shims": "~1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~1.0.0",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "morgan": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz",
+ "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=",
+ "requires": {
+ "basic-auth": "~1.0.3",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.0.0"
+ }
+ },
+ "mpath": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz",
+ "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg=="
+ },
+ "mpromise": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz",
+ "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY="
+ },
+ "mquery": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz",
+ "integrity": "sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ==",
+ "requires": {
+ "bluebird": "3.5.0",
+ "debug": "2.6.9",
+ "regexp-clone": "0.0.1",
+ "sliced": "0.0.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "sliced": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
+ "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
+ }
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ },
+ "dependencies": {
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "muri": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz",
+ "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg=="
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
+ },
+ "nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natives": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
+ "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
+ "dev": true
+ },
+ "ncp": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz",
+ "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY="
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "node-addon-api": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
+ "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="
+ },
+ "node-emoji": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
+ "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
+ "dev": true,
+ "requires": {
+ "lodash.toarray": "^4.4.0"
+ }
+ },
+ "node-notifier": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz",
+ "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=",
+ "dev": true,
+ "requires": {
+ "cli-usage": "^0.1.1",
+ "growly": "^1.2.0",
+ "lodash.clonedeep": "^3.0.0",
+ "minimist": "^1.1.1",
+ "semver": "^5.1.0",
+ "shellwords": "^0.1.0",
+ "which": "^1.0.5"
+ }
+ },
+ "node.extend": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz",
+ "integrity": "sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3",
+ "is": "^3.2.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true
+ },
+ "npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "optional": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "~0.1.5",
+ "sequencify": "~0.0.7",
+ "stream-consume": "~0.1.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "~1.3.0"
+ }
+ },
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ }
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-browserify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
+ "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "outpipe": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz",
+ "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=",
+ "dev": true,
+ "requires": {
+ "shell-quote": "^1.4.2"
+ }
+ },
+ "p-cancelable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+ "dev": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "dev": true
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parsejson": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
+ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "requires": {
+ "through": "~2.3"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "optional": true
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "^0.1.1",
+ "ansi-red": "^0.1.1",
+ "arr-diff": "^1.0.1",
+ "arr-union": "^2.0.1",
+ "extend-shallow": "^1.1.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "array-slice": "^0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^1.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "prompt": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.1.0.tgz",
+ "integrity": "sha512-ec1vUPXCplDBDUVD8uPa3XGA+OzLrO40Vxv3F1uxoiZGkZhdctlK2JotcHq5X6ExjocDOGwGdCSXloGNyU5L1Q==",
+ "requires": {
+ "colors": "^1.1.2",
+ "read": "1.0.x",
+ "revalidator": "0.1.x",
+ "utile": "0.3.x",
+ "winston": "2.x"
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true,
+ "optional": true
+ },
+ "proxy-addr": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
+ "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=",
+ "requires": {
+ "forwarded": "~0.1.0",
+ "ipaddr.js": "1.0.5"
+ }
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz",
+ "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU="
+ },
+ "raw-body": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz",
+ "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
+ "requires": {
+ "bytes": "2.4.0",
+ "iconv-lite": "0.4.13",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
+ },
+ "iconv-lite": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI="
+ }
+ }
+ },
+ "react-tools": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/react-tools/-/react-tools-0.13.3.tgz",
+ "integrity": "sha1-2mrH1Nd3elml6VHPRucv1La0Ciw=",
+ "dev": true,
+ "requires": {
+ "commoner": "^0.10.0",
+ "jstransform": "^10.1.0"
+ }
+ },
+ "reactify": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/reactify/-/reactify-1.1.1.tgz",
+ "integrity": "sha1-qPEZWWJzwNS/savqDBTCYB6gO7o=",
+ "dev": true,
+ "requires": {
+ "react-tools": "~0.13.0",
+ "through": "~2.3.4"
+ }
+ },
+ "read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "requires": {
+ "mute-stream": "~0.0.4"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "dev": true,
+ "requires": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "redeyed": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
+ "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=",
+ "dev": true,
+ "requires": {
+ "esprima": "~4.0.0"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp-clone": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
+ "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ }
+ }
+ },
+ "require_optional": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
+ "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
+ "requires": {
+ "resolve-from": "^2.0.0",
+ "semver": "^5.1.0"
+ }
+ },
+ "resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "revalidator": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
+ "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs="
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "roarr": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
+ "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "detect-node": "^2.0.4",
+ "globalthis": "^1.0.1",
+ "json-stringify-safe": "^5.0.1",
+ "semver-compare": "^1.0.0",
+ "sprintf-js": "^1.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "requires": {
+ "sparse-bitfield": "^3.0.3"
+ }
+ },
+ "save": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/save/-/save-2.4.0.tgz",
+ "integrity": "sha512-wd5L2uVnsKYkIUaK6i8Ie66IOHaI328gMF0MPuTJtYOjXgUolC33LSIk7Qr8WVA55QHaGwfiVS8a7EFIeGOR3w==",
+ "requires": {
+ "async": "^2.6.2",
+ "event-stream": "^4.0.1",
+ "lodash.assign": "^4.2.0",
+ "mingo": "1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true,
+ "optional": true
+ },
+ "send": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz",
+ "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=",
+ "requires": {
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.3",
+ "statuses": "~1.2.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "serialize-error": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
+ "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "type-fest": "^0.13.1"
+ }
+ },
+ "serve-favicon": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz",
+ "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=",
+ "requires": {
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "ms": "0.7.2",
+ "parseurl": "~1.3.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz",
+ "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=",
+ "requires": {
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.1",
+ "send": "0.13.2"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "send": {
+ "version": "0.13.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz",
+ "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
+ "requires": {
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.3",
+ "statuses": "~1.2.1"
+ }
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "shasum-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz",
+ "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==",
+ "dev": true,
+ "requires": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true
+ },
+ "sliced": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz",
+ "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=",
+ "requires": {
+ "debug": "2.3.3",
+ "engine.io": "~1.8.4",
+ "has-binary": "0.1.7",
+ "object-assign": "4.1.0",
+ "socket.io-adapter": "0.5.0",
+ "socket.io-client": "1.7.4",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A="
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
+ "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
+ "requires": {
+ "debug": "2.3.3",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "socket.io-client": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz",
+ "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=",
+ "requires": {
+ "backo2": "1.0.2",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.3.3",
+ "engine.io-client": "~1.8.4",
+ "has-binary": "0.1.7",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "2.3.1",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
+ "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
+ "requires": {
+ "component-emitter": "1.1.2",
+ "debug": "2.2.0",
+ "isarray": "0.0.1",
+ "json3": "3.3.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+ "dev": true
+ },
+ "sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "optional": true,
+ "requires": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true,
+ "optional": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-combiner": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz",
+ "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=",
+ "requires": {
+ "duplexer": "~0.1.1",
+ "through": "~2.3.4"
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "^1.0.0",
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "sumchecker": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
+ "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "supports-hyperlinks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz",
+ "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^2.0.0",
+ "supports-color": "^5.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "~0.11.0"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-readable-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+ "dev": true
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true,
+ "optional": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ },
+ "type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "dev": true,
+ "optional": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+ "dev": true,
+ "requires": {
+ "async": "~0.2.6",
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "uglify-save-license": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
+ "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=",
+ "dev": true
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
+ },
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "undeclared-identifiers": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
+ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utile": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz",
+ "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=",
+ "requires": {
+ "async": "~0.9.0",
+ "deep-equal": "~0.2.1",
+ "i": "0.3.x",
+ "mkdirp": "0.x.x",
+ "ncp": "1.0.x",
+ "rimraf": "2.x.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
+ }
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "^1.1.1"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.0",
+ "clone-stats": "^0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.0",
+ "glob-stream": "^3.1.5",
+ "glob-watcher": "^0.0.6",
+ "graceful-fs": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "strip-bom": "^1.0.0",
+ "through2": "^0.6.1",
+ "vinyl": "^0.4.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz",
+ "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==",
+ "dev": true,
+ "requires": {
+ "natives": "^1.1.3"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-source-stream": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz",
+ "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.3",
+ "vinyl": "^0.4.3"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "watchify": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.1.tgz",
+ "integrity": "sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "browserify": "^16.1.0",
+ "chokidar": "^2.1.1",
+ "defined": "^1.0.0",
+ "outpipe": "^1.1.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "browser-resolve": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
+ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.17.0"
+ }
+ },
+ "browserify": {
+ "version": "16.5.2",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz",
+ "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^2.0.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "~5.2.1",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp-classic": "^0.5.2",
+ "module-deps": "^6.2.3",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^3.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
+ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "events": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
+ "dev": true
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "module-deps": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz",
+ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^2.0.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.2.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "stream-http": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz",
+ "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz",
+ "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==",
+ "requires": {
+ "async": "~1.0.0",
+ "colors": "1.0.x",
+ "cycle": "1.0.x",
+ "eyes": "0.1.x",
+ "isstream": "0.1.x",
+ "stack-trace": "0.0.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
+ "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
+ "requires": {
+ "options": ">=0.0.5",
+ "ultron": "1.0.x"
+ }
+ },
+ "wtf-8": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz",
+ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo="
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
+ "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "optional": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+ }
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..e257a6c
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6917 @@
+{
+ "name": "MyTube",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@electron/get": {
+ "version": "1.12.4",
+ "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz",
+ "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "env-paths": "^2.2.0",
+ "fs-extra": "^8.1.0",
+ "global-agent": "^2.0.2",
+ "global-tunnel-ng": "^2.7.1",
+ "got": "^9.6.0",
+ "progress": "^2.0.3",
+ "semver": "^6.2.0",
+ "sumchecker": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@sindresorhus/is": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "dev": true
+ },
+ "@szmarczak/http-timer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+ "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^1.0.1"
+ }
+ },
+ "@types/node": {
+ "version": "14.14.31",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
+ "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+ "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
+ "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base62": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
+ "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=",
+ "dev": true
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
+ },
+ "basic-auth": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz",
+ "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "bl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
+ },
+ "bn.js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
+ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz",
+ "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=",
+ "requires": {
+ "bytes": "2.1.0",
+ "content-type": "~1.0.1",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "http-errors": "~1.3.1",
+ "iconv-lite": "0.4.11",
+ "on-finished": "~2.3.0",
+ "qs": "4.0.0",
+ "raw-body": "~2.1.2",
+ "type-is": "~1.6.6"
+ }
+ },
+ "boolean": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz",
+ "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz",
+ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.1.2",
+ "buffer": "^4.1.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.1",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "~1.1.0",
+ "duplexer2": "~0.1.2",
+ "events": "~1.1.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "~0.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "module-deps": "^4.0.8",
+ "os-browserify": "~0.1.1",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "string_decoder": "~0.10.0",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "~0.0.0",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "~0.0.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "bson": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
+ "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz",
+ "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ }
+ }
+ },
+ "cacheable-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+ "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^3.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^1.0.2"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz",
+ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==",
+ "dev": true
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "cardinal": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
+ "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=",
+ "dev": true,
+ "requires": {
+ "ansicolors": "~0.3.2",
+ "redeyed": "~2.1.0"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ }
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-table": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.5.tgz",
+ "integrity": "sha512-7uo2+RMNQUZ13M199udxqwk1qxTOS53EUak4gmu/aioUpdH5RvBz0JkJslcWz6ABKedZNqXXzikMZgHh+qF16A==",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ }
+ }
+ },
+ "cli-usage": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.10.tgz",
+ "integrity": "sha512-Q/s1S4Jz5LYI0LQ+XiFQCXkhMzn244ddyIffni8JIq/kL95DvQomVQ0cJC41c76hH9/FmZGY7rZB53y/bXHtRA==",
+ "dev": true,
+ "requires": {
+ "marked": "^0.7.0",
+ "marked-terminal": "^3.3.0"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
+ },
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "commoner": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
+ "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.5.0",
+ "detective": "^4.3.1",
+ "glob": "^5.0.15",
+ "graceful-fs": "^4.1.2",
+ "iconv-lite": "^0.4.5",
+ "mkdirp": "^0.5.0",
+ "private": "^0.1.6",
+ "q": "^1.1.2",
+ "recast": "^0.11.17"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "dev": true
+ }
+ }
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+ },
+ "component-emitter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
+ "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM="
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~2.0.0",
+ "typedarray": "~0.0.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "concat-with-sourcemaps": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz",
+ "integrity": "sha1-h0dsamfI2qh+Muh2Ft+IO6f7Bxs="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ },
+ "cookie-parser": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz",
+ "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=",
+ "requires": {
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6"
+ }
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz",
+ "integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==",
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
+ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "deap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.1.tgz",
+ "integrity": "sha512-k75KYNZMvwAwes2xIPry/QTffXIchjD8QfABvvfTr80P85jv5ZcKqcoDo+vMe71nNnVnXYe8MA28weyqcf/DKw==",
+ "dev": true
+ },
+ "deasync": {
+ "version": "0.1.21",
+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.21.tgz",
+ "integrity": "sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w==",
+ "requires": {
+ "bindings": "^1.5.0",
+ "node-addon-api": "^1.7.1"
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "defer-to-connect": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
+ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "denque": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
+ "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ=="
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo="
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
+ "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum-object": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true,
+ "optional": true
+ },
+ "detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true
+ }
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.3.4.tgz",
+ "integrity": "sha1-PHbKoJZks1g7ADevncE2557Gi5g="
+ },
+ "electron": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-12.0.0.tgz",
+ "integrity": "sha512-p6oxZ4LG82hopPGAsIMOjyoL49fr6cexyFNH0kADA9Yf+mJ72DN7bjvBG+6V7r6QKhwYgsSsW8RpxBeVOUbxVQ==",
+ "dev": true,
+ "requires": {
+ "@electron/get": "^1.0.1",
+ "@types/node": "^14.6.2",
+ "extract-zip": "^1.0.3"
+ }
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true,
+ "optional": true
+ },
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "~1.3.0"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ }
+ }
+ },
+ "engine.io": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz",
+ "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==",
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "ws": "~1.1.5"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "requires": {
+ "mime-types": "~2.1.11",
+ "negotiator": "0.6.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz",
+ "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parsejson": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~1.1.5",
+ "xmlhttprequest-ssl": "1.5.3",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
+ "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.6",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary": "0.1.7",
+ "wtf-8": "1.0.0"
+ }
+ },
+ "env-paths": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
+ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+ "dev": true
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true,
+ "optional": true
+ },
+ "es6-promise": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
+ "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg="
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.13.4",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz",
+ "integrity": "sha1-PAt288d1kMg0VzkGHsC9O6Bn7CQ=",
+ "requires": {
+ "accepts": "~1.2.12",
+ "array-flatten": "1.1.1",
+ "content-disposition": "0.5.1",
+ "content-type": "~1.0.1",
+ "cookie": "0.1.5",
+ "cookie-signature": "1.0.6",
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "finalhandler": "0.4.1",
+ "fresh": "0.3.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.1",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~1.0.10",
+ "qs": "4.0.0",
+ "range-parser": "~1.0.3",
+ "send": "0.13.1",
+ "serve-static": "~1.10.2",
+ "type-is": "~1.6.6",
+ "utils-merge": "1.0.0",
+ "vary": "~1.0.1"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
+ "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
+ "requires": {
+ "mime-types": "~2.1.6",
+ "negotiator": "0.5.3"
+ }
+ },
+ "cookie": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz",
+ "integrity": "sha1-armUiksa4hlSzSWIUwpHItQETXw="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "negotiator": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz",
+ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g="
+ },
+ "vary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
+ "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extract-zip": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
+ "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.6.2",
+ "debug": "^2.6.9",
+ "mkdirp": "^0.5.4",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fancy-log": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+ "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "fast-safe-stringify": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
+ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz",
+ "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=",
+ "requires": {
+ "debug": "~2.2.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8="
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "dev": true
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "~0.1.0"
+ }
+ },
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "^4.3.1",
+ "glob2base": "^0.0.12",
+ "minimatch": "^2.0.1",
+ "ordered-read-streams": "^0.1.0",
+ "through2": "^0.6.1",
+ "unique-stream": "^1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "^0.5.1"
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "^0.1.1"
+ }
+ },
+ "global-agent": {
+ "version": "2.1.12",
+ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
+ "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "core-js": "^3.6.5",
+ "es6-error": "^4.1.1",
+ "matcher": "^3.0.0",
+ "roarr": "^2.15.3",
+ "semver": "^7.3.2",
+ "serialize-error": "^7.0.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+ "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "global-tunnel-ng": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
+ "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "encodeurl": "^1.0.2",
+ "lodash": "^4.17.10",
+ "npm-conf": "^1.1.3",
+ "tunnel": "^0.0.6"
+ }
+ },
+ "globalthis": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
+ "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "got": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+ "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.14.0",
+ "@szmarczak/http-timer": "^1.1.2",
+ "cacheable-request": "^6.0.0",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^4.1.0",
+ "lowercase-keys": "^1.0.1",
+ "mimic-response": "^1.0.1",
+ "p-cancelable": "^1.0.0",
+ "to-readable-stream": "^1.0.0",
+ "url-parse-lax": "^3.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz",
+ "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==",
+ "dev": true,
+ "requires": {
+ "natives": "^1.1.3"
+ }
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "chalk": "^1.0.0",
+ "deprecated": "^0.0.1",
+ "gulp-util": "^3.0.0",
+ "interpret": "^1.0.0",
+ "liftoff": "^2.1.0",
+ "minimist": "^1.1.0",
+ "orchestrator": "^0.3.0",
+ "pretty-hrtime": "^1.0.0",
+ "semver": "^4.1.0",
+ "tildify": "^1.0.0",
+ "v8flags": "^2.0.2",
+ "vinyl-fs": "^0.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-concat": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
+ "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
+ "dev": true,
+ "requires": {
+ "concat-with-sourcemaps": "^1.0.0",
+ "through2": "^2.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ }
+ }
+ },
+ "gulp-notify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-2.2.0.tgz",
+ "integrity": "sha1-BGyChcKS6X7tThWgCcJsu+XO8TU=",
+ "dev": true,
+ "requires": {
+ "gulp-util": "^3.0.2",
+ "lodash.template": "^3.0.0",
+ "node-notifier": "^4.1.0",
+ "node.extend": "^1.1.3",
+ "through2": "^0.6.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "gulp-plumber": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.1.tgz",
+ "integrity": "sha512-mctAi9msEAG7XzW5ytDVZ9PxWMzzi1pS2rBH7lA095DhMa6KEXjm+St0GOCc567pJKJ/oCvosVAZEpAey0q2eQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "fancy-log": "^1.3.2",
+ "plugin-error": "^0.1.2",
+ "through2": "^2.0.3"
+ }
+ },
+ "gulp-uglify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz",
+ "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=",
+ "dev": true,
+ "requires": {
+ "deap": "^1.0.0",
+ "fancy-log": "^1.0.0",
+ "gulp-util": "^3.0.0",
+ "isobject": "^2.0.0",
+ "through2": "^2.0.0",
+ "uglify-js": "2.6.4",
+ "uglify-save-license": "^0.4.1",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "^1.0.0",
+ "array-uniq": "^1.0.2",
+ "beeper": "^1.0.0",
+ "chalk": "^1.0.0",
+ "dateformat": "^2.0.0",
+ "fancy-log": "^1.1.0",
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash._reescape": "^3.0.0",
+ "lodash._reevaluate": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.template": "^3.0.0",
+ "minimist": "^1.1.0",
+ "multipipe": "^0.1.2",
+ "object-assign": "^3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "^2.0.0",
+ "vinyl": "^0.5.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-binary": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
+ "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hooks-fixed": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz",
+ "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ=="
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "statuses": "1"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz",
+ "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4="
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz",
+ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ }
+ }
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
+ "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c="
+ },
+ "is": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz",
+ "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
+ "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jstransform": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-10.1.0.tgz",
+ "integrity": "sha1-tMSb9j8WLBCLA0g5moc3xxOwqDo=",
+ "dev": true,
+ "requires": {
+ "base62": "0.1.1",
+ "esprima-fb": "13001.1001.0-dev-harmony-fb",
+ "source-map": "0.1.31"
+ },
+ "dependencies": {
+ "esprima-fb": {
+ "version": "13001.1001.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-13001.1001.0-dev-harmony-fb.tgz",
+ "integrity": "sha1-YzrNtA2b1NuKHB1owGqUKVn60rA=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
+ "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "kareem": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.5.0.tgz",
+ "integrity": "sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg="
+ },
+ "keyv": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+ "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
+ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "stream-splicer": "^2.0.0"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^2.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash._arraycopy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
+ "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=",
+ "dev": true
+ },
+ "lodash._arrayeach": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
+ "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "lodash._baseclone": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz",
+ "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=",
+ "dev": true,
+ "requires": {
+ "lodash._arraycopy": "^3.0.0",
+ "lodash._arrayeach": "^3.0.0",
+ "lodash._baseassign": "^3.0.0",
+ "lodash._basefor": "^3.0.0",
+ "lodash.isarray": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basefor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
+ "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz",
+ "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=",
+ "dev": true,
+ "requires": {
+ "lodash._baseclone": "^3.0.0",
+ "lodash._bindcallback": "^3.0.0"
+ }
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "^3.0.0"
+ }
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ }
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash._basetostring": "^3.0.0",
+ "lodash._basevalues": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0",
+ "lodash.keys": "^3.0.0",
+ "lodash.restparam": "^3.0.0",
+ "lodash.templatesettings": "^3.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0"
+ }
+ },
+ "lodash.toarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "marked": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
+ "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==",
+ "dev": true
+ },
+ "marked-terminal": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz",
+ "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.1.0",
+ "cardinal": "^2.1.1",
+ "chalk": "^2.4.1",
+ "cli-table": "^0.3.1",
+ "node-emoji": "^1.4.1",
+ "supports-hyperlinks": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "matcher": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
+ "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "escape-string-regexp": "^4.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
+ },
+ "mime-db": {
+ "version": "1.46.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+ "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
+ },
+ "mime-types": {
+ "version": "2.1.29",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+ "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+ "requires": {
+ "mime-db": "1.46.0"
+ }
+ },
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "module-deps": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
+ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.0",
+ "defined": "^1.0.0",
+ "detective": "^4.0.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.3",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "mongodb": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.4.tgz",
+ "integrity": "sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw==",
+ "requires": {
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "require_optional": "^1.0.1",
+ "safe-buffer": "^5.1.2",
+ "saslprep": "^1.0.0"
+ },
+ "dependencies": {
+ "bson": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
+ "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
+ }
+ }
+ },
+ "mongodb-core": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz",
+ "integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=",
+ "requires": {
+ "bson": "~1.0.4",
+ "require_optional": "~1.0.0"
+ }
+ },
+ "mongoose": {
+ "version": "4.13.21",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.21.tgz",
+ "integrity": "sha512-0VZtQu1rSUPwUtbb7zh6CymI0nNkVInOIDbtWNlna070qnUO14On8PpSVSwlx3gwmkKL2OkP4ioCj5YHC6trMg==",
+ "requires": {
+ "async": "2.6.0",
+ "bson": "~1.0.4",
+ "hooks-fixed": "2.0.2",
+ "kareem": "1.5.0",
+ "lodash.get": "4.4.2",
+ "mongodb": "2.2.34",
+ "mpath": "0.5.1",
+ "mpromise": "0.5.5",
+ "mquery": "2.3.3",
+ "ms": "2.0.0",
+ "muri": "1.3.0",
+ "regexp-clone": "0.0.1",
+ "sliced": "1.0.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "^4.14.0"
+ }
+ },
+ "mongodb": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz",
+ "integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=",
+ "requires": {
+ "es6-promise": "3.2.1",
+ "mongodb-core": "2.1.18",
+ "readable-stream": "2.2.7"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "morgan": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz",
+ "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=",
+ "requires": {
+ "basic-auth": "~1.0.3",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.0.0"
+ }
+ },
+ "mpath": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz",
+ "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg=="
+ },
+ "mpromise": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz",
+ "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY="
+ },
+ "mquery": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz",
+ "integrity": "sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ==",
+ "requires": {
+ "bluebird": "3.5.0",
+ "debug": "2.6.9",
+ "regexp-clone": "0.0.1",
+ "sliced": "0.0.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "sliced": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
+ "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
+ }
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ },
+ "dependencies": {
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "muri": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz",
+ "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg=="
+ },
+ "nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natives": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
+ "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "node-addon-api": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
+ "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="
+ },
+ "node-emoji": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
+ "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
+ "dev": true,
+ "requires": {
+ "lodash.toarray": "^4.4.0"
+ }
+ },
+ "node-notifier": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz",
+ "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=",
+ "dev": true,
+ "requires": {
+ "cli-usage": "^0.1.1",
+ "growly": "^1.2.0",
+ "lodash.clonedeep": "^3.0.0",
+ "minimist": "^1.1.1",
+ "semver": "^5.1.0",
+ "shellwords": "^0.1.0",
+ "which": "^1.0.5"
+ }
+ },
+ "node.extend": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz",
+ "integrity": "sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3",
+ "is": "^3.2.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true
+ },
+ "npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "optional": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "~0.1.5",
+ "sequencify": "~0.0.7",
+ "stream-consume": "~0.1.0"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-browserify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
+ "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "outpipe": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz",
+ "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=",
+ "dev": true,
+ "requires": {
+ "shell-quote": "^1.4.2"
+ }
+ },
+ "p-cancelable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+ "dev": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "dev": true
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parsejson": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
+ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "pbkdf2": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "optional": true
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "^0.1.1",
+ "ansi-red": "^0.1.1",
+ "arr-diff": "^1.0.1",
+ "arr-union": "^2.0.1",
+ "extend-shallow": "^1.1.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "array-slice": "^0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^1.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true,
+ "optional": true
+ },
+ "proxy-addr": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
+ "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=",
+ "requires": {
+ "forwarded": "~0.1.0",
+ "ipaddr.js": "1.0.5"
+ }
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz",
+ "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU="
+ },
+ "raw-body": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz",
+ "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
+ "requires": {
+ "bytes": "2.4.0",
+ "iconv-lite": "0.4.13",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
+ },
+ "iconv-lite": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI="
+ }
+ }
+ },
+ "react-tools": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/react-tools/-/react-tools-0.13.3.tgz",
+ "integrity": "sha1-2mrH1Nd3elml6VHPRucv1La0Ciw=",
+ "dev": true,
+ "requires": {
+ "commoner": "^0.10.0",
+ "jstransform": "^10.1.0"
+ }
+ },
+ "reactify": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/reactify/-/reactify-1.1.1.tgz",
+ "integrity": "sha1-qPEZWWJzwNS/savqDBTCYB6gO7o=",
+ "dev": true,
+ "requires": {
+ "react-tools": "~0.13.0",
+ "through": "~2.3.4"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
+ "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
+ "requires": {
+ "buffer-shims": "~1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~1.0.0",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "dev": true
+ }
+ }
+ },
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "dev": true,
+ "requires": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "redeyed": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
+ "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=",
+ "dev": true,
+ "requires": {
+ "esprima": "~4.0.0"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp-clone": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
+ "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ }
+ }
+ },
+ "require_optional": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
+ "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
+ "requires": {
+ "resolve-from": "^2.0.0",
+ "semver": "^5.1.0"
+ }
+ },
+ "resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "roarr": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
+ "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "detect-node": "^2.0.4",
+ "globalthis": "^1.0.1",
+ "json-stringify-safe": "^5.0.1",
+ "semver-compare": "^1.0.0",
+ "sprintf-js": "^1.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "requires": {
+ "sparse-bitfield": "^3.0.3"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true,
+ "optional": true
+ },
+ "send": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz",
+ "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=",
+ "requires": {
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.3",
+ "statuses": "~1.2.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "serialize-error": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
+ "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "type-fest": "^0.13.1"
+ }
+ },
+ "serve-favicon": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz",
+ "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=",
+ "requires": {
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "ms": "0.7.2",
+ "parseurl": "~1.3.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz",
+ "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=",
+ "requires": {
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.1",
+ "send": "0.13.2"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "send": {
+ "version": "0.13.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz",
+ "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
+ "requires": {
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.3",
+ "statuses": "~1.2.1"
+ }
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "shasum-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz",
+ "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==",
+ "dev": true,
+ "requires": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true
+ },
+ "sliced": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz",
+ "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=",
+ "requires": {
+ "debug": "2.3.3",
+ "engine.io": "~1.8.4",
+ "has-binary": "0.1.7",
+ "object-assign": "4.1.0",
+ "socket.io-adapter": "0.5.0",
+ "socket.io-client": "1.7.4",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A="
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
+ "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
+ "requires": {
+ "debug": "2.3.3",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "socket.io-client": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz",
+ "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=",
+ "requires": {
+ "backo2": "1.0.2",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.3.3",
+ "engine.io-client": "~1.8.4",
+ "has-binary": "0.1.7",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "2.3.1",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
+ "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
+ "requires": {
+ "component-emitter": "1.1.2",
+ "debug": "2.2.0",
+ "isarray": "0.0.1",
+ "json3": "3.3.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+ "dev": true
+ },
+ "sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "optional": true,
+ "requires": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true,
+ "optional": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "^1.0.0",
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "sumchecker": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
+ "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "supports-hyperlinks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz",
+ "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^2.0.0",
+ "supports-color": "^5.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "~0.11.0"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-readable-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+ "dev": true
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true,
+ "optional": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ },
+ "type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "dev": true,
+ "optional": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+ "dev": true,
+ "requires": {
+ "async": "~0.2.6",
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "uglify-save-license": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
+ "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=",
+ "dev": true
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
+ },
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "undeclared-identifiers": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
+ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "^1.1.1"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.0",
+ "clone-stats": "^0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.0",
+ "glob-stream": "^3.1.5",
+ "glob-watcher": "^0.0.6",
+ "graceful-fs": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "strip-bom": "^1.0.0",
+ "through2": "^0.6.1",
+ "vinyl": "^0.4.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-source-stream": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz",
+ "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.3",
+ "vinyl": "^0.4.3"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "watchify": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.1.tgz",
+ "integrity": "sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "browserify": "^16.1.0",
+ "chokidar": "^2.1.1",
+ "defined": "^1.0.0",
+ "outpipe": "^1.1.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "browser-resolve": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
+ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.17.0"
+ }
+ },
+ "browserify": {
+ "version": "16.5.2",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz",
+ "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^2.0.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "~5.2.1",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp-classic": "^0.5.2",
+ "module-deps": "^6.2.3",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^3.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
+ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "events": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
+ "dev": true
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "module-deps": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz",
+ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^2.0.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.2.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "stream-http": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz",
+ "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
+ "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
+ "requires": {
+ "options": ">=0.0.5",
+ "ultron": "1.0.x"
+ }
+ },
+ "wtf-8": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz",
+ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo="
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
+ "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "optional": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+ }
+ }
+}
diff --git a/package.json b/package.json
index c0f2b30..cb42466 100644
--- a/package.json
+++ b/package.json
@@ -1,16 +1,20 @@
{
- "name": "myTube",
- "version": "0.0.0",
- "private": true,
- "main": "src/App.js",
+ "name": "MyTube",
+ "version": "0.1.0",
+ "author": "your name",
+ "description": "MyTube",
+ "main": "main.js",
"scripts": {
- "start": "node ./bin/www"
+ "start": "electron ."
},
"browserify": {
"transform": [
"reactify"
]
},
+ "resolutions": {
+ "graceful-fs": "^4.2.4"
+ },
"dependencies": {
"async": "^2.0.0-rc.5",
"body-parser": "~1.13.2",
@@ -23,14 +27,18 @@
"ejs": "~2.3.3",
"express": "~4.13.1",
"glob": "^7.0.3",
+ "mongodb": "^3.6.4",
"mongoose": "^4.4.19",
"morgan": "~1.6.1",
+ "prompt": "^1.1.0",
"request": "^2.72.0",
+ "save": "^2.4.0",
"serve-favicon": "~2.3.0",
"socket.io": "^1.4.5"
},
"devDependencies": {
"browserify": "^13.0.0",
+ "electron": "^12.0.0",
"gulp": "^3.9.1",
"gulp-concat": "^2.6.0",
"gulp-notify": "^2.2.0",
diff --git a/public/Y4D/AV.png b/public/Y4D/AV.png
new file mode 100644
index 0000000..d35f612
Binary files /dev/null and b/public/Y4D/AV.png differ
diff --git a/public/Y4D/dp.png b/public/Y4D/dp.png
new file mode 100644
index 0000000..732fc5a
Binary files /dev/null and b/public/Y4D/dp.png differ
diff --git a/public/Y4D/index.html b/public/Y4D/index.html
new file mode 100644
index 0000000..6e8f7cb
--- /dev/null
+++ b/public/Y4D/index.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+ YouTube 4 Discord
+
+
+
+
+
+
+
+
+
YouTube 4 Discord
+
The Best YouTube Bot for Discord.
+
Tracking your channel stats or searching for YouTube videos has never been easier. With Y4D, you can do all this within Discord.
+
+
+
+
+
+
+
+
+
24/7 Uptime
+
A Commitment is a Commitment.
+
We at Y4D Development are committed to provide 24/7 uptime and ensure that the bot is always there when you run a command.
+
+
+
Talented Developers
+
Nothing Worth Having Comes Easy.
+
The developers of Y4D have spent hours of hard work into making the bot. They have made sure there are no bugs, nor are there any unlisted commands.
+
+
+
+
+
+
+
+
+
Awesome Search
+
Insanely Simple Search Commands
+
Y4D is equipped with easy yet powerful search commands, which make searching for YouTube channels and videos easier than ever before.
+
+
+
+
+
\ No newline at end of file
diff --git a/public/Y4D/pfp.png b/public/Y4D/pfp.png
new file mode 100644
index 0000000..24132f6
Binary files /dev/null and b/public/Y4D/pfp.png differ
diff --git a/public/Y4D/search.png b/public/Y4D/search.png
new file mode 100644
index 0000000..42a71e0
Binary files /dev/null and b/public/Y4D/search.png differ
diff --git a/public/Y4D/style.css b/public/Y4D/style.css
new file mode 100644
index 0000000..ddfaa57
--- /dev/null
+++ b/public/Y4D/style.css
@@ -0,0 +1,196 @@
+*{
+ margin: 0;
+ padding: 0;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ background: #222222 ;
+}
+
+.container{
+ width: 100%;
+ height: 100%;
+ background: #CC0000;
+}
+
+.menu ul{
+ display: inline-flex;
+ margin: 50px;
+}
+
+.menu ul li{
+ text-decoration: none;
+ list-style: none;
+ margin: 0 10px;
+ color: #FFFFFF;
+ font-weight: bold;
+ cursor: pointer;
+ background: #222222;
+}
+
+.logo img{
+ width: 50px;
+ margin-top: -7px;
+ margin-right: 48px;
+}
+.active{
+ color: #FF0000 !important;
+}
+.signup-btn{
+ top: 50px;
+ right: 80px;
+ position: absolute;
+ text-decoration: none;
+ color: #fff;
+ border: 2px solid transparent;
+ border-radius: 20px;
+ background-image: linear-gradient(#000000, #FFFFFF), radial-gradient(circle at top left, #FF0000,#000);
+ background-origin: border-box;
+ background-clip: content-box,border-box;
+}
+.signup-btn span{
+ display: block;
+ padding: 8px 22px;
+}
+.banner{
+ width: 80%;
+ height: 70%;
+ top: 25%;
+ left: 70px;
+ position: absolute;
+ color: #ffffff;
+}
+.app-text{
+ width: 50%;
+ float: left;
+}
+.app-text h1{
+ font-size: 45px;
+ width: 90%;
+ position: relative;
+ margin-left: 40px;
+}
+.app-text h3{
+ width: 90%;
+ font-size: 25px;
+ margin: 30px 0px 30px 40px;
+ line-height: 25px;
+}
+.app-text p{
+ width: 90%;
+ font-size: 20px;
+ margin: 30px 0px 30px 40px;
+ line-height: 25px;
+}
+.app-picture{
+ width: 50%;
+ float: right;
+}
+.app-picture img{
+ width: 75%;
+ margin-top: -150px;
+ padding-left: 150px;
+}
+
+.app-text-2{
+ width: 50%;
+ float: right;
+ position: relative;
+ margin-right: -150px;
+}
+.app-text-2 h1{
+ font-size: 45px;
+ width: 90%;
+ margin: 30px 60px 30px -10px;
+}
+.app-text-2 h3{
+ width: 90%;
+ font-size: 25px;
+ line-height: 25px;
+ margin: 30px 60px 30px -10px;
+}
+.app-text-2 p{
+ width: 90%;
+ font-size: 20px;
+ line-height: 25px;
+ margin: 30px 60px 30px -10px;
+}
+.app-picture-2{
+ width: 50%;
+ float: left;
+}
+.app-picture-2 img{
+ width: 50%;
+ margin-top: 50px;
+ margin-left: 100px;
+ padding-right: 100px;
+ float: left;
+}
+.app-text-3{
+ width: 50%;
+ float: inherit;
+ margin-left: 0px;
+ margin-top: inherit
+}
+.app-text-3 h1{
+ font-size: 45px;
+ width: 90%;
+ position: relative;
+ margin-left: 40px;
+ float: left;
+}
+.app-text-3 h3{
+ width: 90%;
+ font-size: 25px;
+ margin: 30px 0px 30px 40px;
+ line-height: 25px;
+ float: left;
+}
+.app-text-3 p{
+ width: 90%;
+ font-size: 20px;
+ line-height: 25px;
+ margin-left: 40px;
+ float: left;
+}
+.app-picture-3{
+ width: 50%;
+ float: right;
+ margin-top: -250px;
+}
+.app-picture-3 img{
+ width: 75%;
+ padding-left: 150px;
+}
+.app-text-4{
+ width: 50%;
+ float: right;
+ position: relative;
+ margin-right: -150px;
+}
+.app-text-4 h1{
+ font-size: 45px;
+ width: 90%;
+ margin: 30px 60px 30px -10px;
+}
+.app-text-4 h3{
+ width: 90%;
+ font-size: 25px;
+ line-height: 25px;
+ margin: 30px 60px 30px -10px;
+}
+.app-text-4 p{
+ width: 90%;
+ font-size: 20px;
+ line-height: 25px;
+ margin: 30px 60px 30px -10px;
+}
+.app-picture-4{
+ width: 50%;
+ float: left;
+}
+.app-picture-4 img{
+ width: 70%;
+ margin-top: 130px;
+ margin-left: 100px;
+ padding-right: 100px;
+ float: left;
+}
\ No newline at end of file
diff --git a/public/Y4D/uptime.png b/public/Y4D/uptime.png
new file mode 100644
index 0000000..9c5a3cd
Binary files /dev/null and b/public/Y4D/uptime.png differ
diff --git a/public/Y4D/utility.png b/public/Y4D/utility.png
new file mode 100644
index 0000000..5b48460
Binary files /dev/null and b/public/Y4D/utility.png differ
diff --git a/public/index.html b/public/index.html
index a76171b..bea0968 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,5 +1,52 @@
+
+
+
+
+
+
+
+
+
myTube
diff --git a/python39.dll b/python39.dll
new file mode 100644
index 0000000..9640194
Binary files /dev/null and b/python39.dll differ
diff --git a/routes/index.js b/routes/index.js
index 28ed0da..891a37f 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -11,6 +11,10 @@ let downloaders = utils.get('downloaders');
const yt = require('../yt');
+var person = prompt("Please enter hex color for theme", "eg. #ffffff | remember to include #");
+
+document.body.style.backgroundColor = Person;
+
router.get('/video', (req, res, next) => {
Video.find({$and: [{deleted: false}, {$or:[{processed: true}, {processing: true}]}]}, {}, {sort: "-_id"}, (err, docs) => {
res.send(docs);
diff --git a/start.sh b/start.sh
new file mode 100644
index 0000000..7512a7e
--- /dev/null
+++ b/start.sh
@@ -0,0 +1 @@
+npm start
\ No newline at end of file