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 ![](http://i.imgur.com/Be2omEM.jpg) @@ -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.

+ + + +

+ + + + + + 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 + + + + +
+ + +
+ + \ 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