VYPR
High severityNVD Advisory· Published Jun 17, 2022· Updated Sep 16, 2024

Prototype Pollution

CVE-2022-21213

Description

Prototype pollution in mout's deepFillIn and deepMixIn functions via unchecked recursive property access, a partial fix bypass of CVE-2020-7792.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Prototype pollution in mout's deepFillIn and deepMixIn functions via unchecked recursive property access, a partial fix bypass of CVE-2020-7792.

Vulnerability

Overview

CVE-2022-21213 affects all versions of the JavaScript library mout. The vulnerability resides in the deepFillIn and deepMixIn functions, which are designed to recursively copy or fill missing properties between objects. Both functions fail to validate the keys used during recursive property access, allowing an attacker to pollute the prototype chain by injecting properties such as __proto__ or constructor. This flaw represents an incomplete fix of the earlier CVE-2020-7792 [1][3].

Exploitation

Mechanism

The bug is a classic prototype pollution vulnerability. When the source object contains a property named __proto__ (or other prototype-related keys), the recursive merge functions will traverse into the target object's prototype, enabling the attacker to assign arbitrary properties to Object.prototype. This can be triggered without authentication, typically via a JSON payload or untrusted input that is processed by the affected functions. The attack requires the target application to pass unsanitized user-controlled data to deepFillIn or deepMixIn [2][3].

Impact

Successful exploitation allows an attacker to inject properties into the global Object.prototype. This can lead to unexpected application behavior, denial of service through exceptions, or, in more severe scenarios, remote code execution if the injected properties alter control flow or modify security-sensitive logic. The impact is amplified because all JavaScript objects inherit from Object.prototype, so a single pollution can affect the entire runtime [3].

Mitigation

The maintainers have addressed this vulnerability in pull request #279, which adds key validation to prevent access to dangerous properties like __proto__, constructor, and prototype during recursive operations [2]. Users of the mout library should update to the latest patched version immediately. As this vulnerability has a CVSS score of 9.8 (Critical), it poses a significant risk and may be added to CISA's Known Exploited Vulnerabilities catalog if active exploitation is observed [1].

AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
moutnpm
< 1.2.41.2.4

Affected products

2

Patches

1
17ffdc2a9641

Merge pull request #279 from ssong/fix-for-CVE-2022-21213

https://github.com/mout/moutMathias PaumgartenSep 19, 2022via ghsa
3 files changed · +1614 4
  • package-lock.json+1603 1 modified
    @@ -1,8 +1,1610 @@
     {
       "name": "mout",
       "version": "1.2.3",
    -  "lockfileVersion": 1,
    +  "lockfileVersion": 2,
       "requires": true,
    +  "packages": {
    +    "": {
    +      "name": "mout",
    +      "version": "1.2.3",
    +      "license": "MIT",
    +      "devDependencies": {
    +        "commander": "~2.16.0",
    +        "handlebars": "~4.7.7",
    +        "istanbul": "~0.4.5",
    +        "jasmine-node": "^1.15.0",
    +        "jshint": "~2.9.5",
    +        "mdoc": "~0.5.3",
    +        "nodefy": "~0.2.2",
    +        "regenerate": "~1.4.0",
    +        "requirejs": "~2.3.5",
    +        "rimraf": "~2.6.2",
    +        "rocambole": "~0.7.0"
    +      }
    +    },
    +    "node_modules/abbrev": {
    +      "version": "1.0.9",
    +      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
    +      "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
    +      "dev": true
    +    },
    +    "node_modules/align-text": {
    +      "version": "0.1.4",
    +      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
    +      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "kind-of": "^3.0.2",
    +        "longest": "^1.0.1",
    +        "repeat-string": "^1.5.2"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/amdefine": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
    +      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.4.2"
    +      }
    +    },
    +    "node_modules/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,
    +      "dependencies": {
    +        "color-convert": "^1.9.0"
    +      },
    +      "engines": {
    +        "node": ">=4"
    +      }
    +    },
    +    "node_modules/argparse": {
    +      "version": "1.0.9",
    +      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
    +      "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
    +      "dev": true,
    +      "dependencies": {
    +        "sprintf-js": "~1.0.2"
    +      }
    +    },
    +    "node_modules/balanced-match": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
    +      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
    +      "dev": true
    +    },
    +    "node_modules/brace-expansion": {
    +      "version": "1.1.8",
    +      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
    +      "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
    +      "dev": true,
    +      "dependencies": {
    +        "balanced-match": "^1.0.0",
    +        "concat-map": "0.0.1"
    +      }
    +    },
    +    "node_modules/center-align": {
    +      "version": "0.1.3",
    +      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
    +      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "align-text": "^0.1.3",
    +        "lazy-cache": "^1.0.3"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/cli": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
    +      "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
    +      "dev": true,
    +      "dependencies": {
    +        "exit": "0.1.2",
    +        "glob": "^7.1.1"
    +      },
    +      "engines": {
    +        "node": ">=0.2.5"
    +      }
    +    },
    +    "node_modules/cli/node_modules/glob": {
    +      "version": "7.1.2",
    +      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
    +      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
    +      "dev": true,
    +      "dependencies": {
    +        "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"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/cli/node_modules/minimatch": {
    +      "version": "3.0.4",
    +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    +      "dev": true,
    +      "dependencies": {
    +        "brace-expansion": "^1.1.7"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/coffeescript": {
    +      "version": "2.3.1",
    +      "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.3.1.tgz",
    +      "integrity": "sha512-DNJmSPMyiz+OjWYyuDXNBcFutDjP2TS2owsZ8YvT65hA8c5IdHWIBqdA3Yf/XHoK23d/f1HqLjQbEJJZJoeV1w==",
    +      "dev": true,
    +      "bin": {
    +        "cake": "bin/cake",
    +        "coffee": "bin/coffee"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/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,
    +      "dependencies": {
    +        "color-name": "1.1.3"
    +      }
    +    },
    +    "node_modules/color-name": {
    +      "version": "1.1.3",
    +      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
    +      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
    +      "dev": true
    +    },
    +    "node_modules/commander": {
    +      "version": "2.16.0",
    +      "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
    +      "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
    +      "dev": true
    +    },
    +    "node_modules/concat-map": {
    +      "version": "0.0.1",
    +      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
    +      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
    +      "dev": true
    +    },
    +    "node_modules/console-browserify": {
    +      "version": "1.1.0",
    +      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
    +      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
    +      "dev": true,
    +      "dependencies": {
    +        "date-now": "^0.1.4"
    +      }
    +    },
    +    "node_modules/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=",
    +      "dev": true
    +    },
    +    "node_modules/date-now": {
    +      "version": "0.1.4",
    +      "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
    +      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
    +      "dev": true
    +    },
    +    "node_modules/decamelize": {
    +      "version": "1.2.0",
    +      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
    +      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/deep-is": {
    +      "version": "0.1.3",
    +      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
    +      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
    +      "dev": true
    +    },
    +    "node_modules/dom-serializer": {
    +      "version": "0.1.0",
    +      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
    +      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
    +      "dev": true,
    +      "dependencies": {
    +        "domelementtype": "~1.1.1",
    +        "entities": "~1.1.1"
    +      }
    +    },
    +    "node_modules/dom-serializer/node_modules/domelementtype": {
    +      "version": "1.1.3",
    +      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
    +      "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
    +      "dev": true
    +    },
    +    "node_modules/dom-serializer/node_modules/entities": {
    +      "version": "1.1.1",
    +      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
    +      "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
    +      "dev": true
    +    },
    +    "node_modules/domelementtype": {
    +      "version": "1.3.0",
    +      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
    +      "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
    +      "deprecated": "update to domelementtype@1.3.1",
    +      "dev": true
    +    },
    +    "node_modules/domhandler": {
    +      "version": "2.3.0",
    +      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
    +      "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
    +      "dev": true,
    +      "dependencies": {
    +        "domelementtype": "1"
    +      }
    +    },
    +    "node_modules/domutils": {
    +      "version": "1.5.1",
    +      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
    +      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
    +      "dev": true,
    +      "dependencies": {
    +        "dom-serializer": "0",
    +        "domelementtype": "1"
    +      }
    +    },
    +    "node_modules/emoji-regex": {
    +      "version": "7.0.3",
    +      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
    +      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
    +      "dev": true
    +    },
    +    "node_modules/entities": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
    +      "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
    +      "dev": true
    +    },
    +    "node_modules/escodegen": {
    +      "version": "1.8.1",
    +      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
    +      "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
    +      "dev": true,
    +      "dependencies": {
    +        "esprima": "^2.7.1",
    +        "estraverse": "^1.9.1",
    +        "esutils": "^2.0.2",
    +        "optionator": "^0.8.1"
    +      },
    +      "bin": {
    +        "escodegen": "bin/escodegen.js",
    +        "esgenerate": "bin/esgenerate.js"
    +      },
    +      "engines": {
    +        "node": ">=0.12.0"
    +      },
    +      "optionalDependencies": {
    +        "source-map": "~0.2.0"
    +      }
    +    },
    +    "node_modules/escodegen/node_modules/esprima": {
    +      "version": "2.7.3",
    +      "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
    +      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
    +      "dev": true,
    +      "bin": {
    +        "esparse": "bin/esparse.js",
    +        "esvalidate": "bin/esvalidate.js"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/escodegen/node_modules/source-map": {
    +      "version": "0.2.0",
    +      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
    +      "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "amdefine": ">=0.0.4"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      }
    +    },
    +    "node_modules/esprima": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
    +      "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
    +      "dev": true,
    +      "bin": {
    +        "esparse": "bin/esparse.js",
    +        "esvalidate": "bin/esvalidate.js"
    +      },
    +      "engines": {
    +        "node": ">=0.4.0"
    +      }
    +    },
    +    "node_modules/estraverse": {
    +      "version": "1.9.3",
    +      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
    +      "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/esutils": {
    +      "version": "2.0.2",
    +      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
    +      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/exit": {
    +      "version": "0.1.2",
    +      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
    +      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">= 0.8.0"
    +      }
    +    },
    +    "node_modules/fast-levenshtein": {
    +      "version": "2.0.6",
    +      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
    +      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
    +      "dev": true
    +    },
    +    "node_modules/fs.realpath": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
    +      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
    +      "dev": true
    +    },
    +    "node_modules/gaze": {
    +      "version": "1.1.3",
    +      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
    +      "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
    +      "dev": true,
    +      "dependencies": {
    +        "globule": "^1.0.0"
    +      },
    +      "engines": {
    +        "node": ">= 4.0.0"
    +      }
    +    },
    +    "node_modules/glob": {
    +      "version": "7.1.2",
    +      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
    +      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
    +      "dev": true,
    +      "dependencies": {
    +        "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"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/globule": {
    +      "version": "1.2.1",
    +      "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
    +      "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
    +      "dev": true,
    +      "dependencies": {
    +        "glob": "~7.1.1",
    +        "lodash": "~4.17.10",
    +        "minimatch": "~3.0.2"
    +      },
    +      "engines": {
    +        "node": ">= 0.10"
    +      }
    +    },
    +    "node_modules/globule/node_modules/lodash": {
    +      "version": "4.17.10",
    +      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
    +      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
    +      "dev": true
    +    },
    +    "node_modules/graceful-fs": {
    +      "version": "1.2.3",
    +      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
    +      "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
    +      "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.4.0"
    +      }
    +    },
    +    "node_modules/growl": {
    +      "version": "1.10.5",
    +      "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
    +      "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=4.x"
    +      }
    +    },
    +    "node_modules/handlebars": {
    +      "version": "4.7.7",
    +      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
    +      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
    +      "dev": true,
    +      "dependencies": {
    +        "minimist": "^1.2.5",
    +        "neo-async": "^2.6.0",
    +        "source-map": "^0.6.1",
    +        "wordwrap": "^1.0.0"
    +      },
    +      "bin": {
    +        "handlebars": "bin/handlebars"
    +      },
    +      "engines": {
    +        "node": ">=0.4.7"
    +      },
    +      "optionalDependencies": {
    +        "uglify-js": "^3.1.4"
    +      }
    +    },
    +    "node_modules/handlebars/node_modules/minimist": {
    +      "version": "1.2.5",
    +      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
    +      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
    +      "dev": true
    +    },
    +    "node_modules/has-flag": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
    +      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/htmlparser2": {
    +      "version": "3.8.3",
    +      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
    +      "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
    +      "dev": true,
    +      "dependencies": {
    +        "domelementtype": "1",
    +        "domhandler": "2.3",
    +        "domutils": "1.5",
    +        "entities": "1.0",
    +        "readable-stream": "1.1"
    +      }
    +    },
    +    "node_modules/inflight": {
    +      "version": "1.0.6",
    +      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
    +      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
    +      "dev": true,
    +      "dependencies": {
    +        "once": "^1.3.0",
    +        "wrappy": "1"
    +      }
    +    },
    +    "node_modules/inherits": {
    +      "version": "2.0.3",
    +      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
    +      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
    +      "dev": true
    +    },
    +    "node_modules/is-buffer": {
    +      "version": "1.1.5",
    +      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
    +      "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
    +      "deprecated": "This version of 'is-buffer' is out-of-date. You must update to v1.1.6 or newer",
    +      "dev": true,
    +      "optional": true
    +    },
    +    "node_modules/isarray": {
    +      "version": "0.0.1",
    +      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
    +      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
    +      "dev": true
    +    },
    +    "node_modules/isexe": {
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
    +      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
    +      "dev": true
    +    },
    +    "node_modules/istanbul": {
    +      "version": "0.4.5",
    +      "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
    +      "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
    +      "deprecated": "This module is no longer maintained, try this instead:\n  npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.",
    +      "dev": true,
    +      "dependencies": {
    +        "abbrev": "1.0.x",
    +        "async": "1.x",
    +        "escodegen": "1.8.x",
    +        "esprima": "2.7.x",
    +        "glob": "^5.0.15",
    +        "handlebars": "^4.0.1",
    +        "js-yaml": "3.x",
    +        "mkdirp": "0.5.x",
    +        "nopt": "3.x",
    +        "once": "1.x",
    +        "resolve": "1.1.x",
    +        "supports-color": "^3.1.0",
    +        "which": "^1.1.1",
    +        "wordwrap": "^1.0.0"
    +      },
    +      "bin": {
    +        "istanbul": "lib/cli.js"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/async": {
    +      "version": "1.5.2",
    +      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
    +      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
    +      "dev": true
    +    },
    +    "node_modules/istanbul/node_modules/camelcase": {
    +      "version": "1.2.1",
    +      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
    +      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
    +      "dev": true,
    +      "optional": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/cliui": {
    +      "version": "2.1.0",
    +      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
    +      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "center-align": "^0.1.1",
    +        "right-align": "^0.1.1",
    +        "wordwrap": "0.0.2"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/cliui/node_modules/wordwrap": {
    +      "version": "0.0.2",
    +      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
    +      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
    +      "dev": true,
    +      "optional": true,
    +      "engines": {
    +        "node": ">=0.4.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/esprima": {
    +      "version": "2.7.3",
    +      "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
    +      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
    +      "dev": true,
    +      "bin": {
    +        "esparse": "bin/esparse.js",
    +        "esvalidate": "bin/esvalidate.js"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/glob": {
    +      "version": "5.0.15",
    +      "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
    +      "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
    +      "dev": true,
    +      "dependencies": {
    +        "inflight": "^1.0.4",
    +        "inherits": "2",
    +        "minimatch": "2 || 3",
    +        "once": "^1.3.0",
    +        "path-is-absolute": "^1.0.0"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/handlebars": {
    +      "version": "4.0.10",
    +      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
    +      "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
    +      "dev": true,
    +      "dependencies": {
    +        "async": "^1.4.0",
    +        "optimist": "^0.6.1",
    +        "source-map": "^0.4.4"
    +      },
    +      "bin": {
    +        "handlebars": "bin/handlebars"
    +      },
    +      "engines": {
    +        "node": ">=0.4.7"
    +      },
    +      "optionalDependencies": {
    +        "uglify-js": "^2.6"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/minimatch": {
    +      "version": "3.0.4",
    +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    +      "dev": true,
    +      "dependencies": {
    +        "brace-expansion": "^1.1.7"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/mkdirp": {
    +      "version": "0.5.1",
    +      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
    +      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
    +      "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
    +      "dev": true,
    +      "dependencies": {
    +        "minimist": "0.0.8"
    +      },
    +      "bin": {
    +        "mkdirp": "bin/cmd.js"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/mkdirp/node_modules/minimist": {
    +      "version": "0.0.8",
    +      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
    +      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
    +      "dev": true
    +    },
    +    "node_modules/istanbul/node_modules/optimist": {
    +      "version": "0.6.1",
    +      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
    +      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
    +      "dev": true,
    +      "dependencies": {
    +        "minimist": "~0.0.1",
    +        "wordwrap": "~0.0.2"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/optimist/node_modules/wordwrap": {
    +      "version": "0.0.3",
    +      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
    +      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.4.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/source-map": {
    +      "version": "0.4.4",
    +      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
    +      "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
    +      "dev": true,
    +      "dependencies": {
    +        "amdefine": ">=0.0.4"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/uglify-js": {
    +      "version": "2.8.29",
    +      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
    +      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "source-map": "~0.5.1",
    +        "yargs": "~3.10.0"
    +      },
    +      "bin": {
    +        "uglifyjs": "bin/uglifyjs"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      },
    +      "optionalDependencies": {
    +        "uglify-to-browserify": "~1.0.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/uglify-js/node_modules/source-map": {
    +      "version": "0.5.7",
    +      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
    +      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
    +      "dev": true,
    +      "optional": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/istanbul/node_modules/wordwrap": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
    +      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
    +      "dev": true
    +    },
    +    "node_modules/istanbul/node_modules/yargs": {
    +      "version": "3.10.0",
    +      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
    +      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "camelcase": "^1.0.2",
    +        "cliui": "^2.1.0",
    +        "decamelize": "^1.0.0",
    +        "window-size": "0.1.0"
    +      }
    +    },
    +    "node_modules/jasmine-growl-reporter": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-1.0.1.tgz",
    +      "integrity": "sha512-dh7VjP3l0OLxL9+sw5vK6RrdH4gdHCNkTnUd9orViHDPr7Fe8LsXY+IObWauS2hX5khMFtjKRZCfTcDHKAjm/A==",
    +      "dev": true,
    +      "dependencies": {
    +        "growl": "^1.10.2"
    +      }
    +    },
    +    "node_modules/jasmine-node": {
    +      "version": "1.15.0",
    +      "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-1.15.0.tgz",
    +      "integrity": "sha512-W8ehdkjov8kaVEdGmqmfobuJk04NmYarfVKAl/HUeVsCxP+E25pcW+l6Y46yXMthjj+3Qi3gaWkC+LU8toqa2w==",
    +      "deprecated": "jasmine-node 1.x & 2.x are deprecated, with known vulnerability in jasmine-growl-reporter pre-2.0.0",
    +      "dev": true,
    +      "dependencies": {
    +        "coffeescript": ">=1.0.1",
    +        "gaze": "~1.1.2",
    +        "jasmine-growl-reporter": "~1.0.1",
    +        "jasmine-reporters": "~1.0.0",
    +        "mkdirp": "~0.3.5",
    +        "requirejs": ">=0.27.1",
    +        "underscore": ">= 1.3.1",
    +        "walkdir": ">= 0.0.1"
    +      },
    +      "bin": {
    +        "jasmine-node": "bin/jasmine-node"
    +      }
    +    },
    +    "node_modules/jasmine-reporters": {
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz",
    +      "integrity": "sha1-q2E+1Zd9x0h+hbPBL2qOqNsq3jE=",
    +      "dev": true,
    +      "dependencies": {
    +        "mkdirp": "~0.3.5"
    +      }
    +    },
    +    "node_modules/js-yaml": {
    +      "version": "3.13.1",
    +      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
    +      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
    +      "dev": true,
    +      "dependencies": {
    +        "argparse": "^1.0.7",
    +        "esprima": "^4.0.0"
    +      },
    +      "bin": {
    +        "js-yaml": "bin/js-yaml.js"
    +      }
    +    },
    +    "node_modules/js-yaml/node_modules/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,
    +      "bin": {
    +        "esparse": "bin/esparse.js",
    +        "esvalidate": "bin/esvalidate.js"
    +      },
    +      "engines": {
    +        "node": ">=4"
    +      }
    +    },
    +    "node_modules/jshint": {
    +      "version": "2.9.5",
    +      "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz",
    +      "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=",
    +      "dev": true,
    +      "dependencies": {
    +        "cli": "~1.0.0",
    +        "console-browserify": "1.1.x",
    +        "exit": "0.1.x",
    +        "htmlparser2": "3.8.x",
    +        "lodash": "3.7.x",
    +        "minimatch": "~3.0.2",
    +        "shelljs": "0.3.x",
    +        "strip-json-comments": "1.0.x"
    +      },
    +      "bin": {
    +        "jshint": "bin/jshint"
    +      }
    +    },
    +    "node_modules/jshint/node_modules/minimatch": {
    +      "version": "3.0.4",
    +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    +      "dev": true,
    +      "dependencies": {
    +        "brace-expansion": "^1.1.7"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/keypress": {
    +      "version": "0.1.0",
    +      "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
    +      "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=",
    +      "dev": true
    +    },
    +    "node_modules/kind-of": {
    +      "version": "3.2.2",
    +      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
    +      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
    +      "dev": true,
    +      "optional": true,
    +      "dependencies": {
    +        "is-buffer": "^1.1.5"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/lazy-cache": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
    +      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
    +      "dev": true,
    +      "optional": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/levn": {
    +      "version": "0.3.0",
    +      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
    +      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
    +      "dev": true,
    +      "dependencies": {
    +        "prelude-ls": "~1.1.2",
    +        "type-check": "~0.3.2"
    +      },
    +      "engines": {
    +        "node": ">= 0.8.0"
    +      }
    +    },
    +    "node_modules/lodash": {
    +      "version": "3.7.0",
    +      "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz",
    +      "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=",
    +      "dev": true
    +    },
    +    "node_modules/longest": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
    +      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
    +      "dev": true,
    +      "optional": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/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
    +    },
    +    "node_modules/mdoc": {
    +      "version": "0.5.3",
    +      "resolved": "https://registry.npmjs.org/mdoc/-/mdoc-0.5.3.tgz",
    +      "integrity": "sha1-mKQzyPwlyYtbwqzfFXkVmJdXNQI=",
    +      "dev": true,
    +      "dependencies": {
    +        "commander": ">= 0.4.0",
    +        "handlebars": ">= 1.0.1",
    +        "showdown": "^1.3.0",
    +        "wrench": ">= 1.3.2"
    +      },
    +      "bin": {
    +        "mdoc": "bin/mdoc"
    +      }
    +    },
    +    "node_modules/minimatch": {
    +      "version": "3.0.4",
    +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    +      "dev": true,
    +      "dependencies": {
    +        "brace-expansion": "^1.1.7"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/minimist": {
    +      "version": "0.0.10",
    +      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
    +      "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
    +      "dev": true
    +    },
    +    "node_modules/mkdirp": {
    +      "version": "0.3.5",
    +      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
    +      "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
    +      "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
    +      "dev": true
    +    },
    +    "node_modules/neo-async": {
    +      "version": "2.6.2",
    +      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
    +      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
    +      "dev": true
    +    },
    +    "node_modules/nodefy": {
    +      "version": "0.2.2",
    +      "resolved": "https://registry.npmjs.org/nodefy/-/nodefy-0.2.2.tgz",
    +      "integrity": "sha1-2i+twOA1vjuWUpBcj3oFkw6QtGg=",
    +      "dev": true,
    +      "dependencies": {
    +        "async": "~0.1.22",
    +        "commander": "~1.1.0",
    +        "esprima": ">= 1.0 <1.2",
    +        "glob": "~3.1.14",
    +        "mkdirp": "~0.3.4"
    +      },
    +      "bin": {
    +        "nodefy": "bin/nodefy"
    +      }
    +    },
    +    "node_modules/nodefy/node_modules/async": {
    +      "version": "0.1.22",
    +      "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
    +      "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
    +      "dev": true,
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/nodefy/node_modules/commander": {
    +      "version": "1.1.1",
    +      "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz",
    +      "integrity": "sha1-UNFlGGiuYOzP8KLZ80WVN2vGsEE=",
    +      "dev": true,
    +      "dependencies": {
    +        "keypress": "0.1.x"
    +      },
    +      "engines": {
    +        "node": ">= 0.6.x"
    +      }
    +    },
    +    "node_modules/nodefy/node_modules/glob": {
    +      "version": "3.1.21",
    +      "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
    +      "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
    +      "dev": true,
    +      "dependencies": {
    +        "graceful-fs": "~1.2.0",
    +        "inherits": "1",
    +        "minimatch": "~0.2.11"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/nodefy/node_modules/inherits": {
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
    +      "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
    +      "dev": true
    +    },
    +    "node_modules/nodefy/node_modules/minimatch": {
    +      "version": "0.2.14",
    +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
    +      "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
    +      "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
    +      "dev": true,
    +      "dependencies": {
    +        "lru-cache": "2",
    +        "sigmund": "~1.0.0"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/nopt": {
    +      "version": "3.0.6",
    +      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
    +      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
    +      "dev": true,
    +      "dependencies": {
    +        "abbrev": "1"
    +      },
    +      "bin": {
    +        "nopt": "bin/nopt.js"
    +      }
    +    },
    +    "node_modules/once": {
    +      "version": "1.4.0",
    +      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
    +      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
    +      "dev": true,
    +      "dependencies": {
    +        "wrappy": "1"
    +      }
    +    },
    +    "node_modules/optionator": {
    +      "version": "0.8.2",
    +      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
    +      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
    +      "dev": true,
    +      "dependencies": {
    +        "deep-is": "~0.1.3",
    +        "fast-levenshtein": "~2.0.4",
    +        "levn": "~0.3.0",
    +        "prelude-ls": "~1.1.2",
    +        "type-check": "~0.3.2",
    +        "wordwrap": "~1.0.0"
    +      },
    +      "engines": {
    +        "node": ">= 0.8.0"
    +      }
    +    },
    +    "node_modules/optionator/node_modules/wordwrap": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
    +      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
    +      "dev": true
    +    },
    +    "node_modules/p-try": {
    +      "version": "2.2.0",
    +      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
    +      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/path-exists": {
    +      "version": "3.0.0",
    +      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
    +      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=4"
    +      }
    +    },
    +    "node_modules/path-is-absolute": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
    +      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/prelude-ls": {
    +      "version": "1.1.2",
    +      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
    +      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">= 0.8.0"
    +      }
    +    },
    +    "node_modules/readable-stream": {
    +      "version": "1.1.14",
    +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
    +      "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
    +      "dev": true,
    +      "dependencies": {
    +        "core-util-is": "~1.0.0",
    +        "inherits": "~2.0.1",
    +        "isarray": "0.0.1",
    +        "string_decoder": "~0.10.x"
    +      }
    +    },
    +    "node_modules/regenerate": {
    +      "version": "1.4.0",
    +      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
    +      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
    +      "dev": true
    +    },
    +    "node_modules/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,
    +      "optional": true,
    +      "engines": {
    +        "node": ">=0.10"
    +      }
    +    },
    +    "node_modules/require-directory": {
    +      "version": "2.1.1",
    +      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
    +      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/requirejs": {
    +      "version": "2.3.5",
    +      "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz",
    +      "integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==",
    +      "dev": true,
    +      "bin": {
    +        "r_js": "bin/r.js",
    +        "r.js": "bin/r.js"
    +      },
    +      "engines": {
    +        "node": ">=0.4.0"
    +      }
    +    },
    +    "node_modules/resolve": {
    +      "version": "1.1.7",
    +      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
    +      "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
    +      "dev": true
    +    },
    +    "node_modules/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,
    +      "optional": true,
    +      "dependencies": {
    +        "align-text": "^0.1.1"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/rimraf": {
    +      "version": "2.6.2",
    +      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
    +      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
    +      "dev": true,
    +      "dependencies": {
    +        "glob": "^7.0.5"
    +      },
    +      "bin": {
    +        "rimraf": "bin.js"
    +      }
    +    },
    +    "node_modules/rimraf/node_modules/glob": {
    +      "version": "7.1.2",
    +      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
    +      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
    +      "dev": true,
    +      "dependencies": {
    +        "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"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/rimraf/node_modules/minimatch": {
    +      "version": "3.0.4",
    +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    +      "dev": true,
    +      "dependencies": {
    +        "brace-expansion": "^1.1.7"
    +      },
    +      "engines": {
    +        "node": "*"
    +      }
    +    },
    +    "node_modules/rocambole": {
    +      "version": "0.7.0",
    +      "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.7.0.tgz",
    +      "integrity": "sha1-9seVBVF9xCtvuECEK4uVOw+WhYU=",
    +      "dev": true,
    +      "dependencies": {
    +        "esprima": "^2.1"
    +      }
    +    },
    +    "node_modules/rocambole/node_modules/esprima": {
    +      "version": "2.7.3",
    +      "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
    +      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
    +      "dev": true,
    +      "bin": {
    +        "esparse": "bin/esparse.js",
    +        "esvalidate": "bin/esvalidate.js"
    +      },
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/set-blocking": {
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
    +      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
    +      "dev": true
    +    },
    +    "node_modules/shelljs": {
    +      "version": "0.3.0",
    +      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
    +      "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
    +      "dev": true,
    +      "bin": {
    +        "shjs": "bin/shjs"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      }
    +    },
    +    "node_modules/showdown": {
    +      "version": "1.9.1",
    +      "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz",
    +      "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==",
    +      "dev": true,
    +      "dependencies": {
    +        "yargs": "^14.2"
    +      },
    +      "bin": {
    +        "showdown": "bin/showdown.js"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/ansi-regex": {
    +      "version": "4.1.0",
    +      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
    +      "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/camelcase": {
    +      "version": "5.3.1",
    +      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
    +      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/cliui": {
    +      "version": "5.0.0",
    +      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
    +      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
    +      "dev": true,
    +      "dependencies": {
    +        "string-width": "^3.1.0",
    +        "strip-ansi": "^5.2.0",
    +        "wrap-ansi": "^5.1.0"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/find-up": {
    +      "version": "3.0.0",
    +      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
    +      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
    +      "dev": true,
    +      "dependencies": {
    +        "locate-path": "^3.0.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/get-caller-file": {
    +      "version": "2.0.5",
    +      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
    +      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
    +      "dev": true,
    +      "engines": {
    +        "node": "6.* || 8.* || >= 10.*"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/is-fullwidth-code-point": {
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    +      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=4"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/locate-path": {
    +      "version": "3.0.0",
    +      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
    +      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
    +      "dev": true,
    +      "dependencies": {
    +        "p-locate": "^3.0.0",
    +        "path-exists": "^3.0.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/p-limit": {
    +      "version": "2.3.0",
    +      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
    +      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
    +      "dev": true,
    +      "dependencies": {
    +        "p-try": "^2.0.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      },
    +      "funding": {
    +        "url": "https://github.com/sponsors/sindresorhus"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/p-locate": {
    +      "version": "3.0.0",
    +      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
    +      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
    +      "dev": true,
    +      "dependencies": {
    +        "p-limit": "^2.0.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/require-main-filename": {
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
    +      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
    +      "dev": true
    +    },
    +    "node_modules/showdown/node_modules/string-width": {
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
    +      "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
    +      "dev": true,
    +      "dependencies": {
    +        "emoji-regex": "^7.0.1",
    +        "is-fullwidth-code-point": "^2.0.0",
    +        "strip-ansi": "^5.1.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/strip-ansi": {
    +      "version": "5.2.0",
    +      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
    +      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
    +      "dev": true,
    +      "dependencies": {
    +        "ansi-regex": "^4.1.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/wrap-ansi": {
    +      "version": "5.1.0",
    +      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
    +      "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
    +      "dev": true,
    +      "dependencies": {
    +        "ansi-styles": "^3.2.0",
    +        "string-width": "^3.0.0",
    +        "strip-ansi": "^5.0.0"
    +      },
    +      "engines": {
    +        "node": ">=6"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/y18n": {
    +      "version": "4.0.3",
    +      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
    +      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
    +      "dev": true
    +    },
    +    "node_modules/showdown/node_modules/yargs": {
    +      "version": "14.2.3",
    +      "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
    +      "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
    +      "dev": true,
    +      "dependencies": {
    +        "cliui": "^5.0.0",
    +        "decamelize": "^1.2.0",
    +        "find-up": "^3.0.0",
    +        "get-caller-file": "^2.0.1",
    +        "require-directory": "^2.1.1",
    +        "require-main-filename": "^2.0.0",
    +        "set-blocking": "^2.0.0",
    +        "string-width": "^3.0.0",
    +        "which-module": "^2.0.0",
    +        "y18n": "^4.0.0",
    +        "yargs-parser": "^15.0.1"
    +      }
    +    },
    +    "node_modules/showdown/node_modules/yargs-parser": {
    +      "version": "15.0.3",
    +      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz",
    +      "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==",
    +      "dev": true,
    +      "dependencies": {
    +        "camelcase": "^5.0.0",
    +        "decamelize": "^1.2.0"
    +      }
    +    },
    +    "node_modules/sigmund": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
    +      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
    +      "dev": true
    +    },
    +    "node_modules/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,
    +      "engines": {
    +        "node": ">=0.10.0"
    +      }
    +    },
    +    "node_modules/sprintf-js": {
    +      "version": "1.0.3",
    +      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
    +      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
    +      "dev": true
    +    },
    +    "node_modules/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
    +    },
    +    "node_modules/strip-json-comments": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
    +      "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
    +      "dev": true,
    +      "bin": {
    +        "strip-json-comments": "cli.js"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      }
    +    },
    +    "node_modules/supports-color": {
    +      "version": "3.2.3",
    +      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
    +      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
    +      "dev": true,
    +      "dependencies": {
    +        "has-flag": "^1.0.0"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      }
    +    },
    +    "node_modules/type-check": {
    +      "version": "0.3.2",
    +      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
    +      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
    +      "dev": true,
    +      "dependencies": {
    +        "prelude-ls": "~1.1.2"
    +      },
    +      "engines": {
    +        "node": ">= 0.8.0"
    +      }
    +    },
    +    "node_modules/uglify-js": {
    +      "version": "3.13.5",
    +      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz",
    +      "integrity": "sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==",
    +      "dev": true,
    +      "optional": true,
    +      "bin": {
    +        "uglifyjs": "bin/uglifyjs"
    +      },
    +      "engines": {
    +        "node": ">=0.8.0"
    +      }
    +    },
    +    "node_modules/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,
    +      "optional": true
    +    },
    +    "node_modules/underscore": {
    +      "version": "1.13.1",
    +      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
    +      "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
    +      "dev": true
    +    },
    +    "node_modules/walkdir": {
    +      "version": "0.0.12",
    +      "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.12.tgz",
    +      "integrity": "sha512-HFhaD4mMWPzFSqhpyDG48KDdrjfn409YQuVW7ckZYhW4sE87mYtWifdB/+73RA7+p4s4K18n5Jfx1kHthE1gBw==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.6.0"
    +      }
    +    },
    +    "node_modules/which": {
    +      "version": "1.3.0",
    +      "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
    +      "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
    +      "dev": true,
    +      "dependencies": {
    +        "isexe": "^2.0.0"
    +      },
    +      "bin": {
    +        "which": "bin/which"
    +      }
    +    },
    +    "node_modules/which-module": {
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
    +      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
    +      "dev": true
    +    },
    +    "node_modules/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,
    +      "optional": true,
    +      "engines": {
    +        "node": ">= 0.8.0"
    +      }
    +    },
    +    "node_modules/wordwrap": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
    +      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
    +      "dev": true
    +    },
    +    "node_modules/wrappy": {
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
    +      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
    +      "dev": true
    +    },
    +    "node_modules/wrench": {
    +      "version": "1.5.9",
    +      "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.5.9.tgz",
    +      "integrity": "sha1-QRaRxjqbJTGxcAJnJ5veyiOyFCo=",
    +      "deprecated": "wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years.",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=0.1.97"
    +      }
    +    }
    +  },
       "dependencies": {
         "abbrev": {
           "version": "1.0.9",
    
  • src/object/set.js+4 3 modified
    @@ -4,15 +4,16 @@ define(['./namespace'], function (namespace) {
          * set "nested" object property
          */
         function set(obj, prop, val){
    +        var stringifiedProp = prop.toString();
             // prototype pollution mitigation
    -        if(prop.includes('__proto__') || prop.includes('prototype') || prop.includes('constructor')) {
    +        if(stringifiedProp.includes('__proto__') || stringifiedProp.includes('prototype') || stringifiedProp.includes('constructor')) {
                 return false;
             }
    -        var parts = (/^(.+)\.(.+)$/).exec(prop);
    +        var parts = (/^(.+)\.(.+)$/).exec(stringifiedProp);
             if (parts){
                 namespace(obj, parts[1])[parts[2]] = val;
             } else {
    -            obj[prop] = val;
    +            obj[stringifiedProp] = val;
             }
         }
     
    
  • tests/spec/object/spec-set.js+7 0 modified
    @@ -31,6 +31,13 @@ define(
                     expect( o.foo ).toEqual( 'bar' );
                 });
     
    +            it('should be safe from prototype pollution', function () {
    +                var o = {};
    +                var payload = JSON.parse('["constructor.prototype.polluted"]');
    +                set(o, payload, 'bar');
    +                expect( o.polluted ).toEqual( undefined );
    +            });
    +
             });
     
         }
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

9

News mentions

0

No linked articles in our index yet.