mediawiki/services/wikifeeds (main)

sourcepatches
$ date
--- stdout ---
Thu Apr 18 12:19:29 UTC 2024

--- end ---
$ git clone file:///srv/git/mediawiki-services-wikifeeds.git repo --depth=1 -b master
--- stderr ---
Cloning into 'repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
11c275768bafb5d1bcafd29839d7bb8b99ae1886 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "express": {
      "name": "express",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        {
          "source": 1096820,
          "name": "express",
          "dependency": "express",
          "title": "Express.js Open Redirect in malformed URLs",
          "url": "https://github.com/advisories/GHSA-rv95-896h-c2vc",
          "severity": "moderate",
          "cwe": [
            "CWE-601",
            "CWE-1286"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<4.19.2"
        }
      ],
      "effects": [],
      "range": "<4.19.2",
      "nodes": [
        "node_modules/express"
      ],
      "fixAvailable": true
    },
    "follow-redirects": {
      "name": "follow-redirects",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096856,
          "name": "follow-redirects",
          "dependency": "follow-redirects",
          "title": "follow-redirects' Proxy-Authorization header kept across hosts",
          "url": "https://github.com/advisories/GHSA-cxjh-pqwp-8mfp",
          "severity": "moderate",
          "cwe": [
            "CWE-200"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N"
          },
          "range": "<=1.15.5"
        }
      ],
      "effects": [],
      "range": "<=1.15.5",
      "nodes": [
        "node_modules/follow-redirects"
      ],
      "fixAvailable": true
    },
    "limitation": {
      "name": "limitation",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "wikimedia-kad-fork"
      ],
      "effects": [
        "service-runner"
      ],
      "range": ">=0.2.3",
      "nodes": [
        "node_modules/limitation"
      ],
      "fixAvailable": {
        "name": "service-runner",
        "version": "5.0.0",
        "isSemVerMajor": true
      }
    },
    "ms": {
      "name": "ms",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1094419,
          "name": "ms",
          "dependency": "ms",
          "title": "Vercel ms Inefficient Regular Expression Complexity vulnerability",
          "url": "https://github.com/advisories/GHSA-w9mr-4mfr-499f",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<2.0.0"
        }
      ],
      "effects": [
        "wikimedia-kad-fork"
      ],
      "range": "<2.0.0",
      "nodes": [
        "node_modules/wikimedia-kad-fork/node_modules/ms"
      ],
      "fixAvailable": {
        "name": "service-runner",
        "version": "5.0.0",
        "isSemVerMajor": true
      }
    },
    "preq": {
      "name": "preq",
      "severity": "high",
      "isDirect": true,
      "via": [
        "request",
        "requestretry"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/preq"
      ],
      "fixAvailable": false
    },
    "request": {
      "name": "request",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "tough-cookie"
      ],
      "effects": [
        "preq",
        "requestretry"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": false
    },
    "requestretry": {
      "name": "requestretry",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1090420,
          "name": "requestretry",
          "dependency": "requestretry",
          "title": "Cookie exposure in requestretry",
          "url": "https://github.com/advisories/GHSA-hjp8-2cm3-cc45",
          "severity": "high",
          "cwe": [
            "CWE-200"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
          },
          "range": "<7.0.0"
        },
        "request"
      ],
      "effects": [
        "preq"
      ],
      "range": "*",
      "nodes": [
        "node_modules/requestretry"
      ],
      "fixAvailable": false
    },
    "service-runner": {
      "name": "service-runner",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "limitation",
        "tar"
      ],
      "effects": [],
      "range": ">=3.0.0",
      "nodes": [
        "node_modules/service-runner"
      ],
      "fixAvailable": {
        "name": "service-runner",
        "version": "5.0.0",
        "isSemVerMajor": true
      }
    },
    "tar": {
      "name": "tar",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096915,
          "name": "tar",
          "dependency": "tar",
          "title": "Denial of service while parsing a tar file due to lack of folders count validation",
          "url": "https://github.com/advisories/GHSA-f5x3-32g6-xq36",
          "severity": "moderate",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
          },
          "range": "<6.2.1"
        }
      ],
      "effects": [
        "service-runner"
      ],
      "range": "<6.2.1",
      "nodes": [
        "node_modules/tar"
      ],
      "fixAvailable": {
        "name": "service-runner",
        "version": "5.0.0",
        "isSemVerMajor": true
      }
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096643,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/tough-cookie"
      ],
      "fixAvailable": false
    },
    "wikimedia-kad-fork": {
      "name": "wikimedia-kad-fork",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "ms"
      ],
      "effects": [
        "limitation"
      ],
      "range": "*",
      "nodes": [
        "node_modules/wikimedia-kad-fork"
      ],
      "fixAvailable": {
        "name": "service-runner",
        "version": "5.0.0",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 9,
      "high": 2,
      "critical": 0,
      "total": 11
    },
    "dependencies": {
      "prod": 213,
      "dev": 429,
      "optional": 13,
      "peer": 1,
      "peerOptional": 0,
      "total": 653
    }
  }
}

--- end ---
$ /usr/bin/npm install
--- stderr ---
npm WARN deprecated kad-fs@0.0.4: This package is no longer maintained.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated kad-memstore@0.0.1: This package is no longer maintained.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
--- stdout ---

added 640 packages, and audited 641 packages in 14s

89 packages are looking for funding
  run `npm fund` for details

9 vulnerabilities (7 moderate, 2 high)

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
Upgrading n:eslint-config-wikimedia from 0.26.0 -> 0.27.0
$ /usr/bin/npm install
--- stdout ---

added 3 packages, removed 4 packages, changed 11 packages, and audited 640 packages in 2s

89 packages are looking for funding
  run `npm fund` for details

9 vulnerabilities (7 moderate, 2 high)

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ ./node_modules/.bin/eslint . --fix
--- stdout ---

/src/repo/.eslintrc.json
  1:1  warning  Use the global form of 'use strict'  strict

/src/repo/app.js
   20:1   warning  The type 'bluebird' is undefined                  jsdoc/no-undefined-types
   64:37  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  138:1   warning  The type 'Application' is undefined               jsdoc/no-undefined-types
  140:1   warning  The type 'bluebird' is undefined                  jsdoc/no-undefined-types
  153:31  warning  Found non-literal argument in require             security/detect-non-literal-require
  201:1   warning  The type 'Application' is undefined               jsdoc/no-undefined-types
  202:1   warning  The type 'bluebird' is undefined                  jsdoc/no-undefined-types
  240:1   warning  The type 'bluebird' is undefined                  jsdoc/no-undefined-types

/src/repo/config.prod.yaml
  87:10  error  Irregular whitespace not allowed  yml/no-irregular-whitespace

/src/repo/etc/news-sites.js
   4:1  warning  At most one access-control tag may be present on a jsdoc block  jsdoc/check-access
   5:1  warning  @private should not have a bracketed type in "jsdoc" mode       jsdoc/valid-types
   6:1  warning  @private should not have a bracketed type in "jsdoc" mode       jsdoc/valid-types
  50:1  warning  Syntax error in type: {Object.<string, NewsSite>}               jsdoc/valid-types

/src/repo/lib/announcements.js
  94:1  warning  This line has a length of 118. Maximum allowed is 100  max-len

/src/repo/lib/api-util.js
  300:1  warning  The type 'Application' is undefined  jsdoc/no-undefined-types

/src/repo/lib/featured.js
  138:12  warning  'si' is already declared in the upper scope on line 12 column 7  no-shadow

/src/repo/lib/imageinfo.js
   30:1   warning  The type 'Bool' is undefined                                                       jsdoc/no-undefined-types
   85:1   warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check
  132:1   warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check
  203:43  warning  Array.prototype.map() expects a return value from arrow function                   array-callback-return
  280:1   warning  Syntax error in type: [type]                                                       jsdoc/valid-types
  282:1   warning  Syntax error in type: [type]                                                       jsdoc/valid-types

/src/repo/lib/most-read.js
   79:1   warning  At most one access-control tag may be present on a jsdoc block          jsdoc/check-access
   80:1   warning  @public should not have a bracketed type in "jsdoc" mode                jsdoc/valid-types
   81:1   warning  @public should not have a bracketed type in "jsdoc" mode                jsdoc/valid-types
  115:28  warning  Found non-literal argument to RegExp Constructor                        security/detect-non-literal-regexp
  147:19  warning  'pageviews' is already declared in the upper scope on line 10 column 7  no-shadow
  163:25  warning  Array.prototype.map() expects a return value from arrow function        array-callback-return
  212:1   warning  This line has a length of 113. Maximum allowed is 100                   max-len

/src/repo/lib/news.js
  15:1   warning  The type 'Document' is undefined                                      jsdoc/no-undefined-types
  73:12  warning  'si' is already declared in the upper scope on line 8 column 7        no-shadow
  97:20  warning  'result' is already declared in the upper scope on line 81 column 19  no-shadow

/src/repo/lib/on-this-day.js
   34:1   warning  The type 'Integer' is undefined                   jsdoc/no-undefined-types
  122:1   warning  The type 'AnchorElement' is undefined             jsdoc/no-undefined-types
  123:1   warning  The type 'Integer' is undefined                   jsdoc/no-undefined-types
  128:12  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  141:1   warning  The type 'AnchorElement' is undefined             jsdoc/no-undefined-types
  161:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  173:1   warning  The type 'AnchorElement' is undefined             jsdoc/no-undefined-types
  196:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  243:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  259:1   warning  The type 'Integer' is undefined                   jsdoc/no-undefined-types
  298:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  309:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  310:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  331:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  349:1   warning  The type 'ListElement' is undefined               jsdoc/no-undefined-types
  369:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  401:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  415:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  429:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  443:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  457:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  472:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  473:1   warning  The type 'Document' is undefined                  jsdoc/no-undefined-types
  532:1   warning  Missing JSDoc @param "sendResponse" type          jsdoc/require-param-type

/src/repo/lib/on-this-day.languages.js
   29:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
   31:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
   33:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
   62:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
   64:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
   66:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  102:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  104:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  106:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  130:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  132:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  134:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  159:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  161:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  163:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  193:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  195:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  197:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  222:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  224:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  226:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  251:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  253:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  255:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  280:13  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  282:13  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  284:13  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  309:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  311:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  313:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  344:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  346:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  348:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  372:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  374:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  376:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  401:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  403:11  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp

/src/repo/lib/pageviews.js
  36:1  warning  At most one access-control tag may be present on a jsdoc block  jsdoc/check-access
  37:1  warning  @private should not have a bracketed type in "jsdoc" mode       jsdoc/valid-types
  38:1  warning  @private should not have a bracketed type in "jsdoc" mode       jsdoc/valid-types
  39:1  warning  @private should not have a bracketed type in "jsdoc" mode       jsdoc/valid-types
  53:1  warning  The type 'Platform' is undefined                                jsdoc/no-undefined-types
  54:1  warning  The type 'Agent' is undefined                                   jsdoc/no-undefined-types
  56:1  warning  The type 'Granularity' is undefined                             jsdoc/no-undefined-types
  71:1  warning  The type 'Platform' is undefined                                jsdoc/no-undefined-types

/src/repo/lib/random.js
  38:9  warning  'score' is already declared in the upper scope on line 31 column 10  no-shadow
  55:1  warning  Missing JSDoc @param "scoredResults" type                            jsdoc/require-param-type

/src/repo/lib/siteinfo.js
   3:1   warning  Use the global form of 'use strict'  strict
  12:29  warning  Unsafe Regular Expression            security/detect-unsafe-regex

/src/repo/lib/util.js
  104:1   warning  The type 'Application' is undefined                                                jsdoc/no-undefined-types
  142:1   warning  The type 'Application' is undefined                                                jsdoc/no-undefined-types
  222:1   warning  The type 'Router' is undefined                                                     jsdoc/no-undefined-types
  280:1   warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check
  293:1   warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check
  306:1   warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check
  379:1   warning  The type 'Application' is undefined                                                jsdoc/no-undefined-types
  451:34  warning  Default parameters should be last                                                  default-param-last

/src/repo/package-lock.json
  1:1  warning  Use the global form of 'use strict'  strict

/src/repo/package.json
  1:1  warning  Use the global form of 'use strict'  strict

/src/repo/scripts/check-featured-feed.js
   49:35  warning  'feature' is already declared in the upper scope on line 212 column 7  no-shadow
   82:44  warning  'feature' is already declared in the upper scope on line 212 column 7  no-shadow
  107:34  warning  'feature' is already declared in the upper scope on line 212 column 7  no-shadow
  150:30  warning  'feature' is already declared in the upper scope on line 212 column 7  no-shadow
  217:5   warning  Don't use process.exit(); throw an error instead                       n/no-process-exit

/src/repo/spec.yaml
   228:1  warning  This line has a length of 154. Maximum allowed is 100  max-len
   232:1  warning  This line has a length of 141. Maximum allowed is 100  max-len
   866:1  warning  This line has a length of 117. Maximum allowed is 100  max-len
   871:1  warning  This line has a length of 116. Maximum allowed is 100  max-len
   876:1  warning  This line has a length of 116. Maximum allowed is 100  max-len
   881:1  warning  This line has a length of 116. Maximum allowed is 100  max-len
   886:1  warning  This line has a length of 116. Maximum allowed is 100  max-len
   938:1  warning  This line has a length of 108. Maximum allowed is 100  max-len
   955:1  warning  This line has a length of 126. Maximum allowed is 100  max-len
   956:1  warning  This line has a length of 107. Maximum allowed is 100  max-len
   962:1  warning  This line has a length of 132. Maximum allowed is 100  max-len
   969:1  warning  This line has a length of 127. Maximum allowed is 100  max-len
   971:1  warning  This line has a length of 108. Maximum allowed is 100  max-len
   972:1  warning  This line has a length of 113. Maximum allowed is 100  max-len
   973:1  warning  This line has a length of 121. Maximum allowed is 100  max-len
   977:1  warning  This line has a length of 121. Maximum allowed is 100  max-len
   981:1  warning  This line has a length of 113. Maximum allowed is 100  max-len
   985:1  warning  This line has a length of 111. Maximum allowed is 100  max-len
   991:1  warning  This line has a length of 124. Maximum allowed is 100  max-len
   995:1  warning  This line has a length of 281. Maximum allowed is 100  max-len
  1082:1  warning  This line has a length of 144. Maximum allowed is 100  max-len

✖ 143 problems (1 error, 142 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":1,"column":1,"nodeType":"Program","messageId":"global","endLine":38,"endColumn":3}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n\t\"root\": true,\n\t\"extends\": [\n\t\t\"wikimedia/server\",\n\t\t\"wikimedia/jsdoc\"\n\t],\n\t\"rules\": {\n\t\t\"camelcase\": [\n\t\t\t\"error\",\n\t\t\t{\n\t\t\t\t\"properties\": \"never\"\n\t\t\t}\n\t\t],\n\t\t\"indent\": [\n\t\t\t\"off\",\n\t\t\t4\n\t\t],\n\t\t\"no-unused-vars\": [\n\t\t\t\"error\",\n\t\t\t{\n\t\t\t\t\"args\": \"none\"\n\t\t\t}\n\t\t],\n\t\t\"space-in-parens\": [\n\t\t\t\"error\",\n\t\t\t\"never\"\n\t\t],\n\t\t\"computed-property-spacing\": \"off\",\n\t\t\"no-multi-spaces\": \"off\",\n\t\t\"array-bracket-spacing\": \"off\",\n\t\t\"array-callback-return\": \"warn\",\n\t\t\"default-param-last\": \"warn\",\n\t\t\"n/no-process-exit\": \"warn\",\n\t\t\"no-shadow\": \"warn\",\n\t\t\"strict\": \"warn\"\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/app.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":20,"column":1,"nodeType":"Block","endLine":20,"endColumn":1},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":64,"column":37,"nodeType":"NewExpression","endLine":66,"endColumn":28},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":138,"column":1,"nodeType":"Block","endLine":138,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":140,"column":1,"nodeType":"Block","endLine":140,"endColumn":1},{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":153,"column":31,"nodeType":"CallExpression","endLine":153,"endColumn":61},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":201,"column":1,"nodeType":"Block","endLine":201,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":202,"column":1,"nodeType":"Block","endLine":202,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'bluebird' is undefined.","line":240,"column":1,"nodeType":"Block","endLine":240,"endColumn":1}],"suppressedMessages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":37,"column":1,"nodeType":"Program","messageId":"max","endLine":37,"endColumn":108,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst http = require('http');\nconst BBPromise = require('bluebird');\nconst express = require('express');\nconst compression = require('compression');\nconst bodyParser = require('body-parser');\nconst fs = BBPromise.promisifyAll(require('fs'));\nconst sUtil = require('./lib/util');\nconst apiUtil = require('./lib/api-util');\nconst packageInfo = require('./package.json');\nconst yaml = require('js-yaml');\nconst addShutdown = require('http-shutdown');\nconst path = require('path');\n\n/**\n * Creates an express app and initialises it\n *\n * @param {Object} options the options to initialise the app with\n * @return {bluebird} the promise resolving to the app object\n */\nfunction initApp(options) {\n\n    // the main application object\n    const app = express();\n\n    // get the options and make them available in the app\n    app.logger = options.logger;    // the logging device\n    app.metrics = options.metrics;  // the metrics\n    app.conf = options.config;      // this app's config options\n    app.info = packageInfo;         // this app's package info\n\n    // ensure some sane defaults\n    app.conf.port = app.conf.port || 8888;\n    app.conf.interface = app.conf.interface || '0.0.0.0';\n    // eslint-disable-next-line max-len\n    app.conf.compression_level = app.conf.compression_level === undefined ? 3 : app.conf.compression_level;\n    app.conf.cors = app.conf.cors === undefined ? '*' : app.conf.cors;\n    if (app.conf.csp === undefined) {\n        app.conf.csp = \"default-src 'self'; object-src 'none'; media-src *; img-src *; style-src *; frame-ancestors 'self'\";\n    }\n\n    // set outgoing proxy\n    if (app.conf.proxy) {\n        process.env.HTTP_PROXY = app.conf.proxy;\n        // if there is a list of domains which should\n        // not be proxied, set it\n        if (app.conf.no_proxy_list) {\n            if (Array.isArray(app.conf.no_proxy_list)) {\n                process.env.NO_PROXY = app.conf.no_proxy_list.join(',');\n            } else {\n                process.env.NO_PROXY = app.conf.no_proxy_list;\n            }\n        }\n    }\n\n    // set up header allow listing for logging\n    if (!app.conf.log_header_allowlist) {\n        app.conf.log_header_allowlist = [\n            'cache-control', 'content-type', 'content-length', 'if-match',\n            'user-agent', 'x-request-id'\n        ];\n    }\n    app.conf.log_header_allowlist = new RegExp(`^(?:${ app.conf.log_header_allowlist.map((item) => {\n        return item.trim();\n    }).join('|') })$`, 'i');\n\n    // set up the request templates for the APIs\n    apiUtil.setupApiTemplates(app);\n\n    // set up the spec\n    if (!app.conf.spec) {\n        app.conf.spec = `${ __dirname }/spec.yaml`;\n    }\n    if (app.conf.spec.constructor !== Object) {\n        try {\n            app.conf.spec = yaml.load(fs.readFileSync(app.conf.spec));\n        } catch (e) {\n            app.logger.log('warn/spec', `Could not load the spec: ${ e }`);\n            app.conf.spec = {};\n        }\n    }\n    if (!app.conf.spec.swagger) {\n        app.conf.spec.swagger = '2.0';\n    }\n    if (!app.conf.spec.info) {\n        app.conf.spec.info = {\n            version: app.info.version,\n            title: app.info.name,\n            description: app.info.description\n        };\n    }\n    app.conf.spec.info.version = app.info.version;\n    if (!app.conf.spec.paths) {\n        app.conf.spec.paths = {};\n    }\n\n    // set the CORS and CSP headers\n    app.all('*', (req, res, next) => {\n        if (app.conf.cors !== false) {\n            res.header('access-control-allow-origin', app.conf.cors);\n            res.header('access-control-allow-headers', 'accept, x-requested-with, content-type');\n            res.header('access-control-expose-headers', 'etag');\n        }\n        if (app.conf.csp !== false) {\n            res.header('x-xss-protection', '1; mode=block');\n            res.header('x-content-type-options', 'nosniff');\n            res.header('x-frame-options', 'SAMEORIGIN');\n            res.header('content-security-policy', app.conf.csp);\n            res.header('x-content-security-policy', app.conf.csp);\n            res.header('x-webkit-csp', app.conf.csp);\n        }\n        sUtil.initAndLogRequest(req, app);\n        next();\n    });\n\n    // set up the user agent header string to use for requests\n    app.conf.user_agent = app.conf.user_agent || app.info.name;\n\n    // disable the X-Powered-By header\n    app.set('x-powered-by', false);\n    // disable the ETag header - users should provide them!\n    app.set('etag', false);\n    // enable compression\n    app.use(compression({ level: app.conf.compression_level }));\n    // use the JSON body parser\n    app.use(bodyParser.json({ limit: app.conf.max_body_size || '100kb' }));\n    // use the application/x-www-form-urlencoded parser\n    app.use(bodyParser.urlencoded({ extended: true }));\n\n    return BBPromise.resolve(app);\n\n}\n\n/**\n * Loads all routes declared in routes/ into the app\n *\n * @param {Application} app the application object to load routes into\n * @param {string} dir routes folder\n * @return {bluebird} a promise resolving to the app object\n */\nfunction loadRoutes(app, dir) {\n\n    // recursively load routes from .js files under routes/\n    return fs.readdirAsync(dir).map((fname) => {\n        return BBPromise.try(() => {\n            const resolvedPath = path.resolve(dir, fname);\n            const isDirectory = fs.statSync(resolvedPath).isDirectory();\n            if (isDirectory) {\n                loadRoutes(app, resolvedPath);\n            } else if (/\\.js$/.test(fname)) {\n                // import the route file\n                const route = require(`${ dir }/${ fname }`);\n                return route(app);\n            }\n        }).then((route) => {\n            if (route === undefined) {\n                return undefined;\n            }\n            // check that the route exports the object we need\n            if (route.constructor !== Object || !route.path || !route.router ||\n                !(route.api_version || route.skip_domain)) {\n                throw new TypeError(`routes/${ fname } does not export the correct object!`);\n            }\n            // normalise the path to be used as the mount point\n            if (route.path[0] !== '/') {\n                route.path = `/${ route.path }`;\n            }\n            if (route.path[route.path.length - 1] !== '/') {\n                route.path = `${ route.path }/`;\n            }\n            if (!route.skip_domain) {\n                route.path = `/:domain/v${ route.api_version }${ route.path }`;\n            }\n            // wrap the route handlers with Promise.try() blocks\n            sUtil.wrapRouteHandlers(route, app);\n            // all good, use that route\n\n            // HACK: return 404 for yue.wikipedia.org domain\n            app.use((req, res, next) => {\n                if (req.url.startsWith('/yue.wikipedia.org/')) {\n                    res.status(404).end('Domain not found');\n                    return;\n                }\n                next();\n            });\n            app.use(route.path, route.router);\n        });\n    }).then(() => {\n        // catch errors\n        sUtil.setErrorHandler(app);\n        // route loading is now complete, return the app object\n        return BBPromise.resolve(app);\n    });\n\n}\n\n/**\n * Creates and start the service's web server\n *\n * @param {Application} app the app object to use in the service\n * @return {bluebird} a promise creating the web server\n */\nfunction createServer(app) {\n\n    // return a promise which creates an HTTP server,\n    // attaches the app to it, and starts accepting\n    // incoming client requests\n    let server;\n    return new BBPromise((resolve) => {\n        server = http.createServer(app).listen(\n            app.conf.port,\n            app.conf.interface,\n            resolve\n        );\n        server = addShutdown(server);\n    }).then(() => {\n        app.logger.log('info',\n            `Worker ${ process.pid } listening on ${ app.conf.interface || '*' }:${ app.conf.port }`);\n\n        // Don't delay incomplete packets for 40ms (Linux default) on\n        // pipelined HTTP sockets. We write in large chunks or buffers, so\n        // lack of coalescing should not be an issue here.\n        server.on('connection', (socket) => {\n            socket.setNoDelay(true);\n        });\n\n        return server;\n    });\n\n}\n\n/**\n * The service's entry point. It takes over the configuration\n * options and the logger- and metrics-reporting objects from\n * service-runner and starts an HTTP server, attaching the application\n * object to it.\n *\n * @param {Object} options the options to initialise the app with\n * @return {bluebird} HTTP server\n */\nmodule.exports = (options) => {\n\n    return initApp(options)\n    .then((app) => loadRoutes(app, `${ __dirname }/routes`))\n    .then((app) => {\n        // serve static files from static/\n        app.use('/static', express.static(`${ __dirname }/static`));\n        return app;\n    }).then(createServer);\n\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/config.dev.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/config.prod.yaml","messages":[{"ruleId":"yml/no-irregular-whitespace","severity":2,"message":"Irregular whitespace not allowed.","line":87,"column":10,"nodeType":null,"messageId":"disallow"}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"# Number of worker processes to spawn.\n# Set to 0 to run everything in a single process without clustering.\n# Use 'ncpu' to run as many workers as there are CPU units\nnum_workers: ncpu\n\n# Log error messages and gracefully restart a worker if v8 reports that it\n# uses more heap (note: not RSS) than this many mb.\nworker_heap_limit_mb: 500\n\n# Logger info\nlogging:\n  level: warn\n  streams:\n    # Use gelf-stream -> logstash\n    - type: gelf\n      host: logstash1003.eqiad.wmnet\n      port: 12201\n\n# Statsd metrics reporter\nmetrics:\n  type: statsd\n  host: statsd.eqiad.wmnet\n  port: 8125\n\nservices:\n  - name: wikifeeds\n    # a relative path or the name of an npm package, if different from name\n    module: ./app.js\n    # optionally, a version constraint of the npm package\n    # version: ^0.4.0\n    # per-service config\n    conf:\n      port: 8889\n      # interface: localhost # uncomment to only listen on localhost\n      # more per-service config settings\n      # the location of the spec, defaults to spec.yaml if not specified\n      # spec: ./spec.template.yaml\n      # allow cross-domain requests to the API (default '*')\n      cors: \"*\"\n      # to disable use:\n      # cors: false\n      # to restrict to a particular domain, use:\n      # cors: restricted.domain.org\n      # content for the CSP headers\n      # csp: false  # uncomment this line to disable sending them\n      # URL of the outbound proxy to use (complete with protocol)\n      # proxy: http://my.proxy.org:8080\n      # the list of domains for which not to use the proxy defined above\n      # no_proxy_list:\n      #   - domain1.com\n      #   - domain2.org\n      # the list of incoming request headers that can be logged; if left empty,\n      # the following headers are allowed: cache-control, content-length,\n      # content-type, if-match, user-agent, x-request-id\n      # log_header_allowlist:\n      #   - cache-control\n      #   - content-length\n      #   - content-type\n      #   - if-match\n      #   - user-agent\n      #   - x-request-id\n      # the user agent to use when issuing requests\n      # user_agent: service-template-node\n      # Max JSON POST body size limit.\n      # max_body_size: 100kb\n      # the template used for contacting the MW API\n      mwapi_req:\n        method: post\n        uri: http://api-rw.discovery.wmnet/w/api.php\n        headers:\n          host: \"{{request.params.domain}}\"\n          user-agent: \"{{user-agent}}\"\n          accept-language: \"{{accept-language}}\"\n        body: \"{{ default(request.query, {}) }}\"\n      # the template used for contacting RESTBase\n      restbase_req:\n        method: \"{{request.method}}\"\n        uri: http://restbase.discovery.wmnet/{{domain}}/v1/{+path}\n        query: \"{{ default(request.query, {}) }}\"\n        headers: \"{{request.headers}}\"\n        body: \"{{request.body}}\"\n\n      # the template used for contacting the REST Gateway\n      rest_gateway_req:\n        method: \"{{request.method}}\"\n\n        # Per https://gerrit.wikimedia.org/r/plugins/gitiles/operations/deployment-charts/+/refs/heads/master/helmfile.d/services/rest-gateway/values.yaml#57\n        uri: https://rest-gateway.discovery.wmnet:4113/{{domain}}/v1/{+path}\n\n        query: \"{{ default(request.query, {}) }}\"\n        headers: \"{{request.headers}}\"\n        body: \"{{request.body}}\"\n\n      # the template used for requesting a page from a MediaWiki appserver\n      mw_req:\n        method: get\n        uri: http://appservers-rw.discovery.wmnet/w/index.php\n        query:\n          title: \"{{request.params.title}}\"\n        headers:\n          host: \"{{request.params.domain}}\"\n          user-agent: \"{{user-agent}}\"\n          accept-language: \"{{accept-language}}\"\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/config.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/dist/config.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/etc/announcements.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/etc/news-sites.js","messages":[{"ruleId":"jsdoc/check-access","severity":1,"message":"At most one access-control tag may be present on a jsdoc block.","line":4,"column":1,"nodeType":"Block","endLine":7,"endColumn":4},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: {Object.<string, NewsSite>}","line":50,"column":1,"nodeType":"Block","endLine":50,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint no-underscore-dangle: 0 */\n'use strict';\n\n/**\n * @private {!string} _title\n * @private {!string} _headlineSelector\n */\nclass NewsSite {\n    /**\n     * @param {!string} title\n     * @param {!string} headlineSelectorAll\n     * @param {!string} topicAnchorSelector\n     */\n    constructor(title, headlineSelectorAll, topicAnchorSelector) {\n        this._title = title;\n        this._headlineSelectorAll = headlineSelectorAll;\n        this._topicAnchorSelector = topicAnchorSelector;\n    }\n\n    /**\n     * @return {!string} News source wiki portal or template title to scrape\n     *                   data from\n     */\n    get title() {\n        return this._title;\n    }\n\n    /**\n     * @return {!string} Query selector for news headline containers (not\n     *                   specific categories like deaths, sports, etc)\n     */\n    get headlineSelectorAll() {\n        return this._headlineSelectorAll;\n    }\n\n    /**\n     * @return {!string} Query selector for news headline subject links; this\n     *                   selector should be used on a headline element\n     */\n    get topicAnchorSelector() {\n        return this._topicAnchorSelector;\n    }\n}\n\nconst STORY_SELECTOR = '.itn-story';\nconst TOPIC_SELECTOR_LINK = 'a[rel=\"mw:WikiLink\"]:nth-of-type(1)';\nconst TOPIC_SELECTOR_BOLD_LINK = 'b:nth-of-type(1) a[rel=\"mw:WikiLink\"]';\n\n/**\n * @type {{Object.<string, NewsSite>}} A map of Wikipedia site languages codes to NewsSites\n */\nmodule.exports = {\n    test: new NewsSite('InTheNewsFormatExample', STORY_SELECTOR, TOPIC_SELECTOR_BOLD_LINK),\n    bs: new NewsSite('Šablon:Vijesti', STORY_SELECTOR, TOPIC_SELECTOR_BOLD_LINK),\n    da: new NewsSite('Skabelon:Forside_aktuelle_begivenheder', 'div > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    de: new NewsSite('Wikipedia:Hauptseite/Aktuelles', 'ul:not(.breadcrumb-nav-container) > li', TOPIC_SELECTOR_LINK),\n    el: new NewsSite('Πύλη:Τρέχοντα_γεγονότα/Επικεφαλίδες', 'li', TOPIC_SELECTOR_LINK),\n    en: new NewsSite('Template:In_the_news', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    es: new NewsSite('Portal:Actualidad', 'div:nth-of-type(2) > div > ul:nth-of-type(1) > li', TOPIC_SELECTOR_LINK),\n    fi: new NewsSite('Malline:Uutisissa', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    fr: new NewsSite('Modèle:Accueil_actualité', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    he: new NewsSite('תבנית:חדשות_ואקטואליה', 'section > ul > li', TOPIC_SELECTOR_LINK),\n    ko: new NewsSite('틀:새로_들어온_소식', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    no: new NewsSite('Mal:Aktuelt', 'ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    pl: new NewsSite('Szablon:Aktualności', 'ul:last-of-type > li', TOPIC_SELECTOR_BOLD_LINK),\n    pt: new NewsSite('Portal:Eventos_atuais', 'table:nth-of-type(2) div:not(.hlist) > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    ru: new NewsSite('Шаблон:Текущие_события_на_заглавной_странице', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    sco: new NewsSite('Template:In_the_news', 'section > ul > li', TOPIC_SELECTOR_BOLD_LINK), // see en\n    sv: new NewsSite('Portal:Huvudsida/Aktuella händelser', 'body > section > ul > li', TOPIC_SELECTOR_BOLD_LINK),\n    vi: new NewsSite('Bản_mẫu:Tin_tức', 'ul > li', TOPIC_SELECTOR_BOLD_LINK)\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/announcements.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 118. Maximum allowed is 100.","line":94,"column":1,"nodeType":"Program","messageId":"max","endLine":94,"endColumn":119}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst config = require('../etc/announcements');\nconst HTTPError = require('./util').HTTPError;\nconst striptags = require('striptags');\n\nconst plaintextFromHTML = (html) => {\n    const htmlWithSpacesAndNewlines = html.replace(/&nbsp;/ig, ' ').replace(/<br\\/>/ig, '\\n');\n    return striptags(htmlWithSpacesAndNewlines);\n};\n\n/**\n * @param {!Object} campaign object, as seen in etc/announcements.js\n * @param {!string} os operating system, all caps ('IOS' or 'ANDROID')\n * @param {?string} id another string to distinguish different announcements, all caps\n * @return {!string} announcement id string\n */\nconst buildId = (campaign, os, id) => `${ campaign.idPrefix }${ os }${ id }`;\n\nconst baseAnnouncement = (campaign) => {\n    return {\n        type: campaign.type,\n        start_time: campaign.startTime,\n        end_time: campaign.endTime,\n        domain: campaign.domain\n    };\n\n    // beta: true,\n    // logged_in: true,\n    // reading_list_sync_enabled: true,\n};\n\nconst getFundraisingAnnouncementText = (countryConfig) => `<b>Wikipedia is still not on the market.</b><br><i>An important update from Jimmy Wales</i><br><br>Please don’t skip this 1-minute read. Today I ask you to reflect on the number of times you have used Wikipedia this year, the value you got from it, and whether you’re able to give ${ countryConfig.currency }${ countryConfig.coffee } to the nonprofit that supports it. Wikipedia is written by everyone, together. We want everyone to have equal access to high-quality information. If Wikipedia has given you ${ countryConfig.currency }${ countryConfig.coffee } worth of knowledge, please join the 2% of readers who donate. There are no small contributions: every edit counts, every donation counts. Thank you. — <i>Jimmy Wales, founder, Wikimedia Foundation</i>`;\n\nconst androidV2FundraisingAnnouncement = (code, countryConfig, campaign) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, 'ANDROIDV2', 'EN'),\n        platforms: [ config.Platform.ANDROID_V2 ],\n        countries: [ code.toUpperCase() ],\n        border: countryConfig.border,\n        placement: countryConfig.placement,\n        text: getFundraisingAnnouncementText(countryConfig),\n        // image_url: countryConfig.imageUrl,\n        // image_height: 40,\n        caption_HTML: \"By donating, you agree to our <a href='https://foundation.wikimedia.org/wiki/Donor_privacy_policy/en'>donor policy</a>.\",\n        negative_text: 'No thanks',\n        action: {\n            title: 'DONATE NOW',\n            url: 'https://donate.wikimedia.org/?uselang=en&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=Android&utm_source=app_2023_en6C_Android_control'\n        }\n    });\n};\n\nconst japanFundraisingAnnouncement = (code, countryConfig, campaign, os, platforms) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, os.toUpperCase(), code.toUpperCase()),\n        platforms: platforms,\n        countries: [ code.toUpperCase() ],\n        border: countryConfig.border,\n        placement: countryConfig.placement,\n        text: '<b>ウィキペディアは売り物ではありません。</b><br>ジミー・ウェールズから皆様へのメッセージ<br>1分で結構です、どうか読み飛ばさないでください。今日は皆様に、ぜひお考えいただきたいことがあります。この1年間でウィキペディア アプリをどれほど使い、そこでどんな価値を得たか、そして¥300 のご寄付が可能かどうかです。ウィキメディア財団のウィキペディアを含むプロジェクト群を支える技術は、読者の皆様によって支えられています。非営利団体であるということは、誰かがウィキペディアを買い取り、好き勝手にする危険性がないことを意味します。この一年、もしあなたがウィキペディアから得た情報に¥300 の価値があったと思っていただけるのでしたら、ご寄付をお寄せいただけないでしょうか。感謝を込めて。— ジミー・ウェールズ(ウィキメディア財団創設者)',\n        negative_text: 'けっこうです',\n        action: {\n            title: '今すぐ寄付する',\n            url: `https://donate.wikimedia.org/?uselang=ja&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=${ os }&utm_source=app_2023_jaJP_${ os }_control&monthlyconvert=Default`\n        }\n    });\n};\n\nconst androidV2SurveyAnnouncement = (campaign) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, 'ANDROIDV2', 'EN'),\n        platforms: [ config.Platform.ANDROID_V2 ],\n        countries: [ 'AL', 'DZ', 'AO', 'AR', 'AM', 'AU', 'AT', 'AZ', 'BD', 'BY', 'BR', 'BG', 'CM', 'CA', 'CF', 'TD',\n            'CL', 'CO', 'KM', 'CR', 'CI', 'HR', 'CY', 'CZ', 'DK', 'EC', 'EG', 'SV', 'EE', 'ET', 'DE', 'GH', 'GR', 'GT',\n            'GN', 'HN', 'HK', 'HU', 'IN', 'ID', 'IE', 'IT', 'JM', 'JP', 'KE', 'KR', 'LV', 'LB', 'LT', 'MG', 'MW', 'MY',\n            'ML', 'MQ', 'MR', 'MX', 'MA', 'MZ', 'NL', 'NG', 'PK', 'PY', 'PE', 'PH', 'PL', 'PT', 'PR', 'RO', 'SN', 'RS',\n            'SG', 'SK', 'SI', 'ZA', 'ES', 'SE', 'CH', 'TW', 'TZ', 'TN', 'TR', 'UG', 'GB', 'US', 'UY', 'ZM', 'ZW' ],\n        border: false,\n        placement: 'feed',\n        text: 'Help to improve the Wikipedia mobile apps by signing up to be a user tester. Take a quick survey to participate in an upcoming study or research interview.',\n        caption_HTML: \"View our <a href='https://foundation.m.wikimedia.org/w/index.php?title=Editing_Awareness_and_Trust_Survey_Privacy_Statement'>privacy statement</a>. Survey powered by a third party. View their <a href='https://policies.google.com/privacy'>privacy policy</a>.\",\n        negative_text: 'No thanks',\n        action: {\n            title: 'Start survey',\n            url: 'https://forms.gle/DUWfFRoD9nqgStJZ7'\n        }\n    });\n};\n\nconst iosV2FundraisingAnnouncement = (code, countryConfig, campaign) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, 'IOSV2', 'EN'),\n        platforms: [ config.Platform.IOS_V2, config.Platform.IOS_V3, config.Platform.IOS_V4, config.Platform.IOS_V5 ],\n        countries: [ code.toUpperCase() ],\n        border: countryConfig.border,\n        placement: countryConfig.placement,\n        text: getFundraisingAnnouncementText(countryConfig),\n        caption_HTML: \"By donating, you agree to our <a href='https://foundation.wikimedia.org/wiki/Donor_privacy_policy/en'>donor policy</a>.\",\n        negative_text: 'No thanks',\n        action: {\n            title: 'DONATE NOW',\n            url: 'https://donate.wikimedia.org/?uselang=en&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=iOS&utm_source=app_2023_en6C_iOS_control'\n        }\n    });\n};\n\nconst iOSAaaLDArticleTitles = ['Anya Taylor-Joy',\n    'Armie Hammer',\n    'Betty White',\n    'Bigg Boss (Tamil season 4)',\n    'Cloris_Leachman',\n    'Cicely Tyson',\n    'Darth Vader',\n    'Elisabeth Shue',\n    'Elizabeth Olsen',\n    'Elliot Page',\n    'Gal Gadot',\n    'Godzilla vs. Kong',\n    'K.G.F: Chapter 2',\n    'Lana Clarkson',\n    'Leonardo DiCaprio',\n    'List of Marvel Cinematic Universe films',\n    'Master (2021 film)',\n    'Olivia Wilde',\n    'Omar Sy',\n    'Pedro Pascal',\n    'Phoebe Dynevor',\n    'Pieces of a Woman',\n    'Promising Young Woman',\n    'Ralph Macchio',\n    'Soul (2020 film)',\n    'Tanya Roberts',\n    'Tenet (film)',\n    'The Dig (2021 film)',\n    'The Little Things (2021 film)',\n    'The Mandalorian',\n    'WandaVision',\n    'William Zabka',\n    'Wonder Woman 1984',\n    'Amen',\n    'Aquarius (astrology)',\n    'B. R. Ambedkar',\n    'Bermuda Triangle',\n    'Bible',\n    'Blue Monday (date)',\n    'Cabal',\n    'Capricorn (astrology)',\n    'Changeling',\n    'Charlie Charlie challenge',\n    'Communism',\n    'Epiphany (holiday)',\n    'Gautama Buddha',\n    'Illuminati',\n    'Islam',\n    'Jesus',\n    'Joan of Arc',\n    'Karl Marx',\n    'Lilith',\n    'List of conspiracy theories',\n    'List of religious populations',\n    'Makar Sankranti',\n    'Muhammad',\n    'NESARA',\n    'New World Order (conspiracy theory)',\n    'New Year\\'s Day',\n    'Pongal (festival)',\n    'Pope Francis',\n    'Sagittarius (astrology)',\n    'Scientology',\n    'Seven deadly sins',\n    'Ten Commandments',\n    'Valentine\\'s Day',\n    'Zodiac',\n    'Aaron Rodgers',\n    'Bobby Fischer',\n    'Conor McGregor',\n    'Cristiano Ronaldo',\n    'Drew Brees',\n    'Dustin Poirier',\n    'Gina Carano',\n    'Hank Aaron',\n    'James Naismith',\n    'Jim Brown',\n    'Josh Allen (quarterback)',\n    'Khabib Nurmagomedov',\n    'Kobe Bryant',\n    'LeBron James',\n    'Lionel Messi',\n    'List of footballers with 500 or more goals',\n    'List of Super Bowl champions',\n    'Max Holloway',\n    'Mesut Özil',\n    'Michael Chandler',\n    'Michael Jordan',\n    'Muhammad Ali',\n    'Nick Saban',\n    'Patrick Mahomes',\n    'Ryan García',\n    'Stephen Curry',\n    'Steve Sarkisian',\n    'Super Bowl',\n    'Super Bowl LV',\n    'Taylor Heinicke',\n    'Thomas Tuchel',\n    'Tiger Woods',\n    'Tom Brady',\n    'UFC 257',\n    'Urban Meyer',\n    'Art',\n    'Camera',\n    'Claude Monet',\n    'Colosseum',\n    'Colossus of Rhodes',\n    'David (Michelangelo)',\n    'Fallingwater',\n    'Great Pyramid of Giza',\n    'Impressionism',\n    'Jackson Pollock',\n    'Leaning Tower of Pisa',\n    'Leonardo da Vinci',\n    'List of most expensive paintings',\n    'Lorem ipsum',\n    'Louvre',\n    'Michelangelo',\n    'Mona Lisa',\n    'Moscow Kremlin',\n    'Pablo Picasso',\n    'Pietà (Michelangelo)',\n    'Sagrada Família',\n    'Salvador Dalí',\n    'Salvator Mundi (Leonardo)',\n    'Statue of Unity',\n    'The Ellipse',\n    'The Great Wave off Kanagawa',\n    'The Last Supper (Leonardo)',\n    'The Starry Night',\n    'Trademark symbol',\n    'Vincent van Gogh',\n    'Americas',\n    'Amundsen–Scott South Pole Station',\n    'Antarctica',\n    'Asia',\n    'Atlantic Ocean',\n    'Caribbean',\n    'Continent',\n    'Ernest Shackleton',\n    'Geographic coordinate system',\n    'Great Lakes',\n    'Greenland',\n    'Himalayas',\n    'K2',\n    'Kattegat',\n    'Lake Baikal',\n    'List of cities in the United Kingdom',\n    'List of countries and dependencies by area',\n    'List of countries and dependencies by population density',\n    'List of highest mountains on Earth',\n    'List of largest cities',\n    'List of national capitals',\n    'List of national parks of the United States',\n    'List of sovereign states',\n    'List of United States cities by population',\n    'Mediterranean Sea',\n    'Mount Kilimanjaro',\n    'North America',\n    'North Pole',\n    'Pacific Ocean',\n    'Patagonia',\n    'Réunion',\n    'Scandinavia',\n    'West Indies',\n    'World map',\n    'Yellowstone National Park',\n    '2021',\n    'Alexander the Great',\n    'Alfred the Great',\n    'Anglo-Saxons',\n    'Anne Boleyn',\n    'Augustus',\n    'Björn Ironside',\n    'British Empire',\n    'Byzantine Empire',\n    'Catherine of Aragon',\n    'Charlemagne',\n    'Cleopatra',\n    'Emily Dickinson',\n    'Flag of the United States',\n    'Flags of the Confederate States of America',\n    'Helen Keller',\n    'Henry V of England',\n    'Henry VII of England',\n    'Ivar the Boneless',\n    'James VI and I',\n    'Julius Caesar',\n    'Karen Pence',\n    'List of English monarchs',\n    'Lucille Ball',\n    'Margaret Guido',\n    'Marie Antoinette',\n    'Mary I of England',\n    'Mary of Teck',\n    'Mary, Queen of Scots',\n    'Ottoman Empire',\n    'Queen Victoria',\n    'Ragnar Lodbrok',\n    'Roman Empire',\n    'Sutton Hoo',\n    'Vikings',\n    '69 (sex position)',\n    'Anal sex',\n    'Animal',\n    'BDSM',\n    'Cane Corso',\n    'Cat',\n    'Charles Darwin',\n    'Dinosaur',\n    'DNA',\n    'Dodo',\n    'Dog',\n    'Fellatio',\n    'Gabi (dog)',\n    'German Shepherd',\n    'Giant panda',\n    'Golden Retriever',\n    'Kitten',\n    'Labrador Retriever',\n    'Lion',\n    'Mammal',\n    'Masturbation',\n    'Mercy dog',\n    'Missionary position',\n    'Non-penetrative sex',\n    'Oral sex',\n    'Quinoa',\n    'Sex',\n    'Sex position',\n    'Sexual intercourse',\n    'Sexy',\n    'Shiba Inu',\n    'Strawberry',\n    'Tiger',\n    'Virus',\n    'Wolverine',\n    'Adrenochrome',\n    'Asperger syndrome',\n    'B-cell lymphoma',\n    'Bipolar disorder',\n    'Body mass index',\n    'Borderline personality disorder',\n    'Bubonic plague',\n    'Cocaine',\n    'COVID-19 pandemic',\n    'COVID-19 pandemic in the United Kingdom',\n    'Crohn\\'s disease',\n    'Diverticulitis',\n    'Dunning–Kruger effect',\n    'Fentanyl',\n    'Fibromyalgia',\n    'Glioblastoma',\n    'IQ classification',\n    'Ivermectin',\n    'List of The Good Doctor episodes',\n    'Maslow\\'s hierarchy of needs',\n    'Myers–Briggs Type Indicator',\n    'Parkinson\\'s disease',\n    'Pfizer',\n    'Pneumonia',\n    'Prader–Willi syndrome',\n    'Pulmonary embolism',\n    'Schizophrenia',\n    'Sepsis',\n    'Serum Institute of India',\n    'Sigmund Freud',\n    'Smallpox',\n    'Tasuku Honjo',\n    'Tuberculosis',\n    'Tuskegee Syphilis Study',\n    'Vaccine',\n    'Albert Einstein',\n    'Atom',\n    'Big Bang',\n    'Black hole',\n    'Dark matter',\n    'Double-slit experiment',\n    'Electricity',\n    'Electromagnetic radiation',\n    'Energy',\n    'Entropy',\n    'Gas constant',\n    'Gravity',\n    'Higgs boson',\n    'Laws of thermodynamics',\n    'Light',\n    'Marie Curie',\n    'Newton\\'s laws of motion',\n    'Ohm\\'s law',\n    'Physics',\n    'Planck constant',\n    'Plasma (physics)',\n    'Quantum entanglement',\n    'Quantum mechanics',\n    'Reynolds number',\n    'Richard Feynman',\n    'Schrödinger equation',\n    'Schrödinger\\'s cat',\n    'Second law of thermodynamics',\n    'Speed of light',\n    'Speed of sound',\n    'Theory of relativity',\n    'Universe',\n    'Viscosity',\n    'Werner Heisenberg',\n    'X-ray'];\n\nconst iosV4SurveyAnnouncement = (campaign) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, 'IOSV4', 'EN'),\n        platforms: [ config.Platform.IOS_V4 ],\n        border: false,\n        placement: 'article',\n        text: 'Help improve Wikipedia by taking a quick survey about this article',\n        caption_HTML: \"View our <a href='https://foundation.m.wikimedia.org/w/index.php?title=Editing_Awareness_and_Trust_Survey_Privacy_Statement'>privacy statement</a>. Survey powered by a third-party. View their <a href='https://policies.google.com/privacy'>privacy policy</a>.\",\n        negative_text: 'No thanks',\n        percent_receiving_experiment: 50,\n        action: {\n            title: 'Start survey',\n            url: 'https://docs.google.com/forms/d/e/1FAIpQLSdQ34Nz6u7Uhc6A3mTk5XwGdWVKwJpQfCZ4Jlx32QHhI6fx9Q/viewform?usp=pp_url&entry.135304298={{articleTitle}}&entry.1794192386={{didSeeModal}}&entry.1315551869={{isInExperiment}}'\n        },\n        articleTitles: iOSAaaLDArticleTitles,\n        displayDelay: 30\n    });\n};\n\nconst iosAaaLDSurveyAnnouncement = (campaign) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, 'IOS', 'SURVEY20-1'),\n        platforms: [ config.Platform.IOS_V5 ],\n        border: false,\n        placement: 'article',\n        text: 'Help improve Wikipedia by taking a quick survey about this article',\n        caption_HTML: \"View our <a href='https://foundation.m.wikimedia.org/w/index.php?title=Editing_Awareness_and_Trust_Survey_Privacy_Statement'>privacy statement</a>. Survey powered by a third-party. View their <a href='https://policies.google.com/privacy'>privacy policy</a>.\",\n        negative_text: 'No thanks',\n        percent_receiving_experiment: 50,\n        action: {\n            title: 'Start survey',\n            url: 'https://docs.google.com/forms/d/e/1FAIpQLSdQ34Nz6u7Uhc6A3mTk5XwGdWVKwJpQfCZ4Jlx32QHhI6fx9Q/viewform?usp=pp_url&entry.135304298={{articleTitle}}&entry.1794192386={{didSeeModal}}&entry.1315551869={{isInExperiment}}'\n        },\n        articleTitles: iOSAaaLDArticleTitles,\n        displayDelay: 30\n    });\n};\n\nconst iosLegacyFundraisingAnnouncement = (code, countryConfig, campaign) => {\n    return Object.assign({}, baseAnnouncement(campaign), {\n        id: buildId(campaign, 'IOS', 'EN'),\n        platforms: [ config.Platform.IOS ],\n        countries: [ code.toUpperCase() ],\n        min_version: '5.8.0',\n        max_version: '6.1.0',\n        caption_HTML: \"<p>By donating, you agree to our <a href='https://foundation.wikimedia.org/wiki/Donor_privacy_policy/en'>donor policy</a></p>.\",\n        border: countryConfig.border,\n        placement: countryConfig.placement,\n        text: plaintextFromHTML(getFundraisingAnnouncementText(countryConfig)),\n        action: {\n            title: 'DONATE NOW',\n            url: 'https://donate.wikimedia.org/?uselang=en&appeal=JimmyQuote&utm_medium=WikipediaApp&utm_campaign=iOS&utm_source=app_2023_en6C_iOS_control'\n        }\n    });\n};\n\nfunction getAndroidFundraisingAnnouncements(campaign) {\n    return Object.keys(campaign.countryVars)\n    .map((code) => androidV2FundraisingAnnouncement(code, campaign.countryVars[code], campaign));\n}\n\nfunction getAndroidSurveyAnnouncements(campaign) {\n    return [].concat(androidV2SurveyAnnouncement(campaign));\n}\n\nfunction getiOSFundraisingAnnouncements(campaign) {\n    return Object.keys(campaign.countryVars)\n    .map((code) => iosV2FundraisingAnnouncement(code, campaign.countryVars[code], campaign));\n}\n\nfunction getiOSSurveyAnnouncements(campaign) {\n    return [].concat(iosV4SurveyAnnouncement(campaign));\n}\n\nfunction getiOSAaaLDSurveyAnnouncements(campaign) {\n    return [].concat(iosAaaLDSurveyAnnouncement(campaign));\n}\n\nfunction getLegacyiOSFundraisingAnnouncements(campaign) {\n    return Object.keys(campaign.countryVars)\n    .map((code) => iosLegacyFundraisingAnnouncement(code, campaign.countryVars[code], campaign));\n}\n\nfunction getAnnouncementsForCampaign(campaign) {\n    switch (campaign.idPrefix) {\n        case 'INDIAFUNDRAISING23':\n            return getAndroidFundraisingAnnouncements(campaign)\n            .concat(getiOSFundraisingAnnouncements(campaign))\n            .concat(getLegacyiOSFundraisingAnnouncements(campaign));\n        case 'JAPANFUNDRAISING23':\n            return Object.keys(campaign.countryVars).map((code) => japanFundraisingAnnouncement(code, campaign.countryVars[code], campaign, 'iOS', [ config.Platform.IOS_V2, config.Platform.IOS_V3, config.Platform.IOS_V4, config.Platform.IOS_V5 ]))\n            .concat(Object.keys(campaign.countryVars).map((code) => japanFundraisingAnnouncement(code, campaign.countryVars[code], campaign, 'Android', [ config.Platform.ANDROID_V2 ])));\n        case 'INDIAFUNDRAISING22':\n            return getAndroidFundraisingAnnouncements(campaign);\n        case 'FUNDRAISING23':\n            return getAndroidFundraisingAnnouncements(campaign)\n            .concat(getiOSFundraisingAnnouncements(campaign))\n            .concat(getLegacyiOSFundraisingAnnouncements(campaign));\n        case 'IOSSURVEY20':\n            return getiOSSurveyAnnouncements(campaign);\n        case 'IOSAAALDSURVEY':\n            return getiOSAaaLDSurveyAnnouncements(campaign);\n        case 'ANDROIDSURVEY20':\n            return getAndroidSurveyAnnouncements(campaign);\n    }\n}\n\nfunction hasEnded(campaign, now) {\n    const endDate = Date.parse(campaign.endTime);\n    if (isNaN(endDate)) {\n        throw new HTTPError({\n            status: 500,\n            type: 'config_error',\n            title: 'invalid end date in announcements config',\n            detail: config.endTime\n        });\n    }\n    return now > endDate;\n}\n\nfunction getActiveCampaigns(domain, now) {\n    return config.campaigns.filter((campaign) =>\n    campaign.activeWikis.includes(domain) &&\n    !hasEnded(campaign, now));\n}\n\nfunction getAnnouncements(domain) {\n    const announcements = [];\n    const activeCampaigns = getActiveCampaigns(domain, new Date());\n    activeCampaigns.forEach((campaign) => {\n        announcements.push(...getAnnouncementsForCampaign(campaign));\n    });\n\n    return {\n        announce: announcements\n    };\n}\n\nmodule.exports = {\n    getAnnouncements,\n    testing: {\n        buildId,\n        getActiveCampaigns,\n        getAnnouncementsForCampaign,\n        getAndroidFundraisingAnnouncements,\n        getiOSFundraisingAnnouncements,\n        getLegacyiOSFundraisingAnnouncements,\n        hasEnded\n    }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/api-util.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":300,"column":1,"nodeType":"Block","endLine":300,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst axios = require('axios').default;\nconst axiosRetry = require('axios-retry').default;\nconst BBPromise = require('bluebird');\nconst sUtil = require('./util');\nconst Template = require('swagger-router').Template;\nconst HTTPError = sUtil.HTTPError;\nconst uuid = require('cassandra-uuid').TimeUuid;\n\nconst isRedirect = (status) => status < 400 && status >= 300;\n\n/**\n * Make outgoing HTTP request using axios\n *\n * @param {Object} outReq Outgoing request\n * @param {Object} parentReq Incoming request\n * @return {Promise} outgoing request config\n */\nfunction makeOutgoingRequest(outReq, parentReq) {\n    const httpConf = parentReq.app.conf.http_client || {};\n\n    // Log each outgoing request on incoming request logger\n    const loggerInterceptor = (config) => {\n        parentReq.logger.log('trace/req', { msg: 'Outgoing request', out_request: outReq });\n        return config;\n    };\n\n    // Handle service mesh redirects\n    const serviceMeshInterceptor = ((response) => {\n        if (isRedirect(response.status)) {\n            const location = response.headers.location;\n            try {\n                // Redirect location is absolute\n                const nextURL = new URL(response.headers.location);\n                response.config.url.pathname = nextURL.pathname;\n                response.config.headers.host = nextURL.hostname;\n            } catch (err) {\n                // Redirect location is relative\n                response.config.url = new URL(location, response.config.url);\n            }\n            return axios.request(response.config);\n        }\n        return response;\n    });\n\n    Object.assign(outReq.headers, {\n        'user-agent': parentReq.app.conf.user_agent,\n        'x-request-id': parentReq.headers['x-request-id']\n    });\n\n    const reqConfig = {\n        url: new URL(outReq.uri),\n        method: outReq.method,\n        headers: outReq.headers,\n        timeout: httpConf.timeout || 2 * 60 * 1000,\n        validateStatus: httpConf.status_validator || ((status) => status < 400)\n    };\n\n    // Ensure requests are retried in case of failure\n    axiosRetry(axios, { retries: httpConf.retries || 3 });\n\n    axios.interceptors.request.use(loggerInterceptor);\n    if (httpConf.use_service_mesh) {\n        // Manually handle redirects for service mesh\n        reqConfig.maxRedirects = 0;\n        axios.interceptors.response.use(serviceMeshInterceptor);\n    }\n\n    return axios.request(reqConfig);\n}\n\n/**\n * Calls the MW REST API with the supplied query as its body\n *\n * @param {!Object} req the incoming request object\n * @param {?Object} addlHeaders additional headers to pass to the MW API\n * @return {!Promise} a promise resolving as the response object from the MW API\n */\nfunction mwCorePageHTMLGet(req, addlHeaders) {\n    const rev = req.params.revision;\n    const title = encodeURIComponent(req.params.title);\n    const corePageReq = req.app.mwrestapi_tpl.expand({\n        request: {\n            headers: addlHeaders,\n            params: {\n                path: rev ? `revision/${ rev }/with_html` : `page/${ title }/with_html`,\n                domain: req.params.domain\n            }\n        }\n    });\n\n    return makeOutgoingRequest(corePageReq, req).then(function (response) {\n        // Compat: rewrite etag header and body to be the same format as the\n        // responses from parsoid on restbase\n        const html = response.data.html;\n        const revision = response.data.id;\n        const timestamp = response.data.timestamp;\n        const tid = uuid.fromDate(new Date(timestamp)).toString();\n        const etag = `${ revision }/${ tid }`;\n        response.body = html;\n        response.headers.etag = etag;\n        return response;\n    });\n}\n\n/**\n * Calls the MW API with the supplied query as its body\n *\n * @param {!Object} req the incoming request object\n * @param {?Object} query an object with all the query parameters for the MW API\n * @param {?string} altDomain domain to query, if other than the original request domain\n * @param {?Object} addlHeaders additional headers to pass to the MW API\n * @return {!Promise} a promise resolving as the response object from the MW API\n */\nfunction mwApiGet(req, query, altDomain, addlHeaders) {\n\n    const app = req.app;\n    query = Object.assign({\n        format: 'json',\n        formatversion: 2\n    }, query);\n\n    const request = app.mwapi_tpl.expand({\n        request: {\n            params: { domain: altDomain || req.params.domain },\n            headers: req.headers,\n            query\n        }\n    });\n    Object.assign(request.headers, addlHeaders);\n\n    return req.issueRequest(request).then((response) => {\n        if (response.status < 200 || response.status > 399) {\n            // there was an error when calling the upstream service, propagate that\n            return BBPromise.reject(new HTTPError({\n                status: response.status,\n                type: 'api_error',\n                title: 'MW API error',\n                detail: response.body\n            }));\n        }\n        return response;\n    });\n\n}\n\n/**\n * For use by `restApiGet` and `restGatewayGet`.\n *\n * @ignore\n *\n * @throws {Error} If the domain is unspecified and cannot be retreived from\n *  the incoming request\n * @throws {Error} If the path is unspecified\n */\nfunction prepareReqParams(req, path, reqParams) {\n\n    if (path.constructor === Object) {\n        reqParams = path;\n        path = undefined;\n    }\n    reqParams = reqParams || {};\n    reqParams.method = reqParams.method || 'get';\n    reqParams.query = reqParams.query || {};\n    reqParams.headers = reqParams.headers || {};\n    reqParams.params = reqParams.params || {};\n    reqParams.params.path = path || reqParams.params.path;\n    reqParams.params.domain = reqParams.params.domain || req.params.domain;\n\n    if (!reqParams.params.path) {\n        throw new Error('The path must be specified.');\n    }\n\n    if (!reqParams.params.domain) {\n        throw new Error('The domain must be specified or retrievable from the incoming request.');\n    }\n\n    reqParams.params.path = reqParams.params.path[0] === '/' ?\n        reqParams.params.path.slice(1) : reqParams.params.path;\n\n    return reqParams;\n}\n\n/**\n * Calls the REST API with the supplied parameters.\n *\n * @param {!Object} req the incoming request object\n * @param {?string} path the API path to contact without the leading slash\n * @param {?Object} [reqParams={}] the object containing request details\n * @param {!string} [reqParams.path] the path\n * @param {?string} [reqParams.domain] the domain, defaulting to `req.params.domain`\n * @param {?string} [reqParams.method=get] the request method\n * @param {?Object} [reqParams.query={}] the query string to send, if any\n * @param {?Object} [reqParams.headers={}] the request headers to send\n * @param {?Object} [reqParams.body=null] the body of the request, if any\n * @return {!Promise} a promise resolving as the response object from the API\n *  or rejecting if the domain or path were unspecified or couldn't be\n *  retrieved from the incoming request\n */\nfunction restApiGet(req, path, reqParams) {\n\n    try {\n        return req.issueRequest(req.app.restbase_tpl.expand({\n            request: prepareReqParams(req, path, reqParams)\n        }));\n    } catch (e) {\n        return BBPromise.reject(new HTTPError({\n            status: 500,\n            type: 'internal_error',\n            title: 'Invalid internal call',\n            detail: 'domain and path need to be defined for the REST API call'\n        }));\n    }\n\n}\n\n/**\n * Calls the REST Gateway-proxied API with the supplied parameters.\n *\n * @param {!Object} req the incoming request object\n * @param {?string} path the API path to contact without the leading slash\n * @param {?Object} [reqParams={}] the object containing request details\n * @param {!string} [reqParams.path] the path\n * @param {?string} [reqParams.domain] the domain, defaulting to `req.params.domain`\n * @param {?string} [reqParams.method=get] the request method\n * @param {?Object} [reqParams.query={}] the query string to send, if any\n * @param {?Object} [reqParams.headers={}] the request headers to send\n * @param {?Object} [reqParams.body=null] the body of the request, if any\n * @return {!Promise} a promise resolving as the response object from the API\n *  or rejecting if the domain or path were unspecified or couldn't be\n *  retrieved from the incoming request\n */\nfunction restGatewayGet(req, path, reqParams) {\n\n    try {\n        return req.issueRequest(req.app.rest_gateway_req.expand({\n            request: prepareReqParams(req, path, reqParams)\n        }));\n    } catch (e) {\n        return BBPromise.reject(new HTTPError({\n            status: 500,\n            type: 'internal_error',\n            title: 'Invalid internal call',\n            detail: 'domain and path need to be defined for the REST Gateway API call'\n        }));\n    }\n\n}\n\nfunction mwGet(req, title, addlHeaders) {\n    const app = req.app;\n    const request = app.mw_tpl.expand({\n        request: {\n            headers: Object.assign(req.headers, addlHeaders),\n            params: {\n                domain: req.params.domain,\n                title\n            }\n        }\n    });\n    return req.issueRequest(request);\n}\n\n/**\n * Returns a promise to the summary object for the given title.\n *\n * @param {!Object} req\n * @param {!string} title\n * @return {Promise<Object>}\n */\nfunction restGetSummary(req, title) {\n    let lang = req.headers['accept-language'];\n    if (lang) {\n        // HACK: T346657\n        // Use zh locale for all zhwiki requests\n        lang = lang.replace(/zh(-.*)/, 'zh');\n    }\n\n    return restApiGet(\n        req,\n        `page/summary/${ encodeURIComponent(title) }`,\n        {\n            headers: {\n                'accept-language': lang\n            }\n        }\n    )\n    .then((res) => {\n        // Support legacy pre summary 2.0 clients.\n        res.body.normalizedtitle = res.body.title;\n        res.body.title = res.body.title.replace(/ /g, '_');\n        return res.body;\n    });\n}\n\n/**\n * Sets up the request templates for MW and RESTBase API requests\n *\n * @param {!Application} app the application object\n */\nfunction setupApiTemplates(app) {\n\n    // set up the MW API request template\n    if (!app.conf.mwapi_req) {\n        app.conf.mwapi_req = {\n            method: 'get',\n            uri: 'http://{{domain}}/w/api.php',\n            headers: '{{request.headers}}',\n            query: '{{ default(request.query, {}) }}'\n        };\n    }\n    app.mwapi_tpl = new Template(app.conf.mwapi_req);\n\n    // set up MW REST API request template\n    if (!app.conf.mwrestapi_req) {\n        app.conf.mwrestapi_req = {\n            method: 'get',\n            uri: 'http://{{domain}}/w/rest.php/v1/{+path}',\n            headers: '{{request.headers}}'\n        };\n    }\n    app.mwrestapi_tpl = new Template(app.conf.mwrestapi_req);\n\n    // set up the RESTBase request template\n    if (!app.conf.restbase_req) {\n        app.conf.restbase_req = {\n            method: '{{request.method}}',\n            uri: 'http://{{domain}}/api/rest_v1/{+path}',\n            query: '{{ default(request.query, {}) }}',\n            headers: '{{request.headers}}',\n            body: '{{request.body}}'\n        };\n    }\n    app.restbase_tpl = new Template(app.conf.restbase_req);\n\n    // Set up the REST Gateway request template\n    //\n    // For the definitive list of services proxied by the REST Gateway, see\n    // https://gerrit.wikimedia.org/g/operations/deployment-charts/+/c4c17fdb4869333de00e269454580119442d6082/helmfile.d/services/rest-gateway/values.yaml#57\n    if (!app.conf.rest_gateway_req) {\n        app.conf.rest_gateway_req = {\n            method: '{{request.method}}',\n            uri: 'http://{{domain}}/v1/{+path}',\n            query: '{{ default(request.query, {}) }}',\n            headers: '{{request.headers}}',\n            body: '{{request.body}}'\n        };\n    }\n    app.rest_gateway_req = new Template(app.conf.rest_gateway_req);\n\n    // set up the MediaWiki page request template\n    if (!app.conf.mw_req) {\n        app.conf.mw_req = {\n            method: '{{request.method}}',\n            uri: 'http://{{domain}}/w/index.php?title={+title}',\n            query: '{{ default(request.query, {}) }}',\n            headers: '{{request.headers}}'\n        };\n    }\n    app.mw_tpl = new Template(app.conf.mw_req);\n}\n\nmodule.exports = {\n    mwGet,\n    mwApiGet,\n    restApiGet,\n    restGetSummary,\n    setupApiTemplates,\n    mwCorePageHTMLGet,\n    restGatewayGet\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/date-util.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/doc-util.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/featured-image.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/featured.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'si' is already declared in the upper scope on line 12 column 7.","line":138,"column":12,"nodeType":"Identifier","messageId":"noShadow","endLine":138,"endColumn":14}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * To retrieve TFA -- Today's featured article -- for a given date.\n */\n\n'use strict';\n\nconst crypto = require('crypto');\nconst domino = require('domino');\nconst BBPromise = require('bluebird');\nconst api = require('./api-util');\n\nconst si = require('./siteinfo');\nconst dateUtil = require('./date-util');\nconst util = require('./util');\n\nconst HTTPError = util.HTTPError;\n\nconst NS_SPECIAL = '-1';\n\nconst supportedSubdomains = [ 'bg', 'bn', 'bs', 'cs', 'de', 'el', 'en', 'fa', 'he', 'hu', 'it', 'ja',\n    'la', 'no', 'sco', 'sd', 'sv', 'tr', 'ur', 'vi', 'zh' ];\n\nconst supportedDomains = supportedSubdomains.map((lang) => `${ lang }.wikipedia.org`);\n\nconst isSupported = (domain) => supportedDomains.includes(domain);\n\n/**\n * Builds the request to get the Special:FeedItem provided by the FeaturedFeed extension.\n *\n * @param {!string} req the request object\n * @param {!Object} siteinfo\n * @param {!Date} date for which day the featured article is requested\n * @return {!Promise} a promise resolving as an JSON object containing the response\n */\nconst requestFeaturedFeedSpecialItem = (req, siteinfo, date) => {\n    const lang = siteinfo.general.lang;\n    const localizedNamespaceSpecial = siteinfo.namespaces[NS_SPECIAL].name.replace(/ /g, '_');\n    const feedItemAliasInfo = siteinfo.specialpagealiases.find((i) => i.realname === 'FeedItem');\n    const feedItemAlias = (feedItemAliasInfo && feedItemAliasInfo.aliases[0]) || 'FeedItem';\n    const dateString = `${ dateUtil.formatYYYYMMDD(date) }000000`;\n    const title = `${ localizedNamespaceSpecial }:${ feedItemAlias }/featured/${ dateString }/${ lang }`;\n    return api.mwGet(req, title, { accept: 'text/html; charset=UTF-8' });\n};\n\n// -- functions dealing with responses:\n\nconst findPageTitle = (html) => {\n    const document = domino.createDocument(html);\n    const scope = document.querySelector('div#mw-content-text');\n    if (!scope) {\n        return;\n    }\n\n    const found = scope.querySelector('b > a, a > b');\n    if (found) {\n        if (found.tagName === 'A') { // b > a\n            return found.getAttribute('title');\n        } else { // a > b\n            // the anchor is the parent node\n            return found.parentNode.getAttribute('title');\n        }\n    }\n};\n\n/**\n * Fetches higher-quality page image form MW API\n *\n * @param {!Object} req\n * @param {!string} title\n * @return {Promise<Object>}\n */\nconst fetchHighQualityPageImage = (req, title) => {\n    return api.mwApiGet(req, {\n        action: 'query',\n        format: 'json',\n        formatversion: 2,\n        prop: 'pageimages',\n        piprop: 'thumbnail|original',\n        pithumbsize: 640,\n        pilicense: 'any',\n        titles: title\n    })\n    .then((res) => {\n        if (res.body &&\n            res.body.query &&\n            res.body.query.pages &&\n            res.body.query.pages.length &&\n            res.body.query.pages[0].thumbnail &&\n            res.body.query.pages[0].original) {\n            const thumbnail = res.body.query.pages[0].thumbnail;\n            const originalimage = res.body.query.pages[0].original;\n            thumbnail.source = thumbnail.source.replace(/^http:/, 'https:');\n            originalimage.source = originalimage.source.replace(/^http:/, 'https:');\n            return { thumbnail, originalimage };\n        }\n    });\n};\n\nconst createSha1 = (input) => {\n    const shasum = crypto.createHash('sha1');\n    shasum.update(input);\n    return shasum.digest('hex');\n};\n\n// -- main\n\nconst promise = (app, req) => {\n    let pageTitle;\n    const domain = req.params.domain;\n    const aggregated = !!req.query.aggregated;\n\n    if (!dateUtil.validate(dateUtil.hyphenDelimitedDateString(req))) {\n        if (aggregated) {\n            return BBPromise.resolve({});\n        }\n        dateUtil.throwDateError();\n    }\n\n    if (!isSupported(domain)) {\n        if (aggregated) {\n            return BBPromise.resolve({});\n        } else {\n            throw new HTTPError({\n                status: 404,\n                type: 'not_found',\n                title: 'Not found',\n                detail: 'The language you have requested is not yet supported.'\n            });\n        }\n    }\n\n    const requestedDate = dateUtil.getRequestedDate(req);\n    if (domain === 'de.wikipedia.org' && !(dateUtil.isWithinLast3Days(requestedDate))) {\n        return BBPromise.resolve({});\n    }\n\n    return si.getSiteInfo(req)\n    .then((si) => requestFeaturedFeedSpecialItem(req, si, requestedDate)\n    .then((featured) => {\n        pageTitle = findPageTitle(featured.body);\n        if (!pageTitle) {\n            return BBPromise.resolve({});\n        }\n        const dbTitle = util.getDbTitle(pageTitle, si);\n        const vary = [];\n        if (si.variants && si.variants.length > 1) {\n            vary.push('accept-language');\n        }\n        return {\n            payload: api.restGetSummary(req, dbTitle),\n            meta: { etag: createSha1(dbTitle), vary },\n            // will be moved into summary before returning the result\n            $fetchHighQualityImage: fetchHighQualityPageImage(req, dbTitle)\n        };\n    })\n    .then((result) => util.promiseAwaitAll(result, true, req.logger))\n    .then((resolvedResult) => {\n        if (resolvedResult.$fetchHighQualityImage) {\n            Object.assign(resolvedResult.payload, resolvedResult.$fetchHighQualityImage);\n        }\n        delete resolvedResult.$fetchHighQualityImage;\n        return resolvedResult;\n    })\n    .catch((err) => {\n        if (aggregated) {\n            return BBPromise.resolve({});\n        }\n        throw err;\n    }));\n};\n\nmodule.exports = {\n    promise,\n    supportedSubdomains,\n    supportedDomains,\n    testing: {\n        findPageTitle,\n        isSupported\n    }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/imageinfo.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Bool' is undefined.","line":30,"column":1,"nodeType":"Block","endLine":30,"endColumn":1},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":85,"column":1,"nodeType":"Block","endLine":103,"endColumn":4},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":132,"column":1,"nodeType":"Block","endLine":145,"endColumn":4},{"ruleId":"array-callback-return","severity":1,"message":"Array.prototype.map() expects a return value from arrow function.","line":203,"column":43,"nodeType":"ArrowFunctionExpression","messageId":"expectedInside","endLine":203,"endColumn":45},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: [type]","line":280,"column":1,"nodeType":"Block","endLine":280,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: [type]","line":282,"column":1,"nodeType":"Block","endLine":282,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst P = require('bluebird');\nconst _ = require('lodash');\nconst domino = require('domino');\nconst striptags = require('striptags');\nconst api = require('./api-util');\nconst dateUtil = require('./date-util');\nconst util = require('./util');\nconst HTTPError = util.HTTPError;\nconst parsoid = require('./parsoid');\n\nconst PROD_COMMONS_DOMAIN = 'commons.wikimedia.org';\nconst BETA_COMMONS_DOMAIN = 'commons.wikimedia.beta.wmflabs.org';\n\n/**\n * Get the correct Commons domain to handle the request.\n *\n * @param {!string} domain original request domain\n * @return {!string} Commons domain for beta or prod\n */\nfunction getCommonsDomain(domain) {\n    return domain.endsWith('beta.wmflabs.org') ? BETA_COMMONS_DOMAIN : PROD_COMMONS_DOMAIN;\n}\n\n/**\n * get page object from api response\n *\n * @param  {Object} response  MWAPI response\n * @param  {Bool} dontThrow if true throw HTTP error 404\n * @return {Object}           Page Object\n */\nfunction getPageObject(response, dontThrow) {\n    const page = response.body.query.pages[0];\n    if (!page.pageid || page.missing === true) {\n        if (dontThrow) {\n            page.notfound = true;\n            return page;\n        } else {\n            throw new HTTPError({\n                status: 404,\n                type: 'not_found',\n                title: 'No picture of the day for this date',\n                detail: 'There is no picture of the day for this date.'\n            });\n        }\n    }\n    return page;\n}\n\n/**\n * @param {!domino.Document} doc\n * @return {void}\n */\nfunction removeLangLabels(doc) {\n    const labels = doc.querySelectorAll('span[class*=langlabel-]') || [];\n    labels.forEach((element) => {\n        element.parentNode.removeChild(element);\n    });\n}\n\n/**\n * @param {!domino.Document} doc\n * @return {!Object.<string, string>} Map of languages to descriptions\n */\nfunction queryDescriptions(doc) {\n    const descriptions = {};\n    const descriptionElements = doc.querySelectorAll('.description[class*=lang-]') || [];\n    descriptionElements.forEach((element) => {\n        descriptions[element.lang] = element.innerHTML.trim();\n    });\n    return descriptions;\n}\n\n/**\n * Converts a metadata array to a standard JS key-value object.\n *\n * @param {!Array} meta A metadata array from Commons ([ { name: foo, value: bar }, ... ])\n * @return {!Object} a consolidated object ({ foo: bar, ... })\n */\nfunction metadataToObject(meta) {\n    return Object.assign(...meta.map((item) => ({ [item.name]: item.value })));\n}\n\n/**\n * Provides a consistent structure for extended metadata (extmetadata) properties returned from the\n * MW API.  As returned directly from the MW API, these values may be strings or objects, and may\n * or may not specify the language in which they are provided.  This provides some structure to help\n * clients consume the data more easily.\n * The result language will be chosen according to the following algorithm:\n * 1) If a key for preferredLang exists, use preferredLang;\n * 2) Else, if the key exists in English, use English;\n * 3) Else, use the first available language.\n * The return value will include the following properties:\n * html (required): the original value text in the chosen language, likely (but not necessarily)\n *   HTML-formatted;\n * text (required): the original value text with HTML-formatting stripped;\n * lang (optional): the chosen language code, if language codes were provided\n *\n * @param  {!Object|string} val Value of the extmetadata property\n * @param  {!string} preferredLang preferred language (most likely the request language)\n * @return {?Object} structured values for the extmetadata property\n */\nfunction structureExtMetadataValue(val, preferredLang) {\n    let html;\n    let lang;\n\n    if (typeof val === 'object') {\n        if (val[preferredLang]) {\n            lang = preferredLang;\n        } else if (val.en) {\n            lang = 'en';\n        } else if (Object.keys(val)[0]) {\n            lang = Object.keys(val)[0];\n        } else {\n            return;\n        }\n        html = val[lang];\n    } else if (typeof val === 'string') {\n        html = val;\n    } else {\n        return;\n    }\n\n    return {\n        html,\n        text: striptags(html).trim(),\n        lang\n    };\n}\n\n/**\n * Get structured artist info from extmetadata (to the extent possible).\n * We take a rather conservative approach here:\n * 1) In the 'html' property, we always return the full HTML string.\n * 2) If the field contains only plain text, we assume this is an artist name and\n *    return it in the 'name' property.\n * 3) If the HTML string is of a specific common form, we parse the user name and\n *    user page from it, and return them in the 'name' and 'user_page' fields respectively.\n *    That form is \"<a href=\\\"//commons.wikimedia.org/wiki/User:Foo\\\" title=\\\"User:Foo\\\">Foo</a>\".\n *\n * @param {!Object|string} val The Artist value from extmetadata\n * @param {!string} preferredLang \"artist\" metadata value from the MW API\n * @return {?Object} structured artist info\n */\nfunction getStructuredArtistInfo(val, preferredLang) {\n    const result = structureExtMetadataValue(val, preferredLang);\n    if (!result) {\n        return;\n    }\n    const doc = domino.createDocument(result.html);\n    if (!doc.body.textContent) {\n        return;\n    }\n    let name;\n    let userPage;\n    if (doc.body.textContent === result.html) {\n        name = doc.body.textContent;\n    } else {\n        const a = doc.body.querySelector('a');\n        if (a && a.outerHTML === result.html && a.getAttribute('title') === `User:${ doc.body.textContent }` &&\n            // TODO: Update to handle all Wikimedia project domains\n            a.getAttribute('href') === `//commons.wikimedia.org/wiki/${ a.title }`) {\n            name = doc.body.textContent;\n            userPage = `https:${ a.getAttribute('href') }`;\n        }\n    }\n    return Object.assign(result, { name, user_page: userPage });\n}\n\n/**\n * Provides consistent structuring of extmetadata values. See comments on\n * structureExtMetadataProperty for the specific steps applied to each value.\n *\n * @param {!Object} extMetadata extmetadata object from MW API\n * @param {!string} preferredLang preferred language (most likely the request language)\n * @return {?Object} set of structured extmetadata values\n */\nfunction structureExtMetadataValues(extMetadata, preferredLang) {\n    return Object.keys(extMetadata).reduce((acc, cur) => {\n        const val = extMetadata[cur].value;\n        if (cur === 'Artist') {\n            // Special-case handling for the Artist property (conditionally including a\n            // derived Commons username and User page URL), which is used for something\n            // or other in the Android app.\n            acc[cur] = getStructuredArtistInfo(val, preferredLang);\n        } else {\n            acc[cur] = structureExtMetadataValue(val, preferredLang);\n        }\n        return acc;\n    }, {});\n}\n\n/**\n * Provides consistent structuring of wbentities values for the structured captions field\n *\n * @param  {!Object} wbentity object data from wbgetentities API action\n * @return {!Object}          structured captions for given wbentity\n */\nfunction structureCaptions(wbentity) {\n    const captions = wbentity && wbentity.labels;\n    if (captions) {\n        Object.keys(captions).map((index) => {\n            captions[index] = captions[index].value;\n        });\n    }\n    return captions;\n}\n\n/**\n * Make image info result\n *\n * @param {!Object} wbentity Wikibase entity object\n * @param {!Object} image metadata query results to be parsed and formatted\n * @param {!Object} siteinfo Site info\n * @param {!string} preferredLang language code of the preferred language for metadata values\n * @param {!Object} desc Description Value pre-processed (needed for Picture of the day)\n * @return {!Object}\n */\nfunction makeResult(wbentity, image, siteinfo, preferredLang, desc) {\n    const imageInfo = image.imageinfo[0];\n    const meta = imageInfo.metadata && metadataToObject(imageInfo.metadata);\n    const ext = imageInfo.extmetadata &&\n        structureExtMetadataValues(imageInfo.extmetadata, preferredLang);\n    const isAudio = imageInfo.mediatype === 'AUDIO';\n    const isSvg = imageInfo.mime && imageInfo.mime.includes('svg');\n    const captions = structureCaptions(wbentity);\n\n    return {\n        title: image.pageprops && image.pageprops.displaytitle || image.title,\n        thumbnail: {\n            source: imageInfo.thumburl,\n            width: imageInfo.thumbwidth,\n            height: imageInfo.thumbheight,\n            mime: imageInfo.thumbmime\n        },\n        image: {\n            source: imageInfo.url,\n            width: isAudio || isSvg ? undefined : imageInfo.width,\n            height: isAudio || isSvg ? undefined : imageInfo.height,\n            mime: imageInfo.mime\n        },\n        page_count: imageInfo.pagecount,\n        file_page: imageInfo.descriptionurl,\n        duration: meta && (meta.length || meta.playtime_seconds) || undefined,\n        artist: ext && ext.Artist,\n        credit: ext && ext.Credit,\n        // Use original value for each of these since it's well standardized data\n        license: {\n            type: ext && ext.LicenseShortName && ext.LicenseShortName.html,\n            code: ext && ext.License && ext.License.html,\n            url: ext && ext.LicenseUrl && ext.LicenseUrl.html\n        },\n        description:\n            desc && structureExtMetadataValue(desc, preferredLang) ||\n            ext && ext.ImageDescription,\n        wb_entity_id: wbentity.id,\n        structured: {\n            captions: captions && Object.keys(captions).length ? captions : {}\n        }\n    };\n}\n\n/**\n * Get Picture of the day description from Parsoid response\n *\n * @param  {Object} req  req Server request\n * @param  {Object} body parsoid body response\n * @return {Object}      POTD description value\n */\nfunction getPotdDescriptionValue(req, body) {\n    const doc = domino.createDocument(body);\n    removeLangLabels(doc);\n    return queryDescriptions(doc);\n}\n\n/**\n * Builds the request to get the Picture of the day of a given date.\n *\n * @param  {[type]} req      [description]\n * @param {!Date} date for which day the featured image of theday is requested\n * @param  {[type]} siteinfo [description]\n * @return {!Promise} a promise resolving as an JSON object containing the response\n */\nfunction requestPictureOfTheDay(req, date, siteinfo) {\n    const isoDate = dateUtil.formatISODate(date);\n    const commonsDomain = getCommonsDomain(req.params.domain);\n    let page;\n    const filter = [\n        'Artist',\n        'LicenseShortName',\n        'License',\n        'LicenseUrl',\n        'Credit'\n    ];\n\n    const imageInfoProps = [\n        'url',\n        'dimensions',\n        'extmetadata'\n    ];\n\n    const query = {\n        action: 'query',\n        format: 'json',\n        formatversion: 2,\n        generator: 'images',\n        prop: 'imageinfo|revisions',\n        iiextmetadatafilter: filter.join('|'),\n        iimetadataversion: 'latest',\n        iiprop: imageInfoProps.join('|'),\n        iiurlwidth: 640,\n        rawcontinue: '',\n        titles: `Template:Potd/${ isoDate }`\n    };\n    return api.mwApiGet(req, query, commonsDomain).then((response) => {\n        page = getPageObject(response);\n\n        const parsoidReq = Object.create(req);\n        parsoidReq.params = Object.create(req.params);\n        parsoidReq.params.title = page.title;\n        parsoidReq.params.domain = commonsDomain;\n\n        const structuredQuery = {\n            action: 'wbgetentities',\n            format: 'json',\n            formatversion: 2,\n            sites: 'commonswiki',\n            props: 'labels|info',\n            titles: page.title\n        };\n\n        return P.join(\n            parsoid.getParsoidHtml(parsoidReq),\n            api.mwApiGet(req, structuredQuery, commonsDomain),\n            (html, structured) => {\n                const description = getPotdDescriptionValue(req, html.body);\n                const lang = req.params.domain.split('.')[0];\n                const wbentity = _.values(structured.body.entities)[0];\n                return {\n                    payload: makeResult(wbentity, page, siteinfo, lang, description),\n                    meta: util.getRevAndTidFromEtag(html.headers)\n                };\n            });\n    });\n}\n\nmodule.exports = {\n    requestPictureOfTheDay,\n    testing: {\n        structureExtMetadataValue\n    }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/most-read.js","messages":[{"ruleId":"jsdoc/check-access","severity":1,"message":"At most one access-control tag may be present on a jsdoc block.","line":79,"column":1,"nodeType":"Block","endLine":82,"endColumn":4},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@public should not have a bracketed type in \"jsdoc\" mode.","line":80,"column":1,"nodeType":"Block","endLine":80,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@public should not have a bracketed type in \"jsdoc\" mode.","line":81,"column":1,"nodeType":"Block","endLine":81,"endColumn":1},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":115,"column":28,"nodeType":"NewExpression","endLine":115,"endColumn":80},{"ruleId":"no-shadow","severity":1,"message":"'pageviews' is already declared in the upper scope on line 10 column 7.","line":147,"column":19,"nodeType":"Identifier","messageId":"noShadow","endLine":147,"endColumn":28},{"ruleId":"array-callback-return","severity":1,"message":"Array.prototype.map() expects a return value from arrow function.","line":163,"column":25,"nodeType":"ReturnStatement","messageId":"expectedReturnValue","endLine":163,"endColumn":32},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":212,"column":1,"nodeType":"Program","messageId":"max","endLine":212,"endColumn":114}],"suppressedMessages":[{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in '_id'.","line":159,"column":26,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":159,"endColumn":87,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Most-read article promise and related support functions.\n */\n\n'use strict';\n\nconst BBPromise = require('bluebird');\nconst regexEscape = require('lodash').escapeRegExp;\nconst dateUtil = require('./date-util');\nconst pageviews = require('./pageviews');\nconst si = require('./siteinfo');\nconst util = require('./util');\nconst apiUtil = require('./api-util');\nconst Title = require('mediawiki-title').Title;\n\nconst MAX_TITLES = 50;\n\nconst DENY_LIST = {\n    '*': [\n        '-',\n        'Test_card',\n        'Web_scraping',\n        'XHamster',\n        'Java_(programming_language)',\n        'Images/upload/bel.jpg',\n        'Superintelligence:_Paths,_Dangers,_Strategies',\n        'Okto',\n        'Proyecto_40',\n        'AMGTV',\n        'Lali_Espósito',\n        'La7',\n        'Vagina',\n        'کس', // mznwiki\n        'مقعد', // mznwiki\n        'Tobias_Sammet', // dewiki T238942\n        'Avantasia', // dewiki T238942\n        'Edguy', // dewiki T238942\n        'Pornhub', // dewiki T238942\n        'Index', // T327904\n        'Index_(statistics)',\n        'Index,_Washington',\n        'Index_(economics)',\n        'XXX:_Return_of_Xander_Cage',\n        'XXX_(film_series)',\n        'XXX_(2002_film)',\n        'Cookie_(informatique)',\n        'Nigger',\n        'nigger',\n        'YouTube',\n        'Cleopatra',\n        'Outlook.com',\n        'Sex',\n        '.xxx',\n        'XNXX',\n        'XVideos',\n        'XXXX_(beer)',\n        'XXXX',\n        'XXXX_Gold',\n        'XXXX_(album)',\n        'XXXX_Summer_Bright_Lager',\n        'XXXX_Panzer_Corps',\n        'XXX:_State_of_the_Union',\n        'XXXTentacion',\n        'X_(2022_film)',\n        'Super_Bowl_XXX',\n        'Murder_of_XXXTentacion'\n    ],\n    es: [\n        'Cleopatra'\n    ],\n    pt: [\n        'Cleopatra'\n    ],\n    test: [\n        'User:JGiannelos_(WMF)/test_most_read_block'\n    ]\n};\n\n/**\n * @public {!string} date ISO 8601 timestamp of pageviews recorded\n * @public {!number} views Integer pageviews on date\n */\nclass DatedPageviews {\n    constructor(date, views) {\n        this.date = date;\n        this.views = views;\n    }\n}\n\nfunction getTopPageviews(req, domain, date) {\n    const restReq = {\n        params: { domain: 'wikimedia.org' },\n        headers: { accept: 'application/json; charset=utf-8' }\n    };\n    return new pageviews.Client(req, restReq).reqTop(domain, pageviews.Platform.ALL, date);\n}\nfunction pageviewsPageRspToDatedPageviews(rsp) {\n    return rsp.body.items.map((item) => {\n        return new DatedPageviews(dateUtil.iso8601DateFromYYYYMMDD(item.timestamp), item.views);\n    });\n}\n\nfunction getViewHistory(req, domain, startDate, endDate, entry) {\n    const restReq = {\n        params: { domain: 'wikimedia.org' },\n        headers: { accept: 'application/json; charset=utf-8' }\n    };\n    const client = new pageviews.Client(req, restReq);\n    return client.reqPage(util.removeTLD(domain), pageviews.Platform.ALL, pageviews.Agent.USER,\n        entry.article, pageviews.Granularity.DAILY, startDate, endDate)\n        .then(pageviewsPageRspToDatedPageviews);\n}\n\nfunction filterSpecial(articles, mainPageTitle) {\n    const mainPageRegExp = new RegExp(`^${ regexEscape(mainPageTitle) }$`, 'i');\n    return articles.filter((entry) => {\n        return entry.namespace.id === 0 && !mainPageRegExp.test(entry.titles.canonical);\n    });\n}\n\nfunction isBlocked(lang, title) {\n    return (lang in DENY_LIST && DENY_LIST[lang].includes(title)) || DENY_LIST['*'].includes(title);\n}\n\nfunction promise(app, req) {\n    if (req.params.domain === 'fy.wikipedia.org') {\n        return BBPromise.resolve({ meta: {} });\n    }\n\n    if (!dateUtil.validate(dateUtil.hyphenDelimitedDateString(req))) {\n        if (req.query.aggregated) {\n            return BBPromise.resolve({ meta: {} });\n        }\n        dateUtil.throwDateError();\n    }\n\n    const reqDate = dateUtil.getRequestedDate(req);\n    const rspDate = req.query.aggregated ? dateUtil.addDays(reqDate, -1) : reqDate;\n\n    return BBPromise.join(\n        getTopPageviews(req, util.removeTLD(req.params.domain), rspDate),\n        si.getSiteInfo(req),\n        (pageviewsResponse, siteinfo) => {\n            const mainPage = siteinfo.general && siteinfo.general.mainpage;\n            const mainPageTitle = Title.newFromText(mainPage, siteinfo);\n\n            const pageviews = pageviewsResponse &&\n                pageviewsResponse.body &&\n                pageviewsResponse.body.items &&\n                pageviewsResponse.body.items[0];\n\n            const pageviewsSlice = pageviews.articles &&\n                pageviews.articles.slice(0, MAX_TITLES);\n\n            const titles = pageviewsSlice.map((entry) => {\n                let ns;\n                try {\n                    // eslint-disable-next-line no-underscore-dangle\n                    ns = Title.newFromText(entry.article, siteinfo).getNamespace()._id;\n                } catch (e) {\n                    if (e.type === 'title-invalid-utf8') {\n                        req.logger.log('warn', e);\n                        return;\n                    } else {\n                        throw e;\n                    }\n                }\n                return Object.assign({ ns }, entry);\n            }).filter((entry) => entry !== undefined);\n\n            const resultsDate = `${ pageviews.year }-${ pageviews.month }-${ pageviews.day }Z`;\n            const start = dateUtil.addDays(new Date(resultsDate), -4);\n            const end = new Date(resultsDate);\n\n            const results = titles.map((entry) => {\n                // Will be merged-in on a later pass\n                entry.$summary = apiUtil.restGetSummary(req, entry.article);\n                entry.view_history = getViewHistory(req, req.params.domain, start, end, entry);\n                delete entry.article;\n                delete entry.ns;\n                return entry;\n            });\n\n            return util.promiseAwaitAll(results, true, req.logger)\n            .then((resp) => {\n                let articles = resp\n                // Throw away items where summaries failed to fetch.\n                .filter((entry) => !!entry.$summary)\n                // Merge the summary content into the article view data.\n                .map((entry) => {\n                    Object.assign(entry, entry.$summary);\n                    delete entry.$summary;\n                    return entry;\n                });\n\n                // Deduplicate the most-read pages cause some of them might have been\n                // redirects which have now been resolved.\n                articles = util.removeDuplicateTitles(articles, (orig, dupe) => {\n                        orig.views += dupe.views;\n                        orig.view_history.forEach((toViewsForDate) => {\n                            const filteredViews = dupe.view_history.filter((fromViewsForDate) => {\n                                return toViewsForDate.date === fromViewsForDate.date;\n                            });\n                            if (filteredViews.length) {\n                                toViewsForDate.views += filteredViews[0].views;\n                            }\n                        });\n                        return orig;\n                    });\n\n                articles = filterSpecial(articles, mainPageTitle.getPrefixedDBKey());\n                articles = articles.filter((entry) => !isBlocked(siteinfo.general.lang, entry.titles.canonical));\n\n                const vary = [];\n                if (siteinfo.variants && siteinfo.variants.length > 1) {\n                    vary.push('accept-language');\n                }\n                return {\n                    payload: {\n                        date: resultsDate,\n                        articles\n                    },\n                    meta: { revision: dateUtil.dateStringFrom(req), vary }\n                };\n            });\n        }).catch((err) => {\n        // Catch and handle the error if this is an aggregated request and the\n        // pageview data are not yet loaded.\n        if (req.query.aggregated && err.status === 404) {\n            return BBPromise.resolve({ meta: {} });\n        }\n        throw err;\n    });\n}\n\nmodule.exports = {\n    promise,\n\n    // visible for testing\n    filterSpecial,\n    isBlocked\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/news.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":15,"column":1,"nodeType":"Block","endLine":15,"endColumn":1},{"ruleId":"no-shadow","severity":1,"message":"'si' is already declared in the upper scope on line 8 column 7.","line":73,"column":12,"nodeType":"Identifier","messageId":"noShadow","endLine":73,"endColumn":14},{"ruleId":"no-shadow","severity":1,"message":"'result' is already declared in the upper scope on line 81 column 19.","line":97,"column":20,"nodeType":"Identifier","messageId":"noShadow","endLine":97,"endColumn":26}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst parsoid = require('./parsoid');\nconst util = require('./util');\nconst apiUtil = require('./api-util');\nconst docUtil = require('./doc-util');\nconst si = require('./siteinfo');\nconst HTTPError = util.HTTPError;\nconst NEWS_TEMPLATES = require('../etc/news-sites');\n\n/**\n * Remove any elements matching selector from doc\n *\n * @param {Document} doc\n * @param {string} selector\n * @return {boolean} true if at least one node has been removed\n */\nfunction rmElements(doc, selector) {\n    const nodes = doc.querySelectorAll(selector) || [];\n    for (let idx = 0; idx < nodes.length; idx++) {\n        const node = nodes[idx];\n        node.parentNode.removeChild(node);\n    }\n    return nodes.length > 0;\n}\n\nfunction constructStory(req, lang, storyHtml) {\n    const story = { links: [] };\n    const linkTitles = [];\n\n    const topicAnchor = storyHtml.querySelector(NEWS_TEMPLATES[lang].topicAnchorSelector);\n    const topicTitle = util.extractDbTitleFromAnchor(topicAnchor);\n    storyHtml.querySelectorAll('a[rel=\"mw:WikiLink\"]').forEach((anchor) => {\n        const storyTitle = util.extractDbTitleFromAnchor(anchor);\n        if (!linkTitles.includes(storyTitle)) {\n            story.links.splice(\n                storyTitle === topicTitle ? 0 : story.links.length,\n                0,\n                apiUtil.restGetSummary(req, storyTitle)\n            );\n            linkTitles.push(storyTitle);\n        }\n    });\n\n    rmElements(storyHtml, 'span[style^=float:right]');\n    story.story = storyHtml.innerHTML;\n    if (story.story.length > 0 && story.links.length > 0) {\n        return story;\n    } else {\n        return undefined;\n    }\n}\n\nfunction promise(app, req) {\n    const lang = req.params.domain.split('.')[0];\n    const aggregated = !!req.query.aggregated;\n\n    if (!NEWS_TEMPLATES[lang]) {\n        if (aggregated) {\n            return BBPromise.resolve({});\n        }\n        throw new HTTPError({\n            status: 404,\n            type: 'not_found',\n            title: 'Not found',\n            detail: 'The language you have requested is not yet supported.'\n        });\n    }\n\n    req.params.title = NEWS_TEMPLATES[lang].title;\n    return si.getSiteInfo(req)\n    .then((si) => {\n        return parsoid.getParsoidHtml(req)\n        .then((response) => {\n            const selector = NEWS_TEMPLATES[lang].headlineSelectorAll;\n            const vary = [];\n            if (si.variants && si.variants.length > 1) {\n                vary.push('accept-language');\n            }\n            const result = {\n                payload: [],\n                meta: { etag: util.getRevisionFromEtag(response.headers), vary }\n            };\n            return docUtil.createDocument(response.body)\n            .then((doc) => {\n                const headlines = doc.querySelectorAll(selector);\n                Array.prototype.forEach.call(headlines, (storyHtml) => {\n                    const story = constructStory(req, lang, storyHtml);\n                    if (story) {\n                        result.payload.push(story);\n                    }\n                });\n\n                return result;\n            })\n            .then((result) =>\n                util.promiseAwaitAll(result, true, req.logger));\n        });\n    });\n}\n\nmodule.exports = {\n    promise,\n\n    // visible for testing\n    constructStory\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/on-this-day.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Integer' is undefined.","line":34,"column":1,"nodeType":"Block","endLine":34,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":122,"column":1,"nodeType":"Block","endLine":122,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Integer' is undefined.","line":123,"column":1,"nodeType":"Block","endLine":123,"endColumn":1},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":128,"column":12,"nodeType":"NewExpression","endLine":128,"endColumn":73},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":141,"column":1,"nodeType":"Block","endLine":141,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":161,"column":1,"nodeType":"Block","endLine":161,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'AnchorElement' is undefined.","line":173,"column":1,"nodeType":"Block","endLine":173,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":196,"column":1,"nodeType":"Block","endLine":196,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":243,"column":1,"nodeType":"Block","endLine":243,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Integer' is undefined.","line":259,"column":1,"nodeType":"Block","endLine":259,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":298,"column":1,"nodeType":"Block","endLine":298,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":309,"column":1,"nodeType":"Block","endLine":309,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":310,"column":1,"nodeType":"Block","endLine":310,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":331,"column":1,"nodeType":"Block","endLine":331,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'ListElement' is undefined.","line":349,"column":1,"nodeType":"Block","endLine":349,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":369,"column":1,"nodeType":"Block","endLine":369,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":401,"column":1,"nodeType":"Block","endLine":401,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":415,"column":1,"nodeType":"Block","endLine":415,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":429,"column":1,"nodeType":"Block","endLine":429,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":443,"column":1,"nodeType":"Block","endLine":443,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":457,"column":1,"nodeType":"Block","endLine":457,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":472,"column":1,"nodeType":"Block","endLine":472,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Document' is undefined.","line":473,"column":1,"nodeType":"Block","endLine":473,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"sendResponse\" type.","line":532,"column":1,"nodeType":"Block","endLine":532,"endColumn":1}],"suppressedMessages":[{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":498,"column":16,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":498,"endColumn":30,"suggestions":[{"messageId":"callObjectPrototype","data":{"prop":"hasOwnProperty"},"fix":{"range":[17007,17029],"text":"Object.prototype.hasOwnProperty.call(object, "},"desc":"Call Object.prototype.hasOwnProperty explicitly."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":24,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst _ = require('lodash');\nconst parsoid = require('./parsoid');\nconst apiUtil = require('./api-util');\nconst util = require('./util');\nconst docUtil = require('./doc-util');\nconst si = require('./siteinfo');\nconst HTTPError = util.HTTPError;\nconst languages = require('./on-this-day.languages').languages;\n\n/**\n * WMFPage models a link to a page\n *\n * @param {!string} title a page title, i.e. 'Goat'\n * @param {!boolean} isTopic events can have multiple links to pages, if this particular link is\n * bolded, such as those seen on https://en.m.wikipedia.org/wiki/Wikipedia:On_this_day/Today,\n * isTopic will be true.\n */\nclass WMFPage {\n    constructor(title, isTopic) {\n        this.title = title;\n        if (isTopic) {\n            this.isTopic = isTopic;\n        }\n    }\n}\n\n/**\n * WMFEvent models an historical event\n *\n * @param {!string} text event description\n * @param {!Array} pages array of WMFPage's for the event\n * @param {!Integer} year the year the event first happened. A negative number indicates the event\n * occured 'BC' (sometimes also denoted 'BCE' - i.e. '32 BC' or '200 BCE)'.\n */\nclass WMFEvent {\n    constructor(text, pages, year) {\n        this.text = text;\n        this.pages = pages;\n        this.year = year;\n    }\n}\n\n/**\n * WMFHoliday models an annually occuring holiday.\n *\n * @param {!string} text event description\n * @param {!Array} pages array of WMFPage's for the event\n */\nclass WMFHoliday {\n    constructor(text, pages) {\n        this.text = text;\n        this.pages = pages;\n    }\n}\n\n/**\n * Gets day page titles, which are formatted as follows: 'May_20'\n *\n * @param {!string} monthNumberString string for month number ranging from '1' to '12'\n * @param {!string} dayNumberString string number for day of month\n * @param {!string} lang String for project language code\n * @return {!string} day page title. Example, inputs ('5', '20') returns 'May_20'\n */\nfunction titleForDayPageFromMonthDayNumberStrings(monthNumberString, dayNumberString, lang) {\n    const monthNumber = parseInt(monthNumberString, 10);\n    const monthName = languages[lang].monthNames[monthNumber - 1];\n    const dayNumber = parseInt(dayNumberString, 10);\n    return languages[lang].dayPage.nameFormatter(monthName, monthNumber, dayNumber);\n}\n\n/**\n * Gets selected page titles, which are formatted as follows:\n * 'Wikipedia:Selected_anniversaries/May_20'\n *\n * @param {!string} monthNumberString a string for month number ranging from '1' to '12'\n * @param {!string} dayNumberString a string number for day of month\n * @param {!string} lang a string for project language code\n * @return {!string} selected page title. Example, inputs ('5', '20') returns\n * 'Wikipedia:Selected_anniversaries/May_20'\n */\nfunction titleForSelectedPageFromMonthDayNumberStrings(monthNumberString, dayNumberString, lang) {\n    const monthNumber = parseInt(monthNumberString, 10);\n    const monthName = languages[lang].monthNames[monthNumber - 1];\n    const dayNumber = parseInt(dayNumberString, 10);\n    return languages[lang].selectedPage.nameFormatter(monthName, monthNumber, dayNumber);\n}\n\n/**\n * Gets day page Parsoid title for day pages such as https://en.m.wikipedia.org/wiki/May_20\n *\n * @param {!Request} req Request containing month (req.params.mm) and day (req.params.dd) number\n * string params\n * @return {!string} day page title for month and day number. Example, input mm '5' dd '20'\n * returns 'May_20'\n */\nconst dayTitleForRequest = (req) => {\n    const lang = req.params.domain.split('.')[0];\n    return titleForDayPageFromMonthDayNumberStrings(req.params.mm, req.params.dd, lang);\n};\n\n/**\n * Gets selected page Parsoid title for selected pages such as\n * https://en.m.wikipedia.org/wiki/Wikipedia:Selected_anniversaries/May_20. These pages are\n * also where 'Today' page https://en.m.wikipedia.org/wiki/Wikipedia:On_this_day/Today content comes\n * from.\n *\n * @param {!Request} req Request containing month (req.params.mm) and day (req.params.dd) number\n * string params\n * @return {!string} elected page title for month and day number. Example, input mm '5' dd '20\n * returns 'Wikipedia:Selected_anniversaries/May_20'\n */\nconst selectedTitleForRequest = (req) => {\n    const lang = req.params.domain.split('.')[0];\n    return titleForSelectedPageFromMonthDayNumberStrings(req.params.mm, req.params.dd, lang);\n};\n\n/**\n * Determines whether anchor is for specific year page.\n *\n * @param  {!AnchorElement}  anchor\n * @param  {!Integer}  year\n * @param  {!string}  era\n * @return {!boolean}\n */\nfunction isAnchorForYear(anchor, year, era) {\n    return new RegExp(String.raw`^${ Math.abs(year) }\\s*${ era }$`, 'i').test(anchor.title);\n}\n\n/**\n * Regex for determining whether anchor is not relative.\n *\n * @type {RegExp}\n */\nconst nonRelativeAnchorRegex = /^http[s]?.*/i;\n\n/**\n * Determines whether anchor is relative.\n *\n * @param  {!AnchorElement}  anchor\n * @return {!boolean}\n */\nfunction isAnchorRelative(anchor) {\n    return !nonRelativeAnchorRegex.test(anchor.href);\n}\n\n/**\n * Trims and also removes bracketed numbers.\n *\n * @param  {!string} string\n * @return {!string}\n */\nfunction cleanString(string) {\n    return string.replace(/\\[\\d+\\]/g, '').trim();\n}\n\n/**\n * Removes style element from a list element\n *\n * @param {!ListElement} element\n */\nfunction removeStyleElement(element) {\n    const styles = Array.from(element.querySelectorAll('STYLE'));\n    for (const style of styles) {\n        style.remove();\n    }\n}\n\n/**\n * Converts document anchor element to WMFPage model.\n *\n * @param {!AnchorElement} anchorElement Anchor to convert\n * @return {!WMFPage} a WMFPage\n */\nfunction wmfPageFromAnchorElement(anchorElement) {\n    const title = util.extractDbTitleFromAnchor(anchorElement);\n    const isTopic = anchorElement.parentElement.tagName === 'B';\n    return new WMFPage(title, isTopic);\n}\n\n/**\n * Converts document list element to WMFEvent model.\n * A regular expression determines valid \"year list elements\" and separating their components.\n *  For example:    '399 BC - Death of Socrates'\n *    RegEx Capture groups:\n *    1st - entire match (will be non-null if the string looks like a year list element)\n *                  '399 BC - Death of Socrates'\n *    2nd - year number, required\n *                  '399'\n *    3rd - 'BC' indication string, optional\n *                  'BC'\n *    4th - event description string, required\n *                  'Death of Socrates'\n *\n * @param {!ListElement} listElement List element to convert\n * @param {!boolean} isSelected If listElement is extracted from selectedPage\n * @param {!string} lang String for project language code\n * @return {?WMFEvent} a WMFEvent or null if the list element isn't formatted as an event\n */\nfunction wmfEventFromListElement(listElement, isSelected, lang) {\n    const regEx = isSelected ? languages[lang].selectedRegEx : languages[lang].yearListElementRegEx;\n\n    const match = listElement.textContent.match(regEx);\n    if (match === null) {\n        return null;\n    }\n\n    let year = parseInt(match[1], 10);\n    const isBC = (match[2] !== undefined);\n    let era = '';\n    if (isBC) {\n        // Negate BC years so they sort correctly\n        year = -year;\n        era = match[2];\n    }\n\n    // In Chinese, 'BC' is written in front of year. E.g. '前153年',\n    // so the 2nd capture group is 'BC' indication and 3rd is year number.\n    if (lang === 'zh') {\n        year = parseInt(match[2], 10);\n        if (match[1] !== '') {\n            year = -year;\n            era = match[2];\n        }\n    }\n\n    const textAfterYear = cleanString(match[3]);\n\n    const pages = Array.from(listElement.querySelectorAll('a'))\n        .filter((anchor) => {\n            return !isAnchorForYear(anchor, year, era);\n        })\n        .filter(isAnchorRelative)\n        .map(wmfPageFromAnchorElement);\n\n    return new WMFEvent(textAfterYear, pages, year);\n}\n\n/**\n * Converts document list element to WMFHoliday model\n *\n * @param {!ListElement} listElement List element to convert\n * @return {!WMFHoliday} a WMFHoliday\n */\nfunction wmfHolidayFromListElement(listElement) {\n    const text = cleanString(listElement.textContent);\n    const pages = Array.from(listElement.querySelectorAll('a'))\n      .filter(isAnchorRelative)\n      .map(wmfPageFromAnchorElement);\n    return new WMFHoliday(text, pages);\n}\n\n/**\n * WMFEvent comparator which properly handles negative 'BC'/'BCE' years\n *\n * @param {!WMFEvent} eventA First event\n * @param {!WMFEvent} eventB Second event\n * @return {!Integer} number of years between eventB and eventA ( yearB - yearA ).\n */\nfunction reverseChronologicalWMFEventComparator(eventA, eventB) {\n    // Reminder: BC years are negative numbers.\n    return eventB.year - eventA.year;\n}\n\n/**\n * Gets chronologically sorted array of WMFEvent models from an array of list elements.\n *\n * @param {!Array} listElements an array of document list elements\n * @param {!boolean} isSelected If listElement is extracted from selectedPage\n * @param {!string} lang a string for project language code\n * @return {!Array} sorted array of WMFEvent models, one for each year list element found\n * in 'listElements' argument\n */\nfunction eventsForYearListElements(listElements, isSelected, lang) {\n    return listElements\n        .map((element) => wmfEventFromListElement(element, isSelected, lang))\n        .filter((possibleEvent) => possibleEvent instanceof WMFEvent)\n        .sort(reverseChronologicalWMFEventComparator);\n}\n\n/**\n * Gets array of WMFHoliday models from an array of list elements.\n *\n * @param {!Array} listElements an array of document list elements\n * @return {!Array} an array of WMFHoliday models, one for each list element in\n * 'listElements' argument\n */\nfunction holidaysForHolidayListElements(listElements) {\n    return listElements\n      .map(wmfHolidayFromListElement)\n      .filter((possibleHoliday) => possibleHoliday instanceof WMFHoliday);\n}\n\n/**\n * Determine if listElement has nested list elements.\n *\n * @param  {!ListElement} listElement\n * @return {!boolean}\n */\nfunction listElementHasDescendentListElements(listElement) {\n    return listElement.querySelector('UL > LI') !== undefined;\n}\n\n/**\n * Return ancestor list element of listElement, if any.\n * Returns undefined unless listElement is nested inside another listElement.\n *\n * @param  {!ListElement} listElement\n * @return {?ListElement}\n */\nfunction ancestorListElementOfListElement(listElement) {\n    const parent = listElement.parentElement;\n    if (!parent) {\n        return undefined;\n    }\n    const grandparent = parent.parentElement;\n    if (!grandparent) {\n        return undefined;\n    }\n    if (parent.tagName === 'UL' && grandparent.tagName === 'LI') {\n        return grandparent;\n    }\n    return undefined;\n}\n\n/**\n * Gets prefix from a list element suitable to pre-pend to one of its decendent list element's\n * innerHTML.\n *\n * @param  {!ListElement} ancestorListElement\n * @param  {!string} lang a string for project language code\n * @return {!string}\n */\nfunction prefixFromAncestorListElement(ancestorListElement, lang) {\n    const firstLine = ancestorListElement.textContent.split('\\n')[0];\n    const yearPrefixRegEx = languages[lang].yearPrefixRegEx;\n    const result = firstLine.match(yearPrefixRegEx);\n    const isFirstLineAYear = (result !== null);\n    const firstLineStringToUse = isFirstLineAYear ? result[1] : firstLine;\n    const separator = isFirstLineAYear ? ' - ' : '\\n';\n    const prefix = `${ firstLineStringToUse.trim() }${ separator }`;\n    return prefix;\n}\n\n/**\n * Adds prefix from ancestor list elements to listElement.\n *\n * @param {!ListElement} listElement\n * @param {!string} lang a string for project language code\n */\nfunction addPrefixFromAncestorListElementsToListElement(listElement, lang) {\n    const prefixes = [];\n    removeStyleElement(listElement);\n    let el = listElement;\n    while ((el = ancestorListElementOfListElement(el))) {\n        prefixes.push(prefixFromAncestorListElement(el, lang));\n    }\n    const prefixString = (prefixes.length ===  0) ? '' : `${ prefixes.reverse().join('') }`;\n    listElement.innerHTML = `${ _.escape(prefixString) }${ listElement.innerHTML.trim() }`;\n}\n\n/**\n * Gets list elements grouped under a given heading. Couldn't use pure CSS selector syntax for\n * extracting these - this is because some languages use further sub-headings under, say, 'births',\n * for things like 'Births before 1900' and so forth. We want *all* births, in this case - that is,\n * we want all list elements after the h2 'births' heading up until the next h2 heading.\n *\n * @param {!Document} document a DOM document to examine\n * @param {!string} headingIds an array of heading id strings\n * @param {!string} lang a string for project language code\n * @return {!Array} an array of list elements\n */\nfunction listElementsByHeadingID(document, headingIds, lang) {\n    const elements = Array.from(document.querySelectorAll('h2,ul li'));\n    const listElements = [];\n    let grab = false;\n    for (const element of elements) {\n        if (element.tagName === 'H2') {\n            grab = false;\n            for (const headingId of headingIds) {\n                if (element.id === headingId) {\n                    grab = true;\n                }\n            }\n        } else if (element.tagName === 'LI' && grab) {\n\n            if (listElementHasDescendentListElements(element)) {\n                continue;\n            }\n            addPrefixFromAncestorListElementsToListElement(element, lang);\n            listElements.push(element);\n        }\n    }\n    return listElements;\n}\n\n/**\n * Gets array of WMFEvent models of births found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of births\n */\nconst birthsInDoc = (doc, lang) => {\n    const headingIds = languages[lang].dayPage.headingIds.births;\n    return { births:\n        eventsForYearListElements(listElementsByHeadingID(doc, headingIds, lang), false, lang)\n    };\n};\n\n/**\n * Gets array of WMFEvent models of deaths found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of deaths\n */\nconst deathsInDoc = (doc, lang) => {\n    const headingIds = languages[lang].dayPage.headingIds.deaths;\n    return { deaths:\n        eventsForYearListElements(listElementsByHeadingID(doc, headingIds, lang), false, lang)\n    };\n};\n\n/**\n * Gets array of WMFEvent models of events found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of events\n */\nconst eventsInDoc = (doc, lang) => {\n    const headingIds = languages[lang].dayPage.headingIds.events;\n    return { events:\n        eventsForYearListElements(listElementsByHeadingID(doc, headingIds, lang), false, lang)\n    };\n};\n\n/**\n * Gets array of WMFEvent models of holidays and observances found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of holidays and observances\n */\nconst holidaysInDoc = (doc, lang) => {\n    const headingIds = languages[lang].dayPage.headingIds.holidays;\n    return { holidays:\n        holidaysForHolidayListElements(listElementsByHeadingID(doc, headingIds, lang))\n    };\n};\n\n/**\n * Gets array of WMFEvent models of editor curated selected anniversaries found in a document\n *\n * @param {!Document} doc a DOM document to examine\n * @param {!string} lang a string for project language code\n * @return {!Object} an object containing list of selected anniversaries\n */\nconst selectionsInDoc = (doc, lang) => {\n    const selector = languages[lang].selectedPage.listElementSelector;\n    return { selected:\n        eventsForYearListElements(doc.querySelectorAll(selector), true, lang)\n    };\n};\n\n/**\n * Gets dictionary of arrays of WMFEvent models of all types: 'births', 'deaths', 'events',\n * 'holidays' and 'selected'\n *\n * @param {!Document} dayDoc a DOM document of events on a given day\n * @param {!Document} selectionsDoc a DOM document of editor curated events for a given day\n * @param {!string} lang a string for project language code\n * @return {!Object} an object with keys for arrays of 'selected', 'events',\n * 'births', 'deaths', and 'holidays'\n */\nconst everythingInDayAndSelectionsDocs = (dayDoc, selectionsDoc, lang) => {\n    const result = {};\n    Object.assign(result,\n        selectionsInDoc(selectionsDoc, lang),\n        eventsInDoc(dayDoc, lang),\n        birthsInDoc(dayDoc, lang),\n        deathsInDoc(dayDoc, lang),\n        holidaysInDoc(dayDoc, lang)\n    );\n    return result;\n};\n\n/**\n * Determines whether a DOM element has a 'title' property\n *\n * @param {!Object} object DOM element to examine\n * @return {!boolean} true if the object has a 'title' property\n */\nfunction hasTitle(object) {\n    return (\n        object.hasOwnProperty('title') && // eslint-disable-line no-prototype-builtins\n        typeof object.title === 'string'\n    );\n}\n\n/**\n * Recursively creates summary promises instead of objects with 'title' properties\n * found in a dom object hierarchy\n *\n * @param {!Object} req the original request\n * @param {!Object} object Dom object to examine\n * @return {Object}\n */\nfunction fetchSummaries(req, object) {\n    if (hasTitle(object)) {\n        return apiUtil.restGetSummary(req, object.title);\n    }\n    for (const property in object) {\n        if (Object.prototype.hasOwnProperty.call(object, property)) {\n            if (typeof object[property] === 'object') {\n                object[property] = fetchSummaries(req, object[property]);\n            }\n        }\n    }\n    return object;\n}\n\n/**\n * Ends a response. Creates $merge nodes and sets eTags, status etc.\n *\n * @param {!Object} req the original request\n * @param {!Object} res a response to end\n * @param {!Object} output a payload to JSONify and deliver\n * @param {?number} revision a revision\n * @param sendResponse\n * @return {Promise}\n */\nconst endResponseWithOutput = (req, res, output, revision, sendResponse = true) => {\n    fetchSummaries(req, output);\n    return util.promiseAwaitAll(output, true, req.logger)\n    .then((resolvedOutput) => {\n        // Drop duplicate pages from the output\n        Object.keys(resolvedOutput).forEach((key) => {\n            if (!Array.isArray(resolvedOutput[key])) {\n                return;\n            }\n            resolvedOutput[key].forEach((elem) => {\n                if (!elem || !Array.isArray(elem.pages)) {\n                    return;\n                }\n                elem.pages = util.removeDuplicateTitles(elem.pages);\n            });\n        });\n        if (!sendResponse) {\n            return resolvedOutput;\n        }\n        return si.getSiteInfo(req)\n        .then((siteinfo) => {\n            res.status(200);\n            util.setETag(res, revision);\n            if (siteinfo.variants && siteinfo.variants.length) {\n                res.header('vary', 'accept-language');\n            }\n            util.setContentType(res, util.CONTENT_TYPES.onthisday);\n            res.json(resolvedOutput).end();\n        });\n    });\n};\n\n/**\n * Promises to get Parsoid html for a title\n *\n * @param {!Object} app the application object\n * @param {!Request} req a request\n * @param {!string} title a page title to fetch\n * @return {!Promise} a Promise resolving to a response\n */\nfunction fetchParsoidHtmlForTitle(app, req, title) {\n    const parsoidReq = Object.create(req);\n    parsoidReq.params.title = title;\n    return parsoid.getParsoidHtml(parsoidReq);\n}\n\n/**\n * Fetches document and revision for URI\n *\n * @param {!Object} app the application object\n * @param {!Object} req a request\n * @param {!Function} titleFunction a function for getting source page title from request\n * @return {!Promise} a Promise resolving to array containing [document, revision] for URI\n */\nfunction fetchDocAndRevision(app, req, titleFunction) {\n    let revision;\n    return fetchParsoidHtmlForTitle(app, req, titleFunction(req))\n    .then((response) => {\n        revision = util.getRevisionFromEtag(response.headers);\n        return response.body;\n    })\n    .then(docUtil.createDocument)\n    .then((doc) => [ doc, revision ]);\n}\n\nconst assertLanguage = (lang) => {\n    if (!languages[lang]) {\n        throw new HTTPError({\n            status: 404,\n            type: 'not_found',\n            title: 'Not found',\n            detail: 'The language you have requested is not yet supported.'\n        });\n    }\n};\n\n/**\n * Fetches document for URI, extracts sought elements, responds\n *\n * @param {!Object} app the application object\n * @param {!Request} req a request\n * @param {!Response} res a response\n * @param {!Function} titleFunction a function for getting source page title from request\n * @param  {!Function} extractionFunction a function for extracting sought elements\n * (births, deaths, holidays, etc)\n * @param {boolean} sendResponse send an HTTP response or return early with the data payload\n * @return {!Promise} a Promise resolving when response has completed\n */\nfunction fetchAndRespond(app, req, res, titleFunction, extractionFunction, sendResponse = true) {\n    const lang = req.params.domain.split('.')[0];\n    assertLanguage(lang);\n\n    return fetchDocAndRevision(app, req, titleFunction)\n    .then((docAndRevision) => {\n        const doc = docAndRevision[0];\n        const revision = docAndRevision[1];\n        const output = extractionFunction(doc, lang);\n        return endResponseWithOutput(req, res, output, revision, sendResponse);\n    });\n}\n\nmodule.exports = {\n    dayTitleForRequest,\n    selectedTitleForRequest,\n    birthsInDoc,\n    deathsInDoc,\n    eventsInDoc,\n    holidaysInDoc,\n    selectionsInDoc,\n    everythingInDayAndSelectionsDocs,\n    assertLanguage,\n    fetchAndRespond,\n    fetchDocAndRevision,\n    titleForDayPageFromMonthDayNumberStrings,\n    WMFPage,\n    WMFEvent,\n    WMFHoliday,\n    wmfHolidayFromListElement,\n    wmfEventFromListElement,\n    wmfPageFromAnchorElement,\n    eventsForYearListElements,\n    reverseChronologicalWMFEventComparator,\n    listElementsByHeadingID,\n    isAnchorForYear,\n    addPrefixFromAncestorListElementsToListElement,\n    endResponseWithOutput\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/on-this-day.languages.js","messages":[{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":29,"column":11,"nodeType":"NewExpression","endLine":29,"endColumn":109},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":31,"column":11,"nodeType":"NewExpression","endLine":31,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":33,"column":11,"nodeType":"NewExpression","endLine":33,"endColumn":109},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":62,"column":11,"nodeType":"NewExpression","endLine":62,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":64,"column":11,"nodeType":"NewExpression","endLine":64,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":66,"column":11,"nodeType":"NewExpression","endLine":66,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":102,"column":11,"nodeType":"NewExpression","endLine":102,"endColumn":123},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":104,"column":11,"nodeType":"NewExpression","endLine":104,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":106,"column":11,"nodeType":"NewExpression","endLine":106,"endColumn":123},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":130,"column":11,"nodeType":"NewExpression","endLine":130,"endColumn":95},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":132,"column":11,"nodeType":"NewExpression","endLine":132,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":134,"column":11,"nodeType":"NewExpression","endLine":134,"endColumn":95},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":159,"column":11,"nodeType":"NewExpression","endLine":159,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":161,"column":11,"nodeType":"NewExpression","endLine":161,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":163,"column":11,"nodeType":"NewExpression","endLine":163,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":193,"column":11,"nodeType":"NewExpression","endLine":193,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":195,"column":11,"nodeType":"NewExpression","endLine":195,"endColumn":85},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":197,"column":11,"nodeType":"NewExpression","endLine":197,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":222,"column":11,"nodeType":"NewExpression","endLine":222,"endColumn":98},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":224,"column":11,"nodeType":"NewExpression","endLine":224,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":226,"column":11,"nodeType":"NewExpression","endLine":226,"endColumn":98},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":251,"column":11,"nodeType":"NewExpression","endLine":251,"endColumn":88},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":253,"column":11,"nodeType":"NewExpression","endLine":253,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":255,"column":11,"nodeType":"NewExpression","endLine":255,"endColumn":88},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":280,"column":13,"nodeType":"NewExpression","endLine":280,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":282,"column":13,"nodeType":"NewExpression","endLine":282,"endColumn":76},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":284,"column":13,"nodeType":"NewExpression","endLine":284,"endColumn":102},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":309,"column":11,"nodeType":"NewExpression","endLine":309,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":311,"column":11,"nodeType":"NewExpression","endLine":311,"endColumn":85},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":313,"column":11,"nodeType":"NewExpression","endLine":313,"endColumn":110},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":344,"column":11,"nodeType":"NewExpression","endLine":344,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":346,"column":11,"nodeType":"NewExpression","endLine":346,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":348,"column":11,"nodeType":"NewExpression","endLine":348,"endColumn":94},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":372,"column":11,"nodeType":"NewExpression","endLine":372,"endColumn":106},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":374,"column":11,"nodeType":"NewExpression","endLine":374,"endColumn":74},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":376,"column":11,"nodeType":"NewExpression","endLine":376,"endColumn":106},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":401,"column":11,"nodeType":"NewExpression","endLine":401,"endColumn":98},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":403,"column":11,"nodeType":"NewExpression","endLine":403,"endColumn":84}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":38,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst dashChars = String.raw`\\u002D\\u2013\\u2014\\u2212`;\n\nconst languages = {\n\n    en: {\n        monthNames: [\n            'January', 'February', 'March', 'April', 'May', 'June',\n            'July', 'August', 'September', 'October', 'November', 'December'\n        ],\n        dayPage: {\n            // https://en.wikipedia.org/api/rest_v1/page/html/May_22\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ monthName }_${ dayNumber }`,\n            headingIds: {\n                births: [ 'Births' ],\n                deaths: [ 'Deaths' ],\n                events: [ 'Events' ],\n                holidays: [ 'Holidays_and_observances' ]\n            }\n        },\n        selectedPage: {\n            // https://en.wikipedia.org/api/rest_v1/page/html/Wikipedia:Selected_anniversaries%2FMay_22\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Wikipedia:Selected_anniversaries/${ monthName }_${ dayNumber }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(?:ad\\s+)?(\\d+)\\s*(?:(bce?)|ad|ce)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(?:ad\\s+)?(\\d+)\\s*(?:(bce?)|ad|ce)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    de: {\n        monthNames: [\n            'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',\n            'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n        ],\n        dayPage: {\n            // https://de.wikipedia.org/api/rest_v1/page/html/22._Mai\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }._${ monthName }`,\n            headingIds: {\n                births: [ 'Geboren' ],\n                deaths: [ 'Gestorben' ],\n                events: [ 'Ereignisse' ],\n                holidays: [\n                    'Feier-_und_Gedenktage',\n                    'Feier-,_Gedenk-_und_Aktionstage',\n                    'Feier-,_Aktions-_und_Gedenktage'\n                ]\n            }\n        },\n        selectedPage: {\n            // https://de.wikipedia.org/api/rest_v1/page/html/Wikipedia:Hauptseite%2FJahrestage%2FMai%2F22\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Wikipedia:Hauptseite/Jahrestage/${ monthName }/${ dayNumber }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(v\\.\\s*Chr\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(v\\.\\s*Chr\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i')\n    },\n\n    fr: {\n        monthNames: [\n            'janvier', 'février', 'mars', 'avril', 'mai', 'juin',\n            'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'\n        ],\n        dayPage: {\n            // https://fr.wikipedia.org/api/rest_v1/page/html/22_mai\n            nameFormatter: (monthName, monthNumber, dayNumber) => {\n                if (dayNumber === 1) {\n                    dayNumber = '1er';\n                }\n                return `${ dayNumber }_${ monthName }`;\n            },\n            headingIds: {\n                births: [ 'Naissances' ],\n                deaths: [ 'Décès' ],\n                events: [ 'Événements', 'Évènements' ],\n                holidays: [ 'Célébrations' ]\n            }\n        },\n        selectedPage: {\n            // https://fr.wikipedia.org/api/rest_v1/page/html/Wikipédia:Éphéméride%2F22_mai\n            nameFormatter: (monthName, monthNumber, dayNumber) => {\n                if (dayNumber === 1) {\n                    if (new Set([ 1, 2, 3, 5, 9, 10, 11, 12 ]).has(monthNumber)) {\n                        dayNumber = '1er';\n                    }\n                }\n                return `Wikipédia:Éphéméride/${ dayNumber }_${ monthName }`;\n            },\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(av\\.\\s*J\\.\\s*[${ dashChars }]C\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(av\\.\\s*J\\.\\s*[${ dashChars }]C\\.)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i')\n    },\n\n    sv: {\n        monthNames: [\n            'januari', 'februari', 'mars', 'april', 'maj', 'juni',\n            'juli', 'augusti', 'september', 'oktober', 'november', 'december'\n        ],\n        dayPage: {\n            // https://sv.wikipedia.org/api/rest_v1/page/html/22_maj\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Födda' ],\n                deaths: [ 'Avlidna' ],\n                events: [ 'Händelser' ],\n                holidays: [ 'Återkommande bemärkelsedagar' ]\n            }\n        },\n        selectedPage: {\n            // https://sv.wikipedia.org/api/rest_v1/page/html/Mall:22_maj\n            nameFormatter: (monthName, monthNumber, dayNumber) => `Mall:${ dayNumber }_${ monthName }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(f\\.\\s*Kr\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(f\\.\\s*Kr\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    pt: {\n        monthNames: [\n            'de janeiro', 'de fevereiro', 'de março', 'de abril', 'de maio', 'de junho',\n            'de julho', 'de agosto', 'de setembro', 'de outubro', 'de novembro', 'de dezembro'\n        ],\n        dayPage: {\n            // https://pt.wikipedia.org/api/rest_v1/page/html/15_de_maio\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Nascimentos' ],\n                deaths: [ 'Mortes', 'Falecimentos' ],\n                events: [ 'Eventos', 'Eventos_históricos' ],\n                holidays: [ 'Feriados_e_eventos_cíclicos' ]\n            }\n        },\n        selectedPage: {\n            // https://pt.wikipedia.org/api/rest_v1/page/html/Wikipédia:Efemérides%2F22_de_maio\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Wikipédia:Efemérides/${ dayNumber }_${ monthName }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    ru: {\n        monthNames: [\n            'января', 'февраля', 'марта', 'апреля', 'мая', 'июня',\n            'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'\n        ],\n        dayPage: {\n            // https://ru.wikipedia.org/api/rest_v1/page/html/22_мая\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Родились' ],\n                deaths: [ 'Скончались' ],\n                events: [ 'События' ],\n                holidays: [\n                    'Праздники',\n                    'Праздники_и_памятные_дни',\n                    'Праздники_и_памятные_даты',\n                    'Праздники,_памятные_даты'\n                ]\n            }\n        },\n        selectedPage: {\n            // https://ru.wikipedia.org/api/rest_v1/page/html/Шаблон:События_дня:05-30\n            nameFormatter: (monthName, monthNo, dayNo) =>\n                `Шаблон:События_дня:${ monthNo < 10 ? `0${ monthNo }` : monthNo }-${ dayNo }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:год)?\\s*(до\\s*н\\.\\s*э\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:год)?\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:год)?\\s*(до\\s*н\\.\\s*э\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    es: {\n        monthNames: [\n            'de enero', 'de febrero', 'de marzo', 'de abril', 'de mayo', 'de junio',\n            'de julio', 'de agosto', 'de septiembre', 'de octubre', 'de noviembre', 'de diciembre'\n        ],\n        dayPage: {\n            // https://es.wikipedia.org/api/rest_v1/page/html/22_de_mayo\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Nacimientos' ],\n                deaths: [ 'Fallecimientos' ],\n                events: [ 'Acontecimientos' ],\n                holidays: [ 'Celebraciones' ]\n            }\n        },\n        selectedPage: {\n            // https://es.wikipedia.org/api/rest_v1/page/html/Plantilla:Efemérides_-_22_de_mayo\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Plantilla:Efemérides - ${ dayNumber }_${ monthName }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*\\.*[:${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*\\.*[:${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    ar: {\n        monthNames: [\n            'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\n            'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'\n        ],\n        dayPage: {\n            // https://ar.wikipedia.org/api/rest_v1/page/html/22_مايو\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'مواليد' ],\n                deaths: [ 'وفيات' ],\n                events: [ 'أحداث' ],\n                holidays: [ 'أعياد_ومناسبات' ]\n            }\n        },\n        selectedPage: {\n            // https://ar.wikipedia.org/api/rest_v1/page/html/%D9%88%D9%8A%D9%83%D9%8A%D8%A8%D9%8A%D8%AF%D9%8A%D8%A7%3A%D9%81%D9%8A_%D9%87%D8%B0%D8%A7_%D8%A7%D9%84%D9%8A%D9%88%D9%85%2F22_%D9%85%D8%A7%D9%8A%D9%88\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `ويكيبيديا:في_هذا_اليوم/${ dayNumber }_${ monthName }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(ق.م)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(ق.م)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    bs: {\n        monthNames: [\n            'januar', 'februar', 'mart', 'april', 'maj', 'juni',\n            'juli', 'august', 'septembar', 'oktobar', 'novembar', 'decembar'\n        ],\n        dayPage: {\n            // https://bs.wikipedia.org/wiki/1._januar\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Rođeni' ],\n                deaths: [ 'Umrli' ],\n                events: [ 'Događaji' ],\n                holidays: [ 'Praznici' ]\n            }\n        },\n        selectedPage: {\n            // https://bs.wikipedia.org/wiki/%C5%A0ablon:Na_dana%C5%A1nji_dan/1._januar\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Šablon:Na_današnji_dan/${ dayNumber }._${ monthName }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n            new RegExp(String.raw`^\\s*(\\d+)\\s*(p\\. n\\. e)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n            new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n            new RegExp(String.raw`^\\s*(\\d+)\\s*(p\\. n\\. e)?\\s*(?::|[${ dashChars }])\\s*(.*\\S.*)`, 'i')\n    },\n\n    uk: {\n        monthNames: [\n            'січня', 'лютого', 'березня', 'квітня', 'травня', 'червня',\n            'липня', 'серпня', 'вересня', 'жовтня', 'листопада', 'грудня'\n        ],\n        dayPage: {\n            // https://uk.wikipedia.org/api/rest_v1/page/html/1_січня\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Народились' ],\n                deaths: [ 'Померли' ],\n                events: [ 'Події' ],\n                holidays: [ 'Свята_і_пам\\'ятні_дні' ]\n            }\n        },\n        selectedPage: {\n            // https://uk.wikipedia.org/api/rest_v1/page/html/Вікіпедія%3AПроект%3AЦей_день_в_історії%2F1_січня\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Вікіпедія:Проект:Цей день в історії/${ dayNumber }_${ monthName }`,\n            listElementSelector: 'body > div.onthisdayselected > ul li, section > div.onthisdayselected > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:рік)?\\s*(до\\s*н\\.\\s*е\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:рік)?\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:рік)?\\s*(до\\s*н\\.\\s*е\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    it: {\n        monthNames: [\n            'gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno',\n            'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'\n        ],\n        dayPage: {\n            // https://it.wikipedia.org/wiki/25_luglio\n            // TODO - births and deaths are not yet supported since they exist in the separate pages\n            // List of births - https://it.wikipedia.org/wiki/Nati_il_25_luglio\n            // List of deaths - https://it.wikipedia.org/wiki/Morti_il_23_luglio\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: ['Nati'],\n                deaths: ['Morti'],\n                events: ['Eventi'],\n                holidays: ['Feste_e_ricorrenze']\n            }\n        },\n        selectedPage: {\n            // https://it.wikipedia.org/api/rest_v1/page/html/Template:PaginaPrincipale%2FAttualita%2F25_luglio\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Template:PaginaPrincipale/Attualita/${ dayNumber }_${ monthName }`,\n            // TODO: the above page can be fetched but not parsed, being a single <p> element.\n            // We probably need to wait for the switch to the new template:\n            // https://it.wikipedia.org/api/rest_v1/page/html/Template:Pagina_principale%2FAttualit%E0%2F25_luglio\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(a\\.\\s*C\\.)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    tr: {\n        monthNames: [\n            'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayis', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasim', 'Aralik'\n        ],\n        dayPage: {\n            // https://tr.wikipedia.org/api/rest_v1/page/html/Nisan_23\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ dayNumber }_${ monthName }`,\n            headingIds: {\n                births: [ 'Doğumlar' ],\n                deaths: [ 'Ölümler' ],\n                events: [ 'Olaylar' ],\n                holidays: [ 'Tatiller_ve_özel_günler' ]\n            }\n        },\n        selectedPage: {\n            // https://tr.wikipedia.org/api/rest_v1/page/html/%C5%9Eablon%3ATarihte_bug%C3%BCn%2F22_Ekim\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Şablon:Tarihte_bugün/${ dayNumber }_${ monthName }`,\n            listElementSelector: 'body > ul li,section > ul li'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:(M.?Ö.?))?\\s*(?:yil)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*[:${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:(M.?Ö.?))?\\s*(?:yil)?\\s*[${ dashChars }]\\s*(.*\\S.*)`, 'i')\n    },\n\n    zh: {\n        monthNames: [\n            '1月', '2月', '3月', '4月', '5月', '6月',\n            '7月', '8月', '9月', '10月', '11月', '12月'\n        ],\n        dayPage: {\n            // https://zh.wikipedia.org/api/rest_v1/page/html/5月22日\n            nameFormatter: (monthName, monthNumber, dayNumber) => `${ monthName }${ dayNumber }日`,\n            headingIds: {\n                births: [ '出生'],\n                deaths: [ '逝世' ],\n                events: [ '大事记', '大事記' ],\n                holidays: [ '节假日和习俗', '節假日和習俗', '节日、风俗习惯', '節日、風俗習慣' ]\n            }\n        },\n        selectedPage: {\n            // https://zh.wikipedia.org/api/rest_v1/page/html/Wikipedia:历史上的今天%2F5月22日\n            nameFormatter: (monthName, monthNumber, dayNumber) =>\n                `Wikipedia:历史上的今天/${ monthName }${ dayNumber }日`,\n            listElementSelector: 'section > dl > .event'\n        },\n        yearListElementRegEx:\n          new RegExp(String.raw`^\\s*(前?)\\s*(\\d+)\\s*(?:年)?\\s*[::${ dashChars }]\\s*(.*\\S.*)$`, 'i'),\n        yearPrefixRegEx:\n          new RegExp(String.raw`^\\s*(\\d+)\\s*(?:年)?\\s*[::${ dashChars }]*\\s*$`, 'i'),\n        selectedRegEx:\n          /(前?)(\\d+)(?:年)?\\s*(.*\\S.*)/\n    }\n\n};\n\nmodule.exports = {\n    languages\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/pageviews.js","messages":[{"ruleId":"jsdoc/check-access","severity":1,"message":"At most one access-control tag may be present on a jsdoc block.","line":36,"column":1,"nodeType":"Block","endLine":40,"endColumn":4},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":37,"column":1,"nodeType":"Block","endLine":37,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":38,"column":1,"nodeType":"Block","endLine":38,"endColumn":1},{"ruleId":"jsdoc/valid-types","severity":1,"message":"@private should not have a bracketed type in \"jsdoc\" mode.","line":39,"column":1,"nodeType":"Block","endLine":39,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Platform' is undefined.","line":53,"column":1,"nodeType":"Block","endLine":53,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Agent' is undefined.","line":54,"column":1,"nodeType":"Block","endLine":54,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Granularity' is undefined.","line":56,"column":1,"nodeType":"Block","endLine":56,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Platform' is undefined.","line":71,"column":1,"nodeType":"Block","endLine":71,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst api = require('./api-util');\nconst dateUtil = require('./date-util');\n\n/**\n * @readonly\n * @enum {!string}\n */\nmodule.exports.Platform = {\n    ALL: 'all-access',\n    DESKTOP_WEB: 'desktop',\n    MOBILE_WEB: 'mobile-web',\n    MOBILE_APP: 'mobile-app'\n};\n\n/**\n * @readonly\n * @enum {!string}\n */\nmodule.exports.Agent = {\n    ALL: 'all-agents',\n    USER: 'user',\n    SPIDER: 'spider',\n    BOT: 'bot'\n};\n\n/**\n * @readonly\n * @enum {!string}\n */\nmodule.exports.Granularity = {\n    DAILY: 'daily'\n};\n\n/**\n * @private {!Object} app\n * @private {!string} apiDomain RESTBase API domain; e.g., wikimedia.org\n * @private {!Object} req\n */\nmodule.exports.Client = class {\n    /**\n     * @param {!Object} req original Request object\n     * @param {!Object} restReq new Request object for the Pageviews API\n     */\n    constructor(req, restReq) {\n        this.req = req;\n        this.restReq = restReq;\n    }\n\n    /**\n     * @param {!string} domain Top level project domain to filter; e.g., de.wikipedia\n     * @param {!Platform} platform Device platform to filter\n     * @param {!Agent} agent User agent to filter\n     * @param {!string} title Normalized article title\n     * @param {!Granularity} granularity Result time unit\n     * @param {!Date} start Inclusive start date\n     * @param {!Date} end Inclusive end date\n     * @return {!Promise} Daily pageviews on domain from platform for title from [start, end]\n     */\n    reqPage(domain, platform, agent, title, granularity, start, end) {\n        const titleEncoded = encodeURIComponent(title);\n        const startStr = dateUtil.formatYYYYMMDD(start);\n        const endStr = dateUtil.formatYYYYMMDD(end);\n        const path = `metrics/pageviews/per-article/${ domain }/${ platform }/${ agent }/${ titleEncoded }/${ granularity }/${ startStr }/${ endStr }`;\n        return api.restGatewayGet(this.req, path, this.restReq);\n    }\n\n    /**\n     * @param {!string} domain Top level project domain to filter; e.g., de.wikipedia\n     * @param {!Platform} platform Device platform to filter\n     * @param {!Date} date\n     * @return {!Promise} Top pageviews on domain from platform for date\n     */\n    reqTop(domain, platform, date) {\n        const year = date.getUTCFullYear();\n        const month = dateUtil.pad(date.getUTCMonth() + 1);\n        const day = dateUtil.pad(date.getUTCDate());\n        const path = `metrics/pageviews/top/${ domain }/${ platform }/${ year }/${ month }/${ day }`;\n        return api.restGatewayGet(this.req, path, this.restReq);\n    }\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/parsoid.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/random.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'score' is already declared in the upper scope on line 31 column 10.","line":38,"column":9,"nodeType":"Identifier","messageId":"noShadow","endLine":38,"endColumn":14},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"scoredResults\" type.","line":55,"column":1,"nodeType":"Block","endLine":55,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Random article promise and related support functions.\n */\n\n'use strict';\n\nconst api = require('./api-util');\nconst util = require('./util');\nconst si = require('./siteinfo');\nconst BBPromise = require('bluebird');\n\n/**\n * Returns a numeric score which can be used to roughly determine the relative \"quality\" of random\n * results.\n *\n * Scores are calculated as follows:\n *\n * 2 points for having:\n *   thumb url\n *\n * 1 point for having:\n *   wikidataDescription\n *\n * -10 point for being:\n *   disambiguation page\n *   list item page\n *\n * @param {?Object} page Page object from MW API\n * @return {!number} quality score\n */\nfunction score(page) {\n\n    const isDisambiguationPage = (page.pageprops && page.pageprops.disambiguation) ||\n        (page.description && page.description.includes('disambiguation page'));\n\n    const isListPage = page.description && page.description.includes('Wikimedia list article');\n\n    let score = 0.0;\n\n    if (page.pageprops && (page.pageprops.page_image || page.pageprops.page_image_free)) {\n        score += 2.0;\n    }\n    if (page.description) {\n        score += 1.0;\n    }\n    if (isDisambiguationPage || isListPage) {\n        score -= 10.0;\n    }\n    return score;\n}\n\n/**\n * Returns random page from max score pages list.\n *\n * @param scoredResults\n * @return {*}\n */\nfunction pickBestResult(scoredResults) {\n    const maxScore = Math.max.apply(\n        scoredResults,\n        scoredResults.map(function (page) {\n            return page.score;\n        })\n    );\n    const scoredPagesFiltered = scoredResults.filter((page) => page.score === maxScore);\n\n    return scoredPagesFiltered[Math.floor(Math.random() * scoredPagesFiltered.length)];\n}\n\n/**\n * Returns a single random result well suited to card-type layouts, i.e.\n * one likely to have a page image and wikidata description.\n *\n * Multiple random items are requested, but only the result having\n * the highest relative score is returned. Requesting about 12 items\n * seems to consistently produce a really \"good\" result.\n *\n * @param {!Object} req Request object\n * @return {!Promise}\n */\nfunction promise(req) {\n    const itemsToRequest = 12;\n    return BBPromise.join(\n        si.getSiteInfo(req),\n        api.mwApiGet(req, {\n            action: 'query',\n            format: 'json',\n            formatversion: 2,\n            generator: 'random',\n            grnfilterredir: 'nonredirects',\n            grnlimit: itemsToRequest,\n            grnnamespace: 0,\n            prop: 'description|pageprops'\n        }),\n        (siteinfo, queryResponse) => {\n            const pages = queryResponse.body.query.pages;\n            const scoredPages = pages.map((page) => Object.assign(page, { score: score(page) }));\n            const bestResult = pickBestResult(scoredPages);\n            return util.getDbTitle(bestResult.title, siteinfo);\n        });\n}\n\nmodule.exports = {\n    promise,\n\n    // visible for testing\n    pickBestResult\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/siteinfo.js","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":3,"column":1,"nodeType":"Program","messageId":"global","endLine":61,"endColumn":34},{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":12,"column":29,"nodeType":"Literal","endLine":12,"endColumn":55}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"// use strict;\n\nconst api = require('./api-util');\n\nconst siteInfoCache = {};\n\nfunction findSharedRepoDomain(siteInfoRes) {\n    const sharedRepo = (siteInfoRes.body.query.repos || []).find((repo) => {\n        return repo.name === 'shared';\n    });\n    if (sharedRepo) {\n        const domainMatch = /^((:?https?:)?\\/\\/[^/]+)/.exec(sharedRepo.descBaseUrl);\n        if (domainMatch) {\n            return domainMatch[0];\n        }\n    }\n}\n\n/**\n * Builds a request for siteinfo data for the MW site for the request domain.\n *\n * @param {!Object} req the request object\n * @return {!Promise} a promise resolving as an JSON object containing the response\n */\nfunction getSiteInfo(req) {\n    const rp = req.params;\n    if (!siteInfoCache[rp.domain]) {\n        const query = {\n            action: 'query',\n            meta: 'siteinfo|allmessages',\n            siprop: 'general|languagevariants|namespaces|namespacealiases|specialpagealiases',\n            ammessages: 'toc'\n        };\n        siteInfoCache[rp.domain] = api.mwApiGet(req, query)\n            .then((res) => {\n                const general = res.body.query.general;\n                const allmessages = res.body.query.allmessages;\n\n                return {\n                    general: {\n                        mainpage: general.mainpage,\n                        lang: general.lang,\n                        legaltitlechars: general.legaltitlechars,\n                        case: general.case,\n                        mobileserver: general.mobileserver,\n                        toctitle: allmessages[0].content\n                    },\n                    variants: res.body.query.languagevariants &&\n                        res.body.query.languagevariants[general.lang] &&\n                        Object.keys(res.body.query.languagevariants[general.lang]),\n                    namespaces: res.body.query.namespaces,\n                    namespacealiases: res.body.query.namespacealiases,\n                    specialpagealiases: res.body.query.specialpagealiases,\n                    sharedRepoRootURI: findSharedRepoDomain(res)\n                };\n            });\n    }\n    return siteInfoCache[rp.domain];\n}\n\nmodule.exports = { getSiteInfo };\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/swagger-ui.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/lib/util.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":104,"column":1,"nodeType":"Block","endLine":104,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":142,"column":1,"nodeType":"Block","endLine":142,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Router' is undefined.","line":222,"column":1,"nodeType":"Block","endLine":222,"endColumn":1},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":280,"column":1,"nodeType":"Block","endLine":286,"endColumn":4},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":293,"column":1,"nodeType":"Block","endLine":298,"endColumn":4},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":306,"column":1,"nodeType":"Block","endLine":311,"endColumn":4},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'Application' is undefined.","line":379,"column":1,"nodeType":"Block","endLine":379,"endColumn":1},{"ruleId":"default-param-last","severity":1,"message":"Default parameters should be last.","line":451,"column":34,"nodeType":"AssignmentPattern","messageId":"shouldBeLast","endLine":451,"endColumn":57}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst preq = require('preq');\nconst express = require('express');\nconst assert = require('assert');\nconst uuidv1 = require('uuid').v1;\nconst bunyan = require('bunyan');\nconst uuid = require('cassandra-uuid');\n\n// service-specific deps\nconst Title = require('mediawiki-title').Title;\n\n/**\n * Error instance wrapping HTTP error responses\n */\nclass HTTPError extends Error {\n\n    constructor(response) {\n        super();\n        Error.captureStackTrace(this, HTTPError);\n\n        if (response.constructor !== Object) {\n            // just assume this is just the error message\n            response = {\n                status: 500,\n                type: 'internal_error',\n                title: 'InternalError',\n                detail: response\n            };\n        }\n\n        this.name = this.constructor.name;\n        this.message = `${ response.status }`;\n        if (response.type) {\n            this.message += `: ${ response.type }`;\n        }\n\n        Object.assign(this, response);\n    }\n}\n\n/**\n * Generates an object suitable for logging out of a request object\n *\n * @param {!Request} req          the request\n * @param {?RegExp}  allowListRegExp  the RegExp used to filter headers\n * @return {!Object} an object containing the key components of the request\n */\nfunction reqForLog(req, allowListRegExp) {\n\n    const ret = {\n        url: req.originalUrl,\n        headers: {},\n        method: req.method,\n        params: req.params,\n        query: req.query,\n        body: req.body,\n        remoteAddress: req.connection.remoteAddress,\n        remotePort: req.connection.remotePort\n    };\n\n    if (req.headers && allowListRegExp) {\n        Object.keys(req.headers).forEach((hdr) => {\n            if (allowListRegExp.test(hdr)) {\n                ret.headers[hdr] = req.headers[hdr];\n            }\n        });\n    }\n\n    return ret;\n\n}\n\n/**\n * Serialises an error object in a form suitable for logging.\n *\n * @param {!Error} err error to serialise\n * @return {!Object} the serialised version of the error\n */\nfunction errForLog(err) {\n\n    const ret = bunyan.stdSerializers.err(err);\n    ret.status = err.status;\n    ret.type = err.type;\n    ret.detail = err.detail;\n\n    // log the stack trace only for 500 errors\n    if (Number.parseInt(ret.status, 10) !== 500) {\n        ret.stack = undefined;\n    }\n\n    return ret;\n\n}\n\n/**\n * Wraps all of the given router's handler functions with\n * promised try blocks so as to allow catching all errors,\n * regardless of whether a handler returns/uses promises\n * or not.\n *\n * @param {!Object} route the object containing the router and path to bind it to\n * @param {!Application} app the application object\n */\nfunction wrapRouteHandlers(route, app) {\n\n    route.router.stack.forEach((routerLayer) => {\n        let path = (route.path + routerLayer.route.path.slice(1))\n            .replace(/\\/:/g, '/--')\n            .replace(/^\\//, '')\n            .replace(/[/?]+$/, '');\n        path = app.metrics.normalizeName(path || 'root');\n        routerLayer.route.stack.forEach((layer) => {\n            const origHandler = layer.handle;\n            layer.handle = (req, res, next) => {\n                const startTime = Date.now();\n                BBPromise.try(() => origHandler(req, res, next))\n                .catch(next)\n                .finally(() => {\n                    let statusCode = parseInt(res.statusCode, 10) || 500;\n                    if (statusCode < 100 || statusCode > 599) {\n                        statusCode = 500;\n                    }\n                    const statusClass = `${ Math.floor(statusCode / 100) }xx`;\n                    const stat = `${ path }.${ req.method }.`;\n                    app.metrics.endTiming([\n                        stat + statusCode,\n                        stat + statusClass,\n                        `${ stat }ALL`\n                    ], startTime);\n                });\n            };\n        });\n    });\n\n}\n\n/**\n * Generates an error handler for the given applications and installs it.\n *\n * @param {!Application} app the application object to add the handler to\n */\nfunction setErrorHandler(app) {\n\n    app.use((err, req, res, next) => {\n        let errObj;\n        // ensure this is an HTTPError object\n        if (err.constructor === HTTPError) {\n            errObj = err;\n        } else if (err instanceof Error) {\n            // is this an HTTPError defined elsewhere? (preq)\n            if (err.constructor.name === 'HTTPError') {\n                const o = { status: err.status };\n                if (err.body && err.body.constructor === Object) {\n                    Object.keys(err.body).forEach((key) => {\n                        o[key] = err.body[key];\n                    });\n                } else {\n                    o.detail = err.body;\n                }\n                o.message = err.message;\n                errObj = new HTTPError(o);\n            } else {\n                // this is a standard error, convert it\n                errObj = new HTTPError({\n                    status: 500,\n                    type: 'internal_error',\n                    title: err.name,\n                    detail: err.detail || err.message,\n                    stack: err.stack\n                });\n            }\n        } else if (err.constructor === Object) {\n            // this is a regular object, suppose it's a response\n            errObj = new HTTPError(err);\n        } else {\n            // just assume this is just the error message\n            errObj = new HTTPError({\n                status: 500,\n                type: 'internal_error',\n                title: 'InternalError',\n                detail: err\n            });\n        }\n        // ensure some important error fields are present\n        errObj.status = errObj.status || 500;\n        errObj.type = errObj.type || 'internal_error';\n        // add the offending URI and method as well\n        errObj.method = errObj.method || req.method;\n        errObj.uri = errObj.uri || req.url;\n        // some set 'message' or 'description' instead of 'detail'\n        errObj.detail = errObj.detail || errObj.message || errObj.description || '';\n        // adjust the log level based on the status code\n        let level = 'error';\n        if (Number.parseInt(errObj.status, 10) < 400) {\n            level = 'trace';\n        } else if (Number.parseInt(errObj.status, 10) < 500) {\n            level = 'info';\n        }\n        // log the error\n        const component = (errObj.component ? errObj.component : errObj.status);\n        (req.logger || app.logger).log(`${ level }/${ component }`, errForLog(errObj));\n        // let through only non-sensitive info\n        const respBody = {\n            status: errObj.status,\n            type: errObj.type,\n            title: errObj.title,\n            detail: errObj.detail,\n            method: errObj.method,\n            uri: errObj.uri\n        };\n        res.status(errObj.status).json(respBody);\n    });\n\n}\n\n/**\n * Creates a new router with some default options.\n *\n * @param {?Object} [opts] additional options to pass to express.Router()\n * @return {!Router} a new router object\n */\nfunction createRouter(opts) {\n\n    const options = {\n        mergeParams: true\n    };\n\n    if (opts && opts.constructor === Object) {\n        Object.assign(options, opts);\n    }\n\n    return new express.Router(options);\n\n}\n\nfunction removeFragment(href) {\n    if (href.includes('#')) {\n        return href.slice(0, Math.max(0, href.indexOf('#')));\n    }\n    return href;\n}\n\nfunction removeLinkPrefix(href) {\n    return href.replace(/^\\.\\//, '');\n}\n\nfunction extractDbTitleFromAnchor(anchor) {\n    // T308096: Use the original title without language conversion\n    if (anchor && anchor.getAttribute('data-mw-variant-orig')) {\n        return removeFragment(anchor.getAttribute('data-mw-variant-orig'));\n    }\n    return anchor && removeFragment(removeLinkPrefix(anchor.getAttribute('href')));\n}\n\nfunction getRbPageSummaryUrl(restbaseTpl, domain, title) {\n    const request = restbaseTpl.expand({\n        request: {\n            params: {\n                domain,\n                path: `page/summary/${ encodeURIComponent(title) }`\n            }\n        }\n    });\n    return request.uri;\n}\n\n/**\n * Get a Title object for a MW title string\n *\n * @param {!string} title a MediaWiki page title string\n * @param {!Object} siteinfo siteinfo from the MW API\n * @return {!string} a mediawiki-title Title object that can be used to obtain a db-normalized title\n */\nfunction getDbTitle(title, siteinfo) {\n    return Title.newFromText(title, siteinfo).getPrefixedDBKey();\n}\n\n/**\n * Retrieves the etag from the headers if present. Strips the weak etag prefix (W/) and enclosing\n * quotes.\n *\n * @param {?Object} headers an object of header name/values\n * @return {?string} etag\n */\nfunction getEtagFromHeaders(headers) {\n    if (headers && headers.etag) {\n        return headers.etag.replace(/^W\\//, '').replace(/\"/g, '');\n    }\n}\n\n/**\n * Retrieves the revision from the etag emitted by Parsoid.\n *\n * @param {?Object} headers an object of header name/values\n * @return {?string} revision portion of etag, if found\n */\nfunction getRevisionFromEtag(headers) {\n    const etag = getEtagFromHeaders(headers);\n    if (etag) {\n        return etag.split('/').shift();\n    }\n}\n\n/**\n * Retrieves the revision and tid from the etag emitted by Parsoid.\n *\n * @param {?Object} headers an object of header name/values\n * @return {?Object} revision and tid from etag, if found\n */\nfunction getRevAndTidFromEtag(headers) {\n    const etag = getEtagFromHeaders(headers);\n    if (etag) {\n        const etagComponents = etag.split('/');\n        return {\n            revision: etagComponents[0],\n            tid: etagComponents[1]\n        };\n    }\n}\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\"<<\"] }] */\nfunction hashCode(string) {\n    return string.split('').reduce((prevHash, currVal) =>\n        ((prevHash << 5) - prevHash) + currVal.charCodeAt(0), 0);\n}\n\n/**\n * Remove the top-level domain from a domain string, e.g., 'en.wikipedia.org' ->\n * 'en.wikipedia'.\n *\n * @param {!string} domain domain string\n * @return {!string} domain string minus the TLD\n */\nfunction removeTLD(domain) {\n    return domain.split('.').slice(0, 2).join('.');\n}\n\n/**\n * Sets the ETag header on the response object, comprised of the revision ID and\n * the time UUID. If the latter is not given, the current time stamp is used to\n * generate it.\n *\n * @param {!Object} response The HTTPResponse object on which to set the header\n * @param {?number} revision The revision integer ID to use\n * @param {?string} tid      The time UUID to use; optional\n */\nfunction setETag(response, revision, tid = undefined) {\n    assert(['string', 'number'].includes(typeof revision));\n    assert(['string', 'undefined'].includes(typeof tid));\n    if (!tid) {\n        tid = uuid.TimeUuid.now().toString();\n    }\n    response.set('etag', `\"${ revision }/${ tid }\"`);\n}\n\nfunction getContentTypeString(spec) {\n    return `${ spec.type }; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/${ spec.name }/${ spec.version }\"`;\n}\n\nfunction setContentType(res, spec) {\n    if (!spec.name || !spec.version) {\n        throw new HTTPError({\n            status: 500,\n            type: 'invalid_content_type',\n            title: 'Only use the allowed content-types',\n            detail: `${ spec.name }/${ spec.version } is not an allowed content-type!`\n        });\n    }\n\n    res.type(getContentTypeString(spec));\n}\n\n/**\n * Adds logger to the request and logs it.\n *\n * @param {!*} req request object\n * @param {!Application} app application object\n */\nfunction initAndLogRequest(req, app) {\n    req.headers = req.headers || {};\n    req.headers['x-request-id'] = req.headers['x-request-id'] || uuidv1();\n    req.logger = app.logger.child({\n        request_id: req.headers['x-request-id'],\n        request: reqForLog(req, app.conf.log_header_allowlist)\n    });\n    req.context = { reqId: req.headers['x-request-id'] };\n    req.issueRequest = (request) => {\n        if (!(request.constructor === Object)) {\n            request = { uri: request };\n        }\n        if (request.url) {\n            request.uri = request.url;\n            delete request.url;\n        }\n        if (!request.uri) {\n            return BBPromise.reject(new HTTPError({\n                status: 500,\n                type: 'internal_error',\n                title: 'No request to issue',\n                detail: 'No request has been specified'\n            }));\n        }\n        request.method = request.method || 'get';\n        request.headers = request.headers || {};\n        Object.assign(request.headers, {\n            'user-agent': app.conf.user_agent,\n            'x-request-id': req.context.reqId\n        });\n        req.logger.log('trace/req', { msg: 'Outgoing request', out_request: request });\n        return preq(request);\n    };\n    req.logger.log('trace/req', { msg: 'Incoming request' });\n}\n\n/**\n * Remove entries with duplicate 'title' values from an array of objects\n *\n * @param {?Array}      arr Array of page/article objects\n * @param {?Function}   upd Optional function to update the original item based on the duplicate.\n *                          Takes two parameters (orig, dupe): orig - the original object,\n *                          dupe - the duplicate\n * @return {?Array}         arr deduplicated by 'title'\n */\nfunction removeDuplicateTitles(arr, upd) {\n    const titles = {};\n    return arr.filter((item, idx, init) => {\n        if (titles[item.title]) {\n            if (upd) {\n                const orig = init[init.findIndex((el) => el.title === item.title)];\n                upd(orig, item);\n            }\n            return false;\n        }\n        titles[item.title] = true;\n        return true;\n    });\n}\n\n/**\n * For a free-form object nested object with promises, awaits all promises in parallel.\n *\n * @param {!Object} object\n * @param {boolean} ignoreRejections whether to ignore rejected promises.\n *                  If true, rejected promises are ignored and removed from the object.\n *                  If false, the first rejection is propagated to the returned promise.\n * @param {Object} logger optional logger to log promise rejections.\n * @return {Promise<Object>}\n */\nfunction promiseAwaitAll(object, ignoreRejections = true, logger) {\n    const promises = [];\n    function collectPromises(subObject, replaceCallback, removeCallback) {\n        if (subObject instanceof BBPromise) {\n            promises.push(subObject\n            .then(\n                (value) => replaceCallback(value),\n                (err) => {\n                    if (ignoreRejections) {\n                        if (logger) {\n                            logger.log('warn', err);\n                        }\n                        removeCallback();\n                    } else {\n                        throw err;\n                    }\n                }\n            ));\n        } else if (Array.isArray(subObject)) {\n            subObject.forEach((item) =>\n                collectPromises(\n                    item,\n                    (value) => {\n                        subObject[subObject.indexOf(item)] = value;\n                    },\n                    () => {\n                        subObject.splice(subObject.indexOf(item), 1);\n                    }));\n        } else if (typeof subObject === 'object') {\n            Object.keys(subObject).forEach((key) => {\n                collectPromises(\n                    subObject[key],\n                    (value) => {\n                        subObject[key] = value;\n                    },\n                    () => {\n                        delete subObject[key];\n                    });\n            });\n        }\n    }\n    collectPromises(object);\n    return BBPromise.all(promises).thenReturn(object);\n}\n\nconst CONTENT_TYPES = {\n    html: { name: 'HTML', version: '2.1.0', type: 'text/html' },\n    announcements: { name: 'Announcements', version: '0.3.0', type: 'application/json' },\n    onthisday: { name: 'OnThisDay', version: '0.5.0', type: 'application/json' },\n    availability: { name: 'Availability', version: '1.0.1', type: 'application/json' },\n    random: { name: 'Random', version: '0.7.0', type: 'application/json' },\n    unpublished: { name: 'Unpublished', version: '0.0.0', type: 'application/json' }\n};\n\nmodule.exports = {\n    HTTPError,\n    initAndLogRequest,\n    wrapRouteHandlers,\n    setErrorHandler,\n    router: createRouter,\n\n    // service-specific\n    extractDbTitleFromAnchor,\n    getContentTypeString,\n    getRbPageSummaryUrl,\n    getDbTitle,\n    getRevisionFromEtag,\n    getRevAndTidFromEtag,\n    hashCode,\n    removeTLD,\n    setETag,\n    setContentType,\n    promiseAwaitAll,\n    removeDuplicateTitles,\n    CONTENT_TYPES\n};\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":1,"column":1,"nodeType":"Program","messageId":"global","endLine":7134,"endColumn":3}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n\t\"name\": \"@wikimedia/wikifeeds\",\n\t\"version\": \"1.0.0\",\n\t\"lockfileVersion\": 3,\n\t\"requires\": true,\n\t\"packages\": {\n\t\t\"\": {\n\t\t\t\"name\": \"@wikimedia/wikifeeds\",\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"license\": \"Apache-2.0\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"axios\": \"^1.6.7\",\n\t\t\t\t\"axios-retry\": \"^4.0.0\",\n\t\t\t\t\"bluebird\": \"^3.7.2\",\n\t\t\t\t\"body-parser\": \"^1.20.2\",\n\t\t\t\t\"bunyan\": \"^1.8.15\",\n\t\t\t\t\"cassandra-uuid\": \"^0.1.0\",\n\t\t\t\t\"compression\": \"^1.7.4\",\n\t\t\t\t\"domino\": \"^2.1.6\",\n\t\t\t\t\"express\": \"^4.18.2\",\n\t\t\t\t\"http-shutdown\": \"^1.2.2\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"lodash\": \"^4.17.21\",\n\t\t\t\t\"mediawiki-title\": \"^0.7.5\",\n\t\t\t\t\"preq\": \"^0.5.14\",\n\t\t\t\t\"service-runner\": \"^3.1.0\",\n\t\t\t\t\"striptags\": \"^3.2.0\",\n\t\t\t\t\"swagger-router\": \"^0.7.4\",\n\t\t\t\t\"swagger-ui-dist\": \"^5.11.7\",\n\t\t\t\t\"uuid\": \"^9.0.1\"\n\t\t\t},\n\t\t\t\"devDependencies\": {\n\t\t\t\t\"ajv\": \"^8.12.0\",\n\t\t\t\t\"ajv-formats\": \"^2.1.1\",\n\t\t\t\t\"csv-parse\": \"^5.5.3\",\n\t\t\t\t\"eslint\": \"^8.56.0\",\n\t\t\t\t\"eslint-config-wikimedia\": \"0.27.0\",\n\t\t\t\t\"eslint-plugin-n\": \"^16.6.2\",\n\t\t\t\t\"extend\": \"^3.0.2\",\n\t\t\t\t\"mocha\": \"^10.3.0\",\n\t\t\t\t\"mocha-lcov-reporter\": \"^1.3.0\",\n\t\t\t\t\"mocha.parallel\": \"^0.15.6\",\n\t\t\t\t\"nock\": \"^13.5.3\",\n\t\t\t\t\"nyc\": \"^15.1.0\",\n\t\t\t\t\"path\": \"^0.12.7\",\n\t\t\t\t\"pre-commit\": \"^1.2.2\",\n\t\t\t\t\"rss-parser\": \"^3.13.0\",\n\t\t\t\t\"sinon\": \"^17.0.1\",\n\t\t\t\t\"underscore\": \"^1.13.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@aashutoshrathi/word-wrap\": {\n\t\t\t\"version\": \"1.2.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz\",\n\t\t\t\"integrity\": \"sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@ampproject/remapping\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@jridgewell/gen-mapping\": \"^0.3.5\",\n\t\t\t\t\"@jridgewell/trace-mapping\": \"^0.3.24\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/code-frame\": {\n\t\t\t\"version\": \"7.24.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz\",\n\t\t\t\"integrity\": \"sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/highlight\": \"^7.24.2\",\n\t\t\t\t\"picocolors\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/compat-data\": {\n\t\t\t\"version\": \"7.24.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz\",\n\t\t\t\"integrity\": \"sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/core\": {\n\t\t\t\"version\": \"7.24.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz\",\n\t\t\t\"integrity\": \"sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@ampproject/remapping\": \"^2.2.0\",\n\t\t\t\t\"@babel/code-frame\": \"^7.24.2\",\n\t\t\t\t\"@babel/generator\": \"^7.24.4\",\n\t\t\t\t\"@babel/helper-compilation-targets\": \"^7.23.6\",\n\t\t\t\t\"@babel/helper-module-transforms\": \"^7.23.3\",\n\t\t\t\t\"@babel/helpers\": \"^7.24.4\",\n\t\t\t\t\"@babel/parser\": \"^7.24.4\",\n\t\t\t\t\"@babel/template\": \"^7.24.0\",\n\t\t\t\t\"@babel/traverse\": \"^7.24.1\",\n\t\t\t\t\"@babel/types\": \"^7.24.0\",\n\t\t\t\t\"convert-source-map\": \"^2.0.0\",\n\t\t\t\t\"debug\": \"^4.1.0\",\n\t\t\t\t\"gensync\": \"^1.0.0-beta.2\",\n\t\t\t\t\"json5\": \"^2.2.3\",\n\t\t\t\t\"semver\": \"^6.3.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/babel\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/convert-source-map\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/core/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/generator\": {\n\t\t\t\"version\": \"7.24.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz\",\n\t\t\t\"integrity\": \"sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/types\": \"^7.24.0\",\n\t\t\t\t\"@jridgewell/gen-mapping\": \"^0.3.5\",\n\t\t\t\t\"@jridgewell/trace-mapping\": \"^0.3.25\",\n\t\t\t\t\"jsesc\": \"^2.5.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/generator/node_modules/jsesc\": {\n\t\t\t\"version\": \"2.5.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz\",\n\t\t\t\"integrity\": \"sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"jsesc\": \"bin/jsesc\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-compilation-targets\": {\n\t\t\t\"version\": \"7.23.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz\",\n\t\t\t\"integrity\": \"sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/compat-data\": \"^7.23.5\",\n\t\t\t\t\"@babel/helper-validator-option\": \"^7.23.5\",\n\t\t\t\t\"browserslist\": \"^4.22.2\",\n\t\t\t\t\"lru-cache\": \"^5.1.1\",\n\t\t\t\t\"semver\": \"^6.3.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-compilation-targets/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-environment-visitor\": {\n\t\t\t\"version\": \"7.22.20\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz\",\n\t\t\t\"integrity\": \"sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-function-name\": {\n\t\t\t\"version\": \"7.23.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz\",\n\t\t\t\"integrity\": \"sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/template\": \"^7.22.15\",\n\t\t\t\t\"@babel/types\": \"^7.23.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-hoist-variables\": {\n\t\t\t\"version\": \"7.22.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz\",\n\t\t\t\"integrity\": \"sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/types\": \"^7.22.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-module-imports\": {\n\t\t\t\"version\": \"7.24.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz\",\n\t\t\t\"integrity\": \"sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/types\": \"^7.24.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-module-transforms\": {\n\t\t\t\"version\": \"7.23.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz\",\n\t\t\t\"integrity\": \"sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-environment-visitor\": \"^7.22.20\",\n\t\t\t\t\"@babel/helper-module-imports\": \"^7.22.15\",\n\t\t\t\t\"@babel/helper-simple-access\": \"^7.22.5\",\n\t\t\t\t\"@babel/helper-split-export-declaration\": \"^7.22.6\",\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.22.20\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"@babel/core\": \"^7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-simple-access\": {\n\t\t\t\"version\": \"7.22.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz\",\n\t\t\t\"integrity\": \"sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/types\": \"^7.22.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-split-export-declaration\": {\n\t\t\t\"version\": \"7.22.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz\",\n\t\t\t\"integrity\": \"sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/types\": \"^7.22.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-string-parser\": {\n\t\t\t\"version\": \"7.24.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz\",\n\t\t\t\"integrity\": \"sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-validator-identifier\": {\n\t\t\t\"version\": \"7.22.20\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz\",\n\t\t\t\"integrity\": \"sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helper-validator-option\": {\n\t\t\t\"version\": \"7.23.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz\",\n\t\t\t\"integrity\": \"sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/helpers\": {\n\t\t\t\"version\": \"7.24.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz\",\n\t\t\t\"integrity\": \"sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/template\": \"^7.24.0\",\n\t\t\t\t\"@babel/traverse\": \"^7.24.1\",\n\t\t\t\t\"@babel/types\": \"^7.24.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight\": {\n\t\t\t\"version\": \"7.24.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.22.20\",\n\t\t\t\t\"chalk\": \"^2.4.2\",\n\t\t\t\t\"js-tokens\": \"^4.0.0\",\n\t\t\t\t\"picocolors\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/ansi-styles\": {\n\t\t\t\"version\": \"3.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"color-convert\": \"^1.9.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/chalk\": {\n\t\t\t\"version\": \"2.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^3.2.1\",\n\t\t\t\t\"escape-string-regexp\": \"^1.0.5\",\n\t\t\t\t\"supports-color\": \"^5.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/color-convert\": {\n\t\t\t\"version\": \"1.9.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz\",\n\t\t\t\"integrity\": \"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"color-name\": \"1.1.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/color-name\": {\n\t\t\t\"version\": \"1.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/escape-string-regexp\": {\n\t\t\t\"version\": \"1.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/has-flag\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/highlight/node_modules/supports-color\": {\n\t\t\t\"version\": \"5.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"has-flag\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/parser\": {\n\t\t\t\"version\": \"7.24.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz\",\n\t\t\t\"integrity\": \"sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"parser\": \"bin/babel-parser.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/template\": {\n\t\t\t\"version\": \"7.24.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/code-frame\": \"^7.23.5\",\n\t\t\t\t\"@babel/parser\": \"^7.24.0\",\n\t\t\t\t\"@babel/types\": \"^7.24.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse\": {\n\t\t\t\"version\": \"7.24.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/code-frame\": \"^7.24.1\",\n\t\t\t\t\"@babel/generator\": \"^7.24.1\",\n\t\t\t\t\"@babel/helper-environment-visitor\": \"^7.22.20\",\n\t\t\t\t\"@babel/helper-function-name\": \"^7.23.0\",\n\t\t\t\t\"@babel/helper-hoist-variables\": \"^7.22.5\",\n\t\t\t\t\"@babel/helper-split-export-declaration\": \"^7.22.6\",\n\t\t\t\t\"@babel/parser\": \"^7.24.1\",\n\t\t\t\t\"@babel/types\": \"^7.24.0\",\n\t\t\t\t\"debug\": \"^4.3.1\",\n\t\t\t\t\"globals\": \"^11.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse/node_modules/globals\": {\n\t\t\t\"version\": \"11.12.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-11.12.0.tgz\",\n\t\t\t\"integrity\": \"sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@babel/traverse/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@babel/types\": {\n\t\t\t\"version\": \"7.24.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz\",\n\t\t\t\"integrity\": \"sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-string-parser\": \"^7.23.4\",\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.22.20\",\n\t\t\t\t\"to-fast-properties\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@es-joy/jsdoccomment\": {\n\t\t\t\"version\": \"0.42.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"comment-parser\": \"1.4.1\",\n\t\t\t\t\"esquery\": \"^1.5.0\",\n\t\t\t\t\"jsdoc-type-pratt-parser\": \"~4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint-community/eslint-utils\": {\n\t\t\t\"version\": \"4.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^3.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^6.0.0 || ^7.0.0 || >=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint-community/regexpp\": {\n\t\t\t\"version\": \"4.10.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.0.0 || ^14.0.0 || >=16.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc\": {\n\t\t\t\"version\": \"2.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ajv\": \"^6.12.4\",\n\t\t\t\t\"debug\": \"^4.3.2\",\n\t\t\t\t\"espree\": \"^9.6.0\",\n\t\t\t\t\"globals\": \"^13.19.0\",\n\t\t\t\t\"ignore\": \"^5.2.0\",\n\t\t\t\t\"import-fresh\": \"^3.2.1\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"minimatch\": \"^3.1.2\",\n\t\t\t\t\"strip-json-comments\": \"^3.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/ajv\": {\n\t\t\t\"version\": \"6.12.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz\",\n\t\t\t\"integrity\": \"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"fast-json-stable-stringify\": \"^2.0.0\",\n\t\t\t\t\"json-schema-traverse\": \"^0.4.1\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@eslint/eslintrc/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@eslint/js\": {\n\t\t\t\"version\": \"8.57.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/config-array\": {\n\t\t\t\"version\": \"0.11.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz\",\n\t\t\t\"integrity\": \"sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@humanwhocodes/object-schema\": \"^2.0.2\",\n\t\t\t\t\"debug\": \"^4.3.1\",\n\t\t\t\t\"minimatch\": \"^3.0.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/config-array/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/config-array/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@humanwhocodes/module-importer\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12.22\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/nzakas\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@humanwhocodes/object-schema\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"camelcase\": \"^5.3.1\",\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"get-package-type\": \"^0.1.0\",\n\t\t\t\t\"js-yaml\": \"^3.13.1\",\n\t\t\t\t\"resolve-from\": \"^5.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/argparse\": {\n\t\t\t\"version\": \"1.0.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n\t\t\t\"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sprintf-js\": \"~1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml\": {\n\t\t\t\"version\": \"3.14.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz\",\n\t\t\t\"integrity\": \"sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^1.0.7\",\n\t\t\t\t\"esprima\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@istanbuljs/schema\": {\n\t\t\t\"version\": \"0.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/gen-mapping\": {\n\t\t\t\"version\": \"0.3.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz\",\n\t\t\t\"integrity\": \"sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@jridgewell/set-array\": \"^1.2.1\",\n\t\t\t\t\"@jridgewell/sourcemap-codec\": \"^1.4.10\",\n\t\t\t\t\"@jridgewell/trace-mapping\": \"^0.3.24\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/resolve-uri\": {\n\t\t\t\"version\": \"3.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/set-array\": {\n\t\t\t\"version\": \"1.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@jridgewell/sourcemap-codec\": {\n\t\t\t\"version\": \"1.4.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz\",\n\t\t\t\"integrity\": \"sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@jridgewell/trace-mapping\": {\n\t\t\t\"version\": \"0.3.25\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz\",\n\t\t\t\"integrity\": \"sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@jridgewell/resolve-uri\": \"^3.1.0\",\n\t\t\t\t\"@jridgewell/sourcemap-codec\": \"^1.4.14\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@mdn/browser-compat-data\": {\n\t\t\t\"version\": \"5.5.22\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.22.tgz\",\n\t\t\t\"integrity\": \"sha512-2v+HeCb1J4tAi4M9zMR1AtxMBA08q8HMDXbJ1H64sFpXhTU/8W2kBBjTL9TkUQiHaJDFFU6kAFBlsfslP253WA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@nodelib/fs.scandir\": {\n\t\t\t\"version\": \"2.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@nodelib/fs.stat\": \"2.0.5\",\n\t\t\t\t\"run-parallel\": \"^1.1.9\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@nodelib/fs.stat\": {\n\t\t\t\"version\": \"2.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@nodelib/fs.walk\": {\n\t\t\t\"version\": \"1.2.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz\",\n\t\t\t\"integrity\": \"sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@nodelib/fs.scandir\": \"2.1.5\",\n\t\t\t\t\"fastq\": \"^1.6.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/commons\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"type-detect\": \"4.0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/fake-timers\": {\n\t\t\t\"version\": \"11.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/samsam\": {\n\t\t\t\"version\": \"8.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^2.0.0\",\n\t\t\t\t\"lodash.get\": \"^4.4.2\",\n\t\t\t\t\"type-detect\": \"^4.0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"type-detect\": \"4.0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@sinonjs/text-encoding\": {\n\t\t\t\"version\": \"0.7.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@types/json-schema\": {\n\t\t\t\"version\": \"7.0.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz\",\n\t\t\t\"integrity\": \"sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@types/normalize-package-data\": {\n\t\t\t\"version\": \"2.4.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz\",\n\t\t\t\"integrity\": \"sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@types/semver\": {\n\t\t\t\"version\": \"7.5.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz\",\n\t\t\t\"integrity\": \"sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/scope-manager\": {\n\t\t\t\"version\": \"5.62.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz\",\n\t\t\t\"integrity\": \"sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/types\": \"5.62.0\",\n\t\t\t\t\"@typescript-eslint/visitor-keys\": \"5.62.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/types\": {\n\t\t\t\"version\": \"5.62.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz\",\n\t\t\t\"integrity\": \"sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree\": {\n\t\t\t\"version\": \"5.62.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz\",\n\t\t\t\"integrity\": \"sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/types\": \"5.62.0\",\n\t\t\t\t\"@typescript-eslint/visitor-keys\": \"5.62.0\",\n\t\t\t\t\"debug\": \"^4.3.4\",\n\t\t\t\t\"globby\": \"^11.1.0\",\n\t\t\t\t\"is-glob\": \"^4.0.3\",\n\t\t\t\t\"semver\": \"^7.3.7\",\n\t\t\t\t\"tsutils\": \"^3.21.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"typescript\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/typescript-estree/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/@typescript-eslint/utils\": {\n\t\t\t\"version\": \"5.62.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz\",\n\t\t\t\"integrity\": \"sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.2.0\",\n\t\t\t\t\"@types/json-schema\": \"^7.0.9\",\n\t\t\t\t\"@types/semver\": \"^7.3.12\",\n\t\t\t\t\"@typescript-eslint/scope-manager\": \"5.62.0\",\n\t\t\t\t\"@typescript-eslint/types\": \"5.62.0\",\n\t\t\t\t\"@typescript-eslint/typescript-estree\": \"5.62.0\",\n\t\t\t\t\"eslint-scope\": \"^5.1.1\",\n\t\t\t\t\"semver\": \"^7.3.7\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^6.0.0 || ^7.0.0 || ^8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/utils/node_modules/eslint-scope\": {\n\t\t\t\"version\": \"5.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"esrecurse\": \"^4.3.0\",\n\t\t\t\t\"estraverse\": \"^4.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/utils/node_modules/estraverse\": {\n\t\t\t\"version\": \"4.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@typescript-eslint/visitor-keys\": {\n\t\t\t\"version\": \"5.62.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz\",\n\t\t\t\"integrity\": \"sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/types\": \"5.62.0\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/typescript-eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/@ungap/structured-clone\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/accepts\": {\n\t\t\t\"version\": \"1.3.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz\",\n\t\t\t\"integrity\": \"sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mime-types\": \"~2.1.34\",\n\t\t\t\t\"negotiator\": \"0.6.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/acorn\": {\n\t\t\t\"version\": \"8.11.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz\",\n\t\t\t\"integrity\": \"sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"acorn\": \"bin/acorn\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/acorn-jsx\": {\n\t\t\t\"version\": \"5.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"acorn\": \"^6.0.0 || ^7.0.0 || ^8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/aggregate-error\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"clean-stack\": \"^2.0.0\",\n\t\t\t\t\"indent-string\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ajv\": {\n\t\t\t\"version\": \"8.12.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz\",\n\t\t\t\"integrity\": \"sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"json-schema-traverse\": \"^1.0.0\",\n\t\t\t\t\"require-from-string\": \"^2.0.2\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ajv-formats\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ajv\": \"^8.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"ajv\": \"^8.0.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"ajv\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ansi-colors\": {\n\t\t\t\"version\": \"4.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ansi-regex\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ansi-styles\": {\n\t\t\t\"version\": \"4.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"color-convert\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/ansi-styles?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/anymatch\": {\n\t\t\t\"version\": \"3.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"normalize-path\": \"^3.0.0\",\n\t\t\t\t\"picomatch\": \"^2.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/append-transform\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"default-require-extensions\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/archy\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/archy/-/archy-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/are-docs-informative\": {\n\t\t\t\"version\": \"0.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/argparse\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==\"\n\t\t},\n\t\t\"node_modules/array-flatten\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==\"\n\t\t},\n\t\t\"node_modules/array-union\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/asap\": {\n\t\t\t\"version\": \"2.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/asap/-/asap-2.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==\"\n\t\t},\n\t\t\"node_modules/asn1\": {\n\t\t\t\"version\": \"0.2.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz\",\n\t\t\t\"integrity\": \"sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safer-buffer\": \"~2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/assert-plus\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ast-metadata-inferer\": {\n\t\t\t\"version\": \"0.8.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz\",\n\t\t\t\"integrity\": \"sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@mdn/browser-compat-data\": \"^5.2.34\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/async\": {\n\t\t\t\"version\": \"0.9.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.2.tgz\",\n\t\t\t\"integrity\": \"sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==\"\n\t\t},\n\t\t\"node_modules/asynckit\": {\n\t\t\t\"version\": \"0.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==\"\n\t\t},\n\t\t\"node_modules/aws-sign2\": {\n\t\t\t\"version\": \"0.7.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz\",\n\t\t\t\"integrity\": \"sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/aws4\": {\n\t\t\t\"version\": \"1.12.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==\"\n\t\t},\n\t\t\"node_modules/axios\": {\n\t\t\t\"version\": \"1.6.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/axios/-/axios-1.6.8.tgz\",\n\t\t\t\"integrity\": \"sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"follow-redirects\": \"^1.15.6\",\n\t\t\t\t\"form-data\": \"^4.0.0\",\n\t\t\t\t\"proxy-from-env\": \"^1.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/axios-retry\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/axios-retry/-/axios-retry-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-svdth4H00yhlsjBbjfLQ/sMLkXqeLxhiFC1nE1JtkN/CIssGxqk0UwTEdrVjwA2gr3yJkAulwvDSIm4z4HyPvg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-retry-allowed\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"axios\": \"0.x || 1.x\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/balanced-match\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\",\n\t\t\t\"devOptional\": true\n\t\t},\n\t\t\"node_modules/bcrypt-pbkdf\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"tweetnacl\": \"^0.14.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/binary-extensions\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bindings\": {\n\t\t\t\"version\": \"1.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"file-uri-to-path\": \"1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bintrees\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==\"\n\t\t},\n\t\t\"node_modules/bl\": {\n\t\t\t\"version\": \"1.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bl/-/bl-1.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"readable-stream\": \"^2.3.5\",\n\t\t\t\t\"safe-buffer\": \"^5.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bluebird\": {\n\t\t\t\"version\": \"3.7.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz\",\n\t\t\t\"integrity\": \"sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==\"\n\t\t},\n\t\t\"node_modules/body-parser\": {\n\t\t\t\"version\": \"1.20.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bytes\": \"3.1.2\",\n\t\t\t\t\"content-type\": \"~1.0.5\",\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"destroy\": \"1.2.0\",\n\t\t\t\t\"http-errors\": \"2.0.0\",\n\t\t\t\t\"iconv-lite\": \"0.4.24\",\n\t\t\t\t\"on-finished\": \"2.4.1\",\n\t\t\t\t\"qs\": \"6.11.0\",\n\t\t\t\t\"raw-body\": \"2.5.2\",\n\t\t\t\t\"type-is\": \"~1.6.18\",\n\t\t\t\t\"unpipe\": \"1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\",\n\t\t\t\t\"npm\": \"1.2.8000 || >= 1.4.16\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/boolbase\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/brace-expansion\": {\n\t\t\t\"version\": \"1.1.11\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz\",\n\t\t\t\"integrity\": \"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\",\n\t\t\t\t\"concat-map\": \"0.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/braces\": {\n\t\t\t\"version\": \"3.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/braces/-/braces-3.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fill-range\": \"^7.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/browser-stdout\": {\n\t\t\t\"version\": \"1.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/browserslist\": {\n\t\t\t\"version\": \"4.23.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz\",\n\t\t\t\"integrity\": \"sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/ai\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"caniuse-lite\": \"^1.0.30001587\",\n\t\t\t\t\"electron-to-chromium\": \"^1.4.668\",\n\t\t\t\t\"node-releases\": \"^2.0.14\",\n\t\t\t\t\"update-browserslist-db\": \"^1.0.13\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"browserslist\": \"cli.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/browserslist-config-wikimedia\": {\n\t\t\t\"version\": \"0.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-F3O+12ud7ZwBaiB/RZIMGDgz3nEuXz8RhtdPB4Lkd/WVP5Vy77EqBWRMz4vJ64x8LTTH3BOaHCD2ZuUcgShqyQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/buffer-from\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/builtin-modules\": {\n\t\t\t\"version\": \"3.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/builtins\": {\n\t\t\t\"version\": \"5.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bunyan\": {\n\t\t\t\"version\": \"1.8.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz\",\n\t\t\t\"integrity\": \"sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==\",\n\t\t\t\"engines\": [\n\t\t\t\t\"node >=0.10.0\"\n\t\t\t],\n\t\t\t\"bin\": {\n\t\t\t\t\"bunyan\": \"bin/bunyan\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"dtrace-provider\": \"~0.8\",\n\t\t\t\t\"moment\": \"^2.19.3\",\n\t\t\t\t\"mv\": \"~2\",\n\t\t\t\t\"safe-json-stringify\": \"~1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/bunyan-syslog-udp\": {\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bunyan-syslog-udp/-/bunyan-syslog-udp-0.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-tY6iaw+iYbCjlsAgAyO4CeA7Usnj5VndygMfd2PcHK++626oMoHANcdsH5tq5VxRPsbk9M1fbuk0a5pX9axV2w==\"\n\t\t},\n\t\t\"node_modules/bytes\": {\n\t\t\t\"version\": \"3.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/caching-transform\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"hasha\": \"^5.0.0\",\n\t\t\t\t\"make-dir\": \"^3.0.0\",\n\t\t\t\t\"package-hash\": \"^4.0.0\",\n\t\t\t\t\"write-file-atomic\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/call-bind\": {\n\t\t\t\"version\": \"1.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-define-property\": \"^1.0.0\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"function-bind\": \"^1.1.2\",\n\t\t\t\t\"get-intrinsic\": \"^1.2.4\",\n\t\t\t\t\"set-function-length\": \"^1.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/callsites\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/camelcase\": {\n\t\t\t\"version\": \"5.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/caniuse-lite\": {\n\t\t\t\"version\": \"1.0.30001611\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz\",\n\t\t\t\"integrity\": \"sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/caniuse-lite\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/ai\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/caseless\": {\n\t\t\t\"version\": \"0.12.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz\",\n\t\t\t\"integrity\": \"sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==\"\n\t\t},\n\t\t\"node_modules/cassandra-uuid\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cassandra-uuid/-/cassandra-uuid-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XM/UdAVoXJWDcqxVqNe2agYat51C25g5m8nkJ2/ai3QvHwWsRx/+OlziD1c1/jYLlP7kcC1DMO2IF5ldt8EV+A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"long\": \"^4.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chalk\": {\n\t\t\t\"version\": \"4.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^4.1.0\",\n\t\t\t\t\"supports-color\": \"^7.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/chalk?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chokidar\": {\n\t\t\t\"version\": \"3.5.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz\",\n\t\t\t\"integrity\": \"sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"individual\",\n\t\t\t\t\t\"url\": \"https://paulmillr.com/funding/\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"anymatch\": \"~3.1.2\",\n\t\t\t\t\"braces\": \"~3.0.2\",\n\t\t\t\t\"glob-parent\": \"~5.1.2\",\n\t\t\t\t\"is-binary-path\": \"~2.1.0\",\n\t\t\t\t\"is-glob\": \"~4.0.1\",\n\t\t\t\t\"normalize-path\": \"~3.0.0\",\n\t\t\t\t\"readdirp\": \"~3.6.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8.10.0\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"fsevents\": \"~2.3.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chokidar/node_modules/glob-parent\": {\n\t\t\t\"version\": \"5.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-glob\": \"^4.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/chownr\": {\n\t\t\t\"version\": \"1.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==\"\n\t\t},\n\t\t\"node_modules/ci-info\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/sibiraj-s\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clarinet\": {\n\t\t\t\"version\": \"0.11.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/clarinet/-/clarinet-0.11.0.tgz\",\n\t\t\t\"integrity\": \"sha512-6hgoCgDgdyEtrXsk1tMomUl+S6wnslv2F1muNTOuhQemOhauR+Q0FtBdrj9k+qyIDLm0TVW0QMZ10aeWwRDgIA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"chrome\": \">=16.0.912\",\n\t\t\t\t\"firefox\": \">=0.8.0\",\n\t\t\t\t\"node\": \">=0.3.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clean-regexp\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"escape-string-regexp\": \"^1.0.5\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clean-regexp/node_modules/escape-string-regexp\": {\n\t\t\t\"version\": \"1.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/clean-stack\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/cliui\": {\n\t\t\t\"version\": \"7.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\",\n\t\t\t\t\"wrap-ansi\": \"^7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/color-convert\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"color-name\": \"~1.1.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/color-name\": {\n\t\t\t\"version\": \"1.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\"\n\t\t},\n\t\t\"node_modules/colors\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/colors/-/colors-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.1.90\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/combined-stream\": {\n\t\t\t\"version\": \"1.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"delayed-stream\": \"~1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/comment-parser\": {\n\t\t\t\"version\": \"1.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/commondir\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/compressible\": {\n\t\t\t\"version\": \"2.0.18\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz\",\n\t\t\t\"integrity\": \"sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mime-db\": \">= 1.43.0 < 2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/compression\": {\n\t\t\t\"version\": \"1.7.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/compression/-/compression-1.7.4.tgz\",\n\t\t\t\"integrity\": \"sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"accepts\": \"~1.3.5\",\n\t\t\t\t\"bytes\": \"3.0.0\",\n\t\t\t\t\"compressible\": \"~2.0.16\",\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"on-headers\": \"~1.0.2\",\n\t\t\t\t\"safe-buffer\": \"5.1.2\",\n\t\t\t\t\"vary\": \"~1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/compression/node_modules/bytes\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/concat-map\": {\n\t\t\t\"version\": \"0.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==\",\n\t\t\t\"devOptional\": true\n\t\t},\n\t\t\"node_modules/concat-stream\": {\n\t\t\t\"version\": \"1.6.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz\",\n\t\t\t\"integrity\": \"sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": [\n\t\t\t\t\"node >= 0.8\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"buffer-from\": \"^1.0.0\",\n\t\t\t\t\"inherits\": \"^2.0.3\",\n\t\t\t\t\"readable-stream\": \"^2.2.2\",\n\t\t\t\t\"typedarray\": \"^0.0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/content-disposition\": {\n\t\t\t\"version\": \"0.5.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz\",\n\t\t\t\"integrity\": \"sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"5.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/content-disposition/node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\",\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/content-type\": {\n\t\t\t\"version\": \"1.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/convert-source-map\": {\n\t\t\t\"version\": \"1.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/cookie\": {\n\t\t\t\"version\": \"0.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/cookie-signature\": {\n\t\t\t\"version\": \"1.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==\"\n\t\t},\n\t\t\"node_modules/core-js-compat\": {\n\t\t\t\"version\": \"3.37.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz\",\n\t\t\t\"integrity\": \"sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"browserslist\": \"^4.23.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/core-js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/core-util-is\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==\"\n\t\t},\n\t\t\"node_modules/cross-spawn\": {\n\t\t\t\"version\": \"7.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"path-key\": \"^3.1.0\",\n\t\t\t\t\"shebang-command\": \"^2.0.0\",\n\t\t\t\t\"which\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/cssesc\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"cssesc\": \"bin/cssesc\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/csv-parse\": {\n\t\t\t\"version\": \"5.5.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.5.tgz\",\n\t\t\t\"integrity\": \"sha512-erCk7tyU3yLWAhk6wvKxnyPtftuy/6Ak622gOO7BCJ05+TYffnPCJF905wmOQm+BpkX54OdAl8pveJwUdpnCXQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/dashdash\": {\n\t\t\t\"version\": \"1.14.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz\",\n\t\t\t\"integrity\": \"sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/debug\": {\n\t\t\t\"version\": \"2.6.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz\",\n\t\t\t\"integrity\": \"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/decamelize\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/deep-is\": {\n\t\t\t\"version\": \"0.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/default-require-extensions\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"strip-bom\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/define-data-property\": {\n\t\t\t\"version\": \"1.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-define-property\": \"^1.0.0\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"gopd\": \"^1.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/delayed-stream\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/depd\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/destroy\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\",\n\t\t\t\t\"npm\": \"1.2.8000 || >= 1.4.16\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/diff\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/diff/-/diff-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.3.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/dir-glob\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"path-type\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/dnscache\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dnscache/-/dnscache-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-2FFKzmLGOnD+Y378bRKH+gTjRMuSpH7OKgPy31KjjfCoKZx7tU8Dmqfd/3fhG2d/4bppuN8/KtWMUZBAcUCRnQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asap\": \"^2.0.6\",\n\t\t\t\t\"lodash.clone\": \"^4.5.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/doctrine\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"esutils\": \"^2.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/dom-storage\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/domino\": {\n\t\t\t\"version\": \"2.1.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/domino/-/domino-2.1.6.tgz\",\n\t\t\t\"integrity\": \"sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==\"\n\t\t},\n\t\t\"node_modules/dtrace-provider\": {\n\t\t\t\"version\": \"0.8.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz\",\n\t\t\t\"integrity\": \"sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==\",\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"nan\": \"^2.14.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ecc-jsbn\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"jsbn\": \"~0.1.0\",\n\t\t\t\t\"safer-buffer\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ee-first\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==\"\n\t\t},\n\t\t\"node_modules/electron-to-chromium\": {\n\t\t\t\"version\": \"1.4.740\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.740.tgz\",\n\t\t\t\"integrity\": \"sha512-Yvg5i+iyv7Xm18BRdVPVm8lc7kgxM3r6iwqCH2zB7QZy1kZRNmd0Zqm0zcD9XoFREE5/5rwIuIAOT+/mzGcnZg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/emoji-regex\": {\n\t\t\t\"version\": \"8.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\"\n\t\t},\n\t\t\"node_modules/encodeurl\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/entities\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/entities/-/entities-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/fb55/entities?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/error-ex\": {\n\t\t\t\"version\": \"1.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-arrayish\": \"^0.2.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es-define-property\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"get-intrinsic\": \"^1.2.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es-errors\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/es6-error\": {\n\t\t\t\"version\": \"4.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/escalade\": {\n\t\t\t\"version\": \"3.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/escape-html\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==\"\n\t\t},\n\t\t\"node_modules/escape-string-regexp\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint\": {\n\t\t\t\"version\": \"8.57.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.2.0\",\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.6.1\",\n\t\t\t\t\"@eslint/eslintrc\": \"^2.1.4\",\n\t\t\t\t\"@eslint/js\": \"8.57.0\",\n\t\t\t\t\"@humanwhocodes/config-array\": \"^0.11.14\",\n\t\t\t\t\"@humanwhocodes/module-importer\": \"^1.0.1\",\n\t\t\t\t\"@nodelib/fs.walk\": \"^1.2.8\",\n\t\t\t\t\"@ungap/structured-clone\": \"^1.2.0\",\n\t\t\t\t\"ajv\": \"^6.12.4\",\n\t\t\t\t\"chalk\": \"^4.0.0\",\n\t\t\t\t\"cross-spawn\": \"^7.0.2\",\n\t\t\t\t\"debug\": \"^4.3.2\",\n\t\t\t\t\"doctrine\": \"^3.0.0\",\n\t\t\t\t\"escape-string-regexp\": \"^4.0.0\",\n\t\t\t\t\"eslint-scope\": \"^7.2.2\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.4.3\",\n\t\t\t\t\"espree\": \"^9.6.1\",\n\t\t\t\t\"esquery\": \"^1.4.2\",\n\t\t\t\t\"esutils\": \"^2.0.2\",\n\t\t\t\t\"fast-deep-equal\": \"^3.1.3\",\n\t\t\t\t\"file-entry-cache\": \"^6.0.1\",\n\t\t\t\t\"find-up\": \"^5.0.0\",\n\t\t\t\t\"glob-parent\": \"^6.0.2\",\n\t\t\t\t\"globals\": \"^13.19.0\",\n\t\t\t\t\"graphemer\": \"^1.4.0\",\n\t\t\t\t\"ignore\": \"^5.2.0\",\n\t\t\t\t\"imurmurhash\": \"^0.1.4\",\n\t\t\t\t\"is-glob\": \"^4.0.0\",\n\t\t\t\t\"is-path-inside\": \"^3.0.3\",\n\t\t\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\t\t\"json-stable-stringify-without-jsonify\": \"^1.0.1\",\n\t\t\t\t\"levn\": \"^0.4.1\",\n\t\t\t\t\"lodash.merge\": \"^4.6.2\",\n\t\t\t\t\"minimatch\": \"^3.1.2\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"optionator\": \"^0.9.3\",\n\t\t\t\t\"strip-ansi\": \"^6.0.1\",\n\t\t\t\t\"text-table\": \"^0.2.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"eslint\": \"bin/eslint.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-compat-utils\": {\n\t\t\t\"version\": \"0.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.5.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-config-wikimedia\": {\n\t\t\t\"version\": \"0.27.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.27.0.tgz\",\n\t\t\t\"integrity\": \"sha512-KkZ54+MUnggz17C/RCEMXQSpiiqZRF7p9fjrz4phaaeKlTrjg0B+QbM5zcDWcjGiAWaJUptHaH17+RZldadkUw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"browserslist-config-wikimedia\": \"^0.6.1\",\n\t\t\t\t\"eslint\": \"^8.57.0\",\n\t\t\t\t\"eslint-plugin-compat\": \"^4.2.0\",\n\t\t\t\t\"eslint-plugin-es-x\": \"^7.6.0\",\n\t\t\t\t\"eslint-plugin-jest\": \"^27.9.0\",\n\t\t\t\t\"eslint-plugin-jsdoc\": \"48.2.1\",\n\t\t\t\t\"eslint-plugin-json-es\": \"^1.5.7\",\n\t\t\t\t\"eslint-plugin-mediawiki\": \"^0.6.0\",\n\t\t\t\t\"eslint-plugin-mocha\": \"^10.4.1\",\n\t\t\t\t\"eslint-plugin-n\": \"^16.6.2\",\n\t\t\t\t\"eslint-plugin-no-jquery\": \"^2.7.0\",\n\t\t\t\t\"eslint-plugin-qunit\": \"^8.1.1\",\n\t\t\t\t\"eslint-plugin-security\": \"^1.7.1\",\n\t\t\t\t\"eslint-plugin-unicorn\": \"^51.0.1\",\n\t\t\t\t\"eslint-plugin-vue\": \"^9.23.0\",\n\t\t\t\t\"eslint-plugin-wdio\": \"^8.24.12\",\n\t\t\t\t\"eslint-plugin-yml\": \"^1.13.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-compat\": {\n\t\t\t\"version\": \"4.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@mdn/browser-compat-data\": \"^5.3.13\",\n\t\t\t\t\"ast-metadata-inferer\": \"^0.8.0\",\n\t\t\t\t\"browserslist\": \"^4.21.10\",\n\t\t\t\t\"caniuse-lite\": \"^1.0.30001524\",\n\t\t\t\t\"find-up\": \"^5.0.0\",\n\t\t\t\t\"lodash.memoize\": \"^4.1.2\",\n\t\t\t\t\"semver\": \"^7.5.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14.x\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-es-x\": {\n\t\t\t\"version\": \"7.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.1.2\",\n\t\t\t\t\"@eslint-community/regexpp\": \"^4.6.0\",\n\t\t\t\t\"eslint-compat-utils\": \"^0.5.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.18.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ota-meshi\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jest\": {\n\t\t\t\"version\": \"27.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@typescript-eslint/utils\": \"^5.10.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.15.0 || ^16.10.0 || >=18.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"@typescript-eslint/eslint-plugin\": \"^5.0.0 || ^6.0.0 || ^7.0.0\",\n\t\t\t\t\"eslint\": \"^7.0.0 || ^8.0.0\",\n\t\t\t\t\"jest\": \"*\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"@typescript-eslint/eslint-plugin\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t},\n\t\t\t\t\"jest\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc\": {\n\t\t\t\"version\": \"48.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@es-joy/jsdoccomment\": \"~0.42.0\",\n\t\t\t\t\"are-docs-informative\": \"^0.0.2\",\n\t\t\t\t\"comment-parser\": \"1.4.1\",\n\t\t\t\t\"debug\": \"^4.3.4\",\n\t\t\t\t\"escape-string-regexp\": \"^4.0.0\",\n\t\t\t\t\"esquery\": \"^1.5.0\",\n\t\t\t\t\"is-builtin-module\": \"^3.2.1\",\n\t\t\t\t\"semver\": \"^7.6.0\",\n\t\t\t\t\"spdx-expression-parse\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=18\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^7.0.0 || ^8.0.0 || ^9.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-jsdoc/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/eslint-plugin-json-es\": {\n\t\t\t\"version\": \"1.5.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz\",\n\t\t\t\"integrity\": \"sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^3.3.0\",\n\t\t\t\t\"espree\": \"^9.3.1\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">= 7\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-mediawiki\": {\n\t\t\t\"version\": \"0.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-a2Zm18N5nPyflBajM2ZWATxucIpYPEmOSjFzUR1OBH3hAL0GY9fx1mpezEwzqAQ862d+kPkolgQOzktnZe8nKA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-plugin-vue\": \"^9.23.0\",\n\t\t\t\t\"upath\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=5.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-mocha\": {\n\t\t\t\"version\": \"10.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-cur4dVYnSEWTBwdqIBQFxa/9siAhesu0TX+lbJ4ClE9j0eNMNe6BSx3vkFFNz6tGoveyMyELFXa30f3fvuAVDg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-utils\": \"^3.0.0\",\n\t\t\t\t\"globals\": \"^13.24.0\",\n\t\t\t\t\"rambda\": \"^7.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-n\": {\n\t\t\t\"version\": \"16.6.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz\",\n\t\t\t\"integrity\": \"sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"builtins\": \"^5.0.1\",\n\t\t\t\t\"eslint-plugin-es-x\": \"^7.5.0\",\n\t\t\t\t\"get-tsconfig\": \"^4.7.0\",\n\t\t\t\t\"globals\": \"^13.24.0\",\n\t\t\t\t\"ignore\": \"^5.2.4\",\n\t\t\t\t\"is-builtin-module\": \"^3.2.1\",\n\t\t\t\t\"is-core-module\": \"^2.12.1\",\n\t\t\t\t\"minimatch\": \"^3.1.2\",\n\t\t\t\t\"resolve\": \"^1.22.2\",\n\t\t\t\t\"semver\": \"^7.5.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/mysticatea\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=7.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-no-jquery\": {\n\t\t\t\"version\": \"2.7.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=2.3.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-qunit\": {\n\t\t\t\"version\": \"8.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-j3xhiAf2Wvr8Dfwl5T6tlJ+F55vqYE9ZdAHUOTzq1lGerYrXzOS46RvK4SSWug2D8sl3ZYr2lA4/hgVXgLloxw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-utils\": \"^3.0.0\",\n\t\t\t\t\"requireindex\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^16.0.0 || ^18.0.0 || >=20.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-security\": {\n\t\t\t\"version\": \"1.7.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz\",\n\t\t\t\"integrity\": \"sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-regex\": \"^2.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-unicorn\": {\n\t\t\t\"version\": \"51.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/helper-validator-identifier\": \"^7.22.20\",\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"@eslint/eslintrc\": \"^2.1.4\",\n\t\t\t\t\"ci-info\": \"^4.0.0\",\n\t\t\t\t\"clean-regexp\": \"^1.0.0\",\n\t\t\t\t\"core-js-compat\": \"^3.34.0\",\n\t\t\t\t\"esquery\": \"^1.5.0\",\n\t\t\t\t\"indent-string\": \"^4.0.0\",\n\t\t\t\t\"is-builtin-module\": \"^3.2.1\",\n\t\t\t\t\"jsesc\": \"^3.0.2\",\n\t\t\t\t\"pluralize\": \"^8.0.0\",\n\t\t\t\t\"read-pkg-up\": \"^7.0.1\",\n\t\t\t\t\"regexp-tree\": \"^0.1.27\",\n\t\t\t\t\"regjsparser\": \"^0.10.0\",\n\t\t\t\t\"semver\": \"^7.5.4\",\n\t\t\t\t\"strip-indent\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=16\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=8.56.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-vue\": {\n\t\t\t\"version\": \"9.25.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz\",\n\t\t\t\"integrity\": \"sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@eslint-community/eslint-utils\": \"^4.4.0\",\n\t\t\t\t\"globals\": \"^13.24.0\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"nth-check\": \"^2.1.1\",\n\t\t\t\t\"postcss-selector-parser\": \"^6.0.15\",\n\t\t\t\t\"semver\": \"^7.6.0\",\n\t\t\t\t\"vue-eslint-parser\": \"^9.4.2\",\n\t\t\t\t\"xml-name-validator\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \"^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-wdio\": {\n\t\t\t\"version\": \"8.24.12\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-8.24.12.tgz\",\n\t\t\t\"integrity\": \"sha512-OmzGteXFOQnJDdkTNnTfksaVa18WlFCyeLjZXHvDpkbomLWAg9wc296Pr0wnTCagqNj8qfEHpy+N2XVew5VCMA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^16.13 || >=18\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml\": {\n\t\t\t\"version\": \"1.14.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.3.2\",\n\t\t\t\t\"eslint-compat-utils\": \"^0.5.0\",\n\t\t\t\t\"lodash\": \"^4.17.21\",\n\t\t\t\t\"natural-compare\": \"^1.4.0\",\n\t\t\t\t\"yaml-eslint-parser\": \"^1.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ota-meshi\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-plugin-yml/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/eslint-scope\": {\n\t\t\t\"version\": \"7.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"esrecurse\": \"^4.3.0\",\n\t\t\t\t\"estraverse\": \"^5.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-utils\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.0.0 || ^12.0.0 || >= 14.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/mysticatea\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-utils/node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint-visitor-keys\": {\n\t\t\t\"version\": \"3.4.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz\",\n\t\t\t\"integrity\": \"sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint/node_modules/ajv\": {\n\t\t\t\"version\": \"6.12.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz\",\n\t\t\t\"integrity\": \"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"fast-json-stable-stringify\": \"^2.0.0\",\n\t\t\t\t\"json-schema-traverse\": \"^0.4.1\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/eslint/node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/eslint/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/espree\": {\n\t\t\t\"version\": \"9.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/espree/-/espree-9.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"acorn\": \"^8.9.0\",\n\t\t\t\t\"acorn-jsx\": \"^5.3.2\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.4.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://opencollective.com/eslint\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esprima\": {\n\t\t\t\"version\": \"4.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==\",\n\t\t\t\"bin\": {\n\t\t\t\t\"esparse\": \"bin/esparse.js\",\n\t\t\t\t\"esvalidate\": \"bin/esvalidate.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esquery\": {\n\t\t\t\"version\": \"1.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"estraverse\": \"^5.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esrecurse\": {\n\t\t\t\"version\": \"4.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"estraverse\": \"^5.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/estraverse\": {\n\t\t\t\"version\": \"5.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/esutils\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/etag\": {\n\t\t\t\"version\": \"1.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/express\": {\n\t\t\t\"version\": \"4.19.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/express/-/express-4.19.2.tgz\",\n\t\t\t\"integrity\": \"sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"accepts\": \"~1.3.8\",\n\t\t\t\t\"array-flatten\": \"1.1.1\",\n\t\t\t\t\"body-parser\": \"1.20.2\",\n\t\t\t\t\"content-disposition\": \"0.5.4\",\n\t\t\t\t\"content-type\": \"~1.0.4\",\n\t\t\t\t\"cookie\": \"0.6.0\",\n\t\t\t\t\"cookie-signature\": \"1.0.6\",\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"encodeurl\": \"~1.0.2\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"etag\": \"~1.8.1\",\n\t\t\t\t\"finalhandler\": \"1.2.0\",\n\t\t\t\t\"fresh\": \"0.5.2\",\n\t\t\t\t\"http-errors\": \"2.0.0\",\n\t\t\t\t\"merge-descriptors\": \"1.0.1\",\n\t\t\t\t\"methods\": \"~1.1.2\",\n\t\t\t\t\"on-finished\": \"2.4.1\",\n\t\t\t\t\"parseurl\": \"~1.3.3\",\n\t\t\t\t\"path-to-regexp\": \"0.1.7\",\n\t\t\t\t\"proxy-addr\": \"~2.0.7\",\n\t\t\t\t\"qs\": \"6.11.0\",\n\t\t\t\t\"range-parser\": \"~1.2.1\",\n\t\t\t\t\"safe-buffer\": \"5.2.1\",\n\t\t\t\t\"send\": \"0.18.0\",\n\t\t\t\t\"serve-static\": \"1.15.0\",\n\t\t\t\t\"setprototypeof\": \"1.2.0\",\n\t\t\t\t\"statuses\": \"2.0.1\",\n\t\t\t\t\"type-is\": \"~1.6.18\",\n\t\t\t\t\"utils-merge\": \"1.0.1\",\n\t\t\t\t\"vary\": \"~1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/express/node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\",\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/extend\": {\n\t\t\t\"version\": \"3.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==\"\n\t\t},\n\t\t\"node_modules/extsprintf\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==\",\n\t\t\t\"engines\": [\n\t\t\t\t\"node >=0.6.0\"\n\t\t\t]\n\t\t},\n\t\t\"node_modules/fast-deep-equal\": {\n\t\t\t\"version\": \"3.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\"\n\t\t},\n\t\t\"node_modules/fast-glob\": {\n\t\t\t\"version\": \"3.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@nodelib/fs.stat\": \"^2.0.2\",\n\t\t\t\t\"@nodelib/fs.walk\": \"^1.2.3\",\n\t\t\t\t\"glob-parent\": \"^5.1.2\",\n\t\t\t\t\"merge2\": \"^1.3.0\",\n\t\t\t\t\"micromatch\": \"^4.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fast-glob/node_modules/glob-parent\": {\n\t\t\t\"version\": \"5.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-glob\": \"^4.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fast-json-stable-stringify\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==\"\n\t\t},\n\t\t\"node_modules/fast-levenshtein\": {\n\t\t\t\"version\": \"2.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/fastq\": {\n\t\t\t\"version\": \"1.17.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz\",\n\t\t\t\"integrity\": \"sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"reusify\": \"^1.0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/file-entry-cache\": {\n\t\t\t\"version\": \"6.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"flat-cache\": \"^3.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.12.0 || >=12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/file-uri-to-path\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==\",\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"node_modules/fill-range\": {\n\t\t\t\"version\": \"7.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"to-regex-range\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/finalhandler\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"encodeurl\": \"~1.0.2\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"on-finished\": \"2.4.1\",\n\t\t\t\t\"parseurl\": \"~1.3.3\",\n\t\t\t\t\"statuses\": \"2.0.1\",\n\t\t\t\t\"unpipe\": \"~1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/find-cache-dir\": {\n\t\t\t\"version\": \"3.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"commondir\": \"^1.0.1\",\n\t\t\t\t\"make-dir\": \"^3.0.2\",\n\t\t\t\t\"pkg-dir\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/avajs/find-cache-dir?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/find-up\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^6.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/flat\": {\n\t\t\t\"version\": \"5.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/flat/-/flat-5.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"flat\": \"cli.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/flat-cache\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"flatted\": \"^3.2.9\",\n\t\t\t\t\"keyv\": \"^4.5.3\",\n\t\t\t\t\"rimraf\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^10.12.0 || >=12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/flatted\": {\n\t\t\t\"version\": \"3.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/follow-redirects\": {\n\t\t\t\"version\": \"1.15.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz\",\n\t\t\t\"integrity\": \"sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==\",\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"individual\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/RubenVerborgh\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"debug\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/foreground-child\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cross-spawn\": \"^7.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/forever-agent\": {\n\t\t\t\"version\": \"0.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/form-data\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asynckit\": \"^0.4.0\",\n\t\t\t\t\"combined-stream\": \"^1.0.8\",\n\t\t\t\t\"mime-types\": \"^2.1.12\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/forwarded\": {\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fresh\": {\n\t\t\t\"version\": \"0.5.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz\",\n\t\t\t\"integrity\": \"sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fromentries\": {\n\t\t\t\"version\": \"1.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/fs-minipass\": {\n\t\t\t\"version\": \"1.2.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz\",\n\t\t\t\"integrity\": \"sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"minipass\": \"^2.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/fs.realpath\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/fsevents\": {\n\t\t\t\"version\": \"2.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"os\": [\n\t\t\t\t\"darwin\"\n\t\t\t],\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^8.16.0 || ^10.6.0 || >=11.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/function-bind\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==\",\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/gelf-stream\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gelf-stream/-/gelf-stream-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-kCzCfI6DJ8+aaDhwMcsNm2l6CsBj6y4Is6CCxH2W9sYnZGcXg9WmJ/iZMoJVO6uTwTRL7dbIioAS8lCuGUXSFA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"gelfling\": \"^0.3.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/gelfling\": {\n\t\t\t\"version\": \"0.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gelfling/-/gelfling-0.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vli3D2RYpLW6XhryNrv7HMjFNbj+ks/CCVDjokxOtZ+p6QYRadj8Zc0ps+LolSsh/I97XO0OduP/ShOej08clA==\"\n\t\t},\n\t\t\"node_modules/gensync\": {\n\t\t\t\"version\": \"1.0.0-beta.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz\",\n\t\t\t\"integrity\": \"sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-caller-file\": {\n\t\t\t\"version\": \"2.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"6.* || 8.* || >= 10.*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-intrinsic\": {\n\t\t\t\"version\": \"1.2.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz\",\n\t\t\t\"integrity\": \"sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"function-bind\": \"^1.1.2\",\n\t\t\t\t\"has-proto\": \"^1.0.1\",\n\t\t\t\t\"has-symbols\": \"^1.0.3\",\n\t\t\t\t\"hasown\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-package-type\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/get-tsconfig\": {\n\t\t\t\"version\": \"4.7.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz\",\n\t\t\t\"integrity\": \"sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"resolve-pkg-maps\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/privatenumber/get-tsconfig?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/getpass\": {\n\t\t\t\"version\": \"0.1.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz\",\n\t\t\t\"integrity\": \"sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob\": {\n\t\t\t\"version\": \"8.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-8.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^5.0.1\",\n\t\t\t\t\"once\": \"^1.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob-parent\": {\n\t\t\t\"version\": \"6.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-glob\": \"^4.0.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10.13.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob/node_modules/brace-expansion\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/glob/node_modules/minimatch\": {\n\t\t\t\"version\": \"5.1.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz\",\n\t\t\t\"integrity\": \"sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/globals\": {\n\t\t\t\"version\": \"13.24.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globals/-/globals-13.24.0.tgz\",\n\t\t\t\"integrity\": \"sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"type-fest\": \"^0.20.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/globby\": {\n\t\t\t\"version\": \"11.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/globby/-/globby-11.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"array-union\": \"^2.1.0\",\n\t\t\t\t\"dir-glob\": \"^3.0.1\",\n\t\t\t\t\"fast-glob\": \"^3.2.9\",\n\t\t\t\t\"ignore\": \"^5.2.0\",\n\t\t\t\t\"merge2\": \"^1.4.1\",\n\t\t\t\t\"slash\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/gopd\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"get-intrinsic\": \"^1.1.3\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/graceful-fs\": {\n\t\t\t\"version\": \"4.2.11\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz\",\n\t\t\t\"integrity\": \"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/graphemer\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/har-schema\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/har-validator\": {\n\t\t\t\"version\": \"5.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==\",\n\t\t\t\"deprecated\": \"this library is no longer supported\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ajv\": \"^6.12.3\",\n\t\t\t\t\"har-schema\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/har-validator/node_modules/ajv\": {\n\t\t\t\"version\": \"6.12.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz\",\n\t\t\t\"integrity\": \"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fast-deep-equal\": \"^3.1.1\",\n\t\t\t\t\"fast-json-stable-stringify\": \"^2.0.0\",\n\t\t\t\t\"json-schema-traverse\": \"^0.4.1\",\n\t\t\t\t\"uri-js\": \"^4.2.2\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"github\",\n\t\t\t\t\"url\": \"https://github.com/sponsors/epoberezkin\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/har-validator/node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\"\n\t\t},\n\t\t\"node_modules/has-flag\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/has-property-descriptors\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es-define-property\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/has-proto\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/has-symbols\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hasha\": {\n\t\t\t\"version\": \"5.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-stream\": \"^2.0.0\",\n\t\t\t\t\"type-fest\": \"^0.8.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hasha/node_modules/type-fest\": {\n\t\t\t\"version\": \"0.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hasown\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"function-bind\": \"^1.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hat\": {\n\t\t\t\"version\": \"0.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hat/-/hat-0.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/he\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/he/-/he-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"he\": \"bin/he\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/heapdump\": {\n\t\t\t\"version\": \"0.3.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/heapdump/-/heapdump-0.3.15.tgz\",\n\t\t\t\"integrity\": \"sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==\",\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"nan\": \"^2.13.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/hosted-git-info\": {\n\t\t\t\"version\": \"2.8.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz\",\n\t\t\t\"integrity\": \"sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/hot-shots\": {\n\t\t\t\"version\": \"6.8.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/hot-shots/-/hot-shots-6.8.7.tgz\",\n\t\t\t\"integrity\": \"sha512-XH8iezBSZgVw2jegu96pUfF1Zv0VZ/iXjb7L5yE3F7mn7/bdhf4qeniXjO0wQWeefe433rhOsazNKLxM+XMI9w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"unix-dgram\": \"2.0.x\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/html-escaper\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/http-errors\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"inherits\": \"2.0.4\",\n\t\t\t\t\"setprototypeof\": \"1.2.0\",\n\t\t\t\t\"statuses\": \"2.0.1\",\n\t\t\t\t\"toidentifier\": \"1.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/http-shutdown\": {\n\t\t\t\"version\": \"1.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"iojs\": \">= 1.0.0\",\n\t\t\t\t\"node\": \">= 0.12.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/http-signature\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\",\n\t\t\t\t\"jsprim\": \"^1.2.2\",\n\t\t\t\t\"sshpk\": \"^1.7.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8\",\n\t\t\t\t\"npm\": \">=1.3.7\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/iconv-lite\": {\n\t\t\t\"version\": \"0.4.24\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz\",\n\t\t\t\"integrity\": \"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safer-buffer\": \">= 2.1.2 < 3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ignore\": {\n\t\t\t\"version\": \"5.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/import-fresh\": {\n\t\t\t\"version\": \"3.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"parent-module\": \"^1.0.0\",\n\t\t\t\t\"resolve-from\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/imurmurhash\": {\n\t\t\t\"version\": \"0.1.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz\",\n\t\t\t\"integrity\": \"sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.19\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/indent-string\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/inflight\": {\n\t\t\t\"version\": \"1.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"wrappy\": \"1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/inherits\": {\n\t\t\t\"version\": \"2.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\"\n\t\t},\n\t\t\"node_modules/ipaddr.js\": {\n\t\t\t\"version\": \"1.9.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz\",\n\t\t\t\"integrity\": \"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-arrayish\": {\n\t\t\t\"version\": \"0.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/is-binary-path\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"binary-extensions\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-builtin-module\": {\n\t\t\t\"version\": \"3.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"builtin-modules\": \"^3.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-core-module\": {\n\t\t\t\"version\": \"2.13.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz\",\n\t\t\t\"integrity\": \"sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"hasown\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-extglob\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-fullwidth-code-point\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-glob\": {\n\t\t\t\"version\": \"4.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-extglob\": \"^2.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-number\": {\n\t\t\t\"version\": \"7.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.12.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-path-inside\": {\n\t\t\t\"version\": \"3.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-plain-obj\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-retry-allowed\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-stream\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-typedarray\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==\"\n\t\t},\n\t\t\"node_modules/is-unicode-supported\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/is-windows\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/isarray\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==\"\n\t\t},\n\t\t\"node_modules/isexe\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/isstream\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==\"\n\t\t},\n\t\t\"node_modules/istanbul-lib-coverage\": {\n\t\t\t\"version\": \"3.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-hook\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"append-transform\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-instrument\": {\n\t\t\t\"version\": \"4.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/core\": \"^7.7.5\",\n\t\t\t\t\"@istanbuljs/schema\": \"^0.1.2\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"semver\": \"^6.3.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-instrument/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-processinfo\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"archy\": \"^1.0.0\",\n\t\t\t\t\"cross-spawn\": \"^7.0.3\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.2.0\",\n\t\t\t\t\"p-map\": \"^3.0.0\",\n\t\t\t\t\"rimraf\": \"^3.0.0\",\n\t\t\t\t\"uuid\": \"^8.3.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-processinfo/node_modules/uuid\": {\n\t\t\t\"version\": \"8.3.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz\",\n\t\t\t\"integrity\": \"sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"dist/bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-report\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"make-dir\": \"^4.0.0\",\n\t\t\t\t\"supports-color\": \"^7.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-report/node_modules/make-dir\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^7.5.3\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-source-maps\": {\n\t\t\t\"version\": \"4.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.1.1\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"source-map\": \"^0.6.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-source-maps/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/istanbul-lib-source-maps/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/istanbul-reports\": {\n\t\t\t\"version\": \"3.1.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz\",\n\t\t\t\"integrity\": \"sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"html-escaper\": \"^2.0.0\",\n\t\t\t\t\"istanbul-lib-report\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/js-tokens\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/js-yaml\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/jsbn\": {\n\t\t\t\"version\": \"0.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==\"\n\t\t},\n\t\t\"node_modules/jsdoc-type-pratt-parser\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/jsesc\": {\n\t\t\t\"version\": \"3.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"jsesc\": \"bin/jsesc\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/json-buffer\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-parse-even-better-errors\": {\n\t\t\t\"version\": \"2.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-schema\": {\n\t\t\t\"version\": \"0.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==\"\n\t\t},\n\t\t\"node_modules/json-schema-traverse\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-stable-stringify-without-jsonify\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/json-stringify-safe\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==\"\n\t\t},\n\t\t\"node_modules/json5\": {\n\t\t\t\"version\": \"2.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/json5/-/json5-2.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"json5\": \"lib/cli.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/jsprim\": {\n\t\t\t\"version\": \"1.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"1.0.0\",\n\t\t\t\t\"extsprintf\": \"1.3.0\",\n\t\t\t\t\"json-schema\": \"0.4.0\",\n\t\t\t\t\"verror\": \"1.10.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/just-extend\": {\n\t\t\t\"version\": \"6.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/kad-fs\": {\n\t\t\t\"version\": \"0.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/kad-fs/-/kad-fs-0.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-VlLY7MuXy+3Tlqn1NJNgNkta6BRposNsJhqqcLv/M5e/rGBAETU33DhlPwV6/RBZKGzylQFkeYaKaoYin+mGZw==\",\n\t\t\t\"deprecated\": \"This package is no longer maintained.\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"readable-stream\": \"^2.0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/kad-localstorage\": {\n\t\t\t\"version\": \"0.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/kad-localstorage/-/kad-localstorage-0.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-3BEFBPa9cbPvW7WvZSTQHy6dSgw7ob7yTqT+eORWrxm4f4fE26BUVorg36KRbg/W+YWEnippuM68ybFyF3heiA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"dom-storage\": \"^2.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/kad-memstore\": {\n\t\t\t\"version\": \"0.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/kad-memstore/-/kad-memstore-0.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-fwGvRXWjaSzMed8iQHkZH41wvaoq+3tIhuIbkqBBYFuuJtWoDWqgCYTADGPqLyaLX4Ct8aP5NtAxCaxk4cfcCg==\",\n\t\t\t\"deprecated\": \"This package is no longer maintained.\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"readable-stream\": \"^2.0.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/keyv\": {\n\t\t\t\"version\": \"4.5.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz\",\n\t\t\t\"integrity\": \"sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"json-buffer\": \"3.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/levn\": {\n\t\t\t\"version\": \"0.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/levn/-/levn-0.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"prelude-ls\": \"^1.2.1\",\n\t\t\t\t\"type-check\": \"~0.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/limitation\": {\n\t\t\t\"version\": \"0.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/limitation/-/limitation-0.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-IpIBG7WniPI1Og0HYxlo8JRD2E2pExwuol7hjobcNZSYBBxAamPJdV91Q47uw5/KiUKA+We8a33sh6vD1PQ+Yw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.3.1\",\n\t\t\t\t\"readable-stream\": \"^2.0.5\",\n\t\t\t\t\"wikimedia-kad-fork\": \"^1.3.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/lines-and-columns\": {\n\t\t\t\"version\": \"1.2.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz\",\n\t\t\t\"integrity\": \"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/locate-path\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^5.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/lodash\": {\n\t\t\t\"version\": \"4.17.21\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz\",\n\t\t\t\"integrity\": \"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==\"\n\t\t},\n\t\t\"node_modules/lodash.clone\": {\n\t\t\t\"version\": \"4.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==\"\n\t\t},\n\t\t\"node_modules/lodash.clonedeep\": {\n\t\t\t\"version\": \"4.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==\"\n\t\t},\n\t\t\"node_modules/lodash.flattendeep\": {\n\t\t\t\"version\": \"4.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/lodash.get\": {\n\t\t\t\"version\": \"4.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/lodash.memoize\": {\n\t\t\t\"version\": \"4.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/lodash.merge\": {\n\t\t\t\"version\": \"4.6.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz\",\n\t\t\t\"integrity\": \"sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/log-symbols\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"chalk\": \"^4.1.0\",\n\t\t\t\t\"is-unicode-supported\": \"^0.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/long\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/long/-/long-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==\"\n\t\t},\n\t\t\"node_modules/lru-cache\": {\n\t\t\t\"version\": \"5.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"yallist\": \"^3.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/make-dir\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"semver\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/make-dir/node_modules/semver\": {\n\t\t\t\"version\": \"6.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/media-typer\": {\n\t\t\t\"version\": \"0.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mediawiki-title\": {\n\t\t\t\"version\": \"0.7.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mediawiki-title/-/mediawiki-title-0.7.5.tgz\",\n\t\t\t\"integrity\": \"sha512-csC7Gt/z03tvtlicXqT2OMNc8wHk2rd7KSL4a/ZQxhY9YRyPPq3cSysg0ToskyGld89btn+zS8TdK0iaQp3M2g==\"\n\t\t},\n\t\t\"node_modules/merge-descriptors\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==\"\n\t\t},\n\t\t\"node_modules/merge2\": {\n\t\t\t\"version\": \"1.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/methods\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/methods/-/methods-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/micromatch\": {\n\t\t\t\"version\": \"4.0.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz\",\n\t\t\t\"integrity\": \"sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"braces\": \"^3.0.2\",\n\t\t\t\t\"picomatch\": \"^2.3.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime\": {\n\t\t\t\"version\": \"1.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime/-/mime-1.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==\",\n\t\t\t\"bin\": {\n\t\t\t\t\"mime\": \"cli.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime-db\": {\n\t\t\t\"version\": \"1.52.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz\",\n\t\t\t\"integrity\": \"sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mime-types\": {\n\t\t\t\"version\": \"2.1.35\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz\",\n\t\t\t\"integrity\": \"sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mime-db\": \"1.52.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/min-indent\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minimatch\": {\n\t\t\t\"version\": \"3.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^1.1.7\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minimist\": {\n\t\t\t\"version\": \"1.2.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz\",\n\t\t\t\"integrity\": \"sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==\",\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minipass\": {\n\t\t\t\"version\": \"2.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"^5.1.2\",\n\t\t\t\t\"yallist\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/minizlib\": {\n\t\t\t\"version\": \"1.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"minipass\": \"^2.9.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mkdirp\": {\n\t\t\t\"version\": \"0.5.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz\",\n\t\t\t\"integrity\": \"sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"minimist\": \"^1.2.6\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"mkdirp\": \"bin/cmd.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha\": {\n\t\t\t\"version\": \"10.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-colors\": \"4.1.1\",\n\t\t\t\t\"browser-stdout\": \"1.3.1\",\n\t\t\t\t\"chokidar\": \"3.5.3\",\n\t\t\t\t\"debug\": \"4.3.4\",\n\t\t\t\t\"diff\": \"5.0.0\",\n\t\t\t\t\"escape-string-regexp\": \"4.0.0\",\n\t\t\t\t\"find-up\": \"5.0.0\",\n\t\t\t\t\"glob\": \"8.1.0\",\n\t\t\t\t\"he\": \"1.2.0\",\n\t\t\t\t\"js-yaml\": \"4.1.0\",\n\t\t\t\t\"log-symbols\": \"4.1.0\",\n\t\t\t\t\"minimatch\": \"5.0.1\",\n\t\t\t\t\"ms\": \"2.1.3\",\n\t\t\t\t\"serialize-javascript\": \"6.0.0\",\n\t\t\t\t\"strip-json-comments\": \"3.1.1\",\n\t\t\t\t\"supports-color\": \"8.1.1\",\n\t\t\t\t\"workerpool\": \"6.2.1\",\n\t\t\t\t\"yargs\": \"16.2.0\",\n\t\t\t\t\"yargs-parser\": \"20.2.4\",\n\t\t\t\t\"yargs-unparser\": \"2.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"_mocha\": \"bin/_mocha\",\n\t\t\t\t\"mocha\": \"bin/mocha.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 14.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha-lcov-reporter\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/5zI2tW4lq/ft8MGpYQ1nIH6yePPtIzdGeUEwFMKfMRdLfAQ1QW2c68eEJop32tNdN5srHa/E2TzB+erm3YMYA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha.parallel\": {\n\t\t\t\"version\": \"0.15.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mocha.parallel/-/mocha.parallel-0.15.6.tgz\",\n\t\t\t\"integrity\": \"sha512-pWph+QieKGjk7cHY2hB78wyKJDOQLyOMDuBLQLrFL7riJb8qbQBlCY3XztFHv0D1d4I1gCpiwFNjd4LhVOXPew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^2.9.34\",\n\t\t\t\t\"semaphore\": \"^1.0.5\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"mocha\": \">=2.2.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha.parallel/node_modules/bluebird\": {\n\t\t\t\"version\": \"2.11.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz\",\n\t\t\t\"integrity\": \"sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/mocha/node_modules/brace-expansion\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"balanced-match\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha/node_modules/debug/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/mocha/node_modules/minimatch\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"brace-expansion\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mocha/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/mocha/node_modules/supports-color\": {\n\t\t\t\"version\": \"8.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"has-flag\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/supports-color?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/moment\": {\n\t\t\t\"version\": \"2.30.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/moment/-/moment-2.30.1.tgz\",\n\t\t\t\"integrity\": \"sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==\",\n\t\t\t\"optional\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/ms\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==\"\n\t\t},\n\t\t\"node_modules/msgpack5\": {\n\t\t\t\"version\": \"3.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/msgpack5/-/msgpack5-3.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-VoY2AaoowHZLLKyEb5FRzuhdSzXn5quGjcMKJOJHJPxp9baYZx5t6jiHUhp5aNRlqqlt+5GXQGovMLNKsrm1hg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bl\": \"^1.2.1\",\n\t\t\t\t\"inherits\": \"^2.0.3\",\n\t\t\t\t\"readable-stream\": \"^2.3.3\",\n\t\t\t\t\"safe-buffer\": \"^5.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mv\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/mv/-/mv-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"mkdirp\": \"~0.5.1\",\n\t\t\t\t\"ncp\": \"~2.0.0\",\n\t\t\t\t\"rimraf\": \"~2.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mv/node_modules/glob\": {\n\t\t\t\"version\": \"6.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-6.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"2 || 3\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/mv/node_modules/rimraf\": {\n\t\t\t\"version\": \"2.4.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz\",\n\t\t\t\"integrity\": \"sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==\",\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"glob\": \"^6.0.1\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"rimraf\": \"bin.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nan\": {\n\t\t\t\"version\": \"2.19.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nan/-/nan-2.19.0.tgz\",\n\t\t\t\"integrity\": \"sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==\",\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"node_modules/natural-compare\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/ncp\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==\",\n\t\t\t\"optional\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"ncp\": \"bin/ncp\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/negotiator\": {\n\t\t\t\"version\": \"0.6.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz\",\n\t\t\t\"integrity\": \"sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nise\": {\n\t\t\t\"version\": \"5.1.9\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nise/-/nise-5.1.9.tgz\",\n\t\t\t\"integrity\": \"sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.0\",\n\t\t\t\t\"@sinonjs/fake-timers\": \"^11.2.2\",\n\t\t\t\t\"@sinonjs/text-encoding\": \"^0.7.2\",\n\t\t\t\t\"just-extend\": \"^6.2.0\",\n\t\t\t\t\"path-to-regexp\": \"^6.2.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nise/node_modules/path-to-regexp\": {\n\t\t\t\"version\": \"6.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/nock\": {\n\t\t\t\"version\": \"13.5.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nock/-/nock-13.5.4.tgz\",\n\t\t\t\"integrity\": \"sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.1.0\",\n\t\t\t\t\"json-stringify-safe\": \"^5.0.1\",\n\t\t\t\t\"propagate\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 10.13\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nock/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nock/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/node-preload\": {\n\t\t\t\"version\": \"0.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"process-on-spawn\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/node-releases\": {\n\t\t\t\"version\": \"2.0.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz\",\n\t\t\t\"integrity\": \"sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/normalize-package-data\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"hosted-git-info\": \"^2.1.4\",\n\t\t\t\t\"resolve\": \"^1.10.0\",\n\t\t\t\t\"semver\": \"2 || 3 || 4 || 5\",\n\t\t\t\t\"validate-npm-package-license\": \"^3.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/normalize-package-data/node_modules/semver\": {\n\t\t\t\"version\": \"5.7.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-5.7.2.tgz\",\n\t\t\t\"integrity\": \"sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/normalize-path\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nth-check\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"boolbase\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/fb55/nth-check?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc\": {\n\t\t\t\"version\": \"15.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@istanbuljs/load-nyc-config\": \"^1.0.0\",\n\t\t\t\t\"@istanbuljs/schema\": \"^0.1.2\",\n\t\t\t\t\"caching-transform\": \"^4.0.0\",\n\t\t\t\t\"convert-source-map\": \"^1.7.0\",\n\t\t\t\t\"decamelize\": \"^1.2.0\",\n\t\t\t\t\"find-cache-dir\": \"^3.2.0\",\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"foreground-child\": \"^2.0.0\",\n\t\t\t\t\"get-package-type\": \"^0.1.0\",\n\t\t\t\t\"glob\": \"^7.1.6\",\n\t\t\t\t\"istanbul-lib-coverage\": \"^3.0.0\",\n\t\t\t\t\"istanbul-lib-hook\": \"^3.0.0\",\n\t\t\t\t\"istanbul-lib-instrument\": \"^4.0.0\",\n\t\t\t\t\"istanbul-lib-processinfo\": \"^2.0.2\",\n\t\t\t\t\"istanbul-lib-report\": \"^3.0.0\",\n\t\t\t\t\"istanbul-lib-source-maps\": \"^4.0.0\",\n\t\t\t\t\"istanbul-reports\": \"^3.0.2\",\n\t\t\t\t\"make-dir\": \"^3.0.0\",\n\t\t\t\t\"node-preload\": \"^0.2.1\",\n\t\t\t\t\"p-map\": \"^3.0.0\",\n\t\t\t\t\"process-on-spawn\": \"^1.0.0\",\n\t\t\t\t\"resolve-from\": \"^5.0.0\",\n\t\t\t\t\"rimraf\": \"^3.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\",\n\t\t\t\t\"spawn-wrap\": \"^2.0.0\",\n\t\t\t\t\"test-exclude\": \"^6.0.0\",\n\t\t\t\t\"yargs\": \"^15.0.2\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"nyc\": \"bin/nyc.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.9\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/cliui\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\",\n\t\t\t\t\"wrap-ansi\": \"^6.2.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/glob\": {\n\t\t\t\"version\": \"7.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^3.1.1\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/resolve-from\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/wrap-ansi\": {\n\t\t\t\"version\": \"6.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^4.0.0\",\n\t\t\t\t\"string-width\": \"^4.1.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/y18n\": {\n\t\t\t\"version\": \"4.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/nyc/node_modules/yargs\": {\n\t\t\t\"version\": \"15.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cliui\": \"^6.0.0\",\n\t\t\t\t\"decamelize\": \"^1.2.0\",\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"get-caller-file\": \"^2.0.1\",\n\t\t\t\t\"require-directory\": \"^2.1.1\",\n\t\t\t\t\"require-main-filename\": \"^2.0.0\",\n\t\t\t\t\"set-blocking\": \"^2.0.0\",\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"which-module\": \"^2.0.0\",\n\t\t\t\t\"y18n\": \"^4.0.0\",\n\t\t\t\t\"yargs-parser\": \"^18.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/nyc/node_modules/yargs-parser\": {\n\t\t\t\"version\": \"18.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"camelcase\": \"^5.0.0\",\n\t\t\t\t\"decamelize\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/oauth-sign\": {\n\t\t\t\"version\": \"0.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/object-inspect\": {\n\t\t\t\"version\": \"1.13.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz\",\n\t\t\t\"integrity\": \"sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==\",\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/on-finished\": {\n\t\t\t\"version\": \"2.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ee-first\": \"1.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/on-headers\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/once\": {\n\t\t\t\"version\": \"1.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/once/-/once-1.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"wrappy\": \"1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/optionator\": {\n\t\t\t\"version\": \"0.9.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz\",\n\t\t\t\"integrity\": \"sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@aashutoshrathi/word-wrap\": \"^1.2.3\",\n\t\t\t\t\"deep-is\": \"^0.1.3\",\n\t\t\t\t\"fast-levenshtein\": \"^2.0.6\",\n\t\t\t\t\"levn\": \"^0.4.1\",\n\t\t\t\t\"prelude-ls\": \"^1.2.1\",\n\t\t\t\t\"type-check\": \"^0.4.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/os-shim\": {\n\t\t\t\"version\": \"0.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-limit\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"yocto-queue\": \"^0.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-locate\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^3.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-map\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"aggregate-error\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/p-try\": {\n\t\t\t\"version\": \"2.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/package-hash\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"graceful-fs\": \"^4.1.15\",\n\t\t\t\t\"hasha\": \"^5.0.0\",\n\t\t\t\t\"lodash.flattendeep\": \"^4.4.0\",\n\t\t\t\t\"release-zalgo\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parent-module\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"callsites\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parse-json\": {\n\t\t\t\"version\": \"5.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@babel/code-frame\": \"^7.0.0\",\n\t\t\t\t\"error-ex\": \"^1.3.1\",\n\t\t\t\t\"json-parse-even-better-errors\": \"^2.3.0\",\n\t\t\t\t\"lines-and-columns\": \"^1.1.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/parseurl\": {\n\t\t\t\"version\": \"1.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path\": {\n\t\t\t\"version\": \"0.12.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path/-/path-0.12.7.tgz\",\n\t\t\t\"integrity\": \"sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"process\": \"^0.11.1\",\n\t\t\t\t\"util\": \"^0.10.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-exists\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-is-absolute\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==\",\n\t\t\t\"devOptional\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-key\": {\n\t\t\t\"version\": \"3.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/path-parse\": {\n\t\t\t\"version\": \"1.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/path-to-regexp\": {\n\t\t\t\"version\": \"0.1.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz\",\n\t\t\t\"integrity\": \"sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==\"\n\t\t},\n\t\t\"node_modules/path-type\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/performance-now\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==\"\n\t\t},\n\t\t\"node_modules/picocolors\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/picomatch\": {\n\t\t\t\"version\": \"2.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/jonschlinkert\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir\": {\n\t\t\t\"version\": \"4.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"find-up\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pkg-dir/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pluralize\": {\n\t\t\t\"version\": \"8.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/postcss-selector-parser\": {\n\t\t\t\"version\": \"6.0.16\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz\",\n\t\t\t\"integrity\": \"sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cssesc\": \"^3.0.0\",\n\t\t\t\t\"util-deprecate\": \"^1.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit\": {\n\t\t\t\"version\": \"1.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cross-spawn\": \"^5.0.1\",\n\t\t\t\t\"spawn-sync\": \"^1.0.15\",\n\t\t\t\t\"which\": \"1.2.x\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/cross-spawn\": {\n\t\t\t\"version\": \"5.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"lru-cache\": \"^4.0.1\",\n\t\t\t\t\"shebang-command\": \"^1.2.0\",\n\t\t\t\t\"which\": \"^1.2.9\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/lru-cache\": {\n\t\t\t\"version\": \"4.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"pseudomap\": \"^1.0.2\",\n\t\t\t\t\"yallist\": \"^2.1.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/shebang-command\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"shebang-regex\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/shebang-regex\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/which\": {\n\t\t\t\"version\": \"1.2.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/which/-/which-1.2.14.tgz\",\n\t\t\t\"integrity\": \"sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"isexe\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"which\": \"bin/which\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/pre-commit/node_modules/yallist\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/prelude-ls\": {\n\t\t\t\"version\": \"1.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/preq\": {\n\t\t\t\"version\": \"0.5.14\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/preq/-/preq-0.5.14.tgz\",\n\t\t\t\"integrity\": \"sha512-kuJ5ndEgjs27kTTQ/P2ipPQoHeCJcAI4i97mU3xSjkjx6CsuQOsCe2l5twTGC0SCB5UkzRpmrpXmvN0Ip4ZCxA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.5.5\",\n\t\t\t\t\"request\": \"^2.88.0\",\n\t\t\t\t\"requestretry\": \"4.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/process\": {\n\t\t\t\"version\": \"0.11.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/process/-/process-0.11.10.tgz\",\n\t\t\t\"integrity\": \"sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/process-nextick-args\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==\"\n\t\t},\n\t\t\"node_modules/process-on-spawn\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fromentries\": \"^1.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/prom-client\": {\n\t\t\t\"version\": \"11.5.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/prom-client/-/prom-client-11.5.3.tgz\",\n\t\t\t\"integrity\": \"sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"tdigest\": \"^0.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/propagate\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/proxy-addr\": {\n\t\t\t\"version\": \"2.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"forwarded\": \"0.2.0\",\n\t\t\t\t\"ipaddr.js\": \"1.9.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/proxy-from-env\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==\"\n\t\t},\n\t\t\"node_modules/pseudomap\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/psl\": {\n\t\t\t\"version\": \"1.9.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/psl/-/psl-1.9.0.tgz\",\n\t\t\t\"integrity\": \"sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==\"\n\t\t},\n\t\t\"node_modules/punycode\": {\n\t\t\t\"version\": \"2.3.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz\",\n\t\t\t\"integrity\": \"sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/qs\": {\n\t\t\t\"version\": \"6.11.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/qs/-/qs-6.11.0.tgz\",\n\t\t\t\"integrity\": \"sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"side-channel\": \"^1.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/queue-microtask\": {\n\t\t\t\"version\": \"1.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/rambda\": {\n\t\t\t\"version\": \"7.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/randombytes\": {\n\t\t\t\"version\": \"2.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"^5.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/range-parser\": {\n\t\t\t\"version\": \"1.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/raw-body\": {\n\t\t\t\"version\": \"2.5.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz\",\n\t\t\t\"integrity\": \"sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bytes\": \"3.1.2\",\n\t\t\t\t\"http-errors\": \"2.0.0\",\n\t\t\t\t\"iconv-lite\": \"0.4.24\",\n\t\t\t\t\"unpipe\": \"1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg\": {\n\t\t\t\"version\": \"5.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@types/normalize-package-data\": \"^2.4.0\",\n\t\t\t\t\"normalize-package-data\": \"^2.5.0\",\n\t\t\t\t\"parse-json\": \"^5.0.0\",\n\t\t\t\t\"type-fest\": \"^0.6.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up\": {\n\t\t\t\"version\": \"7.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"find-up\": \"^4.1.0\",\n\t\t\t\t\"read-pkg\": \"^5.2.0\",\n\t\t\t\t\"type-fest\": \"^0.8.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/find-up\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"locate-path\": \"^5.0.0\",\n\t\t\t\t\"path-exists\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/locate-path\": {\n\t\t\t\"version\": \"5.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-locate\": \"^4.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/p-limit\": {\n\t\t\t\"version\": \"2.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-try\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/p-locate\": {\n\t\t\t\"version\": \"4.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"p-limit\": \"^2.2.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg-up/node_modules/type-fest\": {\n\t\t\t\"version\": \"0.8.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz\",\n\t\t\t\"integrity\": \"sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/read-pkg/node_modules/type-fest\": {\n\t\t\t\"version\": \"0.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/readable-stream\": {\n\t\t\t\"version\": \"2.3.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz\",\n\t\t\t\"integrity\": \"sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"core-util-is\": \"~1.0.0\",\n\t\t\t\t\"inherits\": \"~2.0.3\",\n\t\t\t\t\"isarray\": \"~1.0.0\",\n\t\t\t\t\"process-nextick-args\": \"~2.0.0\",\n\t\t\t\t\"safe-buffer\": \"~5.1.1\",\n\t\t\t\t\"string_decoder\": \"~1.1.1\",\n\t\t\t\t\"util-deprecate\": \"~1.0.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/readdirp\": {\n\t\t\t\"version\": \"3.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"picomatch\": \"^2.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/regexp-tree\": {\n\t\t\t\"version\": \"0.1.27\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz\",\n\t\t\t\"integrity\": \"sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"regexp-tree\": \"bin/regexp-tree\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/regjsparser\": {\n\t\t\t\"version\": \"0.10.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"jsesc\": \"~0.5.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"regjsparser\": \"bin/parser\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/regjsparser/node_modules/jsesc\": {\n\t\t\t\"version\": \"0.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"jsesc\": \"bin/jsesc\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/release-zalgo\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"es6-error\": \"^4.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request\": {\n\t\t\t\"version\": \"2.88.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/request/-/request-2.88.2.tgz\",\n\t\t\t\"integrity\": \"sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==\",\n\t\t\t\"deprecated\": \"request has been deprecated, see https://github.com/request/request/issues/3142\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"aws-sign2\": \"~0.7.0\",\n\t\t\t\t\"aws4\": \"^1.8.0\",\n\t\t\t\t\"caseless\": \"~0.12.0\",\n\t\t\t\t\"combined-stream\": \"~1.0.6\",\n\t\t\t\t\"extend\": \"~3.0.2\",\n\t\t\t\t\"forever-agent\": \"~0.6.1\",\n\t\t\t\t\"form-data\": \"~2.3.2\",\n\t\t\t\t\"har-validator\": \"~5.1.3\",\n\t\t\t\t\"http-signature\": \"~1.2.0\",\n\t\t\t\t\"is-typedarray\": \"~1.0.0\",\n\t\t\t\t\"isstream\": \"~0.1.2\",\n\t\t\t\t\"json-stringify-safe\": \"~5.0.1\",\n\t\t\t\t\"mime-types\": \"~2.1.19\",\n\t\t\t\t\"oauth-sign\": \"~0.9.0\",\n\t\t\t\t\"performance-now\": \"^2.1.0\",\n\t\t\t\t\"qs\": \"~6.5.2\",\n\t\t\t\t\"safe-buffer\": \"^5.1.2\",\n\t\t\t\t\"tough-cookie\": \"~2.5.0\",\n\t\t\t\t\"tunnel-agent\": \"^0.6.0\",\n\t\t\t\t\"uuid\": \"^3.3.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request/node_modules/form-data\": {\n\t\t\t\"version\": \"2.3.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz\",\n\t\t\t\"integrity\": \"sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asynckit\": \"^0.4.0\",\n\t\t\t\t\"combined-stream\": \"^1.0.6\",\n\t\t\t\t\"mime-types\": \"^2.1.12\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.12\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request/node_modules/qs\": {\n\t\t\t\"version\": \"6.5.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/qs/-/qs-6.5.3.tgz\",\n\t\t\t\"integrity\": \"sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/request/node_modules/uuid\": {\n\t\t\t\"version\": \"3.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==\",\n\t\t\t\"deprecated\": \"Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.\",\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/requestretry\": {\n\t\t\t\"version\": \"4.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/requestretry/-/requestretry-4.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-ZGdO1ZXUQAeCB9xOS2keSN501y7T1t0zPOD58jTAOwamt6qkcBMaGdRBHEOMQRnDtT5fn7S99F0dwADUqCmYqg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"extend\": \"^3.0.2\",\n\t\t\t\t\"lodash\": \"^4.17.10\",\n\t\t\t\t\"when\": \"^3.7.7\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"request\": \"2.*.*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/require-directory\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/require-from-string\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/require-main-filename\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/requireindex\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/resolve\": {\n\t\t\t\"version\": \"1.22.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz\",\n\t\t\t\"integrity\": \"sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-core-module\": \"^2.13.0\",\n\t\t\t\t\"path-parse\": \"^1.0.7\",\n\t\t\t\t\"supports-preserve-symlinks-flag\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"resolve\": \"bin/resolve\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/resolve-from\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/resolve-pkg-maps\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/privatenumber/resolve-pkg-maps?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/reusify\": {\n\t\t\t\"version\": \"1.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"iojs\": \">=1.0.0\",\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/rimraf\": {\n\t\t\t\"version\": \"3.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"glob\": \"^7.1.3\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"rimraf\": \"bin.js\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/rimraf/node_modules/glob\": {\n\t\t\t\"version\": \"7.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^3.1.1\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/rss-parser\": {\n\t\t\t\"version\": \"3.13.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"entities\": \"^2.0.3\",\n\t\t\t\t\"xml2js\": \"^0.5.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/run-parallel\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"queue-microtask\": \"^1.2.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\"\n\t\t},\n\t\t\"node_modules/safe-json-stringify\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==\",\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"node_modules/safe-regex\": {\n\t\t\t\"version\": \"2.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"regexp-tree\": \"~0.1.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/safer-buffer\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==\"\n\t\t},\n\t\t\"node_modules/sax\": {\n\t\t\t\"version\": \"1.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sax/-/sax-1.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/semaphore\": {\n\t\t\t\"version\": \"1.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/semver\": {\n\t\t\t\"version\": \"7.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/semver/-/semver-7.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"lru-cache\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"semver\": \"bin/semver.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/semver/node_modules/lru-cache\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"yallist\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/semver/node_modules/yallist\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==\"\n\t\t},\n\t\t\"node_modules/send\": {\n\t\t\t\"version\": \"0.18.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/send/-/send-0.18.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"2.6.9\",\n\t\t\t\t\"depd\": \"2.0.0\",\n\t\t\t\t\"destroy\": \"1.2.0\",\n\t\t\t\t\"encodeurl\": \"~1.0.2\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"etag\": \"~1.8.1\",\n\t\t\t\t\"fresh\": \"0.5.2\",\n\t\t\t\t\"http-errors\": \"2.0.0\",\n\t\t\t\t\"mime\": \"1.6.0\",\n\t\t\t\t\"ms\": \"2.1.3\",\n\t\t\t\t\"on-finished\": \"2.4.1\",\n\t\t\t\t\"range-parser\": \"~1.2.1\",\n\t\t\t\t\"statuses\": \"2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/send/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n\t\t\t\"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\"\n\t\t},\n\t\t\"node_modules/serialize-javascript\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"randombytes\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/serve-static\": {\n\t\t\t\"version\": \"1.15.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"encodeurl\": \"~1.0.2\",\n\t\t\t\t\"escape-html\": \"~1.0.3\",\n\t\t\t\t\"parseurl\": \"~1.3.3\",\n\t\t\t\t\"send\": \"0.18.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/service-runner\": {\n\t\t\t\"version\": \"3.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/service-runner/-/service-runner-3.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-eDUg9iP17zodtkPNhy+LOgjL/hh245s+D0Z5fgeB1ds39qHQzBds8tM4GByGbrU4u7zv0sO0RXlyq/j6Q1kZsA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.7.2\",\n\t\t\t\t\"bunyan\": \"^1.8.12\",\n\t\t\t\t\"bunyan-syslog-udp\": \"^0.2.0\",\n\t\t\t\t\"dnscache\": \"^1.0.2\",\n\t\t\t\t\"gelf-stream\": \"^1.1.1\",\n\t\t\t\t\"hot-shots\": \"^6.8.7\",\n\t\t\t\t\"js-yaml\": \"^3.13.1\",\n\t\t\t\t\"limitation\": \"^0.2.3\",\n\t\t\t\t\"lodash.clonedeep\": \"^4.5.0\",\n\t\t\t\t\"prom-client\": \"^11.5.3\",\n\t\t\t\t\"semver\": \"^7.1.2\",\n\t\t\t\t\"tar\": \"^4.4.16\",\n\t\t\t\t\"yargs\": \"^16.2.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"service-runner\": \"service-runner.js\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"optionalDependencies\": {\n\t\t\t\t\"heapdump\": \"^0.3.15\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/service-runner/node_modules/argparse\": {\n\t\t\t\"version\": \"1.0.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n\t\t\t\"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sprintf-js\": \"~1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/service-runner/node_modules/js-yaml\": {\n\t\t\t\"version\": \"3.14.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz\",\n\t\t\t\"integrity\": \"sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^1.0.7\",\n\t\t\t\t\"esprima\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/set-blocking\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/set-function-length\": {\n\t\t\t\"version\": \"1.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"define-data-property\": \"^1.1.4\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"function-bind\": \"^1.1.2\",\n\t\t\t\t\"get-intrinsic\": \"^1.2.4\",\n\t\t\t\t\"gopd\": \"^1.0.1\",\n\t\t\t\t\"has-property-descriptors\": \"^1.0.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/setprototypeof\": {\n\t\t\t\"version\": \"1.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==\"\n\t\t},\n\t\t\"node_modules/shebang-command\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"shebang-regex\": \"^3.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/shebang-regex\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/side-channel\": {\n\t\t\t\"version\": \"1.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"call-bind\": \"^1.0.7\",\n\t\t\t\t\"es-errors\": \"^1.3.0\",\n\t\t\t\t\"get-intrinsic\": \"^1.2.4\",\n\t\t\t\t\"object-inspect\": \"^1.13.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/signal-exit\": {\n\t\t\t\"version\": \"3.0.7\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz\",\n\t\t\t\"integrity\": \"sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/sinon\": {\n\t\t\t\"version\": \"17.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@sinonjs/commons\": \"^3.0.0\",\n\t\t\t\t\"@sinonjs/fake-timers\": \"^11.2.2\",\n\t\t\t\t\"@sinonjs/samsam\": \"^8.0.0\",\n\t\t\t\t\"diff\": \"^5.1.0\",\n\t\t\t\t\"nise\": \"^5.1.5\",\n\t\t\t\t\"supports-color\": \"^7.2.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\"url\": \"https://opencollective.com/sinon\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/sinon/node_modules/diff\": {\n\t\t\t\"version\": \"5.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/diff/-/diff-5.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.3.1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/slash\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/slash/-/slash-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/source-map\": {\n\t\t\t\"version\": \"0.6.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz\",\n\t\t\t\"integrity\": \"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spawn-sync\": {\n\t\t\t\"version\": \"1.0.15\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz\",\n\t\t\t\"integrity\": \"sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"concat-stream\": \"^1.4.7\",\n\t\t\t\t\"os-shim\": \"^0.1.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spawn-wrap\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"foreground-child\": \"^2.0.0\",\n\t\t\t\t\"is-windows\": \"^1.0.2\",\n\t\t\t\t\"make-dir\": \"^3.0.0\",\n\t\t\t\t\"rimraf\": \"^3.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\",\n\t\t\t\t\"which\": \"^2.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-correct\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-expression-parse\": \"^3.0.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-correct/node_modules/spdx-expression-parse\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-exceptions\": \"^2.1.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-exceptions\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/spdx-expression-parse\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-exceptions\": \"^2.1.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/spdx-license-ids\": {\n\t\t\t\"version\": \"3.0.17\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz\",\n\t\t\t\"integrity\": \"sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/sprintf-js\": {\n\t\t\t\"version\": \"1.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==\"\n\t\t},\n\t\t\"node_modules/sshpk\": {\n\t\t\t\"version\": \"1.18.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz\",\n\t\t\t\"integrity\": \"sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"asn1\": \"~0.2.3\",\n\t\t\t\t\"assert-plus\": \"^1.0.0\",\n\t\t\t\t\"bcrypt-pbkdf\": \"^1.0.0\",\n\t\t\t\t\"dashdash\": \"^1.12.0\",\n\t\t\t\t\"ecc-jsbn\": \"~0.1.1\",\n\t\t\t\t\"getpass\": \"^0.1.1\",\n\t\t\t\t\"jsbn\": \"~0.1.0\",\n\t\t\t\t\"safer-buffer\": \"^2.0.2\",\n\t\t\t\t\"tweetnacl\": \"~0.14.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"sshpk-conv\": \"bin/sshpk-conv\",\n\t\t\t\t\"sshpk-sign\": \"bin/sshpk-sign\",\n\t\t\t\t\"sshpk-verify\": \"bin/sshpk-verify\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/statuses\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/string_decoder\": {\n\t\t\t\"version\": \"1.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"~5.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/string-width\": {\n\t\t\t\"version\": \"4.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"emoji-regex\": \"^8.0.0\",\n\t\t\t\t\"is-fullwidth-code-point\": \"^3.0.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-ansi\": {\n\t\t\t\"version\": \"6.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-regex\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-bom\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-indent\": {\n\t\t\t\"version\": \"3.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"min-indent\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/strip-json-comments\": {\n\t\t\t\"version\": \"3.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/striptags\": {\n\t\t\t\"version\": \"3.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==\"\n\t\t},\n\t\t\"node_modules/supports-color\": {\n\t\t\t\"version\": \"7.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"has-flag\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/supports-preserve-symlinks-flag\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router\": {\n\t\t\t\"version\": \"0.7.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/swagger-router/-/swagger-router-0.7.4.tgz\",\n\t\t\t\"integrity\": \"sha512-HdKJ4DenOXcaChWKST7oFHvd+kclike9rsFfPt3W9JWVvznofcOWGSivyWJECky3tOlw52jqvCKSQrz1l+1D9w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bluebird\": \"^3.5.2\",\n\t\t\t\t\"js-yaml\": \"^3.12.0\",\n\t\t\t\t\"tassembly\": \"^0.2.3\",\n\t\t\t\t\"template-expression-compiler\": \"^0.1.10\",\n\t\t\t\t\"uuid\": \"^3.3.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router/node_modules/argparse\": {\n\t\t\t\"version\": \"1.0.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n\t\t\t\"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sprintf-js\": \"~1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router/node_modules/js-yaml\": {\n\t\t\t\"version\": \"3.14.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz\",\n\t\t\t\"integrity\": \"sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"argparse\": \"^1.0.7\",\n\t\t\t\t\"esprima\": \"^4.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"js-yaml\": \"bin/js-yaml.js\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-router/node_modules/uuid\": {\n\t\t\t\"version\": \"3.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==\",\n\t\t\t\"deprecated\": \"Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.\",\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/swagger-ui-dist\": {\n\t\t\t\"version\": \"5.16.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.16.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/+HmynNravmZ2RCeiIBw9lmM9ZEimJuig04zKpATIl6EKhAw5k0Ma22buCkqoah6pXes0YD3AAg6Wnd5u76zag==\"\n\t\t},\n\t\t\"node_modules/tar\": {\n\t\t\t\"version\": \"4.4.19\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tar/-/tar-4.4.19.tgz\",\n\t\t\t\"integrity\": \"sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"chownr\": \"^1.1.4\",\n\t\t\t\t\"fs-minipass\": \"^1.2.7\",\n\t\t\t\t\"minipass\": \"^2.9.0\",\n\t\t\t\t\"minizlib\": \"^1.3.3\",\n\t\t\t\t\"mkdirp\": \"^0.5.5\",\n\t\t\t\t\"safe-buffer\": \"^5.2.1\",\n\t\t\t\t\"yallist\": \"^3.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tar/node_modules/safe-buffer\": {\n\t\t\t\"version\": \"5.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\",\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"patreon\",\n\t\t\t\t\t\"url\": \"https://www.patreon.com/feross\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"consulting\",\n\t\t\t\t\t\"url\": \"https://feross.org/support\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"node_modules/tassembly\": {\n\t\t\t\"version\": \"0.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tassembly/-/tassembly-0.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-rpYD3bbgITu9vxxhRgMDANK3wMUw4WcQ9PJDLJnDJGs13rbHHnfuPB0sVmkTOn0c01BIUe7xZdDcF2IzlgMEHw==\"\n\t\t},\n\t\t\"node_modules/tdigest\": {\n\t\t\t\"version\": \"0.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bintrees\": \"1.0.2\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/template-expression-compiler\": {\n\t\t\t\"version\": \"0.1.10\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/template-expression-compiler/-/template-expression-compiler-0.1.10.tgz\",\n\t\t\t\"integrity\": \"sha512-AuGyxkl8I+GhmYqt4JzsxZWIMgB1TnuCQCkRdOhHlZ612peP+yoXcoYVdBJWP/NYAFwmUUliBjuVwgqog0y5KQ==\"\n\t\t},\n\t\t\"node_modules/test-exclude\": {\n\t\t\t\"version\": \"6.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"@istanbuljs/schema\": \"^0.1.2\",\n\t\t\t\t\"glob\": \"^7.1.4\",\n\t\t\t\t\"minimatch\": \"^3.0.4\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/test-exclude/node_modules/glob\": {\n\t\t\t\"version\": \"7.2.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.2.3.tgz\",\n\t\t\t\"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"fs.realpath\": \"^1.0.0\",\n\t\t\t\t\"inflight\": \"^1.0.4\",\n\t\t\t\t\"inherits\": \"2\",\n\t\t\t\t\"minimatch\": \"^3.1.1\",\n\t\t\t\t\"once\": \"^1.3.0\",\n\t\t\t\t\"path-is-absolute\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/isaacs\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/text-table\": {\n\t\t\t\"version\": \"0.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/to-fast-properties\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/to-regex-range\": {\n\t\t\t\"version\": \"5.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-number\": \"^7.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/toidentifier\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tough-cookie\": {\n\t\t\t\"version\": \"2.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"psl\": \"^1.1.28\",\n\t\t\t\t\"punycode\": \"^2.1.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tslib\": {\n\t\t\t\"version\": \"1.14.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz\",\n\t\t\t\"integrity\": \"sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/tsutils\": {\n\t\t\t\"version\": \"3.21.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz\",\n\t\t\t\"integrity\": \"sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"tslib\": \"^1.8.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 6\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"typescript\": \">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tunnel-agent\": {\n\t\t\t\"version\": \"0.6.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz\",\n\t\t\t\"integrity\": \"sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"safe-buffer\": \"^5.0.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/tweetnacl\": {\n\t\t\t\"version\": \"0.14.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz\",\n\t\t\t\"integrity\": \"sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==\"\n\t\t},\n\t\t\"node_modules/type-check\": {\n\t\t\t\"version\": \"0.4.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz\",\n\t\t\t\"integrity\": \"sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"prelude-ls\": \"^1.2.1\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/type-detect\": {\n\t\t\t\"version\": \"4.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/type-fest\": {\n\t\t\t\"version\": \"0.20.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/type-is\": {\n\t\t\t\"version\": \"1.6.18\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz\",\n\t\t\t\"integrity\": \"sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"media-typer\": \"0.3.0\",\n\t\t\t\t\"mime-types\": \"~2.1.24\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.6\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/typedarray\": {\n\t\t\t\"version\": \"0.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/typedarray-to-buffer\": {\n\t\t\t\"version\": \"3.1.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz\",\n\t\t\t\"integrity\": \"sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"is-typedarray\": \"^1.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/typescript\": {\n\t\t\t\"version\": \"5.4.5\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz\",\n\t\t\t\"integrity\": \"sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"peer\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"tsc\": \"bin/tsc\",\n\t\t\t\t\"tsserver\": \"bin/tsserver\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=14.17\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/underscore\": {\n\t\t\t\"version\": \"1.13.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz\",\n\t\t\t\"integrity\": \"sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/unix-dgram\": {\n\t\t\t\"version\": \"2.0.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz\",\n\t\t\t\"integrity\": \"sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==\",\n\t\t\t\"hasInstallScript\": true,\n\t\t\t\"optional\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"bindings\": \"^1.5.0\",\n\t\t\t\t\"nan\": \"^2.16.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=0.10.48\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/unpipe\": {\n\t\t\t\"version\": \"1.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/upath\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/upath/-/upath-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4\",\n\t\t\t\t\"yarn\": \"*\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/update-browserslist-db\": {\n\t\t\t\"version\": \"1.0.13\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz\",\n\t\t\t\"integrity\": \"sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"funding\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"opencollective\",\n\t\t\t\t\t\"url\": \"https://opencollective.com/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"tidelift\",\n\t\t\t\t\t\"url\": \"https://tidelift.com/funding/github/npm/browserslist\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"github\",\n\t\t\t\t\t\"url\": \"https://github.com/sponsors/ai\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"escalade\": \"^3.1.1\",\n\t\t\t\t\"picocolors\": \"^1.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"update-browserslist-db\": \"cli.js\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"browserslist\": \">= 4.21.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/uri-js\": {\n\t\t\t\"version\": \"4.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"punycode\": \"^2.1.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/util\": {\n\t\t\t\"version\": \"0.10.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/util/-/util-0.10.4.tgz\",\n\t\t\t\"integrity\": \"sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"inherits\": \"2.0.3\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/util-deprecate\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==\"\n\t\t},\n\t\t\"node_modules/util/node_modules/inherits\": {\n\t\t\t\"version\": \"2.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/utils-merge\": {\n\t\t\t\"version\": \"1.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/uuid\": {\n\t\t\t\"version\": \"9.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==\",\n\t\t\t\"funding\": [\n\t\t\t\t\"https://github.com/sponsors/broofa\",\n\t\t\t\t\"https://github.com/sponsors/ctavan\"\n\t\t\t],\n\t\t\t\"bin\": {\n\t\t\t\t\"uuid\": \"dist/bin/uuid\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/validate-npm-package-license\": {\n\t\t\t\"version\": \"3.0.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz\",\n\t\t\t\"integrity\": \"sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-correct\": \"^3.0.0\",\n\t\t\t\t\"spdx-expression-parse\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/validate-npm-package-license/node_modules/spdx-expression-parse\": {\n\t\t\t\"version\": \"3.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"spdx-exceptions\": \"^2.1.0\",\n\t\t\t\t\"spdx-license-ids\": \"^3.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/vary\": {\n\t\t\t\"version\": \"1.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 0.8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/verror\": {\n\t\t\t\"version\": \"1.10.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==\",\n\t\t\t\"engines\": [\n\t\t\t\t\"node >=0.6.0\"\n\t\t\t],\n\t\t\t\"dependencies\": {\n\t\t\t\t\"assert-plus\": \"^1.0.0\",\n\t\t\t\t\"core-util-is\": \"1.0.2\",\n\t\t\t\t\"extsprintf\": \"^1.2.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/verror/node_modules/core-util-is\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==\"\n\t\t},\n\t\t\"node_modules/vue-eslint-parser\": {\n\t\t\t\"version\": \"9.4.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz\",\n\t\t\t\"integrity\": \"sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"debug\": \"^4.3.4\",\n\t\t\t\t\"eslint-scope\": \"^7.1.1\",\n\t\t\t\t\"eslint-visitor-keys\": \"^3.3.0\",\n\t\t\t\t\"espree\": \"^9.3.1\",\n\t\t\t\t\"esquery\": \"^1.4.0\",\n\t\t\t\t\"lodash\": \"^4.17.21\",\n\t\t\t\t\"semver\": \"^7.3.6\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/mysticatea\"\n\t\t\t},\n\t\t\t\"peerDependencies\": {\n\t\t\t\t\"eslint\": \">=6.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/vue-eslint-parser/node_modules/debug\": {\n\t\t\t\"version\": \"4.3.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz\",\n\t\t\t\"integrity\": \"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ms\": \"2.1.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=6.0\"\n\t\t\t},\n\t\t\t\"peerDependenciesMeta\": {\n\t\t\t\t\"supports-color\": {\n\t\t\t\t\t\"optional\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"node_modules/vue-eslint-parser/node_modules/ms\": {\n\t\t\t\"version\": \"2.1.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz\",\n\t\t\t\"integrity\": \"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/when\": {\n\t\t\t\"version\": \"3.7.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/when/-/when-3.7.8.tgz\",\n\t\t\t\"integrity\": \"sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==\"\n\t\t},\n\t\t\"node_modules/which\": {\n\t\t\t\"version\": \"2.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/which/-/which-2.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"isexe\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"bin\": {\n\t\t\t\t\"node-which\": \"bin/node-which\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 8\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/which-module\": {\n\t\t\t\"version\": \"2.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/wikimedia-kad-fork\": {\n\t\t\t\"version\": \"1.3.6\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wikimedia-kad-fork/-/wikimedia-kad-fork-1.3.6.tgz\",\n\t\t\t\"integrity\": \"sha512-m+IxFN4JatoQPRo0N46xMh7tR6FSznb/ithIchAy7Wg9mrkc4/bE/3BhlJS410quFJFrJp8lJJp93g4uTbj4lA==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"async\": \"^0.9.0\",\n\t\t\t\t\"clarinet\": \"^0.11.0\",\n\t\t\t\t\"colors\": \"^1.0.3\",\n\t\t\t\t\"hat\": \"0.0.3\",\n\t\t\t\t\"kad-fs\": \"0.0.4\",\n\t\t\t\t\"kad-localstorage\": \"0.0.7\",\n\t\t\t\t\"kad-memstore\": \"0.0.1\",\n\t\t\t\t\"lodash\": \"^4.17.11\",\n\t\t\t\t\"ms\": \"^0.7.0\",\n\t\t\t\t\"msgpack5\": \"^3.3.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/wikimedia-kad-fork/node_modules/ms\": {\n\t\t\t\"version\": \"0.7.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/ms/-/ms-0.7.3.tgz\",\n\t\t\t\"integrity\": \"sha512-lrKNzMWqQZgwJahtrtrM+9NgOoDUveDrVmm5aGXrf3BdtL0mq7X6IVzoZaw+TfNti29eHd1/8GI+h45K5cQ6/w==\"\n\t\t},\n\t\t\"node_modules/workerpool\": {\n\t\t\t\"version\": \"6.2.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz\",\n\t\t\t\"integrity\": \"sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==\",\n\t\t\t\"dev\": true\n\t\t},\n\t\t\"node_modules/wrap-ansi\": {\n\t\t\t\"version\": \"7.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"ansi-styles\": \"^4.0.0\",\n\t\t\t\t\"string-width\": \"^4.1.0\",\n\t\t\t\t\"strip-ansi\": \"^6.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/chalk/wrap-ansi?sponsor=1\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/wrappy\": {\n\t\t\t\"version\": \"1.0.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz\",\n\t\t\t\"integrity\": \"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==\",\n\t\t\t\"devOptional\": true\n\t\t},\n\t\t\"node_modules/write-file-atomic\": {\n\t\t\t\"version\": \"3.0.3\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz\",\n\t\t\t\"integrity\": \"sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"imurmurhash\": \"^0.1.4\",\n\t\t\t\t\"is-typedarray\": \"^1.0.0\",\n\t\t\t\t\"signal-exit\": \"^3.0.2\",\n\t\t\t\t\"typedarray-to-buffer\": \"^3.1.5\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/xml-name-validator\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=12\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/xml2js\": {\n\t\t\t\"version\": \"0.5.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz\",\n\t\t\t\"integrity\": \"sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sax\": \">=0.6.0\",\n\t\t\t\t\"xmlbuilder\": \"~11.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/xmlbuilder\": {\n\t\t\t\"version\": \"11.0.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz\",\n\t\t\t\"integrity\": \"sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=4.0\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/y18n\": {\n\t\t\t\"version\": \"5.0.8\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz\",\n\t\t\t\"integrity\": \"sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yallist\": {\n\t\t\t\"version\": \"3.1.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz\",\n\t\t\t\"integrity\": \"sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==\"\n\t\t},\n\t\t\"node_modules/yaml\": {\n\t\t\t\"version\": \"2.4.1\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz\",\n\t\t\t\"integrity\": \"sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"bin\": {\n\t\t\t\t\"yaml\": \"bin.mjs\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">= 14\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yaml-eslint-parser\": {\n\t\t\t\"version\": \"1.2.2\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz\",\n\t\t\t\"integrity\": \"sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"eslint-visitor-keys\": \"^3.0.0\",\n\t\t\t\t\"lodash\": \"^4.17.21\",\n\t\t\t\t\"yaml\": \"^2.0.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \"^14.17.0 || >=16.0.0\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/ota-meshi\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs\": {\n\t\t\t\"version\": \"16.2.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz\",\n\t\t\t\"integrity\": \"sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"cliui\": \"^7.0.2\",\n\t\t\t\t\"escalade\": \"^3.1.1\",\n\t\t\t\t\"get-caller-file\": \"^2.0.5\",\n\t\t\t\t\"require-directory\": \"^2.1.1\",\n\t\t\t\t\"string-width\": \"^4.2.0\",\n\t\t\t\t\"y18n\": \"^5.0.5\",\n\t\t\t\t\"yargs-parser\": \"^20.2.2\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-parser\": {\n\t\t\t\"version\": \"20.2.4\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz\",\n\t\t\t\"integrity\": \"sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==\",\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-unparser\": {\n\t\t\t\"version\": \"2.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"dependencies\": {\n\t\t\t\t\"camelcase\": \"^6.0.0\",\n\t\t\t\t\"decamelize\": \"^4.0.0\",\n\t\t\t\t\"flat\": \"^5.0.2\",\n\t\t\t\t\"is-plain-obj\": \"^2.1.0\"\n\t\t\t},\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-unparser/node_modules/camelcase\": {\n\t\t\t\"version\": \"6.3.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz\",\n\t\t\t\"integrity\": \"sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yargs-unparser/node_modules/decamelize\": {\n\t\t\t\"version\": \"4.0.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz\",\n\t\t\t\"integrity\": \"sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t},\n\t\t\"node_modules/yocto-queue\": {\n\t\t\t\"version\": \"0.1.0\",\n\t\t\t\"resolved\": \"https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz\",\n\t\t\t\"integrity\": \"sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==\",\n\t\t\t\"dev\": true,\n\t\t\t\"engines\": {\n\t\t\t\t\"node\": \">=10\"\n\t\t\t},\n\t\t\t\"funding\": {\n\t\t\t\t\"url\": \"https://github.com/sponsors/sindresorhus\"\n\t\t\t}\n\t\t}\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[{"ruleId":"strict","severity":1,"message":"Use the global form of 'use strict'.","line":1,"column":1,"nodeType":"Program","messageId":"global","endLine":82,"endColumn":3}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n\t\"name\": \"@wikimedia/wikifeeds\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"A node webservice supporting featured wiki content feeds\",\n\t\"main\": \"./app.js\",\n\t\"engines\": {\n\t\t\"node\": \">=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"start\": \"service-runner\",\n\t\t\"test\": \"npm run lint && PREQ_CONNECT_TIMEOUT=15 mocha --recursive\",\n\t\t\"test:unit\": \"mocha test/lib\",\n\t\t\"test:diff\": \"mocha --exit test/diff\",\n\t\t\"test:spec\": \"mocha test/features/app/spec.js\",\n\t\t\"lint\": \"eslint --ext .js --ext .json .\",\n\t\t\"lint:fix\": \"eslint --fix .\",\n\t\t\"docker-start\": \"service-runner docker-start\",\n\t\t\"docker-test\": \"service-runner docker-test\",\n\t\t\"test-build\": \"service-runner docker-test && service-runner build --deploy-repo --force\",\n\t\t\"coverage\": \"nyc mocha --recursive\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/services/wikifeeds\"\n\t},\n\t\"keywords\": [\n\t\t\"REST\",\n\t\t\"API\",\n\t\t\"node service\",\n\t\t\"mobile apps\",\n\t\t\"MediaWiki\",\n\t\t\"Wikipedia\"\n\t],\n\t\"author\": \"Wikimedia Product Infrastructure team, maintained by Content Transform team\",\n\t\"contributors\": [],\n\t\"license\": \"Apache-2.0\",\n\t\"bugs\": {\n\t\t\"url\": \"https://phabricator.wikimedia.org/tag/wikifeeds\"\n\t},\n\t\"homepage\": \"https://phabricator.wikimedia.org/tag/wikifeeds\",\n\t\"dependencies\": {\n\t\t\"axios\": \"^1.6.7\",\n\t\t\"axios-retry\": \"^4.0.0\",\n\t\t\"bluebird\": \"^3.7.2\",\n\t\t\"body-parser\": \"^1.20.2\",\n\t\t\"bunyan\": \"^1.8.15\",\n\t\t\"cassandra-uuid\": \"^0.1.0\",\n\t\t\"compression\": \"^1.7.4\",\n\t\t\"domino\": \"^2.1.6\",\n\t\t\"express\": \"^4.18.2\",\n\t\t\"http-shutdown\": \"^1.2.2\",\n\t\t\"js-yaml\": \"^4.1.0\",\n\t\t\"lodash\": \"^4.17.21\",\n\t\t\"mediawiki-title\": \"^0.7.5\",\n\t\t\"preq\": \"^0.5.14\",\n\t\t\"service-runner\": \"^3.1.0\",\n\t\t\"striptags\": \"^3.2.0\",\n\t\t\"swagger-router\": \"^0.7.4\",\n\t\t\"swagger-ui-dist\": \"^5.11.7\",\n\t\t\"uuid\": \"^9.0.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ajv\": \"^8.12.0\",\n\t\t\"ajv-formats\": \"^2.1.1\",\n\t\t\"csv-parse\": \"^5.5.3\",\n\t\t\"eslint\": \"^8.56.0\",\n\t\t\"eslint-config-wikimedia\": \"0.27.0\",\n\t\t\"eslint-plugin-n\": \"^16.6.2\",\n\t\t\"extend\": \"^3.0.2\",\n\t\t\"mocha\": \"^10.3.0\",\n\t\t\"mocha-lcov-reporter\": \"^1.3.0\",\n\t\t\"mocha.parallel\": \"^0.15.6\",\n\t\t\"nock\": \"^13.5.3\",\n\t\t\"nyc\": \"^15.1.0\",\n\t\t\"path\": \"^0.12.7\",\n\t\t\"pre-commit\": \"^1.2.2\",\n\t\t\"rss-parser\": \"^3.13.0\",\n\t\t\"sinon\": \"^17.0.1\",\n\t\t\"underscore\": \"^1.13.6\"\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/aggregated.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/announcements.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/availability.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/featured-image.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/featured.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/info.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/most-read.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/news.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/on-this-day.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/random.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/routes/root.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/scripts/check-featured-feed.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":49,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":49,"endColumn":42},{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":82,"column":44,"nodeType":"Identifier","messageId":"noShadow","endLine":82,"endColumn":51},{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":107,"column":34,"nodeType":"Identifier","messageId":"noShadow","endLine":107,"endColumn":41},{"ruleId":"no-shadow","severity":1,"message":"'feature' is already declared in the upper scope on line 212 column 7.","line":150,"column":30,"nodeType":"Identifier","messageId":"noShadow","endLine":150,"endColumn":37},{"ruleId":"n/no-process-exit","severity":1,"message":"Don't use process.exit(); throw an error instead.","line":217,"column":5,"nodeType":"CallExpression","messageId":"noProcessExit","endLine":217,"endColumn":21}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst BBPromise = require('bluebird');\nconst domino = require('domino');\nconst preq = require('preq');\nconst parseRssUrl = BBPromise.promisify(require('rss-parser').parseURL);\nconst underscore = require('underscore');\nconst path = require('path');\n\n//\n// LANGUAGES SECTION start\n//\nconst wikiquoteLanguages = require(path.join(__dirname, '../private/wikiquotes.json'));\nconst wiktionaryLanguages = require(path.join(__dirname, '../private/wiktionaries.json'));\nconst wikipediaLanguagesRawList = require(path.join(__dirname, '../private/languages_list.json'));\n\nconst prepareWikipediaLanguageCodes = () => {\n    delete wikipediaLanguagesRawList['Simplified Chinese']; // skip lang variants\n    delete wikipediaLanguagesRawList['Traditional Chinese'];\n    return underscore.values(wikipediaLanguagesRawList).sort();\n};\nconst wikipediaLanguages = prepareWikipediaLanguageCodes();\n//\n// LANGUAGES SECTION end\n//\n\nconst ModeEnum = Object.freeze({ wikitext: 0, expandTemplates: 1, rssFeed: 2 });\nconst mode = ModeEnum.rssFeed;\n\nconst candidates = [];\nconst errNotConfigured = [];\nconst errElse = [];\nconst errHttp = [];\n\nconst cleanUpHtml = (html) => html.replace(/<!--[\\s\\S]*?-->/mg, '').replace(/\\n/mg, '');\n\nconst lookForBoldAnchor = (document, projectLang, html) => {\n    const boldAnchor = document.querySelector('b > a, a > b');\n    if (boldAnchor) {\n        const tfaTitle = boldAnchor.getAttribute('title');\n        console.log(`${ projectLang }: ${ tfaTitle }`);\n        candidates.push(projectLang);\n    } else {\n        console.log(`${ projectLang }: ERROR: bold anchor not found: else: ${ html }`);\n        errElse.push(projectLang);\n    }\n};\n\nconst getWikitext = (projectLang, feature) => {\n    const baseUri = `https://${ projectLang }.${ feature.projectFamily }.org`;\n    const queryParams1 = 'action=query&format=json&prop=revisions&rvprop=content';\n    const queryParams2 = `&rvslots=main&titles=MediaWiki%3A${ feature.title }`;\n    const uri = `${ baseUri }/w/api.php?${ queryParams1 }${ queryParams2 }`;\n\n    return preq.get({ uri })\n        .then((rsp) => {\n            const pages = rsp.body.query && rsp.body.query.pages;\n            if (!pages) {\n                errNotConfigured.push(projectLang);\n                return;\n            }\n            const firstPageKey = Object.keys(pages)[0];\n            if (Object.prototype.hasOwnProperty.call(pages[firstPageKey], 'missing')) {\n                errNotConfigured.push(projectLang);\n                return;\n            }\n\n            const wikiText = pages[firstPageKey].revisions[0].slots.main['*'];\n            if (wikiText) {\n                console.log(`${ projectLang }: ${ wikiText }`);\n                candidates.push(projectLang);\n            } else {\n                errNotConfigured.push(projectLang);\n            }\n        })\n        .catch((err) => {\n            console.log(`${ projectLang } ERROR: ${ err }`);\n            errHttp.push(projectLang);\n        });\n};\n\nconst doubleExpandTemplate = (projectLang, feature) => {\n    const baseUri = `https://${ projectLang }.${ feature.projectFamily }.org`;\n    const wikiText = encodeURIComponent(\n        `{{#ifexist:{{int:${ feature.title }}}|{{ {{int:${ feature.title }}} }} }}`);\n    const queryParams = `action=parse&format=json&prop=text&contentmodel=wikitext&text=${ wikiText }`;\n    const uri = `${ baseUri }/w/api.php?${ queryParams }`;\n\n    return preq.get({ uri })\n        .then((rsp) => {\n            const html = cleanUpHtml(rsp.body.parse.text['*']);\n            if (html === '') {\n                errNotConfigured.push(projectLang);\n            } else if (feature.shouldLookForBoldAnchor) {\n                lookForBoldAnchor(domino.createDocument(html), projectLang, html);\n            } else {\n                console.log(`${ projectLang }: ${ html }`);\n                candidates.push(projectLang);\n            }\n        })\n        .catch((err) => {\n            console.log(`${ projectLang } ERROR: ${ err }`);\n            errHttp.push(projectLang);\n        });\n};\n\nconst getRssFeed = (projectLang, feature) => {\n    const baseUri = `https://${ projectLang }.${ feature.projectFamily }.org`;\n    const queryParams = `action=featuredfeed&feed=${ feature.feedName }&feedformat=rss`;\n    const uri = `${ baseUri }/w/api.php?${ queryParams }`;\n    const contentPool = [];\n    const indices = [];\n\n    return parseRssUrl(uri)\n        .then((response) => {\n            let languageCode;\n            // console.log(`${projectLang}: ${response.feed.title}`);\n            response.feed.entries.forEach((entry) => {\n                const index = underscore.indexOf(contentPool, entry.content);\n                // console.log(`${entry.title}: ${index}: ${entry.link}`);\n                if (index >= 0) {\n                    indices.push(index);\n                } else {\n                    contentPool.push(entry.content);\n                    indices.push(contentPool.length - 1);\n                }\n                languageCode = entry.link.slice(entry.link.lastIndexOf('/') + 1);\n            });\n            // in a few instances the languageCode differs from the projectLang (Example: no/nb)\n            console.log(`${ projectLang }/${ languageCode }: ${ indices }: ${ uri }`);\n            candidates.push(projectLang);\n        })\n        .catch((err) => {\n            if (err.message === 'RSS 1.0 parsing not yet implemented.') {\n                errNotConfigured.push(projectLang);\n            } else {\n                console.log(`${ projectLang }: ERROR: ${ uri }: ${ err }`);\n                errHttp.push(projectLang);\n            }\n        });\n};\n\nconst printResultSummary = () => {\n    console.log(`candidates: ${ candidates.length }: ${ JSON.stringify(candidates.sort()) }`);\n    console.log(`errNotConfigured: ${ errNotConfigured.length }: ${ errNotConfigured.sort() }`);\n    console.log(`errElse: ${ errElse.length }: ${ errElse.sort() }`);\n    console.log(`retryQueue: ${ errHttp.length }: ${ errHttp.sort() }`);\n};\n\nconst processAllLanguages = (feature) => {\n    BBPromise.map(feature.projectLangs, (projectLang) => {\n        if (mode === ModeEnum.expandTemplates) {\n            return doubleExpandTemplate(projectLang, feature);\n        } else if (mode === ModeEnum.wikitext) {\n            return getWikitext(projectLang, feature);\n        } else {\n            return getRssFeed(projectLang, feature);\n        }\n    }, { concurrency: 1 })\n        .then(() => {\n            printResultSummary();\n        });\n};\n\n// MAIN\nconst featureMap = {\n    tfa: {\n        projectFamily: 'wikipedia',\n        projectLangs: wikipediaLanguages,\n        feedName: 'featured',\n        title: 'Ffeed-featured-page',\n        shouldLookForBoldAnchor: true\n    },\n    dyk: {\n        projectFamily: 'wikipedia',\n        projectLangs: wikipediaLanguages,\n        feedName: 'dyk',\n        title: 'Ffeed-dyk-page'\n    },\n    potd: {\n        projectFamily: 'wikipedia',\n        projectLangs: wikipediaLanguages,\n        feedName: 'potd',\n        title: 'Ffeed-potd-page'\n    },\n    motd: {\n        projectFamily: 'wikipedia',\n        projectLangs: wikipediaLanguages,\n        feedName: 'motd',\n        title: 'Ffeed-motd-page'\n    },\n    qotd: {\n        projectFamily: 'wikiquote',\n        projectLangs: wikiquoteLanguages,\n        feedName: 'qotd',\n        title: 'Ffeed-qotd-page'\n    },\n    wotd: {\n        projectFamily: 'wiktionary',\n        projectLangs: wiktionaryLanguages,\n        feedName: 'wotd',\n        title: 'Ffeed-wotd-page'\n    },\n    fwotd: {\n        projectFamily: 'wiktionary',\n        projectLangs: wiktionaryLanguages,\n        feedName: 'fwotd',\n        title: 'Ffeed-fwotd-page'\n    }\n};\n\nconst feature = featureMap[process.argv[2]];\nif (feature) {\n    processAllLanguages(feature);\n} else {\n    console.error(`Error: need to specify one of ${ Object.keys(featureMap) }!`);\n    process.exit(-1);\n}\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/server.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/spec.yaml","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 154. Maximum allowed is 100.","line":228,"column":1,"nodeType":"Program","messageId":"max","endLine":228,"endColumn":155},{"ruleId":"max-len","severity":1,"message":"This line has a length of 141. Maximum allowed is 100.","line":232,"column":1,"nodeType":"Program","messageId":"max","endLine":232,"endColumn":142},{"ruleId":"max-len","severity":1,"message":"This line has a length of 117. Maximum allowed is 100.","line":866,"column":1,"nodeType":"Program","messageId":"max","endLine":866,"endColumn":118},{"ruleId":"max-len","severity":1,"message":"This line has a length of 116. Maximum allowed is 100.","line":871,"column":1,"nodeType":"Program","messageId":"max","endLine":871,"endColumn":117},{"ruleId":"max-len","severity":1,"message":"This line has a length of 116. Maximum allowed is 100.","line":876,"column":1,"nodeType":"Program","messageId":"max","endLine":876,"endColumn":117},{"ruleId":"max-len","severity":1,"message":"This line has a length of 116. Maximum allowed is 100.","line":881,"column":1,"nodeType":"Program","messageId":"max","endLine":881,"endColumn":117},{"ruleId":"max-len","severity":1,"message":"This line has a length of 116. Maximum allowed is 100.","line":886,"column":1,"nodeType":"Program","messageId":"max","endLine":886,"endColumn":117},{"ruleId":"max-len","severity":1,"message":"This line has a length of 108. Maximum allowed is 100.","line":938,"column":1,"nodeType":"Program","messageId":"max","endLine":938,"endColumn":109},{"ruleId":"max-len","severity":1,"message":"This line has a length of 126. Maximum allowed is 100.","line":955,"column":1,"nodeType":"Program","messageId":"max","endLine":955,"endColumn":127},{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":956,"column":1,"nodeType":"Program","messageId":"max","endLine":956,"endColumn":108},{"ruleId":"max-len","severity":1,"message":"This line has a length of 132. Maximum allowed is 100.","line":962,"column":1,"nodeType":"Program","messageId":"max","endLine":962,"endColumn":133},{"ruleId":"max-len","severity":1,"message":"This line has a length of 127. Maximum allowed is 100.","line":969,"column":1,"nodeType":"Program","messageId":"max","endLine":969,"endColumn":128},{"ruleId":"max-len","severity":1,"message":"This line has a length of 108. Maximum allowed is 100.","line":971,"column":1,"nodeType":"Program","messageId":"max","endLine":971,"endColumn":109},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":972,"column":1,"nodeType":"Program","messageId":"max","endLine":972,"endColumn":114},{"ruleId":"max-len","severity":1,"message":"This line has a length of 121. Maximum allowed is 100.","line":973,"column":1,"nodeType":"Program","messageId":"max","endLine":973,"endColumn":122},{"ruleId":"max-len","severity":1,"message":"This line has a length of 121. Maximum allowed is 100.","line":977,"column":1,"nodeType":"Program","messageId":"max","endLine":977,"endColumn":122},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":981,"column":1,"nodeType":"Program","messageId":"max","endLine":981,"endColumn":114},{"ruleId":"max-len","severity":1,"message":"This line has a length of 111. Maximum allowed is 100.","line":985,"column":1,"nodeType":"Program","messageId":"max","endLine":985,"endColumn":112},{"ruleId":"max-len","severity":1,"message":"This line has a length of 124. Maximum allowed is 100.","line":991,"column":1,"nodeType":"Program","messageId":"max","endLine":991,"endColumn":125},{"ruleId":"max-len","severity":1,"message":"This line has a length of 281. Maximum allowed is 100.","line":995,"column":1,"nodeType":"Program","messageId":"max","endLine":995,"endColumn":282},{"ruleId":"max-len","severity":1,"message":"This line has a length of 144. Maximum allowed is 100.","line":1082,"column":1,"nodeType":"Program","messageId":"max","endLine":1082,"endColumn":145}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":21,"fixableErrorCount":0,"fixableWarningCount":0,"source":"swagger: \"2.0\"\n\ninfo:\n  version: 1.0.0\n  title: wikifeeds\n  description: A node webservice supporting featured wiki content feeds\n  termsOfService: https://wikimediafoundation.org/wiki/Terms_of_Use\n  contact:\n    name: Wikimedia Product Infrastructure Team\n    url: https://www.mediawiki.org/wiki/Wikimedia_Product/Wikimedia_Product_Infrastructure_team\n  license:\n    name: Apache2\n    url: http://www.apache.org/licenses/LICENSE-2.0\n\nx-default-params:\n  domain: en.wikipedia.org\n\nparameters:\n  domain:\n    in: path\n    name: domain\n    required: true\n    type: string\n    description: |\n      Project domain for the requested data.\n  title:\n    in: path\n    name: title\n    required: true\n    type: string\n    description: |\n      Page title. Use underscores instead of spaces. Example: `Main_Page`\n  revision:\n    in: path\n    name: revision\n    required: false\n    type: integer\n    description: Revision ID\n  tid:\n    in: path\n    name: tid\n    required: false\n    type: integer\n    description: Time UUID of the rendering (used for rerenders when non-revision content changes)\n  year:\n    in: path\n    name: year\n    required: true\n    type: integer\n    description: Four digit year (2016 and later)\n    minimum: 2016\n    maximum: 2999\n  month:\n    in: path\n    name: month\n    required: true\n    type: integer\n    description: Two digit month, 0-padded if necessary (01 - 12)\n    minimum: 01\n    maximum: 31\n  day:\n    in: path\n    name: day\n    required: true\n    type: integer\n    description: Two digit day of the month, 0-padded if necessary (01 - 31)\n    minimum: 01\n    maximum: 31\n\npaths:\n  # from routes/root.js\n  /robots.txt:\n    get:\n      tags:\n        - Root\n      description: Gets robots.txt\n      responses:\n        200:\n          description: Success\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-monitor: false\n\n  /:\n    get:\n      tags:\n        - Root\n      description: The root service end-point\n      produces:\n        - application/json\n        - application/problem+json\n      responses:\n        200:\n          description: Success\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: spec from root\n          request:\n            query:\n              spec: true\n          response:\n            status: 200\n\n  # from routes/info.js\n  /_info:\n    get:\n      tags:\n        - Root\n      description: Gets information about the service.\n      produces:\n        - application/json\n        - application/problem+json\n      responses:\n        200:\n          description: Success\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: retrieve service info\n          request: {}\n          response:\n            status: 200\n            headers:\n              content-type: application/json\n            body:\n              name: /.+/\n              description: /.+/\n              version: /.+/\n              home: /.+/\n\n  # from routes/feed/availability.js\n  /{domain}/v1/feed/availability:\n    get:\n      tags:\n        - Feed\n      summary: Get availability of featured feed content by wiki domain.\n      produces:\n        - application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Availability/1.0.1\"\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n      responses:\n        200:\n          description: Availability of the feed content by wiki domain\n          schema:\n            $ref: \"#/definitions/availability\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: Retrieve feed content availability from \\'wikipedia.org\\'\n          request:\n            params:\n              domain: wikimedia.org\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Availability/1.0.1\"\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              todays_featured_article: [ /.+/ ]\n              most_read: [ \"*\" ]\n              picture_of_the_day: [ \"*\" ]\n              in_the_news: [ /.+/ ]\n              on_this_day: [ /.+/ ]\n\n  # from routes/feed/announcements.js\n  /{domain}/v1/feed/announcements:\n    get:\n      tags:\n        - Feed\n      summary: Get announcements for the Explore feed in the mobile apps.\n      description: |\n        Gets announcements for display in the official Wikipedia iOS and Android apps.\n        This is usually used to show announcements for surveys or fundraising.\n      produces:\n        - application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Announcements/0.3.0\"\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n      responses:\n        200:\n          description: Announcements for the given Wiki\n          schema:\n            $ref: \"#/definitions/announcements\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: Retrieve announcements\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Announcements/0.3.0\"\n              cache-control: public, max-age=86400, s-maxage=900\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n\n  # from routes/feed/on-this-day.js\n  /{domain}/v1/feed/onthisday/{type}/{month}/{day}:\n    get:\n      tags:\n        - Feed\n      summary: Get events on this day in history for the Explore feed.\n      description: |\n        Provides events that historically happened on the provided day and month.\n        Supported types of events are:\n         - Selected: a list of a few selected anniversaries which happen on the provided day and month; often the entries are curated for the current year\n         - Births: a list of birthdays which happened on the provided day and month\n         - Deaths: a list of deaths which happened on the provided day and month\n         - Holidays: a list of fixed holidays celebrated on the provided day and month\n         - Events: a list of significant events which happened on the provided day and month and which are not covered by the other types yet\n         - All: all of the above\n      produces:\n        - application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/OnThisDay/0.5.0\"\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n        - name: type\n          in: path\n          description: Type of events\n          type: string\n          required: true\n          enum:\n            - selected\n            - births\n            - deaths\n            - holidays\n            - events\n            - all\n        - $ref: \"#/parameters/month\"\n        - $ref: \"#/parameters/day\"\n\n      responses:\n        200:\n          description: Annual events listed on this wiki for the requested month and day\n          schema:\n            $ref: \"#/definitions/onthisdayResponse\"\n        404:\n          description: No data found for the requested date\n          schema:\n            $ref: \"#/definitions/problem\"\n        501:\n          description: Unsupported language\n          schema:\n            $ref: \"#/definitions/problem\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: retrieve selected events on January 15\n          request:\n            params:\n              type: selected\n              month: 01\n              day: 15\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/OnThisDay/0.5.0\"\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              selected:\n                - text: /.+/\n                  year: /.+/\n                  pages:\n                    - title: /.+/\n\n  # from routes/feed/featured.js\n  /{domain}/v1/page/featured/{year}/{month}/{day}:\n    get:\n      tags:\n        - Feed\n      summary: Get featured article of the day for the Explore feed.\n      description: |\n        Page title of \"Today's featured article\" (only works on select wikis for now).\n      produces:\n        - application/json\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n        - $ref: \"#/parameters/year\"\n        - $ref: \"#/parameters/month\"\n        - $ref: \"#/parameters/day\"\n      responses:\n        200:\n          description: The title of a Wikipedia's Featured Article of the Day\n          schema:\n            $ref: \"#/definitions/summary\"\n        204:\n          description: Empty response (for feed content aggregation requests from RESTBase)\n          schema:\n            $ref: \"#/definitions/empty\"\n        404:\n          description: Not found\n          schema:\n            $ref: \"#/definitions/problem\"\n        500:\n          description: API Error\n          schema:\n            $ref: \"#/definitions/problem\"\n        501:\n          description: Unsupported language\n          schema:\n            $ref: \"#/definitions/problem\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: retrieve title of the featured article for April 29, 2016\n          request:\n            params:\n              year: 2016\n              month: \"04\"\n              day: 29\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              title: /.+/\n              extract: /.+/\n        - title: retrieve featured article info for unsupported site (with aggregated=true)\n          request:\n            params:\n              domain: is.wikipedia.org\n              year: 2016\n              month: \"04\"\n              day: 29\n            query:\n              aggregated: true\n          response:\n            status: 204\n            body: \"\"\n\n  # from routes/feed/featured-image.js\n  /{domain}/v1/media/image/featured/{year}/{month}/{day}:\n    get:\n      tags:\n        - Feed\n      summary: Get the Picture of the Day from Wikimedia Commons for the Explore feed.\n      description: |\n        Featured image for a given date (aka Picture of the day).\n        Provides thumbnail and full res image URLs and a localized description based\n        on the domain used.\n      produces:\n        - application/json\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n        - $ref: \"#/parameters/year\"\n        - $ref: \"#/parameters/month\"\n        - $ref: \"#/parameters/day\"\n      responses:\n        200:\n          description: Info on the Commons Featured Image of the Day for the requested date\n          schema:\n            $ref: \"#/definitions/image\"\n        204:\n          description: Empty response (for feed content aggregation requests from RESTBase)\n          schema:\n            $ref: \"#/definitions/empty\"\n        404:\n          description: Not found (no featured image for the requested date)\n          schema:\n            $ref: \"#/definitions/problem\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: retrieve featured image data for April 29, 2016\n          request:\n            params:\n              year: 2016\n              month: \"04\"\n              day: 29\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              title: /.+/\n              description:\n                html: /.+/\n                text: /.+/\n                lang: /.+/\n              image:\n                source: /.+/\n                width: /.+/\n                height: /.+/\n              credit:\n                html: /.+/\n                text: /.+/\n              license:\n                type: /.+/\n                code: /.+/\n                url: /.+/\n              artist:\n                html: /.+/\n                text: /.+/\n              file_page: /.+/\n              wb_entity_id: /.+/\n              structured:\n                captions: /.+/\n              thumbnail:\n                source: /.+/\n                width: /.+/\n                height: /.+/\n\n  # from routes/feed/most-read.js\n  /{domain}/v1/page/most-read/{year}/{month}/{day}:\n    get:\n      tags:\n        - Feed\n      summary: Get most viewed pages for a date.\n      description: |\n        Gets the most read articles for the date provided.\n        The date is in UTC, as other endpoints, too.\n        Only days prior to today's date are accepted.\n      produces:\n        - application/json\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n        - $ref: \"#/parameters/year\"\n        - $ref: \"#/parameters/month\"\n        - $ref: \"#/parameters/day\"\n      responses:\n        200:\n          description: Most read article titles for this wiki for the requested date\n          schema:\n            $ref: \"#/definitions/mostread\"\n        204:\n          description: Empty response (for feed content aggregation requests from RESTBase)\n          schema:\n            $ref: \"#/definitions/empty\"\n        404:\n          description: No data found for the requested date\n          schema:\n            $ref: \"#/definitions/problem\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: retrieve the most read articles for January 1, 2016\n          request:\n            params:\n              year: 2016\n              month: \"01\"\n              day: \"01\"\n          response:\n            status: 200\n            headers:\n              content-type: application/json\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              date: 2016-01-01Z\n              articles:\n                - views: /.+/\n                  rank: /.+/\n                  title: /.+/\n                  extract: /.+/\n        - title: retrieve the most-read articles for January 1, 2016 (with aggregated=true)\n          request:\n            params:\n              year: 2016\n              month: \"01\"\n              day: \"01\"\n            query:\n              aggregated: true\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              date: 2015-12-31Z\n              articles:\n                - views: /.+/\n                  rank: /.+/\n                  title: /.+/\n                  extract: /.+/\n        - title: retrieve most-read articles for date with no data (with aggregated=true)\n          request:\n            params:\n              year: 2015\n              month: \"01\"\n              day: \"01\"\n            query:\n              aggregated: true\n          response:\n            status: 204\n            body: \"\"\n\n  # from routes/feed/news.js\n  /{domain}/v1/page/news:\n    get:\n      tags:\n        - Feed\n      summary: Get current news headlines.\n      description: |\n        Gets content related to the current \"In the News\" template\n        (for some wikis for now).\n      produces:\n        - application/json\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n      responses:\n        200:\n          description: News content from the a Wikipedia main page\n          schema:\n            $ref: \"#/definitions/news\"\n        204:\n          description: Empty response (for feed content aggregation requests from RESTBase)\n          schema:\n            $ref: \"#/definitions/empty\"\n        501:\n          description: Unsupported language\n          schema:\n            $ref: \"#/definitions/problem\"\n        default:\n          description: Error\n          schema:\n            $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: get 'In the News' content\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8\n              vary: /.+/\n              etag: /^\"[^/\"]+/[^/\"]+\"$/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              - story: /.+/\n                links:\n                  - title: /.+/\n                    extract: /.+/\n        - title: get \"In the News\" content for unsupported language (with aggregated=true)\n          request:\n            params:\n              domain: is.wikipedia.org\n            query:\n              aggregated: true\n          response:\n            status: 204\n            body: \"\"\n\n  # from routes/page/random.js\n  /{domain}/v1/page/random/title:\n    get:\n      tags:\n        - Feed\n      summary: Get a random article title.\n      description: |\n        Gets the title of a randomly picked article from main namespace.\n        Preference is given to articles with a thumbnail and an associated Wikidata description.\n      produces:\n        - application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Random/0.7.0\"\n        - application/problem+json\n      parameters:\n        - $ref: \"#/parameters/domain\"\n      responses:\n        200:\n          description: A random (good) article title\n          schema:\n            $ref: \"#/definitions/random\"\n        400:\n          description: Bad request\n          schema:\n            $ref: \"#/definitions/problem\"\n        default:\n          $ref: \"#/definitions/problem\"\n      x-amples:\n        - title: retrieve a random article title\n          response:\n            status: 200\n            headers:\n              content-type: application/json; charset=utf-8; profile=\"https://www.mediawiki.org/wiki/Specs/Random/0.7.0\"\n              vary: /.+/\n              access-control-allow-origin: \"*\"\n              access-control-allow-headers: accept, x-requested-with, content-type\n              content-security-policy: default-src\n              x-content-security-policy: default-src\n              x-frame-options: SAMEORIGIN\n            body:\n              items:\n                - title: /.+/\n\ndefinitions:\n  # A https://tools.ietf.org/html/draft-nottingham-http-problem\n  problem:\n    required:\n      - type\n    properties:\n      status:\n        type: integer\n      type:\n        type: string\n      title:\n        type: string\n      detail:\n        type: string\n      method:\n        type: string\n      uri:\n        type: string\n\n  empty:\n    type: object\n    properties:\n      type:\n        type: string\n        description: description of original content type (buffer)\n      data:\n        type: array\n        description: Buffer contents\n        items:\n          type: string\n    additionalProperties: false\n\n  dated_pageview:\n    type: object\n    properties:\n      date:\n        type: string\n        description: ISO 8601 timestamp of pageviews recorded\n      views:\n        type: integer\n        description: Number of views on date\n    required:\n      - date\n      - views\n    additionalProperties: false\n\n  mostread_article:\n    allOf:\n      - $ref: \"#/definitions/summary\"\n      - type: object\n        properties:\n          views:\n            type: integer\n            description: Number of views on the requested day\n          view_history:\n            type: array\n            items:\n              $ref: \"#/definitions/dated_pageview\"\n          rank:\n            type: integer\n            description: Position in the list of most viewed articles\n        required:\n          - views\n          - rank\n\n  mostread:\n    type: object\n    properties:\n      date:\n        type: string\n        description: The date which the data correspond to\n      articles:\n        type: array\n        description: Array of most popular articles\n        items:\n          $ref: \"#/definitions/mostread_article\"\n    required:\n      - date\n      - articles\n\n  onthisdayList:\n    type: array\n    items:\n      type: object\n      properties:\n        text:\n          type: string\n          description: Short description of the event\n        year:\n          type: integer\n          description: The year this event occurred\n        pages:\n          type: array\n          description: List of pages related to the event\n          items:\n            $ref: \"#/definitions/summary\"\n      required:\n        - text\n        - pages\n\n  onthisdayResponse:\n    type: object\n    description: Lists of events which happened on the provided day and month\n    properties:\n      births:\n        $ref: \"#/definitions/onthisdayList\"\n      deaths:\n        $ref: \"#/definitions/onthisdayList\"\n      events:\n        $ref: \"#/definitions/onthisdayList\"\n      holidays:\n        $ref: \"#/definitions/onthisdayList\"\n      selected:\n        $ref: \"#/definitions/onthisdayList\"\n    additionalProperties: false\n\n  news_item:\n    type: object\n    properties:\n      story:\n        type: string\n        description: A cover story for the news item\n      links:\n        type: array\n        description: |\n          A collection of pages mentioned in the headline. The first page is the headline topic.\n        items:\n          $ref: \"#/definitions/summary\"\n    required:\n      - story\n      - links\n\n  news:\n    type: array\n    items:\n      $ref: \"#/definitions/news_item\"\n\n  image:\n    type: object\n    properties:\n      title:\n        type: string\n        description: Image title\n      thumbnail:\n        $ref: \"#/definitions/image_props\"\n      image:\n        $ref: \"#/definitions/image_props\"\n      description:\n        $ref: \"#/definitions/extmetadata_property\"\n      file_page:\n        type: string\n        description: Full URL to the file page for the item on Wikimedia Commons\n      artist:\n        type: object\n        description: structured info about the author of the media item\n        properties:\n          html:\n            type: string\n            description: HTML string describing the artist\n          name:\n            type: string\n            description: the plain text artist name, if available\n          user_page:\n            type: string\n            description: Wikimedia Commons user page for the artist, if available\n        required:\n          - html\n      credit:\n        $ref: \"#/definitions/extmetadata_property\"\n      license:\n        type: object\n        description: license under which the media item is available on Wikimedia Commons\n        properties:\n          type:\n            type: string\n            description: license type\n          url:\n            type: string\n            description: URL describing the terms and conditions of the license, if any\n        required:\n          - type\n      wb_entity_id:\n        type: string\n        description: Commons Wikibase ID, if the file is on Wikimedia Commons\n      structured:\n        type: object\n        description: structured image metadata from Structured Data on Commons (SDC)\n        properties:\n          captions:\n            type: object\n            description: caption (label) values by language\n        required: [ captions ]\n    required:\n      - title\n      - thumbnail\n      - image\n      - license\n      - structured\n\n  announcements:\n    type: object\n    properties:\n      announce:\n        type: array\n        description: list of active announcements for this wiki\n        items:\n          $ref: \"#/definitions/announcement\"\n    required:\n      - announce\n\n  availability:\n    type: object\n    properties:\n      todays_featured_article:\n        type: array\n        description: domains for wikis with this feature enabled, or [ '*.<project>.org' ] for all wikis in a project\n        items:\n          type: string\n      most_read:\n        type: array\n        description: domains for wikis with this feature enabled or [ '*.<project>.org' ] for all wikis in a project\n        items:\n          type: string\n      picture_of_the_day:\n        type: array\n        description: domains for wikis with this feature enabled or [ '*.<project>.org' ] for all wikis in a project\n        items:\n          type: string\n      in_the_news:\n        type: array\n        description: domains for wikis with this feature enabled or [ '*.<project>.org' ] for all wikis in a project\n        items:\n          type: string\n      on_this_day:\n        type: array\n        description: domains for wikis with this feature enabled or [ '*.<project>.org' ] for all wikis in a project\n        items:\n          type: string\n    required: [ todays_featured_article, most_read, picture_of_the_day, in_the_news, on_this_day ]\n    additionalProperties: false\n\n  announcement:\n    type: object\n    properties:\n      id:\n        type: string\n        description: Unique ID of the announcement\n      type:\n        type: string\n        description: The announcement type\n        enum:\n          - survey\n          - fundraising\n          - announcement\n      start_time:\n        type: string\n        description: The ISO 8601 date to begin showing the announcement.\n      end_time:\n        type: string\n        description: The ISO 8601 date to stop showing the announcement.\n      platforms:\n        type: array\n        description: |\n          An array of platforms on which to display the announcement.\n        items:\n          type: string\n          enum:\n            - iOSApp\n            - iOSAppV2\n            - iOSAppV3\n            - iOSAppV4\n            - iOSAppV5\n            - AndroidApp\n            - AndroidAppV2\n      text:\n        type: string\n        description: The text of the announcement\n      image:\n        type: string\n        description: \\[DEPRECATED\\] The URL of the image for the announcement (Android only)\n      image_url:\n        type: string\n        description: The URL of the image for the announcement\n      action:\n        $ref: \"#/definitions/action\"\n      caption_HTML:\n        type: string\n        description: HTML to display below the announcement. Usually a privacy statment and link to a policy\n      countries:\n        type: array\n        description: |\n          An array of country codes in which to display the announcement. Clients should derive\n          the country from 'GeoIP' portion of the Set-Cookie header.\n        items:\n          type: string\n      min_version:\n        type: string\n        description: minimum app version code for which to show the announcement\n      max_version:\n        type: string\n        description: maximum app version code for which to show the announcement\n      beta:\n        type: boolean\n        description: |\n          (AndroidAppV2 only) Optional boolean flag controlling the release builds for which the announcement should be shown.\n          Set to true if the announcement should be shown only in pre-production builds (beta, alpha, dev).\n          Set to false if the announcement should be shown only in release builds.\n          If not defined, the announcement will be shown for all builds.\n      logged_in:\n        type: boolean\n        description: |\n          (AndroidAppV2 only) Optional boolean flag controlling whether announcements should be shown based on the user login state.\n          Set to true if the announcement should be shown only if the user is logged in.\n          Set to false if the announcement should be shown only if the user is NOT logged in.\n          If not defined, the announcement will be shown regardless of the user's login state.\n      reading_list_sync_enabled:\n        type: boolean\n        description: |\n          (AndroidAppV2 only) Optional boolean flag controlling whether announcements should be shown based on whether the user\n          has enabled reading list syncing.\n          Set to true if the announcement should be shown only if the user has enabled reading list syncing.\n          Set to false if the announcement should be shown only if the user has NOT enabled reading list syncing.\n          If not defined, the announcement will be shown regardless of whether the user has enabled reading list syncing.\n      negative_text:\n        type: string\n        description: |\n          (AndroidAppV2 only) text to show on a \"negative\" button on the announcement. If absent, the button is not shown\n      image_height:\n        type: integer\n        description: |\n          (AndroidAppV2 only) height, in device-independent pixels, of the image portion of the announcement card\n      articleTitles:\n        type: array\n        description: |\n          (iOSAppV3+ only, survey type only) Array of article titles that will display the survey announcement.\n        items:\n          type: string\n      displayDelay:\n        type: integer\n        description: |\n          (iOSAppV3+ only, survey type only) Number in seconds to wait for survey announcement to appear after content load.\n      percent_receiving_experiment:\n        type: integer\n        description: |\n          (iOSAppV4+ only, survey type only) Integer between 0 and 100 representing the percentage of users that will fall into the iOS Article as a Living Document experiment. This percentage will see the feature, the others will not. Both groups will see the survey announcement.\n    required:\n      - id\n      - type\n      - start_time\n      - end_time\n      - platforms\n      - text\n      - action\n\n  article_title:\n    type: object\n    properties:\n      title:\n        type: string\n        description: An article title\n    required:\n      - title\n\n  image_props:\n    type: object\n    properties:\n      source:\n        type: string\n        description: URI\n      width:\n        type: integer\n        minimum: 0\n        description: width (px)\n      height:\n        type: integer\n        minimum: 0\n        description: height (px)\n      mime:\n        type: string\n        description: MIME type\n    required:\n      - source\n      - width\n      - height\n    additionalProperties: false\n\n  extmetadata_property:\n    type: object\n    properties:\n      html:\n        type: string\n        description: HTML of the description\n      text:\n        type: string\n        description: Plain text of the description\n      lang:\n        type: string\n        description: Language code of the description (if available)\n    required:\n      - html\n      - text\n\n  action:\n    type: object\n    properties:\n      title:\n        type: string\n        description: The title to display on the button that performs the action\n      url:\n        type: string\n        description: The URL to navigate to when the button is pressed\n    required:\n      - title\n      - url\n\n  random:\n    type: object\n    properties:\n      items:\n        type: array\n        items:\n          $ref: \"#/definitions/article_title\"\n    required:\n      - items\n\n  titles_set:\n    type: object\n    description: a good example of the differences can be seen in https://en.wikipedia.org/api/rest_v1/page/summary/IOS_13\n    properties:\n      canonical:\n        type: string\n        description: the DB key (non-prefixed), e.g. may have _ instead of spaces, best for making request URIs, still requires Percent-encoding\n      normalized:\n        type: string\n        description: the normalized title (https://www.mediawiki.org/wiki/API:Query#Example_2:_Title_normalization), e.g. may have spaces instead of _\n      display:\n        type: string\n        description: the title as it should be displayed to the user\n    required:\n      - canonical\n      - normalized\n      - display\n\n  content_urls:\n    type: object\n    properties:\n      page:\n        type: string\n        description: the canonical page URL\n      revisions:\n        type: string\n        description: the revision history page URL\n      edit:\n        type: string\n        description: the (desktop) URL for editing the page\n      talk:\n        type: string\n        description: the talk page URL, if applicable\n    required:\n      - page\n      - revisions\n      - edit\n    additionalProperties: false\n\n  summary:\n    type: object\n    properties:\n      type:\n        type: string\n        description: Type of page summary\n        enum:\n          - standard\n          - disambiguation\n          - no-extract\n          - mainpage\n      titles:\n        $ref: \"#/definitions/titles_set\"\n      title:\n        deprecated: true\n        type: string\n        description: |\n          The page title.\n          Deprecated: Use `titles.normalized` instead.\n      displaytitle:\n        deprecated: true\n        type: string\n        description: |\n          The page title how it should be shown to the user.\n          Deprecated: Use `titles.display` instead.\n      namespace:\n        type: object\n        properties:\n          id:\n            type: integer\n            description: the numeric ID for the page's namespace (https://www.mediawiki.org/wiki/Manual:Namespace)\n          text:\n            type: string\n            description: localized text name for the MediaWiki namespace\n        required: [ id, text ]\n        additionalProperties: false\n      wikibase_item:\n        type: string\n        description: the Wikibase item ID for the associated Wikidata entity (if any)\n      pageid:\n        type: integer\n        description: The page ID\n      revision:\n        type: string\n        description: The revision of the page when the summary was produced\n      tid:\n        type: string\n        description: The timeuuid associated with the underlying HTML content\n      extract:\n        type: string\n        description: First several sentences of an article in plain text\n      extract_html:\n        type: string\n        description: First several sentences of an article in simple HTML format\n      thumbnail:\n        $ref: \"#/definitions/image_props\"\n      originalimage:\n        $ref: \"#/definitions/image_props\"\n      lang:\n        type: string\n        description: The page language code\n        example: en\n      dir:\n        type: string\n        description: The page language direction code\n        enum:\n          - ltr\n          - rtl\n      timestamp:\n        type: string\n        format: date-time\n        description: The time when the page was last edited in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format\n        example: \"1970-01-01T00:00:00.000Z\"\n      description:\n        type: string\n        description: short description for the page\n        example: American poet\n      content_urls:\n        type: object\n        properties:\n          desktop:\n            $ref: \"#/definitions/content_urls\"\n          mobile:\n            $ref: \"#/definitions/content_urls\"\n      coordinates:\n        type: object\n        description: The coordinates of the item\n        properties:\n          lat:\n            type: number\n            description: The latitude\n          lon:\n            type: number\n            description: The longitude\n        required: [ lat, lon ]\n    required:\n      - type\n      - titles\n      - title\n      - displaytitle\n      - pageid\n      - lang\n      - dir\n      - revision\n      - timestamp\n      - content_urls\n      - extract\n      - extract_html\n","usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/targets.yaml","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}]

--- end ---
Traceback (most recent call last):
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1534, in main
    libup.run(args.repo, args.output, args.branch)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1472, in run
    self.npm_upgrade(plan)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1054, in npm_upgrade
    hook(update)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1290, in _handle_eslint
    prefix = self._add_eslint_disables(fname, to_disable)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1230, in _add_eslint_disables
    raise ValueError(f"Did not find eslint config for {fname}!")
ValueError: Did not find eslint config for /src/repo/config.prod.yaml!

npm dependencies

Dependencies
Development dependencies

Logs

Source code is licensed under the AGPL.