verdaccio 5.2.3 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -2
- package/README.md +6 -5
- package/build/api/endpoint/api/publish.js +3 -3
- package/build/api/endpoint/api/user.js +15 -5
- package/build/api/endpoint/api/v1/index.js +26 -0
- package/build/api/endpoint/api/v1/profile.js +12 -4
- package/build/api/endpoint/api/v1/token.js +14 -5
- package/build/api/endpoint/index.js +4 -7
- package/build/api/index.js +11 -5
- package/build/api/rate-limiter.js +24 -0
- package/build/api/web/api.js +4 -16
- package/build/api/web/endpoint/index.js +45 -0
- package/build/api/web/endpoint/package.js +15 -6
- package/build/api/web/endpoint/search.js +8 -2
- package/build/api/web/endpoint/user.js +9 -3
- package/build/api/web/index.js +5 -2
- package/build/lib/auth-utils.js +11 -4
- package/build/lib/config.js +15 -6
- package/build/lib/constants.js +5 -4
- package/build/lib/up-storage.js +6 -3
- package/build/lib/utils.js +14 -4
- package/conf/default.yaml +3 -1
- package/conf/docker.yaml +3 -1
- package/package.json +23 -17
package/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,51 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## [5.4.0](https://github.com/verdaccio/verdaccio/compare/v5.3.2...v5.4.0) (2021-12-24)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add cache-control header to endpoints ([#2791](https://github.com/verdaccio/verdaccio/issues/2791)) ([fd3ad1e](https://github.com/verdaccio/verdaccio/commit/fd3ad1e546f5293e862d767f23b3714e6dd5dc8c))
|
|
11
|
+
* add rate limit to user api endpoints ([#2800](https://github.com/verdaccio/verdaccio/issues/2800)) ([#2799](https://github.com/verdaccio/verdaccio/issues/2799)) ([f64e403](https://github.com/verdaccio/verdaccio/commit/f64e403f0a1d710a0d866ca2db480199c83a3609))
|
|
12
|
+
* add rate limit to web endpoints ([#2799](https://github.com/verdaccio/verdaccio/issues/2799)) ([c91d6be](https://github.com/verdaccio/verdaccio/commit/c91d6beb8bde1c5f275d7f570209cf723dce47c5))
|
|
13
|
+
* allow override user rate limit and user agent ([#2803](https://github.com/verdaccio/verdaccio/issues/2803)) ([5b1264c](https://github.com/verdaccio/verdaccio/commit/5b1264c733ea249efc38e963f0e99fb093d61406))
|
|
14
|
+
* jwt default time new set ([#2787](https://github.com/verdaccio/verdaccio/issues/2787)) ([1c17d09](https://github.com/verdaccio/verdaccio/commit/1c17d0986ea551b427994f8392a9d8ef29ba88e9))
|
|
15
|
+
* user agent is the client by default ([#2793](https://github.com/verdaccio/verdaccio/issues/2793)) ([e5d79ce](https://github.com/verdaccio/verdaccio/commit/e5d79ce8f00a18f0c0646b761f22dc608b5baf87))
|
|
6
16
|
|
|
7
17
|
|
|
8
18
|
### Bug Fixes
|
|
9
19
|
|
|
10
|
-
* update
|
|
20
|
+
* **deps:** update dependency @verdaccio/commons-api to v10.1.0 ([#2789](https://github.com/verdaccio/verdaccio/issues/2789)) ([c5c0ef8](https://github.com/verdaccio/verdaccio/commit/c5c0ef8750abeb50d933c639a2041d25a889820b))
|
|
21
|
+
* **deps:** update dependency body-parser to v1.19.1 ([#2788](https://github.com/verdaccio/verdaccio/issues/2788)) ([46e583f](https://github.com/verdaccio/verdaccio/commit/46e583f683520b3a69dbd14ed43146492c0e80be))
|
|
22
|
+
|
|
23
|
+
### [5.3.2](https://github.com/verdaccio/verdaccio/compare/v5.3.1...v5.3.2) (2021-12-16)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* publish with deprecated field ([#2771](https://github.com/verdaccio/verdaccio/issues/2771)) ([b5ac3c0](https://github.com/verdaccio/verdaccio/commit/b5ac3c0f287b8d9ae9121a47d6ac9d27e2bd4ce6)), closes [#2766](https://github.com/verdaccio/verdaccio/issues/2766)
|
|
29
|
+
|
|
30
|
+
### [5.3.1](https://github.com/verdaccio/verdaccio/compare/v5.3.0...v5.3.1) (2021-12-11)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Bug Fixes
|
|
34
|
+
|
|
35
|
+
* conflict core-js dependency ([#2754](https://github.com/verdaccio/verdaccio/issues/2754)) ([29d4551](https://github.com/verdaccio/verdaccio/commit/29d4551e5bfc066a5ff7109786a73ec8e782a65f))
|
|
36
|
+
|
|
37
|
+
## [5.3.0](https://github.com/verdaccio/verdaccio/compare/v5.2.2...v5.3.0) (2021-12-08)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
* markdown anchor links in package readme.md broken [#2712](https://github.com/verdaccio/verdaccio/issues/2712) ([820c9d5](https://github.com/verdaccio/verdaccio/commit/820c9d5db2fe7e99cab3c75c431b8df7dfd096d0))
|
|
43
|
+
* update pnpm and bum up core deps ([#2716](https://github.com/verdaccio/verdaccio/issues/2716)) ([60cd25c](https://github.com/verdaccio/verdaccio/commit/60cd25ce4fe107f7d25780447289b6fb0e21d4b6))
|
|
44
|
+
* **deps:** update dependency @verdaccio/commons-api to v10.0.2 ([#2706](https://github.com/verdaccio/verdaccio/issues/2706)) ([73d565f](https://github.com/verdaccio/verdaccio/commit/73d565f5f558b7746f538d8fbbb15ea24dcedb23))
|
|
45
|
+
* **deps:** update dependency @verdaccio/readme to v10.0.1 ([#2708](https://github.com/verdaccio/verdaccio/issues/2708)) ([41cadcc](https://github.com/verdaccio/verdaccio/commit/41cadccaef358bb11f4b2f015b0885f32dffa91a))
|
|
46
|
+
* **deps:** update dependency @verdaccio/streams to v10.0.1 ([#2709](https://github.com/verdaccio/verdaccio/issues/2709)) ([74d7d02](https://github.com/verdaccio/verdaccio/commit/74d7d02c396185f76767f234592eb14f497d7929))
|
|
47
|
+
* **deps:** update dependency http-errors to v1.8.1 ([#2705](https://github.com/verdaccio/verdaccio/issues/2705)) ([eee19a5](https://github.com/verdaccio/verdaccio/commit/eee19a5f791dd93f4ee078243ed310fa88aa5ae7))
|
|
48
|
+
* **deps:** update dependency verdaccio-audit to v10.0.3 ([#2710](https://github.com/verdaccio/verdaccio/issues/2710)) ([8c074e8](https://github.com/verdaccio/verdaccio/commit/8c074e8f24e61e9c399bf4f2e6dbaa0d5d5da9fd))
|
|
49
|
+
* **deps:** update dependency verdaccio-htpasswd to v10.0.1 ([#2711](https://github.com/verdaccio/verdaccio/issues/2711)) ([8e28848](https://github.com/verdaccio/verdaccio/commit/8e2884836b4d8a659ca1cec80794c7e30ef6c208))
|
|
11
50
|
|
|
12
51
|
### [5.2.2](https://github.com/verdaccio/verdaccio/compare/v5.2.1...v5.2.2) (2021-11-08)
|
|
13
52
|
|
package/README.md
CHANGED
|
@@ -69,15 +69,16 @@ booted in a couple of seconds, fast enough for any CI. Many open source projects
|
|
|
69
69
|
|
|
70
70
|
## Talks
|
|
71
71
|
|
|
72
|
-
### **
|
|
72
|
+
### **Using Docker and Verdaccio to make Integration Testing Easy - Docker All Hands #4 December - 2021**.
|
|
73
73
|
|
|
74
|
-
[](https://www.youtube.com/watch?v=zRI0skF1f8I)
|
|
75
75
|
|
|
76
76
|
You might want to check out as well our previous talks:
|
|
77
77
|
|
|
78
|
-
- [
|
|
79
|
-
- [
|
|
80
|
-
- [
|
|
78
|
+
- [**Juan Picado** – Testing the integrity of React components by publishing in a private registry](https://www.youtube.com/watch?v=bRKZbrlQqLY&t=16s&ab_channel=ReactFinland)
|
|
79
|
+
- [BeerJS Cba Meetup No. 53 May 2021 - **Juan Picado** React Finland - 2021](https://www.youtube.com/watch?v=6SyjqBmS49Y&ab_channel=BeerJSCba)
|
|
80
|
+
- [Node.js Dependency Confusion Attacks - April 2021 - **Juan Picado**](https://www.youtube.com/watch?v=qTRADSp3Hpo)
|
|
81
|
+
- [**OpenJS World 2020** about \*Cover your Projects with a Multi purpose Lightweight Node.js Registry - **Juan Picado**](https://www.youtube.com/watch?v=oVCjDWeehAQ)
|
|
81
82
|
- [ViennaJS Meetup - Introduction to Verdaccio by **Priscila Olivera** and **Juan Picado**](https://www.youtube.com/watch?v=hDIFKzmoCa)
|
|
82
83
|
- [Open Source? trivago - Verdaccio (**Ayush** and **Juan Picado**) January 2020](https://www.youtube.com/watch?v=A5CWxJC9xzc)
|
|
83
84
|
- [GitNation Open Source Stage - How we have built a Node.js Registry with React - **Juan Picado** December 2019](https://www.youtube.com/watch?v=gpjC8Qp9B9A)
|
|
@@ -249,9 +249,9 @@ function publishPackage(storage, config, auth) {
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
try {
|
|
252
|
-
const metadata = (0, _utils.validateMetadata)(req.body, packageName); //
|
|
252
|
+
const metadata = (0, _utils.validateMetadata)(req.body, packageName); // check _attachments to distinguish publish and deprecate
|
|
253
253
|
|
|
254
|
-
if (req.params._rev || (0, _utils.isRelatedToDeprecation)(req.body)) {
|
|
254
|
+
if (req.params._rev || (0, _utils.isRelatedToDeprecation)(req.body) && _lodash.default.isEmpty(req.body._attachments)) {
|
|
255
255
|
debug('updating a new version for %o', packageName); // we check unpublish permissions, an update is basically remove versions
|
|
256
256
|
|
|
257
257
|
const remote = req.remote_user;
|
|
@@ -388,4 +388,4 @@ function uploadPackageTarball(storage) {
|
|
|
388
388
|
});
|
|
389
389
|
};
|
|
390
390
|
}
|
|
391
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3B1Ymxpc2gudHMiXSwibmFtZXMiOlsiZGVidWciLCJwdWJsaXNoIiwicm91dGVyIiwiYXV0aCIsInN0b3JhZ2UiLCJjb25maWciLCJjYW4iLCJwdXQiLCJtaW1lIiwiZ2V0VHlwZSIsImV4cGVjdEpzb24iLCJwdWJsaXNoUGFja2FnZSIsImRlbGV0ZSIsInVuUHVibGlzaFBhY2thZ2UiLCJyZW1vdmVUYXJiYWxsIiwiSEVBREVSUyIsIk9DVEVUX1NUUkVBTSIsInVwbG9hZFBhY2thZ2VUYXJiYWxsIiwiYWRkVmVyc2lvbiIsInN0YXJBcGkiLCJyZXEiLCJyZXMiLCJuZXh0IiwicGFja2FnZU5hbWUiLCJwYXJhbXMiLCJwYWNrYWdlIiwiY3JlYXRlVGFyYmFsbCIsImZpbGVuYW1lIiwiZGF0YSIsImNiIiwic3RyZWFtIiwiYWRkVGFyYmFsbCIsIm9uIiwiZXJyIiwiZW5kIiwiQnVmZmVyIiwiZnJvbSIsImRvbmUiLCJjcmVhdGVWZXJzaW9uIiwidmVyc2lvbiIsIm1ldGFkYXRhIiwiYWRkVGFncyIsInRhZ3MiLCJtZXJnZVRhZ3MiLCJhZnRlckNoYW5nZSIsImVycm9yIiwib2tNZXNzYWdlIiwibWV0YWRhdGFDb3B5IiwiX2F0dGFjaG1lbnRzIiwidmVyc2lvbnMiLCJfIiwiaXNOaWwiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJDUkVBVEVEIiwib2siLCJzdWNjZXNzIiwiaXNJbnZhbGlkQm9keUZvcm1hdCIsImxvZ2dlciIsImluZm8iLCJFcnJvckNvZGUiLCJnZXRCYWRSZXF1ZXN0IiwiQVBJX0VSUk9SIiwiVU5TVVBPUlRFRF9SRUdJU1RSWV9DQUxMIiwiQ09ORkxJQ1QiLCJmaXJzdEF0dGFjaG1lbnRLZXkiLCJPYmplY3QiLCJrZXlzIiwiUGF0aCIsImJhc2VuYW1lIiwidmVyc2lvblRvUHVibGlzaCIsInZlcnNpb25NZXRhZGF0YVRvUHVibGlzaCIsInJlYWRtZSIsIlN0cmluZyIsIkRJU1RfVEFHUyIsInJlbW90ZV91c2VyIiwibmFtZSIsImJvZHkiLCJ1c2VycyIsIl9yZXYiLCJyZW1vdGUiLCJhbGxvd191bnB1Ymxpc2giLCJjaGFuZ2VQYWNrYWdlIiwicmV2aXNpb24iLCJBUElfTUVTU0FHRSIsIlBLR19DSEFOR0VEIiwiYWRkUGFja2FnZSIsIlBLR19DUkVBVEVEIiwiZ2V0QmFkRGF0YSIsIkJBRF9QQUNLQUdFX0RBVEEiLCJyZW1vdmVQYWNrYWdlIiwiUEtHX1JFTU9WRUQiLCJUQVJCQUxMX1JFTU9WRUQiLCJ0YWciLCJQS0dfUFVCTElTSEVEIiwicGlwZSIsImNvbXBsZXRlIiwiYWJvcnQiLCJsb2NhbHMiLCJyZXBvcnRfZXJyb3IiLCJUQVJCQUxMX1VQTE9BREVEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLE1BQU1BLEtBQUssR0FBRyxvQkFBVyxtQkFBWCxDQUFkOztBQUVlLFNBQVNDLE9BQVQsQ0FBaUJDLE1BQWpCLEVBQWlDQyxJQUFqQyxFQUE4Q0MsT0FBOUMsRUFBd0VDLE1BQXhFLEVBQThGO0FBQzNHLFFBQU1DLEdBQUcsR0FBRyx1QkFBTUgsSUFBTixDQUFaO0FBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFD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QUFDQVAsSUFBQUEsR0FBRyxDQUFDNkUsSUFBSixDQUFTbkUsTUFBVCxFQUh3RixDQUt4Rjs7QUFDQSxRQUFJb0UsUUFBUSxHQUFHLEtBQWY7QUFDQTlFLElBQUFBLEdBQUcsQ0FBQ1ksRUFBSixDQUFPLEtBQVAsRUFBYyxZQUFZO0FBQ3hCa0UsTUFBQUEsUUFBUSxHQUFHLElBQVg7QUFDQXBFLE1BQUFBLE1BQU0sQ0FBQ08sSUFBUDtBQUNELEtBSEQ7QUFLQWpCLElBQUFBLEdBQUcsQ0FBQ1ksRUFBSixDQUFPLE9BQVAsRUFBZ0IsWUFBWTtBQUMxQixVQUFJLENBQUNrRSxRQUFMLEVBQWU7QUFDYnBFLFFBQUFBLE1BQU0sQ0FBQ3FFLEtBQVA7QUFDRDtBQUNGLEtBSkQ7QUFNQXJFLElBQUFBLE1BQU0sQ0FBQ0UsRUFBUCxDQUFVLE9BQVYsRUFBbUIsVUFBVUMsR0FBVixFQUFlO0FBQ2hDLGFBQU9aLEdBQUcsQ0FBQytFLE1BQUosQ0FBV0MsWUFBWCxDQUF3QnBFLEdBQXhCLENBQVA7QUFDRCxLQUZEO0FBSUFILElBQUFBLE1BQU0sQ0FBQ0UsRUFBUCxDQUFVLFNBQVYsRUFBcUIsWUFBWTtBQUMvQlgsTUFBQUEsR0FBRyxDQUFDaUMsTUFBSixDQUFXQyx1QkFBWUMsT0FBdkI7QUFDQSxhQUFPbEMsSUFBSSxDQUFDO0FBQ1ZtQyxRQUFBQSxFQUFFLEVBQUU2Qix1QkFBWWdCO0FBRE4sT0FBRCxDQUFYO0FBR0QsS0FMRDtBQU1ELEdBNUJEO0FBNkJEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSc7XG5cbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgQ29uZmlnLCBDYWxsYmFjaywgTWVyZ2VUYWdzLCBWZXJzaW9uLCBQYWNrYWdlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBBUElfTUVTU0FHRSwgSEVBREVSUywgRElTVF9UQUdTLCBBUElfRVJST1IsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU1ldGFkYXRhLCBpc09iamVjdCwgRXJyb3JDb2RlLCBoYXNEaWZmT25lS2V5LCBpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IG1lZGlhLCBleHBlY3RKc29uLCBhbGxvdyB9IGZyb20gJy4uLy4uL21pZGRsZXdhcmUnO1xuaW1wb3J0IHsgbm90aWZ5IH0gZnJvbSAnLi4vLi4vLi4vbGliL25vdGlmeSc7XG5cbmltcG9ydCB7IElBdXRoLCAkUmVzcG9uc2VFeHRlbmQsICRSZXF1ZXN0RXh0ZW5kLCAkTmV4dEZ1bmN0aW9uVmVyLCBJU3RvcmFnZUhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi9saWIvbG9nZ2VyJztcbmltcG9ydCB7IGlzUHVibGlzaGFibGVQYWNrYWdlIH0gZnJvbSAnLi4vLi4vLi4vbGliL3N0b3JhZ2UtdXRpbHMnO1xuaW1wb3J0IHN0YXIgZnJvbSAnLi9zdGFyJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW86cHVibGlzaCcpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwdWJsaXNoKHJvdXRlcjogUm91dGVyLCBhdXRoOiBJQXV0aCwgc3RvcmFnZTogSVN0b3JhZ2VIYW5kbGVyLCBjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBjYW4gPSBhbGxvdyhhdXRoKTtcblxuICAvKipcbiAgICogUHVibGlzaCBhIHBhY2thZ2UgLyB1cGRhdGUgcGFja2FnZSAvIHVuL3N0YXJ0IGEgcGFja2FnZVxuICAgKlxuICAgKiBUaGVyZSBhcmUgbXVsdGlwbGVzIHNjZW5hcmlvcyBoZXJlIHRvIGJlIGNvbnNpZGVyZWQ6XG4gICAqXG4gICAqIDEuIFB1Ymxpc2ggc2NlbmFyaW9cbiAgICpcbiAgICogUHVibGlzaCBhIHBhY2thZ2UgY29uc2lzdCBvZiBhdCBsZWFzdCAxIHN0ZXAgKFBVVCkgd2l0aCBhIG1ldGFkYXRhIHBheWxvYWQuXG4gICAqIFdoZW4gYSBwYWNrYWdlIGlzIHB1Ymxpc2hlZCwgYW4gX2F0dGFjaG1lbnQgcHJvcGVydHkgaXMgcHJlc2VudCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhXG4gICAqIG9mIHRoZSB0YXJiYWxsLlxuICAgKlxuICAgKiBFeGFtcGxlIGZsb3cgb2YgcHVibGlzaC5cbiAgICpcbiAgICogIG5wbSBodHRwIGZldGNoIFBVVCAyMDEgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxIDk2Mjdtc1xuICAgICAgbnBtIGluZm8gbGlmZWN5Y2xlIEBzY29wZS90ZXN0MUAxLjAuMX5wdWJsaXNoOiBAc2NvcGUvdGVzdDFAMS4wLjFcbiAgICAgIG5wbSBpbmZvIGxpZmVjeWNsZSBAc2NvcGUvdGVzdDFAMS4wLjF+cG9zdHB1Ymxpc2g6IEBzY29wZS90ZXN0MUAxLjAuMVxuICAgICAgKyBAc2NvcGUvdGVzdDFAMS4wLjFcbiAgICAgIG5wbSB2ZXJiIGV4aXQgWyAwLCB0cnVlIF1cbiAgICpcbiAgICpcbiAgICogMi4gVW5wdWJsaXNoIHNjZW5hcmlvXG4gICAqXG4gICAqIFVucHVibGlzaCBjb25zaXN0IGluIDMgc3RlcHMuXG4gICAqICAxLiBUcnkgdG8gZmV0Y2ggIG1ldGFkYXRhIC0+IGlmIGl0IGZhaWxzLCByZXR1cm4gNDA0XG4gICAqICAyLiBDb21wdXRlIG1ldGFkYXRhIGxvY2FsbHkgKGNsaWVudCBzaWRlKSBhbmQgc2VuZCBhIG11dGF0ZSBwYXlsb2FkIGV4Y2x1ZGluZyB0aGUgdmVyc2lvbiB0byBiZSB1bnB1Ymxpc2hlZFxuICAgKiAgICBlZzogaWYgbWV0YWRhdGEgcmVmbGVjdHMgMS4wLjEsIDEuMC4yIGFuZCAxLjAuMywgdGhlIGNvbXB1dGVkIG1ldGFkYXRhIHdvbid0IGluY2x1ZGUgMS4wLjMuXG4gICAqICAzLiBPbmNlIHRoZSBzZWNvbmQgc3RlcCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmluaXNoZWQsIGRlbGV0ZSB0aGUgdGFyYmFsbC5cbiAgICpcbiAgICogIEFsbCB0aGVzZSBzdGVwcyBhcmUgY29uc2VjdXRpdmUgYW5kIHJlcXVpcmVkLCB0aGVyZSBpcyBubyB0cmFuc2FjaW9ucyBoZXJlLCBpZiBzdGVwIDMgZmFpbHMsIG1ldGFkYXRhIG1pZ2h0XG4gICAqICBnZXQgY29ycnVwdGVkLlxuICAgKlxuICAgKiAgTm90ZSB0aGUgdW5wdWJsaXNoIGNhbGwgd2lsbCBzdWZmaXggaW4gdGhlIHVybCBhIC8tcmV2LzE0LTVkNTAwY2ZjZTkyZjkwZmQgcmV2aXNpb24gbnVtYmVyLCB0aGlzIG5vdFxuICAgKiAgdXNlZCBpbnRlcm5hbGx5LlxuICAgKlxuICAgKlxuICAgKiBFeGFtcGxlIGZsb3cgb2YgdW5wdWJsaXNoLlxuICAgKlxuICAgKiBucG0gaHR0cCBmZXRjaCBHRVQgMjAwIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MT93cml0ZT10cnVlIDE2ODBtc1xuICAgICBucG0gaHR0cCBmZXRjaCBQVVQgMjAxIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MS8tcmV2LzE0LTVkNTAwY2ZjZTkyZjkwZmQgOTU2NjA2bXMgYXR0ZW1wdCAjMlxuICAgICBucG0gaHR0cCBmZXRjaCBHRVQgMjAwIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MT93cml0ZT10cnVlIDE2MDFtc1xuICAgICBucG0gaHR0cCBmZXRjaCBERUxFVEUgMjAxIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MS8tL3Rlc3QxLTEuMC4zLnRnei8tcmV2LzE2LWUxMWM4ZGIyODJiMmQ5OTIgMTltc1xuICAgKlxuICAgKiAzLiBTdGFyIGEgcGFja2FnZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uczogc3RhcnQgYSBwYWNrYWdlIGRlcGVuZHMgb2YgdGhlIHB1Ymxpc2ggYW5kIHVucHVibGlzaCBwZXJtaXNzaW9ucywgdGhlcmUgaXMgbm8gc3BlY2lmaWMgZmxhZyBmb3Igc3RhciBvciB1biBzdGFydC5cbiAgICogVGhlIFVSTCBmb3Igc3RhciBpcyBzaW1pbGFyIHRvIHRoZSB1bnB1Ymxpc2ggKGNoYW5nZSBwYWNrYWdlIGZvcm1hdClcbiAgICpcbiAgICogbnBtIGhhcyBubyBlbnBvaW50IGZvciBzdGFyIGEgcGFja2FnZSwgcmF0aGVyIG11dGF0ZSB0aGUgbWV0YWRhdGEgYW5kIGFjdHMgYXMsIHRoZSBkaWZmZXJlbmNlIGlzIHRoZVxuICAgKiB1c2VycyBwcm9wZXJ0eSB3aGljaCBpcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGFuZCB0aGUgYm9keSBvbmx5IGluY2x1ZGVzXG4gICAqXG4gICAqIHtcblx0XHQgIFwiX2lkXCI6IHBrZ05hbWUsXG5cdCAgXHRcIl9yZXZcIjogXCIzLWIwY2RhZWZjOWJkYjc3YzhcIixcblx0XHQgIFwidXNlcnNcIjoge1xuXHRcdCAgICBbdXNlcm5hbWVdOiBib29sZWFuIHZhbHVlICh0cnVlLCBmYWxzZSlcblx0XHQgIH1cblx0fVxuICAgKlxuICAgKi9cbiAgcm91dGVyLnB1dCgnLzpwYWNrYWdlLzpfcmV2Py86cmV2aXNpb24/JywgY2FuKCdwdWJsaXNoJyksIG1lZGlhKG1pbWUuZ2V0VHlwZSgnanNvbicpKSwgZXhwZWN0SnNvbiwgcHVibGlzaFBhY2thZ2Uoc3RvcmFnZSwgY29uZmlnLCBhdXRoKSk7XG5cbiAgLyoqXG4gICAqIFVuLXB1Ymxpc2hpbmcgYW4gZW50aXJlIHBhY2thZ2UuXG4gICAqXG4gICAqIFRoaXMgc2NlbmFyaW8gaGFwcGVucyB3aGVuIHRoZSBmaXJzdCBjYWxsIGRldGVjdCB0aGVyZSBpcyBvbmx5IG9uZSB2ZXJzaW9uIHJlbWFpbmluZ1xuICAgKiBpbiB0aGUgbWV0YWRhdGEsIHRoZW4gdGhlIGNsaWVudCBkZWNpZGVzIHRvIERFTEVURSB0aGUgcmVzb3VyY2VcbiAgICogbnBtIGh0dHAgZmV0Y2ggR0VUIDMwNCBodHRwOi8vbG9jYWxob3N0OjQ4NzMvQHNjb3BlJTJmdGVzdDE/d3JpdGU9dHJ1ZSAxMDc2bXMgKGZyb20gY2FjaGUpXG4gICAgIG5wbSBodHRwIGZldGNoIERFTEVURSAyMDEgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxLy1yZXYvMTgtZDhlYmUzMDIwYmQ0YWM5YyAyMm1zXG4gICAqL1xuICByb3V0ZXIuZGVsZXRlKCcvOnBhY2thZ2UvLXJldi8qJywgY2FuKCd1bnB1Ymxpc2gnKSwgdW5QdWJsaXNoUGFja2FnZShzdG9yYWdlKSk7XG5cbiAgLy8gcmVtb3ZpbmcgYSB0YXJiYWxsXG4gIHJvdXRlci5kZWxldGUoJy86cGFja2FnZS8tLzpmaWxlbmFtZS8tcmV2LzpyZXZpc2lvbicsIGNhbigndW5wdWJsaXNoJyksIGNhbigncHVibGlzaCcpLCByZW1vdmVUYXJiYWxsKHN0b3JhZ2UpKTtcblxuICAvLyB1cGxvYWRpbmcgcGFja2FnZSB0YXJiYWxsXG4gIHJvdXRlci5wdXQoJy86cGFja2FnZS8tLzpmaWxlbmFtZS8qJywgY2FuKCdwdWJsaXNoJyksIG1lZGlhKEhFQURFUlMuT0NURVRfU1RSRUFNKSwgdXBsb2FkUGFja2FnZVRhcmJhbGwoc3RvcmFnZSkpO1xuXG4gIC8vIGFkZGluZyBhIHZlcnNpb25cbiAgcm91dGVyLnB1dCgnLzpwYWNrYWdlLzp2ZXJzaW9uLy10YWcvOnRhZycsIGNhbigncHVibGlzaCcpLCBtZWRpYShtaW1lLmdldFR5cGUoJ2pzb24nKSksIGV4cGVjdEpzb24sIGFkZFZlcnNpb24oc3RvcmFnZSkpO1xufVxuXG4vKipcbiAqIFB1Ymxpc2ggYSBwYWNrYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUGFja2FnZShzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIsIGNvbmZpZzogQ29uZmlnLCBhdXRoOiBJQXV0aCk6IGFueSB7XG4gIGNvbnN0IHN0YXJBcGkgPSBzdGFyKHN0b3JhZ2UpO1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG4gICAgZGVidWcoJ3B1Ymxpc2hpbmcgb3IgdXBkYXRpbmcgYSBuZXcgdmVyc2lvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGFyYmFsbCBvZiBzdHJlYW0gZGF0YSBmcm9tIHBhY2thZ2UgY2xpZW50cy5cbiAgICAgKi9cbiAgICBjb25zdCBjcmVhdGVUYXJiYWxsID0gZnVuY3Rpb24gKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGEsIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgICAgY29uc3Qgc3RyZWFtID0gc3RvcmFnZS5hZGRUYXJiYWxsKHBhY2thZ2VOYW1lLCBmaWxlbmFtZSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNiKCk7XG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMgaXMgZHVtYiBhbmQgbWVtb3J5LWNvbnN1bWluZywgYnV0IHdoYXQgY2hvaWNlcyBkbyB3ZSBoYXZlP1xuICAgICAgLy8gZmxvdzogd2UgbmVlZCBmaXJzdCByZWZhY3RvciB0aGlzIGZpbGUgYmVmb3JlIGRlY2lkZXMgd2hpY2ggdHlwZSB1c2UgaGVyZVxuICAgICAgc3RyZWFtLmVuZChCdWZmZXIuZnJvbShkYXRhLmRhdGEsICdiYXNlNjQnKSk7XG4gICAgICBzdHJlYW0uZG9uZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbmV3IHBhY2thZ2UgdmVyc2lvbiBpbiBzdG9yYWdlXG4gICAgICovXG4gICAgY29uc3QgY3JlYXRlVmVyc2lvbiA9IGZ1bmN0aW9uICh2ZXJzaW9uOiBzdHJpbmcsIG1ldGFkYXRhOiBWZXJzaW9uLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIHN0b3JhZ2UuYWRkVmVyc2lvbihwYWNrYWdlTmFtZSwgdmVyc2lvbiwgbWV0YWRhdGEsIG51bGwsIGNiKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQWRkIG5ldyB0YWdzIGluIHN0b3JhZ2VcbiAgICAgKi9cbiAgICBjb25zdCBhZGRUYWdzID0gZnVuY3Rpb24gKHRhZ3M6IE1lcmdlVGFncywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICBzdG9yYWdlLm1lcmdlVGFncyhwYWNrYWdlTmFtZSwgdGFncywgY2IpO1xuICAgIH07XG5cbiAgICBjb25zdCBhZnRlckNoYW5nZSA9IGZ1bmN0aW9uIChlcnJvciwgb2tNZXNzYWdlLCBtZXRhZGF0YSk6IHZvaWQge1xuICAgICAgY29uc3QgbWV0YWRhdGFDb3B5OiBQYWNrYWdlID0geyAuLi5tZXRhZGF0YSB9O1xuXG4gICAgICBjb25zdCB7IF9hdHRhY2htZW50cywgdmVyc2lvbnMgfSA9IG1ldGFkYXRhQ29weTtcblxuICAgICAgLy8gYG5wbSBzdGFyYCB3b3VsZG4ndCBoYXZlIGF0dGFjaG1lbnRzXG4gICAgICAvLyBhbmQgYG5wbSBkZXByZWNhdGVgIHdvdWxkIGhhdmUgYXR0YWNobWVudHMgYXMgYSBlbXB0eSBvYmplY3QsIGkuZSB7fVxuICAgICAgaWYgKF8uaXNOaWwoX2F0dGFjaG1lbnRzKSB8fCBKU09OLnN0cmluZ2lmeShfYXR0YWNobWVudHMpID09PSAne30nKSB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgb2s6IG9rTWVzc2FnZSxcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gbnBtLXJlZ2lzdHJ5LWNsaWVudCAwLjMrIGVtYmVkcyB0YXJiYWxsIGludG8gdGhlIGpzb24gdXBsb2FkXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25wbS1yZWdpc3RyeS1jbGllbnQvY29tbWl0L2U5ZmJlYjhiNjdmMjQ5Mzk0ZjczNWM3NGVmMTFmZTQ3MjBkNDZjYTBcbiAgICAgIC8vIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ybGlkd2thL3Npbm9waWEvaXNzdWVzLzMxLCBkZWFsaW5nIHdpdGggaXQgaGVyZTpcbiAgICAgIGNvbnN0IGlzSW52YWxpZEJvZHlGb3JtYXQgPSBpc09iamVjdChfYXR0YWNobWVudHMpID09PSBmYWxzZSB8fCBoYXNEaWZmT25lS2V5KF9hdHRhY2htZW50cykgfHwgaXNPYmplY3QodmVyc2lvbnMpID09PSBmYWxzZSB8fCBoYXNEaWZmT25lS2V5KHZlcnNpb25zKTtcblxuICAgICAgaWYgKGlzSW52YWxpZEJvZHlGb3JtYXQpIHtcbiAgICAgICAgLy8gbnBtIGlzIGRvaW5nIHNvbWV0aGluZyBzdHJhbmdlIGFnYWluXG4gICAgICAgIC8vIGlmIHRoaXMgaGFwcGVucyBpbiBub3JtYWwgY2lyY3Vtc3RhbmNlcywgcmVwb3J0IGl0IGFzIGEgYnVnXG4gICAgICAgIGxvZ2dlci5pbmZvKHsgcGFja2FnZU5hbWUgfSwgYHdyb25nIHBhY2thZ2UgZm9ybWF0IG9uIHB1Ymxpc2ggYSBwYWNrYWdlIEB7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5VTlNVUE9SVEVEX1JFR0lTVFJZX0NBTEwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yICYmIGVycm9yLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuQ09ORkxJQ1QpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBhdCB0aGlzIHBvaW50IGRvY3VtZW50IGlzIGVpdGhlciBjcmVhdGVkIG9yIGV4aXN0ZWQgYmVmb3JlXG4gICAgICBjb25zdCBbZmlyc3RBdHRhY2htZW50S2V5XSA9IE9iamVjdC5rZXlzKF9hdHRhY2htZW50cyk7XG5cbiAgICAgIGNyZWF0ZVRhcmJhbGwoUGF0aC5iYXNlbmFtZShmaXJzdEF0dGFjaG1lbnRLZXkpLCBfYXR0YWNobWVudHNbZmlyc3RBdHRhY2htZW50S2V5XSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZlcnNpb25Ub1B1Ymxpc2ggPSBPYmplY3Qua2V5cyh2ZXJzaW9ucylbMF07XG4gICAgICAgIGNvbnN0IHZlcnNpb25NZXRhZGF0YVRvUHVibGlzaCA9IHZlcnNpb25zW3ZlcnNpb25Ub1B1Ymxpc2hdO1xuXG4gICAgICAgIHZlcnNpb25NZXRhZGF0YVRvUHVibGlzaC5yZWFkbWUgPSBfLmlzTmlsKHZlcnNpb25NZXRhZGF0YVRvUHVibGlzaC5yZWFkbWUpID09PSBmYWxzZSA/IFN0cmluZyh2ZXJzaW9uTWV0YWRhdGFUb1B1Ymxpc2gucmVhZG1lKSA6ICcnO1xuXG4gICAgICAgIGNyZWF0ZVZlcnNpb24odmVyc2lvblRvUHVibGlzaCwgdmVyc2lvbk1ldGFkYXRhVG9QdWJsaXNoLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZGRUYWdzKG1ldGFkYXRhQ29weVtESVNUX1RBR1NdLCBhc3luYyBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dChlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IG5vdGlmeShtZXRhZGF0YUNvcHksIGNvbmZpZywgcmVxLnJlbW90ZV91c2VyLCBgJHttZXRhZGF0YUNvcHkubmFtZX1AJHt2ZXJzaW9uVG9QdWJsaXNofWApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHsgZXJyb3IgfSwgJ25vdGlmeSBiYXRjaCBzZXJ2aWNlIGhhcyBmYWlsZWQ6IEB7ZXJyb3J9Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCh7IG9rOiBva01lc3NhZ2UsIHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmIChpc1B1Ymxpc2hhYmxlUGFja2FnZShyZXEuYm9keSkgPT09IGZhbHNlICYmIGlzT2JqZWN0KHJlcS5ib2R5LnVzZXJzKSkge1xuICAgICAgcmV0dXJuIHN0YXJBcGkocmVxLCByZXMsIG5leHQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHZhbGlkYXRlTWV0YWRhdGEocmVxLmJvZHksIHBhY2thZ2VOYW1lKTtcbiAgICAgIC8vIHRyZWF0aW5nIGRlcHJlY2F0aW9uIGFzIHVwZGF0aW5nIGEgcGFja2FnZVxuICAgICAgaWYgKHJlcS5wYXJhbXMuX3JldiB8fCBpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uKHJlcS5ib2R5KSkge1xuICAgICAgICBkZWJ1ZygndXBkYXRpbmcgYSBuZXcgdmVyc2lvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIC8vIHdlIGNoZWNrIHVucHVibGlzaCBwZXJtaXNzaW9ucywgYW4gdXBkYXRlIGlzIGJhc2ljYWxseSByZW1vdmUgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgcmVtb3RlID0gcmVxLnJlbW90ZV91c2VyO1xuICAgICAgICBhdXRoLmFsbG93X3VucHVibGlzaCh7IHBhY2thZ2VOYW1lIH0sIHJlbW90ZSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoeyBwYWNrYWdlTmFtZSB9LCBgbm90IGFsbG93ZWQgdG8gdW5wdWJsaXNoIGEgdmVyc2lvbiBmb3IgQHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RvcmFnZS5jaGFuZ2VQYWNrYWdlKHBhY2thZ2VOYW1lLCBtZXRhZGF0YSwgcmVxLnBhcmFtcy5yZXZpc2lvbiwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBhZnRlckNoYW5nZShlcnJvciwgQVBJX01FU1NBR0UuUEtHX0NIQU5HRUQsIG1ldGFkYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYWRkaW5nIGEgbmV3IHZlcnNpb24gZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgICAgICBzdG9yYWdlLmFkZFBhY2thZ2UocGFja2FnZU5hbWUsIG1ldGFkYXRhLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBhZnRlckNoYW5nZShlcnJvciwgQVBJX01FU1NBR0UuUEtHX0NSRUFURUQsIG1ldGFkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lIH0sICdlcnJvciBvbiBwdWJsaXNoLCBiYWQgcGFja2FnZSBkYXRhIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEJhZERhdGEoQVBJX0VSUk9SLkJBRF9QQUNLQUdFX0RBVEEpKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogdW4tcHVibGlzaCBhIHBhY2thZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuUHVibGlzaFBhY2thZ2Uoc3RvcmFnZTogSVN0b3JhZ2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHJlcS5wYXJhbXMucGFja2FnZTtcbiAgICBkZWJ1ZygndW5wdWJsaXNoaW5nICVvJywgcGFja2FnZU5hbWUpO1xuICAgIHN0b3JhZ2UucmVtb3ZlUGFja2FnZShwYWNrYWdlTmFtZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgfVxuICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5DUkVBVEVEKTtcbiAgICAgIHJldHVybiBuZXh0KHsgb2s6IEFQSV9NRVNTQUdFLlBLR19SRU1PVkVEIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIERlbGV0ZSB0YXJiYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUYXJiYWxsKHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG4gICAgY29uc3QgeyBmaWxlbmFtZSwgcmV2aXNpb24gfSA9IHJlcS5wYXJhbXM7XG4gICAgZGVidWcoJ3JlbW92aW5nIGEgdGFyYmFsbCBmb3IgJW8tJW8tJW8nLCBwYWNrYWdlTmFtZSwgZmlsZW5hbWUsIHJldmlzaW9uKTtcbiAgICBzdG9yYWdlLnJlbW92ZVRhcmJhbGwocGFja2FnZU5hbWUsIGZpbGVuYW1lLCByZXZpc2lvbiwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgfVxuICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5DUkVBVEVEKTtcbiAgICAgIGRlYnVnKCdzdWNjZXNzIHJlbW92ZSB0YXJiYWxsIGZvciAlby0lby0lbycsIHBhY2thZ2VOYW1lLCBmaWxlbmFtZSwgcmV2aXNpb24pO1xuICAgICAgcmV0dXJuIG5leHQoeyBvazogQVBJX01FU1NBR0UuVEFSQkFMTF9SRU1PVkVEIH0pO1xuICAgIH0pO1xuICB9O1xufVxuLyoqXG4gKiBBZGRzIGEgbmV3IHZlcnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFZlcnNpb24oc3RvcmFnZTogSVN0b3JhZ2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHZlcnNpb24sIHRhZyB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHJlcS5wYXJhbXMucGFja2FnZTtcblxuICAgIHN0b3JhZ2UuYWRkVmVyc2lvbihwYWNrYWdlTmFtZSwgdmVyc2lvbiwgcmVxLmJvZHksIHRhZywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuICAgICAgcmV0dXJuIG5leHQoe1xuICAgICAgICBvazogQVBJX01FU1NBR0UuUEtHX1BVQkxJU0hFRCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIHVwbG9hZFBhY2thZ2VUYXJiYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRQYWNrYWdlVGFyYmFsbChzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcmVxLnBhcmFtcy5wYWNrYWdlO1xuICAgIGNvbnN0IHN0cmVhbSA9IHN0b3JhZ2UuYWRkVGFyYmFsbChwYWNrYWdlTmFtZSwgcmVxLnBhcmFtcy5maWxlbmFtZSk7XG4gICAgcmVxLnBpcGUoc3RyZWFtKTtcblxuICAgIC8vIGNoZWNraW5nIGlmIGVuZCBldmVudCBjYW1lIGJlZm9yZSBjbG9zaW5nXG4gICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7XG4gICAgcmVxLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb21wbGV0ZSA9IHRydWU7XG4gICAgICBzdHJlYW0uZG9uZSgpO1xuICAgIH0pO1xuXG4gICAgcmVxLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghY29tcGxldGUpIHtcbiAgICAgICAgc3RyZWFtLmFib3J0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgcmV0dXJuIHJlcy5sb2NhbHMucmVwb3J0X2Vycm9yKGVycik7XG4gICAgfSk7XG5cbiAgICBzdHJlYW0ub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuICAgICAgcmV0dXJuIG5leHQoe1xuICAgICAgICBvazogQVBJX01FU1NBR0UuVEFSQkFMTF9VUExPQURFRCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuIl19
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3B1Ymxpc2gudHMiXSwibmFtZXMiOlsiZGVidWciLCJwdWJsaXNoIiwicm91dGVyIiwiYXV0aCIsInN0b3JhZ2UiLCJjb25maWciLCJjYW4iLCJwdXQiLCJtaW1lIiwiZ2V0VHlwZSIsImV4cGVjdEpzb24iLCJwdWJsaXNoUGFja2FnZSIsImRlbGV0ZSIsInVuUHVibGlzaFBhY2thZ2UiLCJyZW1vdmVUYXJiYWxsIiwiSEVBREVSUyIsIk9DVEVUX1NUUkVBTSIsInVwbG9hZFBhY2thZ2VUYXJiYWxsIiwiYWRkVmVyc2lvbiIsInN0YXJBcGkiLCJyZXEiLCJyZXMiLCJuZXh0IiwicGFja2FnZU5hbWUiLCJwYXJhbXMiLCJwYWNrYWdlIiwiY3JlYXRlVGFyYmFsbCIsImZpbGVuYW1lIiwiZGF0YSIsImNiIiwic3RyZWFtIiwiYWRkVGFyYmFsbCIsIm9uIiwiZXJyIiwiZW5kIiwiQnVmZmVyIiwiZnJvbSIsImRvbmUiLCJjcmVhdGVWZXJzaW9uIiwidmVyc2lvbiIsIm1ldGFkYXRhIiwiYWRkVGFncyIsInRhZ3MiLCJtZXJnZVRhZ3MiLCJhZnRlckNoYW5nZSIsImVycm9yIiwib2tNZXNzYWdlIiwibWV0YWRhdGFDb3B5IiwiX2F0dGFjaG1lbnRzIiwidmVyc2lvbnMiLCJfIiwiaXNOaWwiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJDUkVBVEVEIiwib2siLCJzdWNjZXNzIiwiaXNJbnZhbGlkQm9keUZvcm1hdCIsImxvZ2dlciIsImluZm8iLCJFcnJvckNvZGUiLCJnZXRCYWRSZXF1ZXN0IiwiQVBJX0VSUk9SIiwiVU5TVVBPUlRFRF9SRUdJU1RSWV9DQUxMIiwiQ09ORkxJQ1QiLCJmaXJzdEF0dGFjaG1lbnRLZXkiLCJPYmplY3QiLCJrZXlzIiwiUGF0aCIsImJhc2VuYW1lIiwidmVyc2lvblRvUHVibGlzaCIsInZlcnNpb25NZXRhZGF0YVRvUHVibGlzaCIsInJlYWRtZSIsIlN0cmluZyIsIkRJU1RfVEFHUyIsInJlbW90ZV91c2VyIiwibmFtZSIsImJvZHkiLCJ1c2VycyIsIl9yZXYiLCJpc0VtcHR5IiwicmVtb3RlIiwiYWxsb3dfdW5wdWJsaXNoIiwiY2hhbmdlUGFja2FnZSIsInJldmlzaW9uIiwiQVBJX01FU1NBR0UiLCJQS0dfQ0hBTkdFRCIsImFkZFBhY2thZ2UiLCJQS0dfQ1JFQVRFRCIsImdldEJhZERhdGEiLCJCQURfUEFDS0FHRV9EQVRBIiwicmVtb3ZlUGFja2FnZSIsIlBLR19SRU1PVkVEIiwiVEFSQkFMTF9SRU1PVkVEIiwidGFnIiwiUEtHX1BVQkxJU0hFRCIsInBpcGUiLCJjb21wbGV0ZSIsImFib3J0IiwibG9jYWxzIiwicmVwb3J0X2Vycm9yIiwiVEFSQkFMTF9VUExPQURFRCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsbUJBQVgsQ0FBZDs7QUFFZSxTQUFTQyxPQUFULENBQWlCQyxNQUFqQixFQUFpQ0MsSUFBakMsRUFBOENDLE9BQTlDLEVBQXdFQyxNQUF4RSxFQUE4RjtBQUMzRyxRQUFNQyxHQUFHLEdBQUcsdUJBQU1ILElBQU4sQ0FBWjtBQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QU8sQ0FBQzJCLFVBQVIsQ0FBbUJSLFdBQW5CLEVBQWdDSCxHQUFHLENBQUNJLE1BQUosQ0FBV0csUUFBM0MsQ0FBZjtBQUNBUCxJQUFBQSxHQUFHLENBQUM4RSxJQUFKLENBQVNwRSxNQUFULEVBSHdGLENBS3hGOztBQUNBLFFBQUlxRSxRQUFRLEdBQUcsS0FBZjtBQUNBL0UsSUFBQUEsR0FBRyxDQUFDWSxFQUFKLENBQU8sS0FBUCxFQUFjLFlBQVk7QUFDeEJtRSxNQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNBckUsTUFBQUEsTUFBTSxDQUFDTyxJQUFQO0FBQ0QsS0FIRDtBQUtBakIsSUFBQUEsR0FBRyxDQUFDWSxFQUFKLENBQU8sT0FBUCxFQUFnQixZQUFZO0FBQzFCLFVBQUksQ0FBQ21FLFFBQUwsRUFBZTtBQUNickUsUUFBQUEsTUFBTSxDQUFDc0UsS0FBUDtBQUNEO0FBQ0YsS0FKRDtBQU1BdEUsSUFBQUEsTUFBTSxDQUFDRSxFQUFQLENBQVUsT0FBVixFQUFtQixVQUFVQyxHQUFWLEVBQWU7QUFDaEMsYUFBT1osR0FBRyxDQUFDZ0YsTUFBSixDQUFXQyxZQUFYLENBQXdCckUsR0FBeEIsQ0FBUDtBQUNELEtBRkQ7QUFJQUgsSUFBQUEsTUFBTSxDQUFDRSxFQUFQLENBQVUsU0FBVixFQUFxQixZQUFZO0FBQy9CWCxNQUFBQSxHQUFHLENBQUNpQyxNQUFKLENBQVdDLHVCQUFZQyxPQUF2QjtBQUNBLGFBQU9sQyxJQUFJLENBQUM7QUFDVm1DLFFBQUFBLEVBQUUsRUFBRThCLHVCQUFZZ0I7QUFETixPQUFELENBQVg7QUFHRCxLQUxEO0FBTUQsR0E1QkQ7QUE2QkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lJztcblxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBDb25maWcsIENhbGxiYWNrLCBNZXJnZVRhZ3MsIFZlcnNpb24sIFBhY2thZ2UgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IEFQSV9NRVNTQUdFLCBIRUFERVJTLCBESVNUX1RBR1MsIEFQSV9FUlJPUiwgSFRUUF9TVEFUVVMgfSBmcm9tICcuLi8uLi8uLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlTWV0YWRhdGEsIGlzT2JqZWN0LCBFcnJvckNvZGUsIGhhc0RpZmZPbmVLZXksIGlzUmVsYXRlZFRvRGVwcmVjYXRpb24gfSBmcm9tICcuLi8uLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgbWVkaWEsIGV4cGVjdEpzb24sIGFsbG93IH0gZnJvbSAnLi4vLi4vbWlkZGxld2FyZSc7XG5pbXBvcnQgeyBub3RpZnkgfSBmcm9tICcuLi8uLi8uLi9saWIvbm90aWZ5JztcblxuaW1wb3J0IHsgSUF1dGgsICRSZXNwb25zZUV4dGVuZCwgJFJlcXVlc3RFeHRlbmQsICROZXh0RnVuY3Rpb25WZXIsIElTdG9yYWdlSGFuZGxlciB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IHsgaXNQdWJsaXNoYWJsZVBhY2thZ2UgfSBmcm9tICcuLi8uLi8uLi9saWIvc3RvcmFnZS11dGlscyc7XG5pbXBvcnQgc3RhciBmcm9tICcuL3N0YXInO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzpwdWJsaXNoJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHB1Ymxpc2gocm91dGVyOiBSb3V0ZXIsIGF1dGg6IElBdXRoLCBzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIsIGNvbmZpZzogQ29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGNhbiA9IGFsbG93KGF1dGgpO1xuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGEgcGFja2FnZSAvIHVwZGF0ZSBwYWNrYWdlIC8gdW4vc3RhcnQgYSBwYWNrYWdlXG4gICAqXG4gICAqIFRoZXJlIGFyZSBtdWx0aXBsZXMgc2NlbmFyaW9zIGhlcmUgdG8gYmUgY29uc2lkZXJlZDpcbiAgICpcbiAgICogMS4gUHVibGlzaCBzY2VuYXJpb1xuICAgKlxuICAgKiBQdWJsaXNoIGEgcGFja2FnZSBjb25zaXN0IG9mIGF0IGxlYXN0IDEgc3RlcCAoUFVUKSB3aXRoIGEgbWV0YWRhdGEgcGF5bG9hZC5cbiAgICogV2hlbiBhIHBhY2thZ2UgaXMgcHVibGlzaGVkLCBhbiBfYXR0YWNobWVudCBwcm9wZXJ0eSBpcyBwcmVzZW50IHRoYXQgY29udGFpbnMgdGhlIGRhdGFcbiAgICogb2YgdGhlIHRhcmJhbGwuXG4gICAqXG4gICAqIEV4YW1wbGUgZmxvdyBvZiBwdWJsaXNoLlxuICAgKlxuICAgKiAgbnBtIGh0dHAgZmV0Y2ggUFVUIDIwMSBodHRwOi8vbG9jYWxob3N0OjQ4NzMvQHNjb3BlJTJmdGVzdDEgOTYyN21zXG4gICAgICBucG0gaW5mbyBsaWZlY3ljbGUgQHNjb3BlL3Rlc3QxQDEuMC4xfnB1Ymxpc2g6IEBzY29wZS90ZXN0MUAxLjAuMVxuICAgICAgbnBtIGluZm8gbGlmZWN5Y2xlIEBzY29wZS90ZXN0MUAxLjAuMX5wb3N0cHVibGlzaDogQHNjb3BlL3Rlc3QxQDEuMC4xXG4gICAgICArIEBzY29wZS90ZXN0MUAxLjAuMVxuICAgICAgbnBtIHZlcmIgZXhpdCBbIDAsIHRydWUgXVxuICAgKlxuICAgKlxuICAgKiAyLiBVbnB1Ymxpc2ggc2NlbmFyaW9cbiAgICpcbiAgICogVW5wdWJsaXNoIGNvbnNpc3QgaW4gMyBzdGVwcy5cbiAgICogIDEuIFRyeSB0byBmZXRjaCAgbWV0YWRhdGEgLT4gaWYgaXQgZmFpbHMsIHJldHVybiA0MDRcbiAgICogIDIuIENvbXB1dGUgbWV0YWRhdGEgbG9jYWxseSAoY2xpZW50IHNpZGUpIGFuZCBzZW5kIGEgbXV0YXRlIHBheWxvYWQgZXhjbHVkaW5nIHRoZSB2ZXJzaW9uIHRvIGJlIHVucHVibGlzaGVkXG4gICAqICAgIGVnOiBpZiBtZXRhZGF0YSByZWZsZWN0cyAxLjAuMSwgMS4wLjIgYW5kIDEuMC4zLCB0aGUgY29tcHV0ZWQgbWV0YWRhdGEgd29uJ3QgaW5jbHVkZSAxLjAuMy5cbiAgICogIDMuIE9uY2UgdGhlIHNlY29uZCBzdGVwIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmaW5pc2hlZCwgZGVsZXRlIHRoZSB0YXJiYWxsLlxuICAgKlxuICAgKiAgQWxsIHRoZXNlIHN0ZXBzIGFyZSBjb25zZWN1dGl2ZSBhbmQgcmVxdWlyZWQsIHRoZXJlIGlzIG5vIHRyYW5zYWNpb25zIGhlcmUsIGlmIHN0ZXAgMyBmYWlscywgbWV0YWRhdGEgbWlnaHRcbiAgICogIGdldCBjb3JydXB0ZWQuXG4gICAqXG4gICAqICBOb3RlIHRoZSB1bnB1Ymxpc2ggY2FsbCB3aWxsIHN1ZmZpeCBpbiB0aGUgdXJsIGEgLy1yZXYvMTQtNWQ1MDBjZmNlOTJmOTBmZCByZXZpc2lvbiBudW1iZXIsIHRoaXMgbm90XG4gICAqICB1c2VkIGludGVybmFsbHkuXG4gICAqXG4gICAqXG4gICAqIEV4YW1wbGUgZmxvdyBvZiB1bnB1Ymxpc2guXG4gICAqXG4gICAqIG5wbSBodHRwIGZldGNoIEdFVCAyMDAgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxP3dyaXRlPXRydWUgMTY4MG1zXG4gICAgIG5wbSBodHRwIGZldGNoIFBVVCAyMDEgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxLy1yZXYvMTQtNWQ1MDBjZmNlOTJmOTBmZCA5NTY2MDZtcyBhdHRlbXB0ICMyXG4gICAgIG5wbSBodHRwIGZldGNoIEdFVCAyMDAgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxP3dyaXRlPXRydWUgMTYwMW1zXG4gICAgIG5wbSBodHRwIGZldGNoIERFTEVURSAyMDEgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxLy0vdGVzdDEtMS4wLjMudGd6Ly1yZXYvMTYtZTExYzhkYjI4MmIyZDk5MiAxOW1zXG4gICAqXG4gICAqIDMuIFN0YXIgYSBwYWNrYWdlXG4gICAqXG4gICAqIFBlcm1pc3Npb25zOiBzdGFydCBhIHBhY2thZ2UgZGVwZW5kcyBvZiB0aGUgcHVibGlzaCBhbmQgdW5wdWJsaXNoIHBlcm1pc3Npb25zLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBmbGFnIGZvciBzdGFyIG9yIHVuIHN0YXJ0LlxuICAgKiBUaGUgVVJMIGZvciBzdGFyIGlzIHNpbWlsYXIgdG8gdGhlIHVucHVibGlzaCAoY2hhbmdlIHBhY2thZ2UgZm9ybWF0KVxuICAgKlxuICAgKiBucG0gaGFzIG5vIGVucG9pbnQgZm9yIHN0YXIgYSBwYWNrYWdlLCByYXRoZXIgbXV0YXRlIHRoZSBtZXRhZGF0YSBhbmQgYWN0cyBhcywgdGhlIGRpZmZlcmVuY2UgaXMgdGhlXG4gICAqIHVzZXJzIHByb3BlcnR5IHdoaWNoIGlzIHBhcnQgb2YgdGhlIHBheWxvYWQgYW5kIHRoZSBib2R5IG9ubHkgaW5jbHVkZXNcbiAgICpcbiAgICoge1xuXHRcdCAgXCJfaWRcIjogcGtnTmFtZSxcblx0ICBcdFwiX3JldlwiOiBcIjMtYjBjZGFlZmM5YmRiNzdjOFwiLFxuXHRcdCAgXCJ1c2Vyc1wiOiB7XG5cdFx0ICAgIFt1c2VybmFtZV06IGJvb2xlYW4gdmFsdWUgKHRydWUsIGZhbHNlKVxuXHRcdCAgfVxuXHR9XG4gICAqXG4gICAqL1xuICByb3V0ZXIucHV0KCcvOnBhY2thZ2UvOl9yZXY/LzpyZXZpc2lvbj8nLCBjYW4oJ3B1Ymxpc2gnKSwgbWVkaWEobWltZS5nZXRUeXBlKCdqc29uJykpLCBleHBlY3RKc29uLCBwdWJsaXNoUGFja2FnZShzdG9yYWdlLCBjb25maWcsIGF1dGgpKTtcblxuICAvKipcbiAgICogVW4tcHVibGlzaGluZyBhbiBlbnRpcmUgcGFja2FnZS5cbiAgICpcbiAgICogVGhpcyBzY2VuYXJpbyBoYXBwZW5zIHdoZW4gdGhlIGZpcnN0IGNhbGwgZGV0ZWN0IHRoZXJlIGlzIG9ubHkgb25lIHZlcnNpb24gcmVtYWluaW5nXG4gICAqIGluIHRoZSBtZXRhZGF0YSwgdGhlbiB0aGUgY2xpZW50IGRlY2lkZXMgdG8gREVMRVRFIHRoZSByZXNvdXJjZVxuICAgKiBucG0gaHR0cCBmZXRjaCBHRVQgMzA0IGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MT93cml0ZT10cnVlIDEwNzZtcyAoZnJvbSBjYWNoZSlcbiAgICAgbnBtIGh0dHAgZmV0Y2ggREVMRVRFIDIwMSBodHRwOi8vbG9jYWxob3N0OjQ4NzMvQHNjb3BlJTJmdGVzdDEvLXJldi8xOC1kOGViZTMwMjBiZDRhYzljIDIybXNcbiAgICovXG4gIHJvdXRlci5kZWxldGUoJy86cGFja2FnZS8tcmV2LyonLCBjYW4oJ3VucHVibGlzaCcpLCB1blB1Ymxpc2hQYWNrYWdlKHN0b3JhZ2UpKTtcblxuICAvLyByZW1vdmluZyBhIHRhcmJhbGxcbiAgcm91dGVyLmRlbGV0ZSgnLzpwYWNrYWdlLy0vOmZpbGVuYW1lLy1yZXYvOnJldmlzaW9uJywgY2FuKCd1bnB1Ymxpc2gnKSwgY2FuKCdwdWJsaXNoJyksIHJlbW92ZVRhcmJhbGwoc3RvcmFnZSkpO1xuXG4gIC8vIHVwbG9hZGluZyBwYWNrYWdlIHRhcmJhbGxcbiAgcm91dGVyLnB1dCgnLzpwYWNrYWdlLy0vOmZpbGVuYW1lLyonLCBjYW4oJ3B1Ymxpc2gnKSwgbWVkaWEoSEVBREVSUy5PQ1RFVF9TVFJFQU0pLCB1cGxvYWRQYWNrYWdlVGFyYmFsbChzdG9yYWdlKSk7XG5cbiAgLy8gYWRkaW5nIGEgdmVyc2lvblxuICByb3V0ZXIucHV0KCcvOnBhY2thZ2UvOnZlcnNpb24vLXRhZy86dGFnJywgY2FuKCdwdWJsaXNoJyksIG1lZGlhKG1pbWUuZ2V0VHlwZSgnanNvbicpKSwgZXhwZWN0SnNvbiwgYWRkVmVyc2lvbihzdG9yYWdlKSk7XG59XG5cbi8qKlxuICogUHVibGlzaCBhIHBhY2thZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hQYWNrYWdlKHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlciwgY29uZmlnOiBDb25maWcsIGF1dGg6IElBdXRoKTogYW55IHtcbiAgY29uc3Qgc3RhckFwaSA9IHN0YXIoc3RvcmFnZSk7XG4gIHJldHVybiBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHJlcS5wYXJhbXMucGFja2FnZTtcbiAgICBkZWJ1ZygncHVibGlzaGluZyBvciB1cGRhdGluZyBhIG5ldyB2ZXJzaW9uIGZvciAlbycsIHBhY2thZ2VOYW1lKTtcbiAgICAvKipcbiAgICAgKiBXcml0ZSB0YXJiYWxsIG9mIHN0cmVhbSBkYXRhIGZyb20gcGFja2FnZSBjbGllbnRzLlxuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZVRhcmJhbGwgPSBmdW5jdGlvbiAoZmlsZW5hbWU6IHN0cmluZywgZGF0YSwgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBzdG9yYWdlLmFkZFRhcmJhbGwocGFja2FnZU5hbWUsIGZpbGVuYW1lKTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNiKGVycik7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignc3VjY2VzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdGhpcyBpcyBkdW1iIGFuZCBtZW1vcnktY29uc3VtaW5nLCBidXQgd2hhdCBjaG9pY2VzIGRvIHdlIGhhdmU/XG4gICAgICAvLyBmbG93OiB3ZSBuZWVkIGZpcnN0IHJlZmFjdG9yIHRoaXMgZmlsZSBiZWZvcmUgZGVjaWRlcyB3aGljaCB0eXBlIHVzZSBoZXJlXG4gICAgICBzdHJlYW0uZW5kKEJ1ZmZlci5mcm9tKGRhdGEuZGF0YSwgJ2Jhc2U2NCcpKTtcbiAgICAgIHN0cmVhbS5kb25lKCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFkZCBuZXcgcGFja2FnZSB2ZXJzaW9uIGluIHN0b3JhZ2VcbiAgICAgKi9cbiAgICBjb25zdCBjcmVhdGVWZXJzaW9uID0gZnVuY3Rpb24gKHZlcnNpb246IHN0cmluZywgbWV0YWRhdGE6IFZlcnNpb24sIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgICAgc3RvcmFnZS5hZGRWZXJzaW9uKHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCBtZXRhZGF0YSwgbnVsbCwgY2IpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbmV3IHRhZ3MgaW4gc3RvcmFnZVxuICAgICAqL1xuICAgIGNvbnN0IGFkZFRhZ3MgPSBmdW5jdGlvbiAodGFnczogTWVyZ2VUYWdzLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIHN0b3JhZ2UubWVyZ2VUYWdzKHBhY2thZ2VOYW1lLCB0YWdzLCBjYik7XG4gICAgfTtcblxuICAgIGNvbnN0IGFmdGVyQ2hhbmdlID0gZnVuY3Rpb24gKGVycm9yLCBva01lc3NhZ2UsIG1ldGFkYXRhKTogdm9pZCB7XG4gICAgICBjb25zdCBtZXRhZGF0YUNvcHk6IFBhY2thZ2UgPSB7IC4uLm1ldGFkYXRhIH07XG5cbiAgICAgIGNvbnN0IHsgX2F0dGFjaG1lbnRzLCB2ZXJzaW9ucyB9ID0gbWV0YWRhdGFDb3B5O1xuXG4gICAgICAvLyBgbnBtIHN0YXJgIHdvdWxkbid0IGhhdmUgYXR0YWNobWVudHNcbiAgICAgIC8vIGFuZCBgbnBtIGRlcHJlY2F0ZWAgd291bGQgaGF2ZSBhdHRhY2htZW50cyBhcyBhIGVtcHR5IG9iamVjdCwgaS5lIHt9XG4gICAgICBpZiAoXy5pc05pbChfYXR0YWNobWVudHMpIHx8IEpTT04uc3RyaW5naWZ5KF9hdHRhY2htZW50cykgPT09ICd7fScpIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgICBvazogb2tNZXNzYWdlLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBucG0tcmVnaXN0cnktY2xpZW50IDAuMysgZW1iZWRzIHRhcmJhbGwgaW50byB0aGUganNvbiB1cGxvYWRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3MvbnBtLXJlZ2lzdHJ5LWNsaWVudC9jb21taXQvZTlmYmViOGI2N2YyNDkzOTRmNzM1Yzc0ZWYxMWZlNDcyMGQ0NmNhMFxuICAgICAgLy8gaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL3JsaWR3a2Evc2lub3BpYS9pc3N1ZXMvMzEsIGRlYWxpbmcgd2l0aCBpdCBoZXJlOlxuICAgICAgY29uc3QgaXNJbnZhbGlkQm9keUZvcm1hdCA9IGlzT2JqZWN0KF9hdHRhY2htZW50cykgPT09IGZhbHNlIHx8IGhhc0RpZmZPbmVLZXkoX2F0dGFjaG1lbnRzKSB8fCBpc09iamVjdCh2ZXJzaW9ucykgPT09IGZhbHNlIHx8IGhhc0RpZmZPbmVLZXkodmVyc2lvbnMpO1xuXG4gICAgICBpZiAoaXNJbnZhbGlkQm9keUZvcm1hdCkge1xuICAgICAgICAvLyBucG0gaXMgZG9pbmcgc29tZXRoaW5nIHN0cmFuZ2UgYWdhaW5cbiAgICAgICAgLy8gaWYgdGhpcyBoYXBwZW5zIGluIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCByZXBvcnQgaXQgYXMgYSBidWdcbiAgICAgICAgbG9nZ2VyLmluZm8oeyBwYWNrYWdlTmFtZSB9LCBgd3JvbmcgcGFja2FnZSBmb3JtYXQgb24gcHVibGlzaCBhIHBhY2thZ2UgQHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEJhZFJlcXVlc3QoQVBJX0VSUk9SLlVOU1VQT1JURURfUkVHSVNUUllfQ0FMTCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5DT05GTElDVCkge1xuICAgICAgICByZXR1cm4gbmV4dChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQgZG9jdW1lbnQgaXMgZWl0aGVyIGNyZWF0ZWQgb3IgZXhpc3RlZCBiZWZvcmVcbiAgICAgIGNvbnN0IFtmaXJzdEF0dGFjaG1lbnRLZXldID0gT2JqZWN0LmtleXMoX2F0dGFjaG1lbnRzKTtcblxuICAgICAgY3JlYXRlVGFyYmFsbChQYXRoLmJhc2VuYW1lKGZpcnN0QXR0YWNobWVudEtleSksIF9hdHRhY2htZW50c1tmaXJzdEF0dGFjaG1lbnRLZXldLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmVyc2lvblRvUHVibGlzaCA9IE9iamVjdC5rZXlzKHZlcnNpb25zKVswXTtcbiAgICAgICAgY29uc3QgdmVyc2lvbk1ldGFkYXRhVG9QdWJsaXNoID0gdmVyc2lvbnNbdmVyc2lvblRvUHVibGlzaF07XG5cbiAgICAgICAgdmVyc2lvbk1ldGFkYXRhVG9QdWJsaXNoLnJlYWRtZSA9IF8uaXNOaWwodmVyc2lvbk1ldGFkYXRhVG9QdWJsaXNoLnJlYWRtZSkgPT09IGZhbHNlID8gU3RyaW5nKHZlcnNpb25NZXRhZGF0YVRvUHVibGlzaC5yZWFkbWUpIDogJyc7XG5cbiAgICAgICAgY3JlYXRlVmVyc2lvbih2ZXJzaW9uVG9QdWJsaXNoLCB2ZXJzaW9uTWV0YWRhdGFUb1B1Ymxpc2gsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZFRhZ3MobWV0YWRhdGFDb3B5W0RJU1RfVEFHU10sIGFzeW5jIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgbm90aWZ5KG1ldGFkYXRhQ29weSwgY29uZmlnLCByZXEucmVtb3RlX3VzZXIsIGAke21ldGFkYXRhQ29weS5uYW1lfUAke3ZlcnNpb25Ub1B1Ymxpc2h9YCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoeyBlcnJvciB9LCAnbm90aWZ5IGJhdGNoIHNlcnZpY2UgaGFzIGZhaWxlZDogQHtlcnJvcn0nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5DUkVBVEVEKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHsgb2s6IG9rTWVzc2FnZSwgc3VjY2VzczogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKGlzUHVibGlzaGFibGVQYWNrYWdlKHJlcS5ib2R5KSA9PT0gZmFsc2UgJiYgaXNPYmplY3QocmVxLmJvZHkudXNlcnMpKSB7XG4gICAgICByZXR1cm4gc3RhckFwaShyZXEsIHJlcywgbmV4dCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gdmFsaWRhdGVNZXRhZGF0YShyZXEuYm9keSwgcGFja2FnZU5hbWUpO1xuICAgICAgLy8gY2hlY2sgX2F0dGFjaG1lbnRzIHRvIGRpc3Rpbmd1aXNoIHB1Ymxpc2ggYW5kIGRlcHJlY2F0ZVxuICAgICAgaWYgKHJlcS5wYXJhbXMuX3JldiB8fCAoaXNSZWxhdGVkVG9EZXByZWNhdGlvbihyZXEuYm9keSkgJiYgXy5pc0VtcHR5KHJlcS5ib2R5Ll9hdHRhY2htZW50cykpKSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBhIG5ldyB2ZXJzaW9uIGZvciAlbycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgLy8gd2UgY2hlY2sgdW5wdWJsaXNoIHBlcm1pc3Npb25zLCBhbiB1cGRhdGUgaXMgYmFzaWNhbGx5IHJlbW92ZSB2ZXJzaW9uc1xuICAgICAgICBjb25zdCByZW1vdGUgPSByZXEucmVtb3RlX3VzZXI7XG4gICAgICAgIGF1dGguYWxsb3dfdW5wdWJsaXNoKHsgcGFja2FnZU5hbWUgfSwgcmVtb3RlLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lIH0sIGBub3QgYWxsb3dlZCB0byB1bnB1Ymxpc2ggYSB2ZXJzaW9uIGZvciBAe3BhY2thZ2VOYW1lfWApO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdG9yYWdlLmNoYW5nZVBhY2thZ2UocGFja2FnZU5hbWUsIG1ldGFkYXRhLCByZXEucGFyYW1zLnJldmlzaW9uLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGFmdGVyQ2hhbmdlKGVycm9yLCBBUElfTUVTU0FHRS5QS0dfQ0hBTkdFRCwgbWV0YWRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCdhZGRpbmcgYSBuZXcgdmVyc2lvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIHN0b3JhZ2UuYWRkUGFja2FnZShwYWNrYWdlTmFtZSwgbWV0YWRhdGEsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGFmdGVyQ2hhbmdlKGVycm9yLCBBUElfTUVTU0FHRS5QS0dfQ1JFQVRFRCwgbWV0YWRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUgfSwgJ2Vycm9yIG9uIHB1Ymxpc2gsIGJhZCBwYWNrYWdlIGRhdGEgZm9yIEB7cGFja2FnZU5hbWV9Jyk7XG4gICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkRGF0YShBUElfRVJST1IuQkFEX1BBQ0tBR0VfREFUQSkpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiB1bi1wdWJsaXNoIGEgcGFja2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5QdWJsaXNoUGFja2FnZShzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcmVxLnBhcmFtcy5wYWNrYWdlO1xuICAgIGRlYnVnKCd1bnB1Ymxpc2hpbmcgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgc3RvcmFnZS5yZW1vdmVQYWNrYWdlKHBhY2thZ2VOYW1lLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICB9XG4gICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuICAgICAgcmV0dXJuIG5leHQoeyBvazogQVBJX01FU1NBR0UuUEtHX1JFTU9WRUQgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogRGVsZXRlIHRhcmJhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRhcmJhbGwoc3RvcmFnZTogSVN0b3JhZ2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHJlcS5wYXJhbXMucGFja2FnZTtcbiAgICBjb25zdCB7IGZpbGVuYW1lLCByZXZpc2lvbiB9ID0gcmVxLnBhcmFtcztcbiAgICBkZWJ1ZygncmVtb3ZpbmcgYSB0YXJiYWxsIGZvciAlby0lby0lbycsIHBhY2thZ2VOYW1lLCBmaWxlbmFtZSwgcmV2aXNpb24pO1xuICAgIHN0b3JhZ2UucmVtb3ZlVGFyYmFsbChwYWNrYWdlTmFtZSwgZmlsZW5hbWUsIHJldmlzaW9uLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICB9XG4gICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuICAgICAgZGVidWcoJ3N1Y2Nlc3MgcmVtb3ZlIHRhcmJhbGwgZm9yICVvLSVvLSVvJywgcGFja2FnZU5hbWUsIGZpbGVuYW1lLCByZXZpc2lvbik7XG4gICAgICByZXR1cm4gbmV4dCh7IG9rOiBBUElfTUVTU0FHRS5UQVJCQUxMX1JFTU9WRUQgfSk7XG4gICAgfSk7XG4gIH07XG59XG4vKipcbiAqIEFkZHMgYSBuZXcgdmVyc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVmVyc2lvbihzdG9yYWdlOiBJU3RvcmFnZUhhbmRsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgdGFnIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcmVxLnBhcmFtcy5wYWNrYWdlO1xuXG4gICAgc3RvcmFnZS5hZGRWZXJzaW9uKHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCByZXEuYm9keSwgdGFnLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gbmV4dChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgIG9rOiBBUElfTUVTU0FHRS5QS0dfUFVCTElTSEVELFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogdXBsb2FkUGFja2FnZVRhcmJhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZFBhY2thZ2VUYXJiYWxsKHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG4gICAgY29uc3Qgc3RyZWFtID0gc3RvcmFnZS5hZGRUYXJiYWxsKHBhY2thZ2VOYW1lLCByZXEucGFyYW1zLmZpbGVuYW1lKTtcbiAgICByZXEucGlwZShzdHJlYW0pO1xuXG4gICAgLy8gY2hlY2tpbmcgaWYgZW5kIGV2ZW50IGNhbWUgYmVmb3JlIGNsb3NpbmdcbiAgICBsZXQgY29tcGxldGUgPSBmYWxzZTtcbiAgICByZXEub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5kb25lKCk7XG4gICAgfSk7XG5cbiAgICByZXEub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFjb21wbGV0ZSkge1xuICAgICAgICBzdHJlYW0uYWJvcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICByZXR1cm4gcmVzLmxvY2Fscy5yZXBvcnRfZXJyb3IoZXJyKTtcbiAgICB9KTtcblxuICAgIHN0cmVhbS5vbignc3VjY2VzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgIG9rOiBBUElfTUVTU0FHRS5UQVJCQUxMX1VQTE9BREVELFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -9,6 +9,8 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
9
9
|
|
|
10
10
|
var _cookies = _interopRequireDefault(require("cookies"));
|
|
11
11
|
|
|
12
|
+
var _express = _interopRequireDefault(require("express"));
|
|
13
|
+
|
|
12
14
|
var _utils = require("../../../lib/utils");
|
|
13
15
|
|
|
14
16
|
var _constants = require("../../../lib/constants");
|
|
@@ -17,16 +19,21 @@ var _authUtils = require("../../../lib/auth-utils");
|
|
|
17
19
|
|
|
18
20
|
var _logger = require("../../../lib/logger");
|
|
19
21
|
|
|
22
|
+
var _rateLimiter = require("../../rate-limiter");
|
|
23
|
+
|
|
20
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
25
|
|
|
22
26
|
function _default(route, auth, config) {
|
|
23
|
-
|
|
27
|
+
/* eslint new-cap:off */
|
|
28
|
+
const userRouter = _express.default.Router();
|
|
29
|
+
|
|
30
|
+
userRouter.get('/-/user/:org_couchdb_user', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
|
|
24
31
|
res.status(_constants.HTTP_STATUS.OK);
|
|
25
32
|
next({
|
|
26
33
|
ok: (0, _authUtils.getAuthenticatedMessage)(req.remote_user.name)
|
|
27
34
|
});
|
|
28
35
|
});
|
|
29
|
-
|
|
36
|
+
userRouter.put('/-/user/:org_couchdb_user/:_rev?/:revision?', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
|
|
30
37
|
const {
|
|
31
38
|
name,
|
|
32
39
|
password
|
|
@@ -47,6 +54,7 @@ function _default(route, auth, config) {
|
|
|
47
54
|
const restoredRemoteUser = (0, _authUtils.createRemoteUser)(name, user.groups || []);
|
|
48
55
|
const token = await (0, _authUtils.getApiToken)(auth, config, restoredRemoteUser, password);
|
|
49
56
|
res.status(_constants.HTTP_STATUS.CREATED);
|
|
57
|
+
res.set(_constants.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
|
|
50
58
|
return next({
|
|
51
59
|
ok: (0, _authUtils.getAuthenticatedMessage)(req.remote_user.name),
|
|
52
60
|
token
|
|
@@ -73,6 +81,7 @@ function _default(route, auth, config) {
|
|
|
73
81
|
const token = name && password ? await (0, _authUtils.getApiToken)(auth, config, user, password) : undefined;
|
|
74
82
|
req.remote_user = user;
|
|
75
83
|
res.status(_constants.HTTP_STATUS.CREATED);
|
|
84
|
+
res.set(_constants.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
|
|
76
85
|
return next({
|
|
77
86
|
ok: `user '${req.body.name}' created`,
|
|
78
87
|
token
|
|
@@ -80,7 +89,7 @@ function _default(route, auth, config) {
|
|
|
80
89
|
});
|
|
81
90
|
}
|
|
82
91
|
});
|
|
83
|
-
|
|
92
|
+
userRouter.delete('/-/user/token/*', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
|
|
84
93
|
res.status(_constants.HTTP_STATUS.OK);
|
|
85
94
|
next({
|
|
86
95
|
ok: _constants.API_MESSAGE.LOGGED_OUT
|
|
@@ -88,7 +97,7 @@ function _default(route, auth, config) {
|
|
|
88
97
|
}); // placeholder 'cause npm require to be authenticated to publish
|
|
89
98
|
// we do not do any real authentication yet
|
|
90
99
|
|
|
91
|
-
|
|
100
|
+
userRouter.post('/_session', _cookies.default.express(), function (req, res, next) {
|
|
92
101
|
res.cookies.set('AuthSession', String(Math.random()), (0, _authUtils.createSessionToken)());
|
|
93
102
|
next({
|
|
94
103
|
ok: true,
|
|
@@ -96,5 +105,6 @@ function _default(route, auth, config) {
|
|
|
96
105
|
roles: []
|
|
97
106
|
});
|
|
98
107
|
});
|
|
108
|
+
route.use(userRouter);
|
|
99
109
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3VzZXIudHMiXSwibmFtZXMiOlsicm91dGUiLCJhdXRoIiwiY29uZmlnIiwiZ2V0IiwicmVxIiwicmVzIiwibmV4dCIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiT0siLCJvayIsInJlbW90ZV91c2VyIiwibmFtZSIsInB1dCIsInBhc3N3b3JkIiwiYm9keSIsInJlbW90ZU5hbWUiLCJfIiwiaXNOaWwiLCJhdXRoZW50aWNhdGUiLCJjYWxsYmFja0F1dGhlbnRpY2F0ZSIsImVyciIsInVzZXIiLCJsb2dnZXIiLCJlcnJvciIsIkVycm9yQ29kZSIsImdldENvZGUiLCJVTkFVVEhPUklaRUQiLCJBUElfRVJST1IiLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJyZXN0b3JlZFJlbW90ZVVzZXIiLCJncm91cHMiLCJ0b2tlbiIsIkNSRUFURUQiLCJCQURfUkVRVUVTVCIsIlBBU1NXT1JEX1NIT1JUIiwiYWRkX3VzZXIiLCJJTlRFUk5BTF9FUlJPUiIsIm1lc3NhZ2UiLCJnZXRDb25mbGljdCIsInVuZGVmaW5lZCIsImRlbGV0ZSIsIkFQSV9NRVNTQUdFIiwiTE9HR0VEX09VVCIsInBvc3QiLCJDb29raWVzIiwiZXhwcmVzcyIsImNvb2tpZXMiLCJzZXQiLCJTdHJpbmciLCJNYXRoIiwicmFuZG9tIiwicm9sZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUllLGtCQUFVQSxLQUFWLEVBQXlCQyxJQUF6QixFQUFzQ0MsTUFBdEMsRUFBNEQ7QUFDekVGLEVBQUFBLEtBQUssQ0FBQ0csR0FBTixDQUFVLDJCQUFWLEVBQXVDLFVBQVVDLEdBQVYsRUFBK0JDLEdBQS9CLEVBQThDQyxJQUE5QyxFQUE0RTtBQUNqSEQsSUFBQUEsR0FBRyxDQUFDRSxNQUFKLENBQVdDLHVCQUFZQyxFQUF2QjtBQUNBSCxJQUFBQSxJQUFJLENBQUM7QUFDSEksTUFB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LENBQUNFLE1BQUosQ0FBV0MsdUJBQVl5QixPQUF2QjtBQUNBLGVBQU8zQixJQUFJLENBQUM7QUFDVkksVUFBQUEsRUFBRSxFQUFHLFNBQVFOLEdBQUcsQ0FBQ1csSUFBSixDQUFTSCxJQUFLLFdBRGpCO0FBRVZvQixVQUFBQTtBQUZVLFNBQUQsQ0FBWDtBQUlELE9BbkJEO0FBb0JEO0FBQ0YsR0FoREQ7QUFrREFoQyxFQUFBQSxLQUFLLENBQUN5QyxNQUFOLENBQWEsaUJBQWIsRUFBZ0MsVUFBVXJDLEdBQVYsRUFBK0JDLEdBQS9CLEVBQThDQyxJQUE5QyxFQUE0RTtBQUMxR0QsSUFBQUEsR0FBRyxDQUFDRSxNQUFKLENBQVdDLHVCQUFZQyxFQUF2QjtBQUNBSCxJQUFBQSxJQUFJLENBQUM7QUFDSEksTUFBQUEsRUFBRSxFQUFFZ0MsdUJBQVlDO0FBRGIsS0FBRCxDQUFKO0FBR0QsR0FMRCxFQTFEeUUsQ0FpRXpFO0FBQ0E7O0FBQ0EzQyxFQUFBQSxLQUFLLENBQUM0QyxJQUFOLENBQVcsV0FBWCxFQUF3QkMsaUJBQVFDLE9BQVIsRUFBeEIsRUFBMkMsVUFBVTFDLEdBQVYsRUFBK0JDLEdBQS9CLEVBQXFEQyxJQUFyRCxFQUFtRjtBQUM1SEQsSUFBQUEsR0FBRyxDQUFDMEMsT0FBSixDQUFZQyxHQUFaLENBQWdCLGFBQWhCLEVBQStCQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsTUFBTCxFQUFELENBQXJDLEVBQXNELG9DQUF0RDtBQUVBN0MsSUFBQUEsSUFBSSxDQUFDO0FBQ0hJLE1BQUFBLEVBQUUsRUFBRSxJQUREO0FBRUhFLE1BQUFBLElBQUksRUFBRSxVQUZIO0FBR0h3QyxNQUFBQSxLQUFLLEVBQUU7QUFISixLQUFELENBQUo7QUFLRCxHQVJEO0FBU0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnY29va2llcyc7XG5cbmltcG9ydCB7IENvbmZpZywgUmVtb3RlVXNlciB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgUmVzcG9uc2UsIFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgQVBJX01FU1NBR0UsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjcmVhdGVSZW1vdGVVc2VyLCBjcmVhdGVTZXNzaW9uVG9rZW4sIGdldEFwaVRva2VuLCBnZXRBdXRoZW50aWNhdGVkTWVzc2FnZSwgdmFsaWRhdGVQYXNzd29yZCB9IGZyb20gJy4uLy4uLy4uL2xpYi9hdXRoLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL2xpYi9sb2dnZXInO1xuXG5pbXBvcnQgeyAkUmVxdWVzdEV4dGVuZCwgJFJlc3BvbnNlRXh0ZW5kLCAkTmV4dEZ1bmN0aW9uVmVyLCBJQXV0aCB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHJvdXRlOiBSb3V0ZXIsIGF1dGg6IElBdXRoLCBjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICByb3V0ZS5nZXQoJy8tL3VzZXIvOm9yZ19jb3VjaGRiX3VzZXInLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuT0spO1xuICAgIG5leHQoe1xuICAgICAgb2s6IGdldEF1dGhlbnRpY2F0ZWRNZXNzYWdlKHJlcS5yZW1vdGVfdXNlci5uYW1lKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcm91dGUucHV0KCcvLS91c2VyLzpvcmdfY291Y2hkYl91c2VyLzpfcmV2Py86cmV2aXNpb24/JywgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IG5hbWUsIHBhc3N3b3JkIH0gPSByZXEuYm9keTtcbiAgICBjb25zdCByZW1vdGVOYW1lID0gcmVxLnJlbW90ZV91c2VyLm5hbWU7XG5cbiAgICBpZiAoXy5pc05pbChyZW1vdGVOYW1lKSA9PT0gZmFsc2UgJiYgXy5pc05pbChuYW1lKSA9PT0gZmFsc2UgJiYgcmVtb3RlTmFtZSA9PT0gbmFtZSkge1xuICAgICAgYXV0aC5hdXRoZW50aWNhdGUobmFtZSwgcGFzc3dvcmQsIGFzeW5jIGZ1bmN0aW9uIGNhbGxiYWNrQXV0aGVudGljYXRlKGVyciwgdXNlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKHsgbmFtZSwgZXJyIH0sICdhdXRoZW50aWNhdGluZyBmb3IgdXNlciBAe3VzZXJuYW1lfSBmYWlsZWQuIEVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLlVOQVVUSE9SSVpFRCwgQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdG9yZWRSZW1vdGVVc2VyOiBSZW1vdGVVc2VyID0gY3JlYXRlUmVtb3RlVXNlcihuYW1lLCB1c2VyLmdyb3VwcyB8fCBbXSk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QXBpVG9rZW4oYXV0aCwgY29uZmlnLCByZXN0b3JlZFJlbW90ZVVzZXIsIHBhc3N3b3JkKTtcblxuICAgICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgICBvazogZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UocmVxLnJlbW90ZV91c2VyLm5hbWUpLFxuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsaWRhdGVQYXNzd29yZChwYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLkJBRF9SRVFVRVNULCBBUElfRVJST1IuUEFTU1dPUkRfU0hPUlQoKSkpO1xuICAgICAgfVxuXG4gICAgICBhdXRoLmFkZF91c2VyKG5hbWUsIHBhc3N3b3JkLCBhc3luYyBmdW5jdGlvbiAoZXJyLCB1c2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA+PSBIVFRQX1NUQVRVUy5CQURfUkVRVUVTVCAmJiBlcnIuc3RhdHVzIDwgSFRUUF9TVEFUVVMuSU5URVJOQUxfRVJST1IpIHtcbiAgICAgICAgICAgIC8vIFdpdGggbnBtIHJlZ2lzdGVyaW5nIGlzIHRoZSBzYW1lIGFzIGxvZ2dpbmcgaW4sXG4gICAgICAgICAgICAvLyBhbmQgbnBtIGFjY2VwdHMgb25seSBhbiA0MDkgZXJyb3IuXG4gICAgICAgICAgICAvLyBTbywgY2hhbmdpbmcgc3RhdHVzIGNvZGUgaGVyZS5cbiAgICAgICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKGVyci5zdGF0dXMsIGVyci5tZXNzYWdlKSB8fCBFcnJvckNvZGUuZ2V0Q29uZmxpY3QoZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmFtZSAmJiBwYXNzd29yZCA/IGF3YWl0IGdldEFwaVRva2VuKGF1dGgsIGNvbmZpZywgdXNlciwgcGFzc3dvcmQpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgICBvazogYHVzZXIgJyR7cmVxLmJvZHkubmFtZX0nIGNyZWF0ZWRgLFxuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGUuZGVsZXRlKCcvLS91c2VyL3Rva2VuLyonLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuT0spO1xuICAgIG5leHQoe1xuICAgICAgb2s6IEFQSV9NRVNTQUdFLkxPR0dFRF9PVVQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIHBsYWNlaG9sZGVyICdjYXVzZSBucG0gcmVxdWlyZSB0byBiZSBhdXRoZW50aWNhdGVkIHRvIHB1Ymxpc2hcbiAgLy8gd2UgZG8gbm90IGRvIGFueSByZWFsIGF1dGhlbnRpY2F0aW9uIHlldFxuICByb3V0ZS5wb3N0KCcvX3Nlc3Npb24nLCBDb29raWVzLmV4cHJlc3MoKSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgcmVzLmNvb2tpZXMuc2V0KCdBdXRoU2Vzc2lvbicsIFN0cmluZyhNYXRoLnJhbmRvbSgpKSwgY3JlYXRlU2Vzc2lvblRva2VuKCkpO1xuXG4gICAgbmV4dCh7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIG5hbWU6ICdzb21lYm9keScsXG4gICAgICByb2xlczogW10sXG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|
|
110
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3VzZXIudHMiXSwibmFtZXMiOlsicm91dGUiLCJhdXRoIiwiY29uZmlnIiwidXNlclJvdXRlciIsImV4cHJlc3MiLCJSb3V0ZXIiLCJnZXQiLCJ1c2VyUmF0ZUxpbWl0IiwicmVxIiwicmVzIiwibmV4dCIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiT0siLCJvayIsInJlbW90ZV91c2VyIiwibmFtZSIsInB1dCIsInBhc3N3b3JkIiwiYm9keSIsInJlbW90ZU5hbWUiLCJfIiwiaXNOaWwiLCJhdXRoZW50aWNhdGUiLCJjYWxsYmFja0F1dGhlbnRpY2F0ZSIsImVyciIsInVzZXIiLCJsb2dnZXIiLCJlcnJvciIsIkVycm9yQ29kZSIsImdldENvZGUiLCJVTkFVVEhPUklaRUQiLCJBUElfRVJST1IiLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJyZXN0b3JlZFJlbW90ZVVzZXIiLCJncm91cHMiLCJ0b2tlbiIsIkNSRUFURUQiLCJzZXQiLCJIRUFERVJTIiwiQ0FDSEVfQ09OVFJPTCIsIkJBRF9SRVFVRVNUIiwiUEFTU1dPUkRfU0hPUlQiLCJhZGRfdXNlciIsIklOVEVSTkFMX0VSUk9SIiwibWVzc2FnZSIsImdldENvbmZsaWN0IiwidW5kZWZpbmVkIiwiZGVsZXRlIiwiQVBJX01FU1NBR0UiLCJMT0dHRURfT1VUIiwicG9zdCIsIkNvb2tpZXMiLCJjb29raWVzIiwiU3RyaW5nIiwiTWF0aCIsInJhbmRvbSIsInJvbGVzIiwidXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFFZSxrQkFBVUEsS0FBVixFQUF5QkMsSUFBekIsRUFBc0NDLE1BQXRDLEVBQTREO0FBQ3pFO0FBQ0EsUUFBTUMsVUFBVSxHQUFHQyxpQkFBUUMsTUFBUixFQUFuQjs7QUFFQUYsRUFBQUEsVUFBVSxDQUFDRyxHQUFYLENBQWUsMkJBQWYs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LE9BQVIsRUFBN0IsRUFBZ0QsVUFBVUksR0FBVixFQUErQkMsR0FBL0IsRUFBcURDLElBQXJELEVBQW1GO0FBQ2pJRCxJQUFBQSxHQUFHLENBQUM0QyxPQUFKLENBQVlmLEdBQVosQ0FBZ0IsYUFBaEIsRUFBK0JnQixNQUFNLENBQUNDLElBQUksQ0FBQ0MsTUFBTCxFQUFELENBQXJDLEVBQXNELG9DQUF0RDtBQUVBOUMsSUFBQUEsSUFBSSxDQUFDO0FBQ0hJLE1BQUFBLEVBQUUsRUFBRSxJQUREO0FBRUhFLE1BQUFBLElBQUksRUFBRSxVQUZIO0FBR0h5QyxNQUFBQSxLQUFLLEVBQUU7QUFISixLQUFELENBQUo7QUFLRCxHQVJEO0FBVUF6RCxFQUFBQSxLQUFLLENBQUMwRCxHQUFOLENBQVV2RCxVQUFWO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnY29va2llcyc7XG5cbmltcG9ydCB7IENvbmZpZywgUmVtb3RlVXNlciB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IGV4cHJlc3MsIHsgUmVzcG9uc2UsIFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgQVBJX01FU1NBR0UsIEhFQURFUlMsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjcmVhdGVSZW1vdGVVc2VyLCBjcmVhdGVTZXNzaW9uVG9rZW4sIGdldEFwaVRva2VuLCBnZXRBdXRoZW50aWNhdGVkTWVzc2FnZSwgdmFsaWRhdGVQYXNzd29yZCB9IGZyb20gJy4uLy4uLy4uL2xpYi9hdXRoLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL2xpYi9sb2dnZXInO1xuXG5pbXBvcnQgeyAkUmVxdWVzdEV4dGVuZCwgJFJlc3BvbnNlRXh0ZW5kLCAkTmV4dEZ1bmN0aW9uVmVyLCBJQXV0aCB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGxpbWl0ZXIgfSBmcm9tICcuLi8uLi9yYXRlLWxpbWl0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocm91dGU6IFJvdXRlciwgYXV0aDogSUF1dGgsIGNvbmZpZzogQ29uZmlnKTogdm9pZCB7XG4gIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICBjb25zdCB1c2VyUm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcblxuICB1c2VyUm91dGVyLmdldCgnLy0vdXNlci86b3JnX2NvdWNoZGJfdXNlcicsIGxpbWl0ZXIoY29uZmlnPy51c2VyUmF0ZUxpbWl0KSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLk9LKTtcbiAgICBuZXh0KHtcbiAgICAgIG9rOiBnZXRBdXRoZW50aWNhdGVkTWVzc2FnZShyZXEucmVtb3RlX3VzZXIubmFtZSksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHVzZXJSb3V0ZXIucHV0KCcvLS91c2VyLzpvcmdfY291Y2hkYl91c2VyLzpfcmV2Py86cmV2aXNpb24/JywgbGltaXRlcihjb25maWc/LnVzZXJSYXRlTGltaXQpLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgbmFtZSwgcGFzc3dvcmQgfSA9IHJlcS5ib2R5O1xuICAgIGNvbnN0IHJlbW90ZU5hbWUgPSByZXEucmVtb3RlX3VzZXIubmFtZTtcblxuICAgIGlmIChfLmlzTmlsKHJlbW90ZU5hbWUpID09PSBmYWxzZSAmJiBfLmlzTmlsKG5hbWUpID09PSBmYWxzZSAmJiByZW1vdGVOYW1lID09PSBuYW1lKSB7XG4gICAgICBhdXRoLmF1dGhlbnRpY2F0ZShuYW1lLCBwYXNzd29yZCwgYXN5bmMgZnVuY3Rpb24gY2FsbGJhY2tBdXRoZW50aWNhdGUoZXJyLCB1c2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoeyBuYW1lLCBlcnIgfSwgJ2F1dGhlbnRpY2F0aW5nIGZvciB1c2VyIEB7dXNlcm5hbWV9IGZhaWxlZC4gRXJyb3I6IEB7ZXJyLm1lc3NhZ2V9Jyk7XG4gICAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVELCBBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN0b3JlZFJlbW90ZVVzZXI6IFJlbW90ZVVzZXIgPSBjcmVhdGVSZW1vdGVVc2VyKG5hbWUsIHVzZXIuZ3JvdXBzIHx8IFtdKTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRBcGlUb2tlbihhdXRoLCBjb25maWcsIHJlc3RvcmVkUmVtb3RlVXNlciwgcGFzc3dvcmQpO1xuXG4gICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICAgIHJlcy5zZXQoSEVBREVSUy5DQUNIRV9DT05UUk9MLCAnbm8tY2FjaGUsIG5vLXN0b3JlJyk7XG4gICAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgICBvazogZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UocmVxLnJlbW90ZV91c2VyLm5hbWUpLFxuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsaWRhdGVQYXNzd29yZChwYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLkJBRF9SRVFVRVNULCBBUElfRVJST1IuUEFTU1dPUkRfU0hPUlQoKSkpO1xuICAgICAgfVxuXG4gICAgICBhdXRoLmFkZF91c2VyKG5hbWUsIHBhc3N3b3JkLCBhc3luYyBmdW5jdGlvbiAoZXJyLCB1c2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA+PSBIVFRQX1NUQVRVUy5CQURfUkVRVUVTVCAmJiBlcnIuc3RhdHVzIDwgSFRUUF9TVEFUVVMuSU5URVJOQUxfRVJST1IpIHtcbiAgICAgICAgICAgIC8vIFdpdGggbnBtIHJlZ2lzdGVyaW5nIGlzIHRoZSBzYW1lIGFzIGxvZ2dpbmcgaW4sXG4gICAgICAgICAgICAvLyBhbmQgbnBtIGFjY2VwdHMgb25seSBhbiA0MDkgZXJyb3IuXG4gICAgICAgICAgICAvLyBTbywgY2hhbmdpbmcgc3RhdHVzIGNvZGUgaGVyZS5cbiAgICAgICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKGVyci5zdGF0dXMsIGVyci5tZXNzYWdlKSB8fCBFcnJvckNvZGUuZ2V0Q29uZmxpY3QoZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmFtZSAmJiBwYXNzd29yZCA/IGF3YWl0IGdldEFwaVRva2VuKGF1dGgsIGNvbmZpZywgdXNlciwgcGFzc3dvcmQpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICAgIHJlcy5zZXQoSEVBREVSUy5DQUNIRV9DT05UUk9MLCAnbm8tY2FjaGUsIG5vLXN0b3JlJyk7XG4gICAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgICBvazogYHVzZXIgJyR7cmVxLmJvZHkubmFtZX0nIGNyZWF0ZWRgLFxuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXNlclJvdXRlci5kZWxldGUoJy8tL3VzZXIvdG9rZW4vKicsIGxpbWl0ZXIoY29uZmlnPy51c2VyUmF0ZUxpbWl0KSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLk9LKTtcbiAgICBuZXh0KHtcbiAgICAgIG9rOiBBUElfTUVTU0FHRS5MT0dHRURfT1VULFxuICAgIH0pO1xuICB9KTtcblxuICAvLyBwbGFjZWhvbGRlciAnY2F1c2UgbnBtIHJlcXVpcmUgdG8gYmUgYXV0aGVudGljYXRlZCB0byBwdWJsaXNoXG4gIC8vIHdlIGRvIG5vdCBkbyBhbnkgcmVhbCBhdXRoZW50aWNhdGlvbiB5ZXRcbiAgdXNlclJvdXRlci5wb3N0KCcvX3Nlc3Npb24nLCBDb29raWVzLmV4cHJlc3MoKSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgcmVzLmNvb2tpZXMuc2V0KCdBdXRoU2Vzc2lvbicsIFN0cmluZyhNYXRoLnJhbmRvbSgpKSwgY3JlYXRlU2Vzc2lvblRva2VuKCkpO1xuXG4gICAgbmV4dCh7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIG5hbWU6ICdzb21lYm9keScsXG4gICAgICByb2xlczogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJvdXRlLnVzZSh1c2VyUm91dGVyKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _express = require("express");
|
|
9
|
+
|
|
10
|
+
var _profile = _interopRequireDefault(require("./profile"));
|
|
11
|
+
|
|
12
|
+
var _token = _interopRequireDefault(require("./token"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
var _default = (auth, storage, config) => {
|
|
17
|
+
const route = (0, _express.Router)();
|
|
18
|
+
/* eslint new-cap: 0 */
|
|
19
|
+
|
|
20
|
+
route.use('/-/npm/v1/', (0, _profile.default)(auth, config));
|
|
21
|
+
route.use('/-/npm/v1/', (0, _token.default)(auth, storage, config));
|
|
22
|
+
return route;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.default = _default;
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3YxL2luZGV4LnRzIl0sIm5hbWVzIjpbImF1dGgiLCJzdG9yYWdlIiwiY29uZmlnIiwicm91dGUiLCJ1c2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7OztlQUVlLENBQUNBLElBQUQsRUFBT0MsT0FBUCxFQUFnQkMsTUFBaEIsS0FBMkI7QUFDeEMsUUFBTUMsS0FBSyxHQUFHLHNCQUFkO0FBQXdCOztBQUN4QkEsRUFBQUEsS0FBSyxDQUFDQyxHQUFOLENBQVUsWUFBVixFQUF3QixzQkFBUUosSUFBUixFQUFjRSxNQUFkLENBQXhCO0FBQ0FDLEVBQUFBLEtBQUssQ0FBQ0MsR0FBTixDQUFVLFlBQVYsRUFBd0Isb0JBQU1KLElBQU4sRUFBWUMsT0FBWixFQUFxQkMsTUFBckIsQ0FBeEI7QUFDQSxTQUFPQyxLQUFQO0FBQ0QsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBwcm9maWxlIGZyb20gJy4vcHJvZmlsZSc7XG5pbXBvcnQgdG9rZW4gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IChhdXRoLCBzdG9yYWdlLCBjb25maWcpID0+IHtcbiAgY29uc3Qgcm91dGUgPSBSb3V0ZXIoKTsgLyogZXNsaW50IG5ldy1jYXA6IDAgKi9cbiAgcm91dGUudXNlKCcvLS9ucG0vdjEvJywgcHJvZmlsZShhdXRoLCBjb25maWcpKTtcbiAgcm91dGUudXNlKCcvLS9ucG0vdjEvJywgdG9rZW4oYXV0aCwgc3RvcmFnZSwgY29uZmlnKSk7XG4gIHJldHVybiByb3V0ZTtcbn07XG4iXX0=
|
|
@@ -7,15 +7,22 @@ exports.default = _default;
|
|
|
7
7
|
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
9
|
|
|
10
|
+
var _express = require("express");
|
|
11
|
+
|
|
10
12
|
var _constants = require("../../../../lib/constants");
|
|
11
13
|
|
|
12
14
|
var _utils = require("../../../../lib/utils");
|
|
13
15
|
|
|
14
16
|
var _authUtils = require("../../../../lib/auth-utils");
|
|
15
17
|
|
|
18
|
+
var _rateLimiter = require("../../../rate-limiter");
|
|
19
|
+
|
|
16
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
21
|
|
|
18
|
-
function _default(
|
|
22
|
+
function _default(auth, config) {
|
|
23
|
+
const profileRoute = (0, _express.Router)();
|
|
24
|
+
/* eslint new-cap: 0 */
|
|
25
|
+
|
|
19
26
|
function buildProfile(name) {
|
|
20
27
|
return {
|
|
21
28
|
tfa: false,
|
|
@@ -29,7 +36,7 @@ function _default(route, auth) {
|
|
|
29
36
|
};
|
|
30
37
|
}
|
|
31
38
|
|
|
32
|
-
|
|
39
|
+
profileRoute.get('/user', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
|
|
33
40
|
if (_lodash.default.isNil(req.remote_user.name) === false) {
|
|
34
41
|
return next(buildProfile(req.remote_user.name));
|
|
35
42
|
}
|
|
@@ -39,7 +46,7 @@ function _default(route, auth) {
|
|
|
39
46
|
message: _constants.API_ERROR.MUST_BE_LOGGED
|
|
40
47
|
});
|
|
41
48
|
});
|
|
42
|
-
|
|
49
|
+
profileRoute.post('/user', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
|
|
43
50
|
if (_lodash.default.isNil(req.remote_user.name)) {
|
|
44
51
|
res.status(_constants.HTTP_STATUS.UNAUTHORIZED);
|
|
45
52
|
return next({
|
|
@@ -79,5 +86,6 @@ function _default(route, auth) {
|
|
|
79
86
|
return next(_utils.ErrorCode.getCode(_constants.HTTP_STATUS.INTERNAL_ERROR, _constants.APP_ERROR.PROFILE_ERROR));
|
|
80
87
|
}
|
|
81
88
|
});
|
|
89
|
+
return profileRoute;
|
|
82
90
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3YxL3Byb2ZpbGUudHMiXSwibmFtZXMiOlsiYXV0aCIsImNvbmZpZyIsInByb2ZpbGVSb3V0ZSIsImJ1aWxkUHJvZmlsZSIsIm5hbWUiLCJ0ZmEiLCJlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIiwiY3JlYXRlZCIsInVwZGF0ZWQiLCJjaWRyX3doaXRlbGlzdCIsImZ1bGxuYW1lIiwiZ2V0IiwidXNlclJhdGVMaW1pdCIsInJlcSIsInJlcyIsIm5leHQiLCJfIiwiaXNOaWwiLCJyZW1vdGVfdXNlciIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiVU5BVVRIT1JJWkVEIiwibWVzc2FnZSIsIkFQSV9FUlJPUiIsIk1VU1RfQkVfTE9HR0VEIiwicG9zdCIsInBhc3N3b3JkIiwiYm9keSIsIm5ldyIsIkVycm9yQ29kZSIsImdldENvZGUiLCJQQVNTV09SRF9TSE9SVCIsImNoYW5nZVBhc3N3b3JkIiwib2xkIiwiZXJyIiwiaXNVcGRhdGVkIiwiaXNOdWxsIiwiZ2V0Q29uZmxpY3QiLCJnZXRJbnRlcm5hbEVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiU0VSVklDRV9VTkFWQUlMQUJMRSIsIlNVUFBPUlRfRVJST1JTIiwiVEZBX0RJU0FCTEVEIiwiSU5URVJOQUxfRVJST1IiLCJBUFBfRVJST1IiLCJQUk9GSUxFX0VSUk9SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFhZSxrQkFBVUEsSUFBVixFQUF1QkMsTUFBdkIsRUFBdUM7QUFDcEQsUUFBTUMsWUFBWSxHQUFHLHNCQUFyQjtBQUErQjs7QUFDL0IsV0FBU0MsWUFBVCxDQUFzQkMsSUFBdEIsRUFBNkM7QUFDM0MsV0FBTztBQUNMQyxNQUFBQSxHQUFHLEVBQUUsS0FEQTtBQUVMRCxNQUFBQSxJQUZLO0FBR0xFLE1BQUFBLEtBQUssRUFBRSxFQUhGO0FBSUxDLE1BQUFBLGNB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NEI7QUFDakMsYUFBT1csSUFBSSxDQUFDYyxpQkFBVUMsT0FBVixDQUFrQlYsdUJBQVlvQixtQkFBOUIsRUFBbURDLDBCQUFlQyxZQUFsRSxDQUFELENBQVg7QUFDRCxLQUZNLE1BRUE7QUFDTCxhQUFPM0IsSUFBSSxDQUFDYyxpQkFBVUMsT0FBVixDQUFrQlYsdUJBQVl1QixjQUE5QixFQUE4Q0MscUJBQVVDLGFBQXhELENBQUQsQ0FBWDtBQUNEO0FBQ0YsR0FqQ0Q7QUFtQ0EsU0FBTzVDLFlBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZXNwb25zZSwgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIEFQUF9FUlJPUiwgSFRUUF9TVEFUVVMsIFNVUFBPUlRfRVJST1JTIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXNzd29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9hdXRoLXV0aWxzJztcblxuaW1wb3J0IHsgJE5leHRGdW5jdGlvblZlciwgJFJlcXVlc3RFeHRlbmQsIElBdXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbGltaXRlciB9IGZyb20gJy4uLy4uLy4uL3JhdGUtbGltaXRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZSB7XG4gIHRmYTogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBlbWFpbF92ZXJpZmllZDogYm9vbGVhbjtcbiAgY3JlYXRlZDogc3RyaW5nO1xuICB1cGRhdGVkOiBzdHJpbmc7XG4gIGNpZHJfd2hpdGVsaXN0OiBzdHJpbmdbXSB8IG51bGw7XG4gIGZ1bGxuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChhdXRoOiBJQXV0aCwgY29uZmlnKTogUm91dGVyIHtcbiAgY29uc3QgcHJvZmlsZVJvdXRlID0gUm91dGVyKCk7IC8qIGVzbGludCBuZXctY2FwOiAwICovXG4gIGZ1bmN0aW9uIGJ1aWxkUHJvZmlsZShuYW1lOiBzdHJpbmcpOiBQcm9maWxlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGZhOiBmYWxzZSxcbiAgICAgIG5hbWUsXG4gICAgICBlbWFpbDogJycsXG4gICAgICBlbWFpbF92ZXJpZmllZDogZmFsc2UsXG4gICAgICBjcmVhdGVkOiAnJyxcbiAgICAgIHVwZGF0ZWQ6ICcnLFxuICAgICAgY2lkcl93aGl0ZWxpc3Q6IG51bGwsXG4gICAgICBmdWxsbmFtZTogJycsXG4gICAgfTtcbiAgfVxuXG4gIHByb2ZpbGVSb3V0ZS5nZXQoJy91c2VyJywgbGltaXRlcihjb25maWc/LnVzZXJSYXRlTGltaXQpLCBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGlmIChfLmlzTmlsKHJlcS5yZW1vdGVfdXNlci5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBuZXh0KGJ1aWxkUHJvZmlsZShyZXEucmVtb3RlX3VzZXIubmFtZSkpO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVEKTtcbiAgICByZXR1cm4gbmV4dCh7XG4gICAgICBtZXNzYWdlOiBBUElfRVJST1IuTVVTVF9CRV9MT0dHRUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHByb2ZpbGVSb3V0ZS5wb3N0KCcvdXNlcicsIGxpbWl0ZXIoY29uZmlnPy51c2VyUmF0ZUxpbWl0KSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpOiB2b2lkIHtcbiAgICBpZiAoXy5pc05pbChyZXEucmVtb3RlX3VzZXIubmFtZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVEKTtcbiAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgbWVzc2FnZTogQVBJX0VSUk9SLk1VU1RfQkVfTE9HR0VELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYXNzd29yZCwgdGZhIH0gPSByZXEuYm9keTtcbiAgICBjb25zdCB7IG5hbWUgfSA9IHJlcS5yZW1vdGVfdXNlcjtcblxuICAgIGlmIChfLmlzTmlsKHBhc3N3b3JkKSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmICh2YWxpZGF0ZVBhc3N3b3JkKHBhc3N3b3JkLm5ldykgPT09IGZhbHNlKSB7XG4gICAgICAgIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0Q29kZShIVFRQX1NUQVRVUy5VTkFVVEhPUklaRUQsIEFQSV9FUlJPUi5QQVNTV09SRF9TSE9SVCgpKSk7XG4gICAgICAgIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICAgICAgfVxuXG4gICAgICBhdXRoLmNoYW5nZVBhc3N3b3JkKG5hbWUsIHBhc3N3b3JkLm9sZCwgcGFzc3dvcmQubmV3LCAoZXJyLCBpc1VwZGF0ZWQpOiAkTmV4dEZ1bmN0aW9uVmVyID0+IHtcbiAgICAgICAgaWYgKF8uaXNOdWxsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldENvZGUoZXJyLnN0YXR1cywgZXJyLm1lc3NhZ2UpIHx8IEVycm9yQ29kZS5nZXRDb25mbGljdChlcnIubWVzc2FnZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVXBkYXRlZCkge1xuICAgICAgICAgIHJldHVybiBuZXh0KGJ1aWxkUHJvZmlsZShyZXEucmVtb3RlX3VzZXIubmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5JTlRFUk5BTF9TRVJWRVJfRVJST1IpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXy5pc05pbCh0ZmEpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuU0VSVklDRV9VTkFWQUlMQUJMRSwgU1VQUE9SVF9FUlJPUlMuVEZBX0RJU0FCTEVEKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SLCBBUFBfRVJST1IuUFJPRklMRV9FUlJPUikpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHByb2ZpbGVSb3V0ZTtcbn1cbiJdfQ==
|
|
@@ -9,6 +9,8 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
9
9
|
|
|
10
10
|
var _debug = _interopRequireDefault(require("debug"));
|
|
11
11
|
|
|
12
|
+
var _express = require("express");
|
|
13
|
+
|
|
12
14
|
var _constants = require("../../../../lib/constants");
|
|
13
15
|
|
|
14
16
|
var _utils = require("../../../../lib/utils");
|
|
@@ -19,6 +21,8 @@ var _cryptoUtils = require("../../../../lib/crypto-utils");
|
|
|
19
21
|
|
|
20
22
|
var _logger = require("../../../../lib/logger");
|
|
21
23
|
|
|
24
|
+
var _rateLimiter = require("../../../rate-limiter");
|
|
25
|
+
|
|
22
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
27
|
|
|
24
28
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -36,8 +40,11 @@ function normalizeToken(token) {
|
|
|
36
40
|
} // https://github.com/npm/npm-profile/blob/latest/lib/index.js
|
|
37
41
|
|
|
38
42
|
|
|
39
|
-
function _default(
|
|
40
|
-
|
|
43
|
+
function _default(auth, storage, config) {
|
|
44
|
+
const tokenRoute = (0, _express.Router)();
|
|
45
|
+
/* eslint new-cap: 0 */
|
|
46
|
+
|
|
47
|
+
tokenRoute.get('/tokens', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), async function (req, res, next) {
|
|
41
48
|
const {
|
|
42
49
|
name
|
|
43
50
|
} = req.remote_user;
|
|
@@ -68,7 +75,7 @@ function _default(route, auth, storage, config) {
|
|
|
68
75
|
|
|
69
76
|
return next(_utils.ErrorCode.getUnauthorized());
|
|
70
77
|
});
|
|
71
|
-
|
|
78
|
+
tokenRoute.post('/tokens', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
|
|
72
79
|
const {
|
|
73
80
|
password,
|
|
74
81
|
readonly,
|
|
@@ -115,6 +122,7 @@ function _default(route, auth, storage, config) {
|
|
|
115
122
|
};
|
|
116
123
|
await storage.saveToken(saveToken);
|
|
117
124
|
debug('token %o was created for user %o', key, name);
|
|
125
|
+
res.set(_constants.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
|
|
118
126
|
return next(normalizeToken({
|
|
119
127
|
token,
|
|
120
128
|
user: name,
|
|
@@ -132,7 +140,7 @@ function _default(route, auth, storage, config) {
|
|
|
132
140
|
}
|
|
133
141
|
});
|
|
134
142
|
});
|
|
135
|
-
|
|
143
|
+
tokenRoute.delete('/tokens/token/:tokenKey', (0, _rateLimiter.limiter)(config === null || config === void 0 ? void 0 : config.userRateLimit), async (req, res, next) => {
|
|
136
144
|
const {
|
|
137
145
|
params: {
|
|
138
146
|
tokenKey
|
|
@@ -165,5 +173,6 @@ function _default(route, auth, storage, config) {
|
|
|
165
173
|
|
|
166
174
|
return next(_utils.ErrorCode.getUnauthorized());
|
|
167
175
|
});
|
|
176
|
+
return tokenRoute;
|
|
168
177
|
}
|
|
169
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3YxL3Rva2VuLnRzIl0sIm5hbWVzIjpbImRlYnVnIiwibm9ybWFsaXplVG9rZW4iLCJ0b2tlbiIsImNyZWF0ZWQiLCJEYXRlIiwidG9JU09TdHJpbmciLCJyb3V0ZSIsImF1dGgiLCJzdG9yYWdlIiwiY29uZmlnIiwiZ2V0IiwicmVxIiwicmVzIiwibmV4dCIsIm5hbWUiLCJyZW1vdGVfdXNlciIsIl8iLCJpc05pbCIsInRva2VucyIsInJlYWRUb2tlbnMiLCJ1c2VyIiwidG90YWxUb2tlbnMiLCJsZW5ndGgiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIk9LIiwib2JqZWN0cyIsIm1hcCIsInVybHMiLCJlcnJvciIsImxvZ2dlciIsIm1zZyIsIkVycm9yQ29kZSIsImdldENvZGUiLCJJTlRFUk5BTF9FUlJPUiIsIm1lc3NhZ2UiLCJnZXRVbmF1dGhvcml6ZWQiLCJwb3N0IiwicGFzc3dvcmQiLCJyZWFkb25seSIsImNpZHJfd2hpdGVsaXN0IiwiYm9keSIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJCQURfREFUQSIsIlNVUFBPUlRfRVJST1JTIiwiUEFSQU1FVEVSU19OT1RfVkFMSUQiLCJhdXRoZW50aWNhdGUiLCJlcnIiLCJlcnJvckNvZGUiLCJVTkFVVEhPUklaRUQiLCJpc0Z1bmN0aW9uIiwic2F2ZVRva2VuIiwiTk9UX0lNUExFTUVOVEVEIiwiU1RPUkFHRV9OT1RfSU1QTEVNRU5UIiwia2V5IiwibWFza2VkVG9rZW4iLCJnZXRUaW1lIiwiY2lkciIsImRlbGV0ZSIsInBhcmFtcyIsInRva2VuS2V5IiwiZGVsZXRlVG9rZW4iLCJpbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFJQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsaUJBQVgsQ0FBZDs7QUFLQSxTQUFTQyxjQUFULENBQXdCQyxLQUF4QixF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WVUsY0FBOUIsRUFBOENMLEtBQUssQ0FBQ00sT0FBcEQsQ0FBRCxDQUFYO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPdEIsSUFBSSxDQUFDbUIsaUJBQVVJLGVBQVYsRUFBRCxDQUFYO0FBQ0QsR0FsQkQ7QUFtQkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgUmVzcG9uc2UsIFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgQ29uZmlnLCBSZW1vdGVVc2VyLCBUb2tlbiB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgSFRUUF9TVEFUVVMsIFNVUFBPUlRfRVJST1JTIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIG1hc2sgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QXBpVG9rZW4gfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvYXV0aC11dGlscyc7XG5pbXBvcnQgeyBzdHJpbmdUb01ENSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2xvZ2dlcic7XG5cbmltcG9ydCB7ICROZXh0RnVuY3Rpb25WZXIsICRSZXF1ZXN0RXh0ZW5kLCBJQXV0aCwgSVN0b3JhZ2VIYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzp0b2tlbicpO1xuZXhwb3J0IHR5cGUgTm9ybWFsaXplVG9rZW4gPSBUb2tlbiAmIHtcbiAgY3JlYXRlZDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplVG9rZW4odG9rZW46IFRva2VuKTogTm9ybWFsaXplVG9rZW4ge1xuICByZXR1cm4ge1xuICAgIC4uLnRva2VuLFxuICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKHRva2VuLmNyZWF0ZWQpLnRvSVNPU3RyaW5nKCksXG4gIH07XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbnBtLXByb2ZpbGUvYmxvYi9sYXRlc3QvbGliL2luZGV4LmpzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocm91dGU6IFJvdXRlciwgYXV0aDogSUF1dGgsIHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlciwgY29uZmlnOiBDb25maWcpOiB2b2lkIHtcbiAgcm91dGUuZ2V0KCcvLS9ucG0vdjEvdG9rZW5zJywgYXN5bmMgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IHJlcS5yZW1vdGVfdXNlcjtcblxuICAgIGlmIChfLmlzTmlsKG5hbWUpID09PSBmYWxzZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgc3RvcmFnZS5yZWFkVG9rZW5zKHsgdXNlcjogbmFtZSB9KTtcbiAgICAgICAgY29uc3QgdG90YWxUb2tlbnMgPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBkZWJ1ZygndG9rZW4gbGlzdCByZXRyaWV2ZWQ6ICVvJywgdG90YWxUb2tlbnMpO1xuICAgICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLk9LKTtcbiAgICAgICAgcmV0dXJuIG5leHQoe1xuICAgICAgICAgIG9iamVjdHM6IHRva2Vucy5tYXAobm9ybWFsaXplVG9rZW4pLFxuICAgICAgICAgIHVybHM6IHtcbiAgICAgICAgICAgIG5leHQ6ICcnLCAvLyBUT0RPOiBwYWdpbmF0aW9uP1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKHsgZXJyb3I6IGVycm9yLm1zZyB9LCAndG9rZW4gbGlzdCBoYXMgZmFpbGVkOiBAe2Vycm9yfScpO1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0Q29kZShIVFRQX1NUQVRVUy5JTlRFUk5BTF9FUlJPUiwgZXJyb3IubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0VW5hdXRob3JpemVkKCkpO1xuICB9KTtcblxuICByb3V0ZS5wb3N0KCcvLS9ucG0vdjEvdG9rZW5zJywgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpIHtcbiAgICBjb25zdCB7IHBhc3N3b3JkLCByZWFkb25seSwgY2lkcl93aGl0ZWxpc3QgfSA9IHJlcS5ib2R5O1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gcmVxLnJlbW90ZV91c2VyO1xuXG4gICAgaWYgKCFfLmlzQm9vbGVhbihyZWFkb25seSkgfHwgIV8uaXNBcnJheShjaWRyX3doaXRlbGlzdCkpIHtcbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLkJBRF9EQVRBLCBTVVBQT1JUX0VSUk9SUy5QQVJBTUVURVJTX05PVF9WQUxJRCkpO1xuICAgIH1cblxuICAgIGF1dGguYXV0aGVudGljYXRlKG5hbWUsIHBhc3N3b3JkLCBhc3luYyAoZXJyLCB1c2VyOiBSZW1vdGVVc2VyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGVyci5tZXNzYWdlID8gSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVEIDogSFRUUF9TVEFUVVMuSU5URVJOQUxfRVJST1I7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKGVycm9yQ29kZSwgZXJyLm1lc3NhZ2UpKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcblxuICAgICAgaWYgKCFfLmlzRnVuY3Rpb24oc3RvcmFnZS5zYXZlVG9rZW4pKSB7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLk5PVF9JTVBMRU1FTlRFRCwgU1VQUE9SVF9FUlJPUlMuU1RPUkFHRV9OT1RfSU1QTEVNRU5UKSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QXBpVG9rZW4oYXV0aCwgY29uZmlnLCB1c2VyLCBwYXNzd29yZCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHN0cmluZ1RvTUQ1KHRva2VuKTtcbiAgICAgICAgLy8gVE9ETzogdXNlIGEgdXRpbGl0eSBoZXJlXG4gICAgICAgIGNvbnN0IG1hc2tlZFRva2VuID0gbWFzayh0b2tlbiwgNSk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2lkcl93aGl0ZWxpc3Q6IGlzIG5vdCBiZWluZyB1c2VkLCB3ZSBwYXNzIGl0IHRocm91Z2hcbiAgICAgICAgICogdG9rZW46IHdlIGRvIG5vdCBzdG9yZSB0aGUgcmVhbCB0b2tlbiAoaXQgaXMgZ2VuZXJhdGVkIG9uY2UgYW5kIHJldHJpZXZlZCB0byB0aGUgdXNlciksIGp1c3QgYSBtYXNrIG9mIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgc2F2ZVRva2VuOiBUb2tlbiA9IHtcbiAgICAgICAgICB1c2VyOiBuYW1lLFxuICAgICAgICAgIHRva2VuOiBtYXNrZWRUb2tlbixcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY2lkcjogY2lkcl93aGl0ZWxpc3QsXG4gICAgICAgICAgcmVhZG9ubHksXG4gICAgICAgICAgY3JlYXRlZCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBzdG9yYWdlLnNhdmVUb2tlbihzYXZlVG9rZW4pO1xuICAgICAgICBkZWJ1ZygndG9rZW4gJW8gd2FzIGNyZWF0ZWQgZm9yIHVzZXIgJW8nLCBrZXksIG5hbWUpO1xuICAgICAgICByZXR1cm4gbmV4dChcbiAgICAgICAgICBub3JtYWxpemVUb2tlbih7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHVzZXI6IG5hbWUsXG4gICAgICAgICAgICBrZXk6IHNhdmVUb2tlbi5rZXksXG4gICAgICAgICAgICBjaWRyOiBjaWRyX3doaXRlbGlzdCxcbiAgICAgICAgICAgIHJlYWRvbmx5LFxuICAgICAgICAgICAgY3JlYXRlZDogc2F2ZVRva2VuLmNyZWF0ZWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcih7IGVycm9yOiBlcnJvci5tc2cgfSwgJ3Rva2VuIGNyZWF0aW9uIGhhcyBmYWlsZWQ6IEB7ZXJyb3J9Jyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SLCBlcnJvci5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJvdXRlLmRlbGV0ZSgnLy0vbnBtL3YxL3Rva2Vucy90b2tlbi86dG9rZW5LZXknLCBhc3luYyAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtczogeyB0b2tlbktleSB9LFxuICAgIH0gPSByZXE7XG4gICAgY29uc3QgeyBuYW1lIH0gPSByZXEucmVtb3RlX3VzZXI7XG5cbiAgICBpZiAoXy5pc05pbChuYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgIGRlYnVnKCclbyBoYXMgcmVxdWVzdGVkIHJlbW92ZSBhIHRva2VuJywgbmFtZSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdG9yYWdlLmRlbGV0ZVRva2VuKG5hbWUsIHRva2VuS2V5KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oeyB0b2tlbktleSwgbmFtZSB9LCAndG9rZW4gaWQgQHt0b2tlbktleX0gd2FzIHJldm9rZWQgZm9yIHVzZXIgQHtuYW1lfScpO1xuICAgICAgICByZXR1cm4gbmV4dCh7fSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoeyBlcnJvcjogZXJyb3IubXNnIH0sICd0b2tlbiBjcmVhdGlvbiBoYXMgZmFpbGVkOiBAe2Vycm9yfScpO1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0Q29kZShIVFRQX1NUQVRVUy5JTlRFUk5BTF9FUlJPUiwgZXJyb3IubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0VW5hdXRob3JpemVkKCkpO1xuICB9KTtcbn1cbiJdfQ==
|
|
178
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvZW5kcG9pbnQvYXBpL3YxL3Rva2VuLnRzIl0sIm5hbWVzIjpbImRlYnVnIiwibm9ybWFsaXplVG9rZW4iLCJ0b2tlbiIsImNyZWF0ZWQiLCJEYXRlIiwidG9JU09TdHJpbmciLCJhdXRoIiwic3RvcmFnZSIsImNvbmZpZyIsInRva2VuUm91dGUiLCJnZXQiLCJ1c2VyUmF0ZUxpbWl0IiwicmVxIiwicmVzIiwibmV4dCIsIm5hbWUiLCJyZW1vdGVfdXNlciIsIl8iLCJpc05pbCIsInRva2VucyIsInJlYWRUb2tlbnMiLCJ1c2VyIiwidG90YWxUb2tlbnMiLCJsZW5ndGgiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIk9LIiwib2JqZWN0cyIsIm1hcCIsInVybHMiLCJlcnJvciIsImxvZ2dlciIsIm1zZyIsIkVycm9yQ29kZSIsImdldENvZGUiLCJJTlRFUk5BTF9FUlJPUiIsIm1lc3NhZ2UiLCJnZXRVbmF1dGhvcml6ZWQiLCJwb3N0IiwicGFzc3dvcmQiLCJyZWFkb25seSIsImNpZHJfd2hpdGVsaXN0IiwiYm9keSIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJCQURfREFUQSIsIlNVUFBPUlRfRVJST1JTIiwiUEFSQU1FVEVSU19OT1RfVkFMSUQiLCJhdXRoZW50aWNhdGUiLCJlcnIiLCJlcnJvckNvZGUiLCJVTkFVVEhPUklaRUQiLCJpc0Z1bmN0aW9uIiwic2F2ZVRva2VuIiwiTk9UX0lNUExFTUVOVEVEIiwiU1RPUkFHRV9OT1RfSU1QTEVNRU5UIiwia2V5IiwibWFza2VkVG9rZW4iLCJnZXRUaW1lIiwiY2lkciIsInNldCIsIkhFQURFUlMiLCJDQUNIRV9DT05UUk9MIiwiZGVsZXRlIiwicGFyYW1zIiwidG9rZW5LZXkiLCJkZWxldGVUb2tlbiIsImluZm8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7Ozs7Ozs7OztBQUVB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RixjQUFNUixPQUFPLENBQUMyRCxXQUFSLENBQW9CbkQsSUFBcEIsRUFBMEJrRCxRQUExQixDQUFOOztBQUNBbEMsdUJBQU9vQyxJQUFQLENBQVk7QUFBRUYsVUFBQUEsUUFBRjtBQUFZbEQsVUFBQUE7QUFBWixTQUFaLEVBQWdDLG1EQUFoQzs7QUFDQSxlQUFPRCxJQUFJLENBQUMsRUFBRCxDQUFYO0FBQ0QsT0FKRCxDQUlFLE9BQU9nQixLQUFQLEVBQWM7QUFDZEMsdUJBQU9ELEtBQVAsQ0FBYTtBQUFFQSxVQUFBQSxLQUFLLEVBQUVBLEtBQUssQ0FBQ0U7QUFBZixTQUFiLEVBQW1DLHFDQUFuQzs7QUFDQSxlQUFPbEIsSUFBSSxDQUFDbUIsaUJBQVVDLE9BQVYsQ0FBa0JULHVCQUFZVSxjQUE5QixFQUE4Q0wsS0FBSyxDQUFDTSxPQUFwRCxDQUFELENBQVg7QUFDRDtBQUNGOztBQUNELFdBQU90QixJQUFJLENBQUNtQixpQkFBVUksZUFBVixFQUFELENBQVg7QUFDRCxHQWxCRDtBQW9CQSxTQUFPNUIsVUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IENvbmZpZywgUmVtb3RlVXNlciwgVG9rZW4gfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IEhFQURFUlMsIEhUVFBfU1RBVFVTLCBTVVBQT1JUX0VSUk9SUyB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBtYXNrIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IGdldEFwaVRva2VuIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgc3RyaW5nVG9NRDUgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9sb2dnZXInO1xuXG5pbXBvcnQgeyAkTmV4dEZ1bmN0aW9uVmVyLCAkUmVxdWVzdEV4dGVuZCwgSUF1dGgsIElTdG9yYWdlSGFuZGxlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGxpbWl0ZXIgfSBmcm9tICcuLi8uLi8uLi9yYXRlLWxpbWl0ZXInO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzp0b2tlbicpO1xuZXhwb3J0IHR5cGUgTm9ybWFsaXplVG9rZW4gPSBUb2tlbiAmIHtcbiAgY3JlYXRlZDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplVG9rZW4odG9rZW46IFRva2VuKTogTm9ybWFsaXplVG9rZW4ge1xuICByZXR1cm4ge1xuICAgIC4uLnRva2VuLFxuICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKHRva2VuLmNyZWF0ZWQpLnRvSVNPU3RyaW5nKCksXG4gIH07XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbnBtLXByb2ZpbGUvYmxvYi9sYXRlc3QvbGliL2luZGV4LmpzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYXV0aDogSUF1dGgsIHN0b3JhZ2U6IElTdG9yYWdlSGFuZGxlciwgY29uZmlnOiBDb25maWcpOiBSb3V0ZXIge1xuICBjb25zdCB0b2tlblJvdXRlID0gUm91dGVyKCk7IC8qIGVzbGludCBuZXctY2FwOiAwICovXG4gIHRva2VuUm91dGUuZ2V0KCcvdG9rZW5zJywgbGltaXRlcihjb25maWc/LnVzZXJSYXRlTGltaXQpLCBhc3luYyBmdW5jdGlvbiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcikge1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gcmVxLnJlbW90ZV91c2VyO1xuXG4gICAgaWYgKF8uaXNOaWwobmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBzdG9yYWdlLnJlYWRUb2tlbnMoeyB1c2VyOiBuYW1lIH0pO1xuICAgICAgICBjb25zdCB0b3RhbFRva2VucyA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGRlYnVnKCd0b2tlbiBsaXN0IHJldHJpZXZlZDogJW8nLCB0b3RhbFRva2Vucyk7XG4gICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuT0spO1xuICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgb2JqZWN0czogdG9rZW5zLm1hcChub3JtYWxpemVUb2tlbiksXG4gICAgICAgICAgdXJsczoge1xuICAgICAgICAgICAgbmV4dDogJycsIC8vIFRPRE86IHBhZ2luYXRpb24/XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoeyBlcnJvcjogZXJyb3IubXNnIH0sICd0b2tlbiBsaXN0IGhhcyBmYWlsZWQ6IEB7ZXJyb3J9Jyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SLCBlcnJvci5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRVbmF1dGhvcml6ZWQoKSk7XG4gIH0pO1xuXG4gIHRva2VuUm91dGUucG9zdCgnL3Rva2VucycsIGxpbWl0ZXIoY29uZmlnPy51c2VyUmF0ZUxpbWl0KSwgZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpIHtcbiAgICBjb25zdCB7IHBhc3N3b3JkLCByZWFkb25seSwgY2lkcl93aGl0ZWxpc3QgfSA9IHJlcS5ib2R5O1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gcmVxLnJlbW90ZV91c2VyO1xuXG4gICAgaWYgKCFfLmlzQm9vbGVhbihyZWFkb25seSkgfHwgIV8uaXNBcnJheShjaWRyX3doaXRlbGlzdCkpIHtcbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLkJBRF9EQVRBLCBTVVBQT1JUX0VSUk9SUy5QQVJBTUVURVJTX05PVF9WQUxJRCkpO1xuICAgIH1cblxuICAgIGF1dGguYXV0aGVudGljYXRlKG5hbWUsIHBhc3N3b3JkLCBhc3luYyAoZXJyLCB1c2VyOiBSZW1vdGVVc2VyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGVyci5tZXNzYWdlID8gSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVEIDogSFRUUF9TVEFUVVMuSU5URVJOQUxfRVJST1I7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKGVycm9yQ29kZSwgZXJyLm1lc3NhZ2UpKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcblxuICAgICAgaWYgKCFfLmlzRnVuY3Rpb24oc3RvcmFnZS5zYXZlVG9rZW4pKSB7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLk5PVF9JTVBMRU1FTlRFRCwgU1VQUE9SVF9FUlJPUlMuU1RPUkFHRV9OT1RfSU1QTEVNRU5UKSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QXBpVG9rZW4oYXV0aCwgY29uZmlnLCB1c2VyLCBwYXNzd29yZCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHN0cmluZ1RvTUQ1KHRva2VuKTtcbiAgICAgICAgLy8gVE9ETzogdXNlIGEgdXRpbGl0eSBoZXJlXG4gICAgICAgIGNvbnN0IG1hc2tlZFRva2VuID0gbWFzayh0b2tlbiwgNSk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2lkcl93aGl0ZWxpc3Q6IGlzIG5vdCBiZWluZyB1c2VkLCB3ZSBwYXNzIGl0IHRocm91Z2hcbiAgICAgICAgICogdG9rZW46IHdlIGRvIG5vdCBzdG9yZSB0aGUgcmVhbCB0b2tlbiAoaXQgaXMgZ2VuZXJhdGVkIG9uY2UgYW5kIHJldHJpZXZlZCB0byB0aGUgdXNlciksIGp1c3QgYSBtYXNrIG9mIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgc2F2ZVRva2VuOiBUb2tlbiA9IHtcbiAgICAgICAgICB1c2VyOiBuYW1lLFxuICAgICAgICAgIHRva2VuOiBtYXNrZWRUb2tlbixcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY2lkcjogY2lkcl93aGl0ZWxpc3QsXG4gICAgICAgICAgcmVhZG9ubHksXG4gICAgICAgICAgY3JlYXRlZCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBzdG9yYWdlLnNhdmVUb2tlbihzYXZlVG9rZW4pO1xuICAgICAgICBkZWJ1ZygndG9rZW4gJW8gd2FzIGNyZWF0ZWQgZm9yIHVzZXIgJW8nLCBrZXksIG5hbWUpO1xuICAgICAgICByZXMuc2V0KEhFQURFUlMuQ0FDSEVfQ09OVFJPTCwgJ25vLWNhY2hlLCBuby1zdG9yZScpO1xuICAgICAgICByZXR1cm4gbmV4dChcbiAgICAgICAgICBub3JtYWxpemVUb2tlbih7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHVzZXI6IG5hbWUsXG4gICAgICAgICAgICBrZXk6IHNhdmVUb2tlbi5rZXksXG4gICAgICAgICAgICBjaWRyOiBjaWRyX3doaXRlbGlzdCxcbiAgICAgICAgICAgIHJlYWRvbmx5LFxuICAgICAgICAgICAgY3JlYXRlZDogc2F2ZVRva2VuLmNyZWF0ZWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcih7IGVycm9yOiBlcnJvci5tc2cgfSwgJ3Rva2VuIGNyZWF0aW9uIGhhcyBmYWlsZWQ6IEB7ZXJyb3J9Jyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SLCBlcnJvci5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRva2VuUm91dGUuZGVsZXRlKCcvdG9rZW5zL3Rva2VuLzp0b2tlbktleScsIGxpbWl0ZXIoY29uZmlnPy51c2VyUmF0ZUxpbWl0KSwgYXN5bmMgKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogUmVzcG9uc2UsIG5leHQ6ICROZXh0RnVuY3Rpb25WZXIpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwYXJhbXM6IHsgdG9rZW5LZXkgfSxcbiAgICB9ID0gcmVxO1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gcmVxLnJlbW90ZV91c2VyO1xuXG4gICAgaWYgKF8uaXNOaWwobmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICBkZWJ1ZygnJW8gaGFzIHJlcXVlc3RlZCByZW1vdmUgYSB0b2tlbicsIG5hbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3RvcmFnZS5kZWxldGVUb2tlbihuYW1lLCB0b2tlbktleSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKHsgdG9rZW5LZXksIG5hbWUgfSwgJ3Rva2VuIGlkIEB7dG9rZW5LZXl9IHdhcyByZXZva2VkIGZvciB1c2VyIEB7bmFtZX0nKTtcbiAgICAgICAgcmV0dXJuIG5leHQoe30pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKHsgZXJyb3I6IGVycm9yLm1zZyB9LCAndG9rZW4gY3JlYXRpb24gaGFzIGZhaWxlZDogQHtlcnJvcn0nKTtcbiAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuSU5URVJOQUxfRVJST1IsIGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldFVuYXV0aG9yaXplZCgpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRva2VuUm91dGU7XG59XG4iXX0=
|