@rushstack/rush-http-build-cache-plugin 5.97.1-pr3481.18 → 5.97.1
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/.heft/build-cache/jest-cache/haste-map-bae913f9b9aa720eb4deeae0a60a4b27-22ae7f4ce9de4306889d8c05e5cc39b9-f6b1af01a3130057bdfe3d86807211f9 +0 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{42/Import_42731f0220476b7d949a2d8f3a6f3333 → 12/Import_12af6d2ca109ffba883fc5079062e0e8} +157 -14
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{26/package_263c59db6933ba9581588638fb19da5c → 2f/package_2f923ac6ad9bbd4966f8472750ef7770} +2 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{58/index_58c57a8f2a96bf6fdf5db35a2e44baa7 → 53/index_53d9d5a344c3984994c801733764f503} +3 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{fa/rushlib_fa830331d24a41292b5cb91040384188 → 68/rushlib_68c59fa059ba441c9c6883bcfed4a8d2} +12 -34
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{c7/commons_c77bee95093c1098b4a591f2dadf398d → 9d/commons_9d513d1d600f9112f73547da918dcbb7} +622 -2238
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{c2/Async_c2ea5cc2edc0a460dcf394ef8277e88e → b4/Async_b43c9d64ab6a035dbce65b9f1a28e166} +78 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ce/index_ce3464019fb882539ee9a6f3e36e615a +2 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ce/index_ce3464019fb882539ee9a6f3e36e615a.map +1 -1
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941 +2 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941.map +1 -1
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247 +2 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247.map +1 -1
- package/.heft/build-cache/jest-cache/perf-cache-bae913f9b9aa720eb4deeae0a60a4b27-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
- package/.rush/temp/operation/_phase_build/state.json +1 -1
- package/.rush/temp/operation/_phase_test/all.log +29 -0
- package/.rush/temp/operation/_phase_test/state.json +1 -1
- package/.rush/temp/package-deps__phase_build.json +2 -2
- package/.rush/temp/package-deps__phase_test.json +2 -2
- package/.rush/temp/rushstack+rush-http-build-cache-plugin-_phase_build-646439b80a2010050f5b4b8a916e50afae04c3ab.log +10 -0
- package/.rush/temp/shrinkwrap-deps.json +10 -10
- package/package.json +6 -6
- package/rush-logs/rush-http-build-cache-plugin._phase_build.log +4 -23
- package/rush-logs/rush-http-build-cache-plugin._phase_test.log +4 -4
- package/temp/coverage/clover.xml +2 -2
- package/temp/coverage/lcov-report/HttpBuildCacheProvider.ts.html +1 -1
- package/temp/coverage/lcov-report/RushHttpBuildCachePlugin.ts.html +1 -1
- package/temp/coverage/lcov-report/index.html +1 -1
- package/temp/coverage/lcov-report/index.ts.html +1 -1
- package/.rush/temp/rushstack+rush-http-build-cache-plugin-_phase_build-5e3cfa01506c2ac77af487ee9732b935a5bbe122.log +0 -27
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
6d4790c8d0cbba844fa0570935749f81
|
|
2
2
|
"use strict";
|
|
3
3
|
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
4
4
|
// See LICENSE in the project root for license information.
|
|
5
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
6
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
7
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
8
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
9
|
+
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
10
|
+
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
11
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
12
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
13
|
+
function fulfill(value) { resume("next", value); }
|
|
14
|
+
function reject(value) { resume("throw", value); }
|
|
15
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
16
|
+
};
|
|
5
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Async = void 0;
|
|
18
|
+
exports.AsyncQueue = exports.Async = void 0;
|
|
7
19
|
/**
|
|
8
20
|
* Utilities for parallel asynchronous operations, for use with the system `Promise` APIs.
|
|
9
21
|
*
|
|
@@ -139,4 +151,68 @@ class Async {
|
|
|
139
151
|
}
|
|
140
152
|
}
|
|
141
153
|
exports.Async = Async;
|
|
154
|
+
function getSignal() {
|
|
155
|
+
let resolver;
|
|
156
|
+
const promise = new Promise((resolve) => {
|
|
157
|
+
resolver = resolve;
|
|
158
|
+
});
|
|
159
|
+
return [promise, resolver];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* A queue that allows for asynchronous iteration. During iteration, the queue will wait until
|
|
163
|
+
* the next item is pushed into the queue before yielding. If instead all queue items are consumed
|
|
164
|
+
* and all callbacks have been called, the queue will return.
|
|
165
|
+
*
|
|
166
|
+
* @public
|
|
167
|
+
*/
|
|
168
|
+
class AsyncQueue {
|
|
169
|
+
constructor(iterable) {
|
|
170
|
+
this._queue = iterable ? Array.from(iterable) : [];
|
|
171
|
+
const [promise, resolver] = getSignal();
|
|
172
|
+
this._onPushSignal = promise;
|
|
173
|
+
this._onPushResolve = resolver;
|
|
174
|
+
}
|
|
175
|
+
[Symbol.asyncIterator]() {
|
|
176
|
+
return __asyncGenerator(this, arguments, function* _a() {
|
|
177
|
+
let activeIterations = 0;
|
|
178
|
+
let [callbackSignal, callbackResolve] = getSignal();
|
|
179
|
+
const callback = () => {
|
|
180
|
+
if (--activeIterations === 0) {
|
|
181
|
+
// Resolve whatever the latest callback promise is and create a new one
|
|
182
|
+
callbackResolve();
|
|
183
|
+
const [newCallbackSignal, newCallbackResolve] = getSignal();
|
|
184
|
+
callbackSignal = newCallbackSignal;
|
|
185
|
+
callbackResolve = newCallbackResolve;
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
let position = 0;
|
|
189
|
+
while (this._queue.length > position || activeIterations > 0) {
|
|
190
|
+
if (this._queue.length > position) {
|
|
191
|
+
activeIterations++;
|
|
192
|
+
yield yield __await([this._queue[position++], callback]);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// On push, the item will be added to the queue and the onPushSignal will be resolved.
|
|
196
|
+
// On calling the callback, active iterations will be decremented by the callback and the
|
|
197
|
+
// callbackSignal will be resolved. This means that the loop will continue if there are
|
|
198
|
+
// active iterations or if there are items in the queue that haven't been yielded yet.
|
|
199
|
+
yield __await(Promise.race([this._onPushSignal, callbackSignal]));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Adds an item to the queue.
|
|
206
|
+
*
|
|
207
|
+
* @param item - The item to push into the queue.
|
|
208
|
+
*/
|
|
209
|
+
push(item) {
|
|
210
|
+
this._queue.push(item);
|
|
211
|
+
this._onPushResolve();
|
|
212
|
+
const [onPushSignal, onPushResolve] = getSignal();
|
|
213
|
+
this._onPushSignal = onPushSignal;
|
|
214
|
+
this._onPushResolve = onPushResolve;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.AsyncQueue = AsyncQueue;
|
|
142
218
|
//# sourceMappingURL=Async.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
5e06840b02f85d94fa67df91677c70ce
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
/* istanbul ignore next */
|
|
@@ -85,4 +85,4 @@ const RushHttpBuildCachePlugin_1 =
|
|
|
85
85
|
/* istanbul ignore next */
|
|
86
86
|
cov_1ufkhiak5h().s[2]++;
|
|
87
87
|
exports.default = RushHttpBuildCachePlugin_1.RushHttpBuildCachePlugin;
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBc0U7QUFBQTtBQUV0RUEsa0JBQWVDLG1EQUF3QiIsIm5hbWVzIjpbImV4cG9ydHMiLCJSdXNoSHR0cEJ1aWxkQ2FjaGVQbHVnaW5fMSJdLCJzb3VyY2VzIjpbIi9ob21lL3ZzdHMvd29yay8xL3MvcnVzaC1wbHVnaW5zL3J1c2gtaHR0cC1idWlsZC1jYWNoZS1wbHVnaW4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJ1c2hIdHRwQnVpbGRDYWNoZVBsdWdpbiB9IGZyb20gJy4vUnVzaEh0dHBCdWlsZENhY2hlUGx1Z2luJztcblxuZXhwb3J0IGRlZmF1bHQgUnVzaEh0dHBCdWlsZENhY2hlUGx1Z2luO1xuZXhwb3J0IHsgSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zIH0gZnJvbSAnLi9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyJztcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAsE;
|
|
1
|
+
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAsE;AAAA;AAEtEA,kBAAeC,mDAAwB","names":["exports","RushHttpBuildCachePlugin_1"],"sources":["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/index.ts"],"sourcesContent":["import { RushHttpBuildCachePlugin } from './RushHttpBuildCachePlugin';\n\nexport default RushHttpBuildCachePlugin;\nexport { IHttpBuildCacheProviderOptions } from './HttpBuildCacheProvider';\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
63b3387b13c32b9461b83c75e22b0d01
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
/* istanbul ignore next */
|
|
@@ -4364,4 +4364,4 @@ class HttpBuildCacheProvider {
|
|
|
4364
4364
|
/* istanbul ignore next */
|
|
4365
4365
|
cov_ms2xfswbr().s[121]++;
|
|
4366
4366
|
exports.HttpBuildCacheProvider = HttpBuildCacheProvider;
|
|
4367
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWMsQ0FBQyxHQUFHa0UsT0FBTyxVQUFVekIsUUFBUSxDQUFDTyxNQUFNLEtBQUtQLFFBQVEsQ0FBQzBCLFVBQVUsRUFBRSxDQUFDO1VBQUM7VUFBQW5IO1VBQ3ZGOztNQUdGLEtBQUtFLFdBQVcsQ0FBQzhHLGNBQWM7UUFBQTtRQUFBaEg7UUFBRTtVQUFBO1VBQUFBO1VBQy9CLE1BQU0sSUFBSTBELEtBQUssQ0FDYixDQUNFLEdBQUcsSUFBSSxDQUFDekMsSUFBSSxDQUFDMEMsSUFBSSxtQkFBbUI4QixRQUFRLENBQUNPLE1BQU0sS0FBS1AsUUFBUSxDQUFDMEIsVUFBVSxHQUFHLEVBQzlFLG1EQUFtRCxFQUNuRCw2RkFBNkYsRUFDN0YsRUFBRSxFQUNGLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsaURBQWlELEVBQ2pELEVBQUUsQ0FDSCxDQUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiOztJQUNGO0VBRUw7O0FBQ0Q7QUFBQS9EO0FBL1ZEb0giLCJuYW1lcyI6WyJjb3ZfbXMyeGZzd2JyIiwiQ3JlZGVudGlhbHNPcHRpb25zIiwiRmFpbHVyZVR5cGUiLCJIdHRwQnVpbGRDYWNoZVByb3ZpZGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicnVzaFNlc3Npb24iLCJfcGx1Z2luTmFtZSIsInBsdWdpbk5hbWUiLCJfcnVzaFNlc3Npb24iLCJfcnVzaFByb2plY3RSb290IiwicnVzaFByb2plY3RSb290IiwiX2Vudmlyb25tZW50Q3JlZGVudGlhbCIsInJ1c2hfc2RrXzEiLCJidWlsZENhY2hlQ3JlZGVudGlhbCIsIl9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uIiwiaXNDYWNoZVdyaXRlQWxsb3dlZCIsIl91cmwiLCJVUkwiLCJ1cmwiLCJlbmRzV2l0aCIsIl91cGxvYWRNZXRob2QiLCJ1cGxvYWRNZXRob2QiLCJfaGVhZGVycyIsImhlYWRlcnMiLCJfdG9rZW5IYW5kbGVyIiwidG9rZW5IYW5kbGVyIiwiX2NhY2hlS2V5UHJlZml4IiwiY2FjaGVLZXlQcmVmaXgiLCJidWlsZENhY2hlV3JpdGVBbGxvd2VkIiwidHJ5R2V0Q2FjaGVFbnRyeUJ1ZmZlckJ5SWRBc3luYyIsInRlcm1pbmFsIiwiY2FjaGVJZCIsInJlc3VsdCIsIl9odHRwIiwicmVsVXJsIiwibWV0aG9kIiwiYm9keSIsInVuZGVmaW5lZCIsIndhcm5pbmdUZXh0IiwicmVhZEJvZHkiLCJCdWZmZXIiLCJpc0J1ZmZlciIsImUiLCJ3cml0ZVdhcm5pbmdMaW5lIiwidHJ5U2V0Q2FjaGVFbnRyeUJ1ZmZlckFzeW5jIiwib2JqZWN0QnVmZmVyIiwid3JpdGVFcnJvckxpbmUiLCJ3cml0ZURlYnVnTGluZSIsInVwZGF0ZUNhY2hlZENyZWRlbnRpYWxBc3luYyIsImNyZWRlbnRpYWwiLCJ1c2luZ0FzeW5jIiwic3VwcG9ydEVkaXRpbmciLCJjcmVkZW50aWFsc0NhY2hlIiwic2V0Q2FjaGVFbnRyeSIsIl9jcmVkZW50aWFsQ2FjaGVJZCIsInNhdmVJZk1vZGlmaWVkQXN5bmMiLCJ1cGRhdGVDYWNoZWRDcmVkZW50aWFsSW50ZXJhY3RpdmVBc3luYyIsIkVycm9yIiwiaHJlZiIsImNtZCIsImV4ZWMiLCJhcmdzIiwiam9pbiIsIndyaXRlVmVyYm9zZUxpbmUiLCJub2RlX2NvcmVfbGlicmFyeV8xIiwic3Bhd25TeW5jIiwic3RkZXJyIiwiZXJyb3IiLCJzdGRvdXQiLCJ0cmltIiwid3JpdGVMaW5lIiwiZGVsZXRlQ2FjaGVkQ3JlZGVudGlhbHNBc3luYyIsImRlbGV0ZUNhY2hlRW50cnkiLCJfX2NyZWRlbnRpYWxDYWNoZUlkIiwiY2FjaGVJZFBhcnRzIiwicHVzaCIsImNyZWRlbnRpYWxPcHRpb25zIiwic2FmZUNyZWRlbnRpYWxPcHRpb25zIiwiT3B0aW9uYWwiLCJjcmVkZW50aWFscyIsIl90cnlHZXRDcmVkZW50aWFscyIsIkF1dGhvcml6YXRpb24iLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJib2R5TGVuZ3RoIiwibGVuZ3RoIiwicmVzcG9uc2UiLCJyZWRpcmVjdCIsIm9rIiwiUmVxdWlyZWQiLCJfcmVwb3J0RmFpbHVyZSIsImZyb20iLCJhcnJheUJ1ZmZlciIsInN0YXR1cyIsIk9taXQiLCJfdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUiLCJjYWNoZUVudHJ5IiwidHJ5R2V0Q2FjaGVFbnRyeSIsImV4cGlyYXRpb25UaW1lIiwiZXhwaXJlcyIsImdldFRpbWUiLCJEYXRlIiwibm93IiwiX2dldEZhaWx1cmVUeXBlIiwicmVxdWVzdE1ldGhvZCIsImlzUmVkaXJlY3QiLCJOb25lIiwiSW5mb3JtYXRpb25hbCIsInJlZGlyZWN0ZWQiLCJBdXRoZW50aWNhdGlvbiIsIldhcm5pbmciLCJtZXNzYWdlIiwic3RhdHVzVGV4dCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIvaG9tZS92c3RzL3dvcmsvMS9zL3J1c2gtcGx1Z2lucy9ydXNoLWh0dHAtYnVpbGQtY2FjaGUtcGx1Z2luL3NyYy9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUZXJtaW5hbCwgRXhlY3V0YWJsZSB9IGZyb20gJ0BydXNoc3RhY2svbm9kZS1jb3JlLWxpYnJhcnknO1xuaW1wb3J0IHtcbiAgSUNsb3VkQnVpbGRDYWNoZVByb3ZpZGVyLFxuICBJQ3JlZGVudGlhbENhY2hlRW50cnksXG4gIENyZWRlbnRpYWxDYWNoZSxcbiAgUnVzaFNlc3Npb24sXG4gIEVudmlyb25tZW50Q29uZmlndXJhdGlvblxufSBmcm9tICdAcnVzaHN0YWNrL3J1c2gtc2RrJztcbmltcG9ydCBmZXRjaCwgeyBCb2R5SW5pdCwgUmVzcG9uc2UgfSBmcm9tICdub2RlLWZldGNoJztcblxuZW51bSBDcmVkZW50aWFsc09wdGlvbnMge1xuICBPcHRpb25hbCxcbiAgUmVxdWlyZWQsXG4gIE9taXRcbn1cblxuZW51bSBGYWlsdXJlVHlwZSB7XG4gIE5vbmUsXG4gIEluZm9ybWF0aW9uYWwsXG4gIFdhcm5pbmcsXG4gIEVycm9yLFxuICBBdXRoZW50aWNhdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwQnVpbGRDYWNoZVRva2VuSGFuZGxlciB7XG4gIGV4ZWM6IHN0cmluZztcbiAgYXJncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSHR0cEJ1aWxkQ2FjaGVQcm92aWRlck9wdGlvbnMge1xuICB1cmw6IHN0cmluZztcbiAgdG9rZW5IYW5kbGVyPzogSUh0dHBCdWlsZENhY2hlVG9rZW5IYW5kbGVyO1xuICB1cGxvYWRNZXRob2Q/OiBzdHJpbmc7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjYWNoZUtleVByZWZpeD86IHN0cmluZztcbiAgaXNDYWNoZVdyaXRlQWxsb3dlZDogYm9vbGVhbjtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBydXNoUHJvamVjdFJvb3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBCdWlsZENhY2hlUHJvdmlkZXIgaW1wbGVtZW50cyBJQ2xvdWRCdWlsZENhY2hlUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1c2hTZXNzaW9uOiBSdXNoU2Vzc2lvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVzaFByb2plY3RSb290OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudmlyb25tZW50Q3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmw6IFVSTDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXBsb2FkTWV0aG9kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlS2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuSGFuZGxlcjogSUh0dHBCdWlsZENhY2hlVG9rZW5IYW5kbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9fY3JlZGVudGlhbENhY2hlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZ2V0IGlzQ2FjaGVXcml0ZUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Q29uZmlndXJhdGlvbi5idWlsZENhY2hlV3JpdGVBbGxvd2VkID8/IHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zLCBydXNoU2Vzc2lvbjogUnVzaFNlc3Npb24pIHtcbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gb3B0aW9ucy5wbHVnaW5OYW1lO1xuICAgIHRoaXMuX3J1c2hTZXNzaW9uID0gcnVzaFNlc3Npb247XG4gICAgdGhpcy5fcnVzaFByb2plY3RSb290ID0gb3B0aW9ucy5ydXNoUHJvamVjdFJvb3Q7XG5cbiAgICB0aGlzLl9lbnZpcm9ubWVudENyZWRlbnRpYWwgPSBFbnZpcm9ubWVudENvbmZpZ3VyYXRpb24uYnVpbGRDYWNoZUNyZWRlbnRpYWw7XG4gICAgdGhpcy5faXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbiA9IG9wdGlvbnMuaXNDYWNoZVdyaXRlQWxsb3dlZDtcbiAgICB0aGlzLl91cmwgPSBuZXcgVVJMKG9wdGlvbnMudXJsLmVuZHNXaXRoKCcvJykgPyBvcHRpb25zLnVybCA6IG9wdGlvbnMudXJsICsgJy8nKTtcbiAgICB0aGlzLl91cGxvYWRNZXRob2QgPSBvcHRpb25zLnVwbG9hZE1ldGhvZCA/PyAnUFVUJztcbiAgICB0aGlzLl9oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgIHRoaXMuX3Rva2VuSGFuZGxlciA9IG9wdGlvbnMudG9rZW5IYW5kbGVyO1xuICAgIHRoaXMuX2NhY2hlS2V5UHJlZml4ID0gb3B0aW9ucy5jYWNoZUtleVByZWZpeCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jKFxuICAgIHRlcm1pbmFsOiBJVGVybWluYWwsXG4gICAgY2FjaGVJZDogc3RyaW5nXG4gICk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2h0dHAoe1xuICAgICAgICB0ZXJtaW5hbDogdGVybWluYWwsXG4gICAgICAgIHJlbFVybDogYCR7dGhpcy5fY2FjaGVLZXlQcmVmaXh9JHtjYWNoZUlkfWAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgd2FybmluZ1RleHQ6ICdDb3VsZCBub3QgZ2V0IGNhY2hlIGVudHJ5JyxcbiAgICAgICAgcmVhZEJvZHk6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHJlc3VsdCkgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGVybWluYWwud3JpdGVXYXJuaW5nTGluZShgRXJyb3IgZ2V0dGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJ5U2V0Q2FjaGVFbnRyeUJ1ZmZlckFzeW5jKFxuICAgIHRlcm1pbmFsOiBJVGVybWluYWwsXG4gICAgY2FjaGVJZDogc3RyaW5nLFxuICAgIG9iamVjdEJ1ZmZlcjogQnVmZmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc0NhY2hlV3JpdGVBbGxvd2VkKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZSgnV3JpdGluZyB0byBjYWNoZSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKCdVcGxvYWRpbmcgb2JqZWN0IHdpdGggY2FjaGVJZDogJywgY2FjaGVJZCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cCh7XG4gICAgICAgIHRlcm1pbmFsOiB0ZXJtaW5hbCxcbiAgICAgICAgcmVsVXJsOiBgJHt0aGlzLl9jYWNoZUtleVByZWZpeH0ke2NhY2hlSWR9YCxcbiAgICAgICAgbWV0aG9kOiB0aGlzLl91cGxvYWRNZXRob2QsXG4gICAgICAgIGJvZHk6IG9iamVjdEJ1ZmZlcixcbiAgICAgICAgd2FybmluZ1RleHQ6ICdDb3VsZCBub3Qgd3JpdGUgY2FjaGUgZW50cnknLFxuICAgICAgICByZWFkQm9keTogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ICE9PSBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZVdhcm5pbmdMaW5lKGBFcnJvciB1cGxvYWRpbmcgY2FjaGUgZW50cnk6ICR7ZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEFzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwsIGNyZWRlbnRpYWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IENyZWRlbnRpYWxDYWNoZS51c2luZ0FzeW5jKFxuICAgICAge1xuICAgICAgICBzdXBwb3J0RWRpdGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGFzeW5jIChjcmVkZW50aWFsc0NhY2hlOiBDcmVkZW50aWFsQ2FjaGUpID0+IHtcbiAgICAgICAgY3JlZGVudGlhbHNDYWNoZS5zZXRDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkLCB7XG4gICAgICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgY3JlZGVudGlhbHNDYWNoZS5zYXZlSWZNb2RpZmllZEFzeW5jKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDYWNoZWRDcmVkZW50aWFsSW50ZXJhY3RpdmVBc3luYyh0ZXJtaW5hbDogSVRlcm1pbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl90b2tlbkhhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBpbnRlcmFjdGl2ZSBjbG91ZCBjcmVkZW50aWFscyBmbG93IGlzIG5vdCBjb25maWd1cmVkLlxcbmAgK1xuICAgICAgICAgIGBTZXQgdGhlICd0b2tlbkhhbmRsZXInIHNldHRpbmcgaW4gJ2NvbW1vbi9jb25maWcvcnVzaC1wbHVnaW5zLyR7dGhpcy5fcGx1Z2luTmFtZX0uanNvbicgdG8gYSBjb21tYW5kIHRoYXQgd3JpdGVzIHlvdXIgY3JlZGVudGlhbHMgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0cyB3aXRoIGNvZGUgMCBgICtcbiAgICAgICAgICBgb3IgcHJvdmlkZSB5b3VyIGNyZWRlbnRpYWxzIHRvIHJ1c2ggdXNpbmcgdGhlIC0tY3JlZGVudGlhbCBmbGFnIGluc3RlYWQuIENyZWRlbnRpYWxzIG11c3QgYmUgdGhlIGAgK1xuICAgICAgICAgIGAnQXV0aG9yaXphdGlvbicgaGVhZGVyIGV4cGVjdGVkIGJ5ICR7dGhpcy5fdXJsLmhyZWZ9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbWQ6IHN0cmluZyA9IGAke3RoaXMuX3Rva2VuSGFuZGxlci5leGVjfSAkeyh0aGlzLl90b2tlbkhhbmRsZXIuYXJncyB8fCBbXSkuam9pbignICcpfWA7XG4gICAgdGVybWluYWwud3JpdGVWZXJib3NlTGluZShgUnVubmluZyAnJHtjbWR9JyB0byBnZXQgY3JlZGVudGlhbHNgKTtcbiAgICBjb25zdCByZXN1bHQgPSBFeGVjdXRhYmxlLnNwYXduU3luYyh0aGlzLl90b2tlbkhhbmRsZXIuZXhlYywgdGhpcy5fdG9rZW5IYW5kbGVyLmFyZ3MgfHwgW10pO1xuXG4gICAgdGVybWluYWwud3JpdGVFcnJvckxpbmUocmVzdWx0LnN0ZGVycik7XG5cbiAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBvYnRhaW4gY3JlZGVudGlhbHMuIFRoZSBjb21tYW5kICcke2NtZH0nIGZhaWxlZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVkZW50aWFsID0gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gICAgdGVybWluYWwud3JpdGVWZXJib3NlTGluZSgnR290IGNyZWRlbnRpYWxzJyk7XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlZENyZWRlbnRpYWxBc3luYyh0ZXJtaW5hbCwgY3JlZGVudGlhbCk7XG5cbiAgICB0ZXJtaW5hbC53cml0ZUxpbmUoJ1VwZGF0ZWQgY3JlZGVudGlhbHMgY2FjaGUnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVDYWNoZWRDcmVkZW50aWFsc0FzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBDcmVkZW50aWFsQ2FjaGUudXNpbmdBc3luYyhcbiAgICAgIHtcbiAgICAgICAgc3VwcG9ydEVkaXRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBhc3luYyAoY3JlZGVudGlhbHNDYWNoZTogQ3JlZGVudGlhbENhY2hlKSA9PiB7XG4gICAgICAgIGNyZWRlbnRpYWxzQ2FjaGUuZGVsZXRlQ2FjaGVFbnRyeSh0aGlzLl9jcmVkZW50aWFsQ2FjaGVJZCk7XG4gICAgICAgIGF3YWl0IGNyZWRlbnRpYWxzQ2FjaGUuc2F2ZUlmTW9kaWZpZWRBc3luYygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfY3JlZGVudGlhbENhY2hlSWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZCkge1xuICAgICAgY29uc3QgY2FjaGVJZFBhcnRzOiBzdHJpbmdbXSA9IFt0aGlzLl91cmwuaHJlZl07XG5cbiAgICAgIGlmICh0aGlzLl9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNhY2hlSWRQYXJ0cy5wdXNoKCdjYWNoZVdyaXRlQWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9fY3JlZGVudGlhbENhY2hlSWQgPSBjYWNoZUlkUGFydHMuam9pbignfCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fY3JlZGVudGlhbENhY2hlSWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9odHRwKG9wdGlvbnM6IHtcbiAgICB0ZXJtaW5hbDogSVRlcm1pbmFsO1xuICAgIHJlbFVybDogc3RyaW5nO1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIGJvZHk6IEJvZHlJbml0IHwgdW5kZWZpbmVkO1xuICAgIHdhcm5pbmdUZXh0OiBzdHJpbmc7XG4gICAgcmVhZEJvZHk6IGJvb2xlYW47XG4gICAgY3JlZGVudGlhbE9wdGlvbnM/OiBDcmVkZW50aWFsc09wdGlvbnM7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHRlcm1pbmFsLCByZWxVcmwsIG1ldGhvZCwgYm9keSwgd2FybmluZ1RleHQsIHJlYWRCb2R5LCBjcmVkZW50aWFsT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBzYWZlQ3JlZGVudGlhbE9wdGlvbnMgPSBjcmVkZW50aWFsT3B0aW9ucyA/PyBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWw7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl90cnlHZXRDcmVkZW50aWFscyhzYWZlQ3JlZGVudGlhbE9wdGlvbnMpO1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVsVXJsLCB0aGlzLl91cmwpLmhyZWY7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgaWYgKHR5cGVvZiBjcmVkZW50aWFscyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGNyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2hlYWRlcnMpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBib2R5TGVuZ3RoID0gKGJvZHkgYXMgeyBsZW5ndGg6IG51bWJlciB9KT8ubGVuZ3RoIHx8ICd1bmtub3duJztcblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKGBbaHR0cC1idWlsZC1jYWNoZV0gcmVxdWVzdDogJHttZXRob2R9ICR7dXJsfSAke2JvZHlMZW5ndGh9IGJ5dGVzYCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93J1xuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgaWYgKHR5cGVvZiBjcmVkZW50aWFscyAhPT0gJ3N0cmluZycgJiYgc2FmZUNyZWRlbnRpYWxPcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWwpIHtcbiAgICAgICAgLy8gV2UgdHJpZWQgZmV0Y2hpbmcgdGhlIHJlc291cmNlIHdpdGhvdXQgY3JlZGVudGlhbHMgYW5kIHRoYXQgZGlkIG5vdCB3b3JrIG91dFxuICAgICAgICAvLyBUcnkgYWdhaW4gYnV0IHJlcXVpcmUgY3JlZGVudGlhbHMgdGhpcyB0aW1lXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBwcm92aWRlciB0byByZXF1ZXN0IGNyZWRlbnRpYWxzXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwKHsgLi4ub3B0aW9ucywgY3JlZGVudGlhbE9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVwb3J0RmFpbHVyZSh0ZXJtaW5hbCwgbWV0aG9kLCByZXNwb25zZSwgZmFsc2UsIHdhcm5pbmdUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IEJ1ZmZlciB8IGJvb2xlYW4gPSByZWFkQm9keSA/IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpIDogdHJ1ZTtcblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKFxuICAgICAgYFtodHRwLWJ1aWxkLWNhY2hlXSBhY3R1YWwgcmVzcG9uc2U6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3VybH0gJHtcbiAgICAgICAgcmVzdWx0ID09PSB0cnVlID8gJ3RydWUnIDogcmVzdWx0Lmxlbmd0aFxuICAgICAgfSBieXRlc2BcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzKG9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCk6IFByb21pc2U8c3RyaW5nPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLk9wdGlvbmFsKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMuT21pdCk6IFByb21pc2U8dW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT21pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjcmVkZW50aWFsczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fZW52aXJvbm1lbnRDcmVkZW50aWFsO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWxzICE9PSAnc3RyaW5nJyAmJiBvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgIGBDcmVkZW50aWFscyBmb3IgJHt0aGlzLl91cmwuaHJlZn0gaGF2ZSBub3QgYmVlbiBwcm92aWRlZC5gLFxuICAgICAgICAgIGBJbiBDSSwgdmVyaWZ5IHRoYXQgUlVTSF9CVUlMRF9DQUNIRV9DUkVERU5USUFMIGNvbnRhaW5zIGEgdmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUuYCxcbiAgICAgICAgICBgYCxcbiAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgIGBgLFxuICAgICAgICAgIGAgICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZWAsXG4gICAgICAgICAgYGBcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFsc0Zyb21DYWNoZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBjYWNoZUVudHJ5OiBJQ3JlZGVudGlhbENhY2hlRW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgICBhd2FpdCBDcmVkZW50aWFsQ2FjaGUudXNpbmdBc3luYyhcbiAgICAgIHtcbiAgICAgICAgc3VwcG9ydEVkaXRpbmc6IGZhbHNlXG4gICAgICB9LFxuICAgICAgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjYWNoZUVudHJ5ID0gY3JlZGVudGlhbHNDYWNoZS50cnlHZXRDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb25UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQgPSBjYWNoZUVudHJ5LmV4cGlyZXM/LmdldFRpbWUoKTtcbiAgICAgIGlmICghZXhwaXJhdGlvblRpbWUgfHwgZXhwaXJhdGlvblRpbWUgPj0gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeS5jcmVkZW50aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEZhaWx1cmVUeXBlKHJlcXVlc3RNZXRob2Q6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlLCBpc1JlZGlyZWN0OiBib29sZWFuKTogRmFpbHVyZVR5cGUge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLk5vbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgNTAzOiB7XG4gICAgICAgIC8vIFdlIHNlbGVjdCA1MDMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhpcyByZXByZXNlbnRzIFwic2VydmljZSB1bmF2YWlsYWJsZVwiIGFuZFxuICAgICAgICAvLyBcInJhdGUgbGltaXQgdGhyb3R0bGVcIiBlcnJvcnMsIHdoaWNoIGFyZSB0cmFuc2llbnQgaXNzdWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBhcmUgb3RoZXIgNXh4IGVycm9ycywgc3VjaCBhcyA1MDEsIHRoYXQgY2FuIG9jY3VyIGlmIHRoZSByZXF1ZXN0IGlzXG4gICAgICAgIC8vIG1hbGZvcm1lZCwgc28gYXMgYSBnZW5lcmFsIHJ1bGUgd2Ugd2FudCB0byBsZXQgdGhyb3VnaCBvdGhlciA1eHggZXJyb3JzXG4gICAgICAgIC8vIHNvIHRoZSB1c2VyIGNhbiB0cm91Ymxlc2hvb3QuXG5cbiAgICAgICAgLy8gRG9uJ3QgZmFpbCBwcm9kdWN0aW9uIGJ1aWxkcyB3aXRoIHdhcm5pbmdzIGZvciB0cmFuc2llbnQgaXNzdWVzXG4gICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5JbmZvcm1hdGlvbmFsO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgY2FzZSA0MDc6IHtcbiAgICAgICAgaWYgKHJlcXVlc3RNZXRob2QgPT09ICdHRVQnICYmIChpc1JlZGlyZWN0IHx8IHJlc3BvbnNlLnJlZGlyZWN0ZWQpKSB7XG4gICAgICAgICAgLy8gQ2FjaGUgbWlzc2VzIGZvciBHRVQgcmVxdWVzdHMgYXJlIG5vdCBlcnJvcnNcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBiZWhhdmlvciB3aGVyZSBhIHNlcnZlciBjYW4gaXNzdWUgYSByZWRpcmVjdCBhbmQgd2UgZmFpbCB0byBhdXRoZW50aWNhdGUgYXQgdGhlIG5ldyBsb2NhdGlvbi5cbiAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzaWduYWwgdGhpcyBhcyBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIGJlY2F1c2UgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGlzIG5vdCBwYXNzZWQgb24gdG8gcmVkaXJlY3RzLlxuICAgICAgICAgIC8vIGkuZSBUaGUgYXV0aGVudGljYXRpb24gaGVhZGVyIHdhcyBhY2NlcHRlZCBmb3IgdGhlIGZpcnN0IHJlcXVlc3QgYW5kIHRoZXJlZm9yZSBzdWJzZXF1ZW50IGZhaWx1cmVzXG4gICAgICAgICAgLy8gd2hlcmUgaXQgd2FzIG5vdCBwcmVzZW50IHNob3VsZCBub3QgYmUgYXR0cmlidXRlZCB0byB0aGUgaGVhZGVyLlxuICAgICAgICAgIC8vIFRoaXMgc2NlbmFyaW8gdXN1YWxseSBjb21lcyB1cCB3aXRoIHNlcnZpY2VzIHRoYXQgcmVkaXJlY3QgdG8gcHJlLXNpZ25lZCBVUkxTIHRoYXQgZG9uJ3QgYWN0dWFsbHkgZXhpc3QuXG4gICAgICAgICAgLy8gVGhvc2Ugc2VydmljZXMgdGhlbiB1c3VhbGx5IHRyZWF0IHRoZSA0MDQgYXMgYSA0MDMgdG8gcHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwNDoge1xuICAgICAgICBpZiAocmVxdWVzdE1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBDYWNoZSBtaXNzZXMgZm9yIEdFVCByZXF1ZXN0cyBhcmUgbm90IGVycm9yc1xuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGV0IGRldiBidWlsZHMgc3VjY2VlZCwgbGV0IFByb2QgYnVpbGRzIGZhaWxcbiAgICByZXR1cm4gRmFpbHVyZVR5cGUuV2FybmluZztcbiAgfVxuXG4gIHByaXZhdGUgX3JlcG9ydEZhaWx1cmUoXG4gICAgdGVybWluYWw6IElUZXJtaW5hbCxcbiAgICByZXF1ZXN0TWV0aG9kOiBzdHJpbmcsXG4gICAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICAgIGlzUmVkaXJlY3Q6IGJvb2xlYW4sXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5fZ2V0RmFpbHVyZVR5cGUocmVxdWVzdE1ldGhvZCwgcmVzcG9uc2UsIGlzUmVkaXJlY3QpKSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRXJyb3JMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5XYXJuaW5nOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLkluZm9ybWF0aW9uYWw6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5Ob25lOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5BdXRoZW50aWNhdGlvbjoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYCR7dGhpcy5fdXJsLmhyZWZ9IHJlc3BvbmRlZCB3aXRoICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fS5gLFxuICAgICAgICAgICAgYENyZWRlbnRpYWxzIG1heSBiZSBtaXNjb25maWd1cmVkIG9yIGhhdmUgZXhwaXJlZC5gLFxuICAgICAgICAgICAgYEluIENJLCB2ZXJpZnkgdGhhdCBSVVNIX0JVSUxEX0NBQ0hFX0NSRURFTlRJQUwgY29udGFpbnMgYSB2YWxpZCBBdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZS5gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgICAgIHJ1c2ggdXBkYXRlLWNsb3VkLWNyZWRlbnRpYWxzIC0taW50ZXJhY3RpdmVgLFxuICAgICAgICAgICAgYGBcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
4367
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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LEVBQ25ELDZGQUE2RixFQUM3RixFQUFFLEVBQ0YsNEJBQTRCLEVBQzVCLEVBQUUsRUFDRixpREFBaUQsRUFDakQsRUFBRSxDQUNILENBQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2I7O0lBQ0Y7RUFFTDs7QUFDRDtBQUFBO0FBL1ZEcUQiLCJuYW1lcyI6WyJDcmVkZW50aWFsc09wdGlvbnMiLCJGYWlsdXJlVHlwZSIsIkh0dHBCdWlsZENhY2hlUHJvdmlkZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJydXNoU2Vzc2lvbiIsIl9wbHVnaW5OYW1lIiwicGx1Z2luTmFtZSIsIl9ydXNoU2Vzc2lvbiIsIl9ydXNoUHJvamVjdFJvb3QiLCJydXNoUHJvamVjdFJvb3QiLCJfZW52aXJvbm1lbnRDcmVkZW50aWFsIiwicnVzaF9zZGtfMSIsImJ1aWxkQ2FjaGVDcmVkZW50aWFsIiwiX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb24iLCJpc0NhY2hlV3JpdGVBbGxvd2VkIiwiX3VybCIsIlVSTCIsInVybCIsImVuZHNXaXRoIiwiX3VwbG9hZE1ldGhvZCIsInVwbG9hZE1ldGhvZCIsIl9oZWFkZXJzIiwiaGVhZGVycyIsIl90b2tlbkhhbmRsZXIiLCJ0b2tlbkhhbmRsZXIiLCJfY2FjaGVLZXlQcmVmaXgiLCJjYWNoZUtleVByZWZpeCIsImJ1aWxkQ2FjaGVXcml0ZUFsbG93ZWQiLCJ0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jIiwidGVybWluYWwiLCJjYWNoZUlkIiwicmVzdWx0IiwiX2h0dHAiLCJyZWxVcmwiLCJtZXRob2QiLCJib2R5IiwidW5kZWZpbmVkIiwid2FybmluZ1RleHQiLCJyZWFkQm9keSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiZSIsIndyaXRlV2FybmluZ0xpbmUiLCJ0cnlTZXRDYWNoZUVudHJ5QnVmZmVyQXN5bmMiLCJvYmplY3RCdWZmZXIiLCJ3cml0ZUVycm9yTGluZSIsIndyaXRlRGVidWdMaW5lIiwidXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEFzeW5jIiwiY3JlZGVudGlhbCIsInVzaW5nQXN5bmMiLCJzdXBwb3J0RWRpdGluZyIsImNyZWRlbnRpYWxzQ2FjaGUiLCJzZXRDYWNoZUVudHJ5IiwiX2NyZWRlbnRpYWxDYWNoZUlkIiwic2F2ZUlmTW9kaWZpZWRBc3luYyIsInVwZGF0ZUNhY2hlZENyZWRlbnRpYWxJbnRlcmFjdGl2ZUFzeW5jIiwiRXJyb3IiLCJocmVmIiwiY21kIiwiZXhlYyIsImFyZ3MiLCJqb2luIiwid3JpdGVWZXJib3NlTGluZSIsIm5vZGVfY29yZV9saWJyYXJ5XzEiLCJzcGF3blN5bmMiLCJzdGRlcnIiLCJlcnJvciIsInN0ZG91dCIsInRyaW0iLCJ3cml0ZUxpbmUiLCJkZWxldGVDYWNoZWRDcmVkZW50aWFsc0FzeW5jIiwiZGVsZXRlQ2FjaGVFbnRyeSIsIl9fY3JlZGVudGlhbENhY2hlSWQiLCJjYWNoZUlkUGFydHMiLCJwdXNoIiwiY3JlZGVudGlhbE9wdGlvbnMiLCJzYWZlQ3JlZGVudGlhbE9wdGlvbnMiLCJPcHRpb25hbCIsImNyZWRlbnRpYWxzIiwiX3RyeUdldENyZWRlbnRpYWxzIiwiQXV0aG9yaXphdGlvbiIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsImJvZHlMZW5ndGgiLCJsZW5ndGgiLCJyZXNwb25zZSIsInJlZGlyZWN0Iiwib2siLCJSZXF1aXJlZCIsIl9yZXBvcnRGYWlsdXJlIiwiZnJvbSIsImFycmF5QnVmZmVyIiwic3RhdHVzIiwiT21pdCIsIl90cnlHZXRDcmVkZW50aWFsc0Zyb21DYWNoZSIsImNhY2hlRW50cnkiLCJ0cnlHZXRDYWNoZUVudHJ5IiwiZXhwaXJhdGlvblRpbWUiLCJleHBpcmVzIiwiZ2V0VGltZSIsIkRhdGUiLCJub3ciLCJfZ2V0RmFpbHVyZVR5cGUiLCJyZXF1ZXN0TWV0aG9kIiwiaXNSZWRpcmVjdCIsIk5vbmUiLCJJbmZvcm1hdGlvbmFsIiwicmVkaXJlY3RlZCIsIkF1dGhlbnRpY2F0aW9uIiwiV2FybmluZyIsIm1lc3NhZ2UiLCJzdGF0dXNUZXh0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi9ob21lL3ZzdHMvd29yay8xL3MvcnVzaC1wbHVnaW5zL3J1c2gtaHR0cC1idWlsZC1jYWNoZS1wbHVnaW4vc3JjL0h0dHBCdWlsZENhY2hlUHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVRlcm1pbmFsLCBFeGVjdXRhYmxlIH0gZnJvbSAnQHJ1c2hzdGFjay9ub2RlLWNvcmUtbGlicmFyeSc7XG5pbXBvcnQge1xuICBJQ2xvdWRCdWlsZENhY2hlUHJvdmlkZXIsXG4gIElDcmVkZW50aWFsQ2FjaGVFbnRyeSxcbiAgQ3JlZGVudGlhbENhY2hlLFxuICBSdXNoU2Vzc2lvbixcbiAgRW52aXJvbm1lbnRDb25maWd1cmF0aW9uXG59IGZyb20gJ0BydXNoc3RhY2svcnVzaC1zZGsnO1xuaW1wb3J0IGZldGNoLCB7IEJvZHlJbml0LCBSZXNwb25zZSB9IGZyb20gJ25vZGUtZmV0Y2gnO1xuXG5lbnVtIENyZWRlbnRpYWxzT3B0aW9ucyB7XG4gIE9wdGlvbmFsLFxuICBSZXF1aXJlZCxcbiAgT21pdFxufVxuXG5lbnVtIEZhaWx1cmVUeXBlIHtcbiAgTm9uZSxcbiAgSW5mb3JtYXRpb25hbCxcbiAgV2FybmluZyxcbiAgRXJyb3IsXG4gIEF1dGhlbnRpY2F0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUh0dHBCdWlsZENhY2hlVG9rZW5IYW5kbGVyIHtcbiAgZXhlYzogc3RyaW5nO1xuICBhcmdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwQnVpbGRDYWNoZVByb3ZpZGVyT3B0aW9ucyB7XG4gIHVybDogc3RyaW5nO1xuICB0b2tlbkhhbmRsZXI/OiBJSHR0cEJ1aWxkQ2FjaGVUb2tlbkhhbmRsZXI7XG4gIHVwbG9hZE1ldGhvZD86IHN0cmluZztcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNhY2hlS2V5UHJlZml4Pzogc3RyaW5nO1xuICBpc0NhY2hlV3JpdGVBbGxvd2VkOiBib29sZWFuO1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHJ1c2hQcm9qZWN0Um9vdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlciBpbXBsZW1lbnRzIElDbG91ZEJ1aWxkQ2FjaGVQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsdWdpbk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVzaFNlc3Npb246IFJ1c2hTZXNzaW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydXNoUHJvamVjdFJvb3Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZW52aXJvbm1lbnRDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb246IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VybDogVVJMO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cGxvYWRNZXRob2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVLZXlQcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5IYW5kbGVyOiBJSHR0cEJ1aWxkQ2FjaGVUb2tlbkhhbmRsZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX19jcmVkZW50aWFsQ2FjaGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBnZXQgaXNDYWNoZVdyaXRlQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRDb25maWd1cmF0aW9uLmJ1aWxkQ2FjaGVXcml0ZUFsbG93ZWQgPz8gdGhpcy5faXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBJSHR0cEJ1aWxkQ2FjaGVQcm92aWRlck9wdGlvbnMsIHJ1c2hTZXNzaW9uOiBSdXNoU2Vzc2lvbikge1xuICAgIHRoaXMuX3BsdWdpbk5hbWUgPSBvcHRpb25zLnBsdWdpbk5hbWU7XG4gICAgdGhpcy5fcnVzaFNlc3Npb24gPSBydXNoU2Vzc2lvbjtcbiAgICB0aGlzLl9ydXNoUHJvamVjdFJvb3QgPSBvcHRpb25zLnJ1c2hQcm9qZWN0Um9vdDtcblxuICAgIHRoaXMuX2Vudmlyb25tZW50Q3JlZGVudGlhbCA9IEVudmlyb25tZW50Q29uZmlndXJhdGlvbi5idWlsZENhY2hlQ3JlZGVudGlhbDtcbiAgICB0aGlzLl9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uID0gb3B0aW9ucy5pc0NhY2hlV3JpdGVBbGxvd2VkO1xuICAgIHRoaXMuX3VybCA9IG5ldyBVUkwob3B0aW9ucy51cmwuZW5kc1dpdGgoJy8nKSA/IG9wdGlvbnMudXJsIDogb3B0aW9ucy51cmwgKyAnLycpO1xuICAgIHRoaXMuX3VwbG9hZE1ldGhvZCA9IG9wdGlvbnMudXBsb2FkTWV0aG9kID8/ICdQVVQnO1xuICAgIHRoaXMuX2hlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgdGhpcy5fdG9rZW5IYW5kbGVyID0gb3B0aW9ucy50b2tlbkhhbmRsZXI7XG4gICAgdGhpcy5fY2FjaGVLZXlQcmVmaXggPSBvcHRpb25zLmNhY2hlS2V5UHJlZml4ID8/ICcnO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHRyeUdldENhY2hlRW50cnlCdWZmZXJCeUlkQXN5bmMoXG4gICAgdGVybWluYWw6IElUZXJtaW5hbCxcbiAgICBjYWNoZUlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cCh7XG4gICAgICAgIHRlcm1pbmFsOiB0ZXJtaW5hbCxcbiAgICAgICAgcmVsVXJsOiBgJHt0aGlzLl9jYWNoZUtleVByZWZpeH0ke2NhY2hlSWR9YCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICB3YXJuaW5nVGV4dDogJ0NvdWxkIG5vdCBnZXQgY2FjaGUgZW50cnknLFxuICAgICAgICByZWFkQm9keTogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIocmVzdWx0KSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZVdhcm5pbmdMaW5lKGBFcnJvciBnZXR0aW5nIGNhY2hlIGVudHJ5OiAke2V9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0cnlTZXRDYWNoZUVudHJ5QnVmZmVyQXN5bmMoXG4gICAgdGVybWluYWw6IElUZXJtaW5hbCxcbiAgICBjYWNoZUlkOiBzdHJpbmcsXG4gICAgb2JqZWN0QnVmZmVyOiBCdWZmZXJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzQ2FjaGVXcml0ZUFsbG93ZWQpIHtcbiAgICAgIHRlcm1pbmFsLndyaXRlRXJyb3JMaW5lKCdXcml0aW5nIHRvIGNhY2hlIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGVybWluYWwud3JpdGVEZWJ1Z0xpbmUoJ1VwbG9hZGluZyBvYmplY3Qgd2l0aCBjYWNoZUlkOiAnLCBjYWNoZUlkKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9odHRwKHtcbiAgICAgICAgdGVybWluYWw6IHRlcm1pbmFsLFxuICAgICAgICByZWxVcmw6IGAke3RoaXMuX2NhY2hlS2V5UHJlZml4fSR7Y2FjaGVJZH1gLFxuICAgICAgICBtZXRob2Q6IHRoaXMuX3VwbG9hZE1ldGhvZCxcbiAgICAgICAgYm9keTogb2JqZWN0QnVmZmVyLFxuICAgICAgICB3YXJuaW5nVGV4dDogJ0NvdWxkIG5vdCB3cml0ZSBjYWNoZSBlbnRyeScsXG4gICAgICAgIHJlYWRCb2R5OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQgIT09IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYEVycm9yIHVwbG9hZGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDYWNoZWRDcmVkZW50aWFsQXN5bmModGVybWluYWw6IElUZXJtaW5hbCwgY3JlZGVudGlhbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgQ3JlZGVudGlhbENhY2hlLnVzaW5nQXN5bmMoXG4gICAgICB7XG4gICAgICAgIHN1cHBvcnRFZGl0aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjcmVkZW50aWFsc0NhY2hlLnNldENhY2hlRW50cnkodGhpcy5fY3JlZGVudGlhbENhY2hlSWQsIHtcbiAgICAgICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBjcmVkZW50aWFsc0NhY2hlLnNhdmVJZk1vZGlmaWVkQXN5bmMoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUNhY2hlZENyZWRlbnRpYWxJbnRlcmFjdGl2ZUFzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX3Rva2VuSGFuZGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGludGVyYWN0aXZlIGNsb3VkIGNyZWRlbnRpYWxzIGZsb3cgaXMgbm90IGNvbmZpZ3VyZWQuXFxuYCArXG4gICAgICAgICAgYFNldCB0aGUgJ3Rva2VuSGFuZGxlcicgc2V0dGluZyBpbiAnY29tbW9uL2NvbmZpZy9ydXNoLXBsdWdpbnMvJHt0aGlzLl9wbHVnaW5OYW1lfS5qc29uJyB0byBhIGNvbW1hbmQgdGhhdCB3cml0ZXMgeW91ciBjcmVkZW50aWFscyB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXRzIHdpdGggY29kZSAwIGAgK1xuICAgICAgICAgIGBvciBwcm92aWRlIHlvdXIgY3JlZGVudGlhbHMgdG8gcnVzaCB1c2luZyB0aGUgLS1jcmVkZW50aWFsIGZsYWcgaW5zdGVhZC4gQ3JlZGVudGlhbHMgbXVzdCBiZSB0aGUgYCArXG4gICAgICAgICAgYCdBdXRob3JpemF0aW9uJyBoZWFkZXIgZXhwZWN0ZWQgYnkgJHt0aGlzLl91cmwuaHJlZn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNtZDogc3RyaW5nID0gYCR7dGhpcy5fdG9rZW5IYW5kbGVyLmV4ZWN9ICR7KHRoaXMuX3Rva2VuSGFuZGxlci5hcmdzIHx8IFtdKS5qb2luKCcgJyl9YDtcbiAgICB0ZXJtaW5hbC53cml0ZVZlcmJvc2VMaW5lKGBSdW5uaW5nICcke2NtZH0nIHRvIGdldCBjcmVkZW50aWFsc2ApO1xuICAgIGNvbnN0IHJlc3VsdCA9IEV4ZWN1dGFibGUuc3Bhd25TeW5jKHRoaXMuX3Rva2VuSGFuZGxlci5leGVjLCB0aGlzLl90b2tlbkhhbmRsZXIuYXJncyB8fCBbXSk7XG5cbiAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZShyZXN1bHQuc3RkZXJyKTtcblxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IG9idGFpbiBjcmVkZW50aWFscy4gVGhlIGNvbW1hbmQgJyR7Y21kfScgZmFpbGVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWRlbnRpYWwgPSByZXN1bHQuc3Rkb3V0LnRyaW0oKTtcbiAgICB0ZXJtaW5hbC53cml0ZVZlcmJvc2VMaW5lKCdHb3QgY3JlZGVudGlhbHMnKTtcblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEFzeW5jKHRlcm1pbmFsLCBjcmVkZW50aWFsKTtcblxuICAgIHRlcm1pbmFsLndyaXRlTGluZSgnVXBkYXRlZCBjcmVkZW50aWFscyBjYWNoZScpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUNhY2hlZENyZWRlbnRpYWxzQXN5bmModGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IENyZWRlbnRpYWxDYWNoZS51c2luZ0FzeW5jKFxuICAgICAge1xuICAgICAgICBzdXBwb3J0RWRpdGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGFzeW5jIChjcmVkZW50aWFsc0NhY2hlOiBDcmVkZW50aWFsQ2FjaGUpID0+IHtcbiAgICAgICAgY3JlZGVudGlhbHNDYWNoZS5kZWxldGVDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgICAgYXdhaXQgY3JlZGVudGlhbHNDYWNoZS5zYXZlSWZNb2RpZmllZEFzeW5jKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9jcmVkZW50aWFsQ2FjaGVJZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fX2NyZWRlbnRpYWxDYWNoZUlkKSB7XG4gICAgICBjb25zdCBjYWNoZUlkUGFydHM6IHN0cmluZ1tdID0gW3RoaXMuX3VybC5ocmVmXTtcblxuICAgICAgaWYgKHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY2FjaGVJZFBhcnRzLnB1c2goJ2NhY2hlV3JpdGVBbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZCA9IGNhY2hlSWRQYXJ0cy5qb2luKCd8Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2h0dHAob3B0aW9uczoge1xuICAgIHRlcm1pbmFsOiBJVGVybWluYWw7XG4gICAgcmVsVXJsOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgYm9keTogQm9keUluaXQgfCB1bmRlZmluZWQ7XG4gICAgd2FybmluZ1RleHQ6IHN0cmluZztcbiAgICByZWFkQm9keTogYm9vbGVhbjtcbiAgICBjcmVkZW50aWFsT3B0aW9ucz86IENyZWRlbnRpYWxzT3B0aW9ucztcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgYm9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdGVybWluYWwsIHJlbFVybCwgbWV0aG9kLCBib2R5LCB3YXJuaW5nVGV4dCwgcmVhZEJvZHksIGNyZWRlbnRpYWxPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHNhZmVDcmVkZW50aWFsT3B0aW9ucyA9IGNyZWRlbnRpYWxPcHRpb25zID8/IENyZWRlbnRpYWxzT3B0aW9ucy5PcHRpb25hbDtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuX3RyeUdldENyZWRlbnRpYWxzKHNhZmVDcmVkZW50aWFsT3B0aW9ucyk7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZWxVcmwsIHRoaXMuX3VybCkuaHJlZjtcblxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWxzID09PSAnc3RyaW5nJykge1xuICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gY3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5faGVhZGVycykpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJvZHlMZW5ndGggPSAoYm9keSBhcyB7IGxlbmd0aDogbnVtYmVyIH0pPy5sZW5ndGggfHwgJ3Vua25vd24nO1xuXG4gICAgdGVybWluYWwud3JpdGVEZWJ1Z0xpbmUoYFtodHRwLWJ1aWxkLWNhY2hlXSByZXF1ZXN0OiAke21ldGhvZH0gJHt1cmx9ICR7Ym9keUxlbmd0aH0gYnl0ZXNgKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWxzICE9PSAnc3RyaW5nJyAmJiBzYWZlQ3JlZGVudGlhbE9wdGlvbnMgPT09IENyZWRlbnRpYWxzT3B0aW9ucy5PcHRpb25hbCkge1xuICAgICAgICAvLyBXZSB0cmllZCBmZXRjaGluZyB0aGUgcmVzb3VyY2Ugd2l0aG91dCBjcmVkZW50aWFscyBhbmQgdGhhdCBkaWQgbm90IHdvcmsgb3V0XG4gICAgICAgIC8vIFRyeSBhZ2FpbiBidXQgcmVxdWlyZSBjcmVkZW50aWFscyB0aGlzIHRpbWVcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgdGhlIHByb3ZpZGVyIHRvIHJlcXVlc3QgY3JlZGVudGlhbHNcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHAoeyAuLi5vcHRpb25zLCBjcmVkZW50aWFsT3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLlJlcXVpcmVkIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXBvcnRGYWlsdXJlKHRlcm1pbmFsLCBtZXRob2QsIHJlc3BvbnNlLCBmYWxzZSwgd2FybmluZ1RleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQnVmZmVyIHwgYm9vbGVhbiA9IHJlYWRCb2R5ID8gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSkgOiB0cnVlO1xuXG4gICAgdGVybWluYWwud3JpdGVEZWJ1Z0xpbmUoXG4gICAgICBgW2h0dHAtYnVpbGQtY2FjaGVdIGFjdHVhbCByZXNwb25zZTogJHtyZXNwb25zZS5zdGF0dXN9ICR7dXJsfSAke1xuICAgICAgICByZXN1bHQgPT09IHRydWUgPyAndHJ1ZScgOiByZXN1bHQubGVuZ3RoXG4gICAgICB9IGJ5dGVzYFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLlJlcXVpcmVkKTogUHJvbWlzZTxzdHJpbmc+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWwpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzKG9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5PbWl0KTogUHJvbWlzZTx1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzKG9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKG9wdGlvbnMgPT09IENyZWRlbnRpYWxzT3B0aW9ucy5PbWl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNyZWRlbnRpYWxzOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLl9lbnZpcm9ubWVudENyZWRlbnRpYWw7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl90cnlHZXRDcmVkZW50aWFsc0Zyb21DYWNoZSgpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgIT09ICdzdHJpbmcnICYmIG9wdGlvbnMgPT09IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgYENyZWRlbnRpYWxzIGZvciAke3RoaXMuX3VybC5ocmVmfSBoYXZlIG5vdCBiZWVuIHByb3ZpZGVkLmAsXG4gICAgICAgICAgYEluIENJLCB2ZXJpZnkgdGhhdCBSVVNIX0JVSUxEX0NBQ0hFX0NSRURFTlRJQUwgY29udGFpbnMgYSB2YWxpZCBBdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZS5gLFxuICAgICAgICAgIGBgLFxuICAgICAgICAgIGBGb3IgbG9jYWwgZGV2ZWxvcGVycywgcnVuOmAsXG4gICAgICAgICAgYGAsXG4gICAgICAgICAgYCAgICBydXNoIHVwZGF0ZS1jbG91ZC1jcmVkZW50aWFscyAtLWludGVyYWN0aXZlYCxcbiAgICAgICAgICBgYFxuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVkZW50aWFscztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzRnJvbUNhY2hlKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGNhY2hlRW50cnk6IElDcmVkZW50aWFsQ2FjaGVFbnRyeSB8IHVuZGVmaW5lZDtcblxuICAgIGF3YWl0IENyZWRlbnRpYWxDYWNoZS51c2luZ0FzeW5jKFxuICAgICAge1xuICAgICAgICBzdXBwb3J0RWRpdGluZzogZmFsc2VcbiAgICAgIH0sXG4gICAgICAoY3JlZGVudGlhbHNDYWNoZTogQ3JlZGVudGlhbENhY2hlKSA9PiB7XG4gICAgICAgIGNhY2hlRW50cnkgPSBjcmVkZW50aWFsc0NhY2hlLnRyeUdldENhY2hlRW50cnkodGhpcy5fY3JlZGVudGlhbENhY2hlSWQpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoY2FjaGVFbnRyeSkge1xuICAgICAgY29uc3QgZXhwaXJhdGlvblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZCA9IGNhY2hlRW50cnkuZXhwaXJlcz8uZ2V0VGltZSgpO1xuICAgICAgaWYgKCFleHBpcmF0aW9uVGltZSB8fCBleHBpcmF0aW9uVGltZSA+PSBEYXRlLm5vdygpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZUVudHJ5LmNyZWRlbnRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RmFpbHVyZVR5cGUocmVxdWVzdE1ldGhvZDogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UsIGlzUmVkaXJlY3Q6IGJvb2xlYW4pOiBGYWlsdXJlVHlwZSB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gRmFpbHVyZVR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSA1MDM6IHtcbiAgICAgICAgLy8gV2Ugc2VsZWN0IDUwMyBzcGVjaWZpY2FsbHkgYmVjYXVzZSB0aGlzIHJlcHJlc2VudHMgXCJzZXJ2aWNlIHVuYXZhaWxhYmxlXCIgYW5kXG4gICAgICAgIC8vIFwicmF0ZSBsaW1pdCB0aHJvdHRsZVwiIGVycm9ycywgd2hpY2ggYXJlIHRyYW5zaWVudCBpc3N1ZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZXJlIGFyZSBvdGhlciA1eHggZXJyb3JzLCBzdWNoIGFzIDUwMSwgdGhhdCBjYW4gb2NjdXIgaWYgdGhlIHJlcXVlc3QgaXNcbiAgICAgICAgLy8gbWFsZm9ybWVkLCBzbyBhcyBhIGdlbmVyYWwgcnVsZSB3ZSB3YW50IHRvIGxldCB0aHJvdWdoIG90aGVyIDV4eCBlcnJvcnNcbiAgICAgICAgLy8gc28gdGhlIHVzZXIgY2FuIHRyb3VibGVzaG9vdC5cblxuICAgICAgICAvLyBEb24ndCBmYWlsIHByb2R1Y3Rpb24gYnVpbGRzIHdpdGggd2FybmluZ3MgZm9yIHRyYW5zaWVudCBpc3N1ZXNcbiAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLkluZm9ybWF0aW9uYWw7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgNDAxOlxuICAgICAgY2FzZSA0MDM6XG4gICAgICBjYXNlIDQwNzoge1xuICAgICAgICBpZiAocmVxdWVzdE1ldGhvZCA9PT0gJ0dFVCcgJiYgKGlzUmVkaXJlY3QgfHwgcmVzcG9uc2UucmVkaXJlY3RlZCkpIHtcbiAgICAgICAgICAvLyBDYWNoZSBtaXNzZXMgZm9yIEdFVCByZXF1ZXN0cyBhcmUgbm90IGVycm9yc1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlaGF2aW9yIHdoZXJlIGEgc2VydmVyIGNhbiBpc3N1ZSBhIHJlZGlyZWN0IGFuZCB3ZSBmYWlsIHRvIGF1dGhlbnRpY2F0ZSBhdCB0aGUgbmV3IGxvY2F0aW9uLlxuICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHNpZ25hbCB0aGlzIGFzIGFuIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgYmVjYXVzZSB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgbm90IHBhc3NlZCBvbiB0byByZWRpcmVjdHMuXG4gICAgICAgICAgLy8gaS5lIFRoZSBhdXRoZW50aWNhdGlvbiBoZWFkZXIgd2FzIGFjY2VwdGVkIGZvciB0aGUgZmlyc3QgcmVxdWVzdCBhbmQgdGhlcmVmb3JlIHN1YnNlcXVlbnQgZmFpbHVyZXNcbiAgICAgICAgICAvLyB3aGVyZSBpdCB3YXMgbm90IHByZXNlbnQgc2hvdWxkIG5vdCBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBoZWFkZXIuXG4gICAgICAgICAgLy8gVGhpcyBzY2VuYXJpbyB1c3VhbGx5IGNvbWVzIHVwIHdpdGggc2VydmljZXMgdGhhdCByZWRpcmVjdCB0byBwcmUtc2lnbmVkIFVSTFMgdGhhdCBkb24ndCBhY3R1YWxseSBleGlzdC5cbiAgICAgICAgICAvLyBUaG9zZSBzZXJ2aWNlcyB0aGVuIHVzdWFsbHkgdHJlYXQgdGhlIDQwNCBhcyBhIDQwMyB0byBwcmV2ZW50IGxlYWtpbmcgaW5mb3JtYXRpb24uXG4gICAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLk5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRmFpbHVyZVR5cGUuQXV0aGVudGljYXRpb247XG4gICAgICB9XG5cbiAgICAgIGNhc2UgNDA0OiB7XG4gICAgICAgIGlmIChyZXF1ZXN0TWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgIC8vIENhY2hlIG1pc3NlcyBmb3IgR0VUIHJlcXVlc3RzIGFyZSBub3QgZXJyb3JzXG4gICAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLk5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMZXQgZGV2IGJ1aWxkcyBzdWNjZWVkLCBsZXQgUHJvZCBidWlsZHMgZmFpbFxuICAgIHJldHVybiBGYWlsdXJlVHlwZS5XYXJuaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RmFpbHVyZShcbiAgICB0ZXJtaW5hbDogSVRlcm1pbmFsLFxuICAgIHJlcXVlc3RNZXRob2Q6IHN0cmluZyxcbiAgICByZXNwb25zZTogUmVzcG9uc2UsXG4gICAgaXNSZWRpcmVjdDogYm9vbGVhbixcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgc3dpdGNoICh0aGlzLl9nZXRGYWlsdXJlVHlwZShyZXF1ZXN0TWV0aG9kLCByZXNwb25zZSwgaXNSZWRpcmVjdCkpIHtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVFcnJvckxpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLldhcm5pbmc6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVXYXJuaW5nTGluZShgJHttZXNzYWdlfTogSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRmFpbHVyZVR5cGUuSW5mb3JtYXRpb25hbDoge1xuICAgICAgICB0ZXJtaW5hbC53cml0ZUxpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLk5vbmU6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVEZWJ1Z0xpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLkF1dGhlbnRpY2F0aW9uOiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgJHt0aGlzLl91cmwuaHJlZn0gcmVzcG9uZGVkIHdpdGggJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9LmAsXG4gICAgICAgICAgICBgQ3JlZGVudGlhbHMgbWF5IGJlIG1pc2NvbmZpZ3VyZWQgb3IgaGF2ZSBleHBpcmVkLmAsXG4gICAgICAgICAgICBgSW4gQ0ksIHZlcmlmeSB0aGF0IFJVU0hfQlVJTERfQ0FDSEVfQ1JFREVOVElBTCBjb250YWlucyBhIHZhbGlkIEF1dGhvcml6YXRpb24gaGVhZGVyIHZhbHVlLmAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGBGb3IgbG9jYWwgZGV2ZWxvcGVycywgcnVuOmAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAgICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZWAsXG4gICAgICAgICAgICBgYFxuICAgICAgICAgIF0uam9pbignXFxuJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgBK;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","names":["cov_ms2xfswbr","CredentialsOptions","FailureType","HttpBuildCacheProvider","constructor","options","rushSession","_pluginName","pluginName","_rushSession","_rushProjectRoot","rushProjectRoot","_environmentCredential","rush_sdk_1","buildCacheCredential","_isCacheWriteAllowedByConfiguration","isCacheWriteAllowed","_url","URL","url","endsWith","_uploadMethod","uploadMethod","_headers","headers","_tokenHandler","tokenHandler","_cacheKeyPrefix","cacheKeyPrefix","buildCacheWriteAllowed","tryGetCacheEntryBufferByIdAsync","terminal","cacheId","result","_http","relUrl","method","body","undefined","warningText","readBody","Buffer","isBuffer","e","writeWarningLine","trySetCacheEntryBufferAsync","objectBuffer","writeErrorLine","writeDebugLine","updateCachedCredentialAsync","credential","usingAsync","supportEditing","credentialsCache","setCacheEntry","_credentialCacheId","saveIfModifiedAsync","updateCachedCredentialInteractiveAsync","Error","href","cmd","exec","args","join","writeVerboseLine","node_core_library_1","spawnSync","stderr","error","stdout","trim","writeLine","deleteCachedCredentialsAsync","deleteCacheEntry","__credentialCacheId","cacheIdParts","push","credentialOptions","safeCredentialOptions","Optional","credentials","_tryGetCredentials","Authorization","key","value","Object","entries","bodyLength","length","response","redirect","ok","Required","_reportFailure","from","arrayBuffer","status","Omit","_tryGetCredentialsFromCache","cacheEntry","tryGetCacheEntry","expirationTime","expires","getTime","Date","now","_getFailureType","requestMethod","isRedirect","None","Informational","redirected","Authentication","Warning","message","statusText","exports"],"sources":["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts"],"sourcesContent":["import { ITerminal, Executable } from '@rushstack/node-core-library';\nimport {\n ICloudBuildCacheProvider,\n ICredentialCacheEntry,\n CredentialCache,\n RushSession,\n EnvironmentConfiguration\n} from '@rushstack/rush-sdk';\nimport fetch, { BodyInit, Response } from 'node-fetch';\n\nenum CredentialsOptions {\n Optional,\n Required,\n Omit\n}\n\nenum FailureType {\n None,\n Informational,\n Warning,\n Error,\n Authentication\n}\n\nexport interface IHttpBuildCacheTokenHandler {\n exec: string;\n args?: string[];\n}\n\n/**\n * @public\n */\nexport interface IHttpBuildCacheProviderOptions {\n url: string;\n tokenHandler?: IHttpBuildCacheTokenHandler;\n uploadMethod?: string;\n headers?: Record<string, string>;\n cacheKeyPrefix?: string;\n isCacheWriteAllowed: boolean;\n pluginName: string;\n rushProjectRoot: string;\n}\n\nexport class HttpBuildCacheProvider implements ICloudBuildCacheProvider {\n private readonly _pluginName: string;\n private readonly _rushSession: RushSession;\n private readonly _rushProjectRoot: string;\n private readonly _environmentCredential: string | undefined;\n private readonly _isCacheWriteAllowedByConfiguration: boolean;\n private readonly _url: URL;\n private readonly _uploadMethod: string;\n private readonly _headers: Record<string, string>;\n private readonly _cacheKeyPrefix: string;\n private readonly _tokenHandler: IHttpBuildCacheTokenHandler | undefined;\n private __credentialCacheId: string | undefined;\n\n public get isCacheWriteAllowed(): boolean {\n return EnvironmentConfiguration.buildCacheWriteAllowed ?? this._isCacheWriteAllowedByConfiguration;\n }\n\n public constructor(options: IHttpBuildCacheProviderOptions, rushSession: RushSession) {\n this._pluginName = options.pluginName;\n this._rushSession = rushSession;\n this._rushProjectRoot = options.rushProjectRoot;\n\n this._environmentCredential = EnvironmentConfiguration.buildCacheCredential;\n this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;\n this._url = new URL(options.url.endsWith('/') ? options.url : options.url + '/');\n this._uploadMethod = options.uploadMethod ?? 'PUT';\n this._headers = options.headers ?? {};\n this._tokenHandler = options.tokenHandler;\n this._cacheKeyPrefix = options.cacheKeyPrefix ?? '';\n }\n\n public async tryGetCacheEntryBufferByIdAsync(\n terminal: ITerminal,\n cacheId: string\n ): Promise<Buffer | undefined> {\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: 'GET',\n body: undefined,\n warningText: 'Could not get cache entry',\n readBody: true\n });\n\n return Buffer.isBuffer(result) ? result : undefined;\n } catch (e) {\n terminal.writeWarningLine(`Error getting cache entry: ${e}`);\n return undefined;\n }\n }\n\n public async trySetCacheEntryBufferAsync(\n terminal: ITerminal,\n cacheId: string,\n objectBuffer: Buffer\n ): Promise<boolean> {\n if (!this.isCacheWriteAllowed) {\n terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');\n return false;\n }\n\n terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);\n\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: this._uploadMethod,\n body: objectBuffer,\n warningText: 'Could not write cache entry',\n readBody: false\n });\n\n return result !== false;\n } catch (e) {\n terminal.writeWarningLine(`Error uploading cache entry: ${e}`);\n return false;\n }\n }\n\n public async updateCachedCredentialAsync(terminal: ITerminal, credential: string): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.setCacheEntry(this._credentialCacheId, {\n credential: credential\n });\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n public async updateCachedCredentialInteractiveAsync(terminal: ITerminal): Promise<void> {\n if (!this._tokenHandler) {\n throw new Error(\n `The interactive cloud credentials flow is not configured.\\n` +\n `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` +\n `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` +\n `'Authorization' header expected by ${this._url.href}`\n );\n }\n\n const cmd: string = `${this._tokenHandler.exec} ${(this._tokenHandler.args || []).join(' ')}`;\n terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);\n const result = Executable.spawnSync(this._tokenHandler.exec, this._tokenHandler.args || []);\n\n terminal.writeErrorLine(result.stderr);\n\n if (result.error) {\n throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);\n }\n\n const credential = result.stdout.trim();\n terminal.writeVerboseLine('Got credentials');\n\n await this.updateCachedCredentialAsync(terminal, credential);\n\n terminal.writeLine('Updated credentials cache');\n }\n\n public async deleteCachedCredentialsAsync(terminal: ITerminal): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.deleteCacheEntry(this._credentialCacheId);\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n private get _credentialCacheId(): string {\n if (!this.__credentialCacheId) {\n const cacheIdParts: string[] = [this._url.href];\n\n if (this._isCacheWriteAllowedByConfiguration) {\n cacheIdParts.push('cacheWriteAllowed');\n }\n\n this.__credentialCacheId = cacheIdParts.join('|');\n }\n\n return this.__credentialCacheId;\n }\n\n private async _http(options: {\n terminal: ITerminal;\n relUrl: string;\n method: string;\n body: BodyInit | undefined;\n warningText: string;\n readBody: boolean;\n credentialOptions?: CredentialsOptions;\n }): Promise<Buffer | boolean> {\n const { terminal, relUrl, method, body, warningText, readBody, credentialOptions } = options;\n const safeCredentialOptions = credentialOptions ?? CredentialsOptions.Optional;\n const credentials = await this._tryGetCredentials(safeCredentialOptions);\n const url = new URL(relUrl, this._url).href;\n\n const headers: Record<string, string> = {};\n if (typeof credentials === 'string') {\n headers.Authorization = credentials;\n }\n\n for (const [key, value] of Object.entries(this._headers)) {\n if (typeof value === 'string') {\n headers[key] = value;\n }\n }\n\n const bodyLength = (body as { length: number })?.length || 'unknown';\n\n terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);\n\n const response = await fetch(url, {\n method: method,\n headers: headers,\n body: body,\n redirect: 'follow'\n });\n\n if (!response.ok) {\n if (typeof credentials !== 'string' && safeCredentialOptions === CredentialsOptions.Optional) {\n // We tried fetching the resource without credentials and that did not work out\n // Try again but require credentials this time\n // This will trigger the provider to request credentials\n return await this._http({ ...options, credentialOptions: CredentialsOptions.Required });\n }\n\n this._reportFailure(terminal, method, response, false, warningText);\n return false;\n }\n\n const result: Buffer | boolean = readBody ? Buffer.from(await response.arrayBuffer()) : true;\n\n terminal.writeDebugLine(\n `[http-build-cache] actual response: ${response.status} ${url} ${\n result === true ? 'true' : result.length\n } bytes`\n );\n\n return result;\n }\n\n private async _tryGetCredentials(options: CredentialsOptions.Required): Promise<string>;\n private async _tryGetCredentials(options: CredentialsOptions.Optional): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions.Omit): Promise<undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined> {\n if (options === CredentialsOptions.Omit) {\n return;\n }\n\n let credentials: string | undefined = this._environmentCredential;\n\n if (credentials === undefined) {\n credentials = await this._tryGetCredentialsFromCache();\n }\n\n if (typeof credentials !== 'string' && options === CredentialsOptions.Required) {\n throw new Error(\n [\n `Credentials for ${this._url.href} have not been provided.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n\n return credentials;\n }\n\n private async _tryGetCredentialsFromCache(): Promise<string | undefined> {\n let cacheEntry: ICredentialCacheEntry | undefined;\n\n await CredentialCache.usingAsync(\n {\n supportEditing: false\n },\n (credentialsCache: CredentialCache) => {\n cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);\n }\n );\n\n if (cacheEntry) {\n const expirationTime: number | undefined = cacheEntry.expires?.getTime();\n if (!expirationTime || expirationTime >= Date.now()) {\n return cacheEntry.credential;\n }\n }\n }\n\n private _getFailureType(requestMethod: string, response: Response, isRedirect: boolean): FailureType {\n if (response.ok) {\n return FailureType.None;\n }\n\n switch (response.status) {\n case 503: {\n // We select 503 specifically because this represents \"service unavailable\" and\n // \"rate limit throttle\" errors, which are transient issues.\n //\n // There are other 5xx errors, such as 501, that can occur if the request is\n // malformed, so as a general rule we want to let through other 5xx errors\n // so the user can troubleshoot.\n\n // Don't fail production builds with warnings for transient issues\n return FailureType.Informational;\n }\n\n case 401:\n case 403:\n case 407: {\n if (requestMethod === 'GET' && (isRedirect || response.redirected)) {\n // Cache misses for GET requests are not errors\n // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.\n // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.\n // i.e The authentication header was accepted for the first request and therefore subsequent failures\n // where it was not present should not be attributed to the header.\n // This scenario usually comes up with services that redirect to pre-signed URLS that don't actually exist.\n // Those services then usually treat the 404 as a 403 to prevent leaking information.\n return FailureType.None;\n }\n\n return FailureType.Authentication;\n }\n\n case 404: {\n if (requestMethod === 'GET') {\n // Cache misses for GET requests are not errors\n return FailureType.None;\n }\n }\n }\n\n // Let dev builds succeed, let Prod builds fail\n return FailureType.Warning;\n }\n\n private _reportFailure(\n terminal: ITerminal,\n requestMethod: string,\n response: Response,\n isRedirect: boolean,\n message: string\n ): void {\n switch (this._getFailureType(requestMethod, response, isRedirect)) {\n default: {\n terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Warning: {\n terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Informational: {\n terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.None: {\n terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Authentication: {\n throw new Error(\n [\n `${this._url.href} responded with ${response.status}: ${response.statusText}.`,\n `Credentials may be misconfigured or have expired.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgBK;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","names":["CredentialsOptions","FailureType","HttpBuildCacheProvider","constructor","options","rushSession","_pluginName","pluginName","_rushSession","_rushProjectRoot","rushProjectRoot","_environmentCredential","rush_sdk_1","buildCacheCredential","_isCacheWriteAllowedByConfiguration","isCacheWriteAllowed","_url","URL","url","endsWith","_uploadMethod","uploadMethod","_headers","headers","_tokenHandler","tokenHandler","_cacheKeyPrefix","cacheKeyPrefix","buildCacheWriteAllowed","tryGetCacheEntryBufferByIdAsync","terminal","cacheId","result","_http","relUrl","method","body","undefined","warningText","readBody","Buffer","isBuffer","e","writeWarningLine","trySetCacheEntryBufferAsync","objectBuffer","writeErrorLine","writeDebugLine","updateCachedCredentialAsync","credential","usingAsync","supportEditing","credentialsCache","setCacheEntry","_credentialCacheId","saveIfModifiedAsync","updateCachedCredentialInteractiveAsync","Error","href","cmd","exec","args","join","writeVerboseLine","node_core_library_1","spawnSync","stderr","error","stdout","trim","writeLine","deleteCachedCredentialsAsync","deleteCacheEntry","__credentialCacheId","cacheIdParts","push","credentialOptions","safeCredentialOptions","Optional","credentials","_tryGetCredentials","Authorization","key","value","Object","entries","bodyLength","length","response","redirect","ok","Required","_reportFailure","from","arrayBuffer","status","Omit","_tryGetCredentialsFromCache","cacheEntry","tryGetCacheEntry","expirationTime","expires","getTime","Date","now","_getFailureType","requestMethod","isRedirect","None","Informational","redirected","Authentication","Warning","message","statusText","exports"],"sources":["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts"],"sourcesContent":["import { ITerminal, Executable } from '@rushstack/node-core-library';\nimport {\n ICloudBuildCacheProvider,\n ICredentialCacheEntry,\n CredentialCache,\n RushSession,\n EnvironmentConfiguration\n} from '@rushstack/rush-sdk';\nimport fetch, { BodyInit, Response } from 'node-fetch';\n\nenum CredentialsOptions {\n Optional,\n Required,\n Omit\n}\n\nenum FailureType {\n None,\n Informational,\n Warning,\n Error,\n Authentication\n}\n\nexport interface IHttpBuildCacheTokenHandler {\n exec: string;\n args?: string[];\n}\n\n/**\n * @public\n */\nexport interface IHttpBuildCacheProviderOptions {\n url: string;\n tokenHandler?: IHttpBuildCacheTokenHandler;\n uploadMethod?: string;\n headers?: Record<string, string>;\n cacheKeyPrefix?: string;\n isCacheWriteAllowed: boolean;\n pluginName: string;\n rushProjectRoot: string;\n}\n\nexport class HttpBuildCacheProvider implements ICloudBuildCacheProvider {\n private readonly _pluginName: string;\n private readonly _rushSession: RushSession;\n private readonly _rushProjectRoot: string;\n private readonly _environmentCredential: string | undefined;\n private readonly _isCacheWriteAllowedByConfiguration: boolean;\n private readonly _url: URL;\n private readonly _uploadMethod: string;\n private readonly _headers: Record<string, string>;\n private readonly _cacheKeyPrefix: string;\n private readonly _tokenHandler: IHttpBuildCacheTokenHandler | undefined;\n private __credentialCacheId: string | undefined;\n\n public get isCacheWriteAllowed(): boolean {\n return EnvironmentConfiguration.buildCacheWriteAllowed ?? this._isCacheWriteAllowedByConfiguration;\n }\n\n public constructor(options: IHttpBuildCacheProviderOptions, rushSession: RushSession) {\n this._pluginName = options.pluginName;\n this._rushSession = rushSession;\n this._rushProjectRoot = options.rushProjectRoot;\n\n this._environmentCredential = EnvironmentConfiguration.buildCacheCredential;\n this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;\n this._url = new URL(options.url.endsWith('/') ? options.url : options.url + '/');\n this._uploadMethod = options.uploadMethod ?? 'PUT';\n this._headers = options.headers ?? {};\n this._tokenHandler = options.tokenHandler;\n this._cacheKeyPrefix = options.cacheKeyPrefix ?? '';\n }\n\n public async tryGetCacheEntryBufferByIdAsync(\n terminal: ITerminal,\n cacheId: string\n ): Promise<Buffer | undefined> {\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: 'GET',\n body: undefined,\n warningText: 'Could not get cache entry',\n readBody: true\n });\n\n return Buffer.isBuffer(result) ? result : undefined;\n } catch (e) {\n terminal.writeWarningLine(`Error getting cache entry: ${e}`);\n return undefined;\n }\n }\n\n public async trySetCacheEntryBufferAsync(\n terminal: ITerminal,\n cacheId: string,\n objectBuffer: Buffer\n ): Promise<boolean> {\n if (!this.isCacheWriteAllowed) {\n terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');\n return false;\n }\n\n terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);\n\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: this._uploadMethod,\n body: objectBuffer,\n warningText: 'Could not write cache entry',\n readBody: false\n });\n\n return result !== false;\n } catch (e) {\n terminal.writeWarningLine(`Error uploading cache entry: ${e}`);\n return false;\n }\n }\n\n public async updateCachedCredentialAsync(terminal: ITerminal, credential: string): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.setCacheEntry(this._credentialCacheId, {\n credential: credential\n });\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n public async updateCachedCredentialInteractiveAsync(terminal: ITerminal): Promise<void> {\n if (!this._tokenHandler) {\n throw new Error(\n `The interactive cloud credentials flow is not configured.\\n` +\n `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` +\n `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` +\n `'Authorization' header expected by ${this._url.href}`\n );\n }\n\n const cmd: string = `${this._tokenHandler.exec} ${(this._tokenHandler.args || []).join(' ')}`;\n terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);\n const result = Executable.spawnSync(this._tokenHandler.exec, this._tokenHandler.args || []);\n\n terminal.writeErrorLine(result.stderr);\n\n if (result.error) {\n throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);\n }\n\n const credential = result.stdout.trim();\n terminal.writeVerboseLine('Got credentials');\n\n await this.updateCachedCredentialAsync(terminal, credential);\n\n terminal.writeLine('Updated credentials cache');\n }\n\n public async deleteCachedCredentialsAsync(terminal: ITerminal): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.deleteCacheEntry(this._credentialCacheId);\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n private get _credentialCacheId(): string {\n if (!this.__credentialCacheId) {\n const cacheIdParts: string[] = [this._url.href];\n\n if (this._isCacheWriteAllowedByConfiguration) {\n cacheIdParts.push('cacheWriteAllowed');\n }\n\n this.__credentialCacheId = cacheIdParts.join('|');\n }\n\n return this.__credentialCacheId;\n }\n\n private async _http(options: {\n terminal: ITerminal;\n relUrl: string;\n method: string;\n body: BodyInit | undefined;\n warningText: string;\n readBody: boolean;\n credentialOptions?: CredentialsOptions;\n }): Promise<Buffer | boolean> {\n const { terminal, relUrl, method, body, warningText, readBody, credentialOptions } = options;\n const safeCredentialOptions = credentialOptions ?? CredentialsOptions.Optional;\n const credentials = await this._tryGetCredentials(safeCredentialOptions);\n const url = new URL(relUrl, this._url).href;\n\n const headers: Record<string, string> = {};\n if (typeof credentials === 'string') {\n headers.Authorization = credentials;\n }\n\n for (const [key, value] of Object.entries(this._headers)) {\n if (typeof value === 'string') {\n headers[key] = value;\n }\n }\n\n const bodyLength = (body as { length: number })?.length || 'unknown';\n\n terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);\n\n const response = await fetch(url, {\n method: method,\n headers: headers,\n body: body,\n redirect: 'follow'\n });\n\n if (!response.ok) {\n if (typeof credentials !== 'string' && safeCredentialOptions === CredentialsOptions.Optional) {\n // We tried fetching the resource without credentials and that did not work out\n // Try again but require credentials this time\n // This will trigger the provider to request credentials\n return await this._http({ ...options, credentialOptions: CredentialsOptions.Required });\n }\n\n this._reportFailure(terminal, method, response, false, warningText);\n return false;\n }\n\n const result: Buffer | boolean = readBody ? Buffer.from(await response.arrayBuffer()) : true;\n\n terminal.writeDebugLine(\n `[http-build-cache] actual response: ${response.status} ${url} ${\n result === true ? 'true' : result.length\n } bytes`\n );\n\n return result;\n }\n\n private async _tryGetCredentials(options: CredentialsOptions.Required): Promise<string>;\n private async _tryGetCredentials(options: CredentialsOptions.Optional): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions.Omit): Promise<undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined> {\n if (options === CredentialsOptions.Omit) {\n return;\n }\n\n let credentials: string | undefined = this._environmentCredential;\n\n if (credentials === undefined) {\n credentials = await this._tryGetCredentialsFromCache();\n }\n\n if (typeof credentials !== 'string' && options === CredentialsOptions.Required) {\n throw new Error(\n [\n `Credentials for ${this._url.href} have not been provided.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n\n return credentials;\n }\n\n private async _tryGetCredentialsFromCache(): Promise<string | undefined> {\n let cacheEntry: ICredentialCacheEntry | undefined;\n\n await CredentialCache.usingAsync(\n {\n supportEditing: false\n },\n (credentialsCache: CredentialCache) => {\n cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);\n }\n );\n\n if (cacheEntry) {\n const expirationTime: number | undefined = cacheEntry.expires?.getTime();\n if (!expirationTime || expirationTime >= Date.now()) {\n return cacheEntry.credential;\n }\n }\n }\n\n private _getFailureType(requestMethod: string, response: Response, isRedirect: boolean): FailureType {\n if (response.ok) {\n return FailureType.None;\n }\n\n switch (response.status) {\n case 503: {\n // We select 503 specifically because this represents \"service unavailable\" and\n // \"rate limit throttle\" errors, which are transient issues.\n //\n // There are other 5xx errors, such as 501, that can occur if the request is\n // malformed, so as a general rule we want to let through other 5xx errors\n // so the user can troubleshoot.\n\n // Don't fail production builds with warnings for transient issues\n return FailureType.Informational;\n }\n\n case 401:\n case 403:\n case 407: {\n if (requestMethod === 'GET' && (isRedirect || response.redirected)) {\n // Cache misses for GET requests are not errors\n // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.\n // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.\n // i.e The authentication header was accepted for the first request and therefore subsequent failures\n // where it was not present should not be attributed to the header.\n // This scenario usually comes up with services that redirect to pre-signed URLS that don't actually exist.\n // Those services then usually treat the 404 as a 403 to prevent leaking information.\n return FailureType.None;\n }\n\n return FailureType.Authentication;\n }\n\n case 404: {\n if (requestMethod === 'GET') {\n // Cache misses for GET requests are not errors\n return FailureType.None;\n }\n }\n }\n\n // Let dev builds succeed, let Prod builds fail\n return FailureType.Warning;\n }\n\n private _reportFailure(\n terminal: ITerminal,\n requestMethod: string,\n response: Response,\n isRedirect: boolean,\n message: string\n ): void {\n switch (this._getFailureType(requestMethod, response, isRedirect)) {\n default: {\n terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Warning: {\n terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Informational: {\n terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.None: {\n terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Authentication: {\n throw new Error(\n [\n `${this._url.href} responded with ${response.status}: ${response.statusText}.`,\n `Credentials may be misconfigured or have expired.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n }\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
ba8171a7f5a89355e62f0cbaf3ee701a
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
/* istanbul ignore next */
|
|
@@ -359,4 +359,4 @@ class RushHttpBuildCachePlugin {
|
|
|
359
359
|
/* istanbul ignore next */
|
|
360
360
|
cov_ffzf8czsk().s[12]++;
|
|
361
361
|
exports.RushHttpBuildCachePlugin = RushHttpBuildCachePlugin;
|
|
362
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
362
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTBETTtJQUFBO01BQUE7SUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUExRE47QUFBQTtBQUFBO0FBSUEsTUFBTUEsNEJBQTRCO0FBQUE7QUFBQSx5QkFBOENDLDBCQUFNLENBQUNDLElBQUksQ0FDekYsMEJBQTBCLEVBQzFCQyxPQUFPLENBQ1I7QUFFRCxNQUFNQyxXQUFXO0FBQUE7QUFBQSx5QkFBVyxzQkFBc0I7QUF5Q2xEOzs7QUFHQSxNQUFhQyx3QkFBd0I7RUFBckNDO0lBQUE7SUFBQTtJQUFBO0lBQ2tCLGVBQVUsR0FBV0YsV0FBVztFQStCbEQ7RUE3QlNHLEtBQUssQ0FBQ0MsV0FBd0IsRUFBRUMsVUFBNkI7SUFBQTtJQUFBO0lBQUE7SUFDbEVELFdBQVcsQ0FBQ0UsS0FBSyxDQUFDQyxVQUFVLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUNDLFVBQVUsRUFBRSxNQUFLO01BQUE7TUFBQTtNQUFBO01BQ3JETCxXQUFXLENBQUNNLHNDQUFzQyxDQUNoRCxNQUFNLEVBQ0xDLGdCQUFnQixJQUE0QjtRQUFBO1FBQUE7UUFDM0MsTUFBTUMsTUFBTTtRQUFBO1FBQUEseUJBQ1ZELGdCQUdELENBQUNFLGlCQUFpQjtRQUVuQixNQUFNO1VBQUVDLEdBQUc7VUFBRUMsWUFBWTtVQUFFQyxPQUFPO1VBQUVDLFlBQVk7VUFBRUMsY0FBYztVQUFFQztRQUFtQixDQUFFO1FBQUE7UUFBQSx5QkFBR1AsTUFBTTtRQUVoRyxNQUFNUSxPQUFPO1FBQUE7UUFBQSwwQkFBbUM7VUFDOUNYLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7VUFDM0JZLGVBQWUsRUFBRWhCLFVBQVUsQ0FBQ2lCLGNBQWM7VUFDMUNSLEdBQUcsRUFBRUEsR0FBRztVQUNSQyxZQUFZLEVBQUVBLFlBQVk7VUFDMUJDLE9BQU8sRUFBRUEsT0FBTztVQUNoQkMsWUFBWSxFQUFFQSxZQUFZO1VBQzFCQyxjQUFjLEVBQUVBLGNBQWM7VUFDOUJDLG1CQUFtQixFQUFFLENBQUMsQ0FBQ0E7U0FDeEI7UUFBQztRQUFBO1FBRUYsT0FBTyxJQUFJdkIsNEJBQTRCLENBQUMyQixzQkFBc0IsQ0FBQ0gsT0FBTyxFQUFFaEIsV0FBVyxDQUFDO01BQ3RGLENBQUMsQ0FDRjtJQUNILENBQUMsQ0FBQztFQUNKOztBQUNEO0FBQUE7QUFoQ0RvQiIsIm5hbWVzIjpbIkh0dHBCdWlsZENhY2hlUHJvdmlkZXJNb2R1bGUiLCJub2RlX2NvcmVfbGlicmFyeV8xIiwibGF6eSIsInJlcXVpcmUiLCJQTFVHSU5fTkFNRSIsIlJ1c2hIdHRwQnVpbGRDYWNoZVBsdWdpbiIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJydXNoU2Vzc2lvbiIsInJ1c2hDb25maWciLCJob29rcyIsImluaXRpYWxpemUiLCJ0YXAiLCJwbHVnaW5OYW1lIiwicmVnaXN0ZXJDbG91ZEJ1aWxkQ2FjaGVQcm92aWRlckZhY3RvcnkiLCJidWlsZENhY2hlQ29uZmlnIiwiY29uZmlnIiwiaHR0cENvbmZpZ3VyYXRpb24iLCJ1cmwiLCJ1cGxvYWRNZXRob2QiLCJoZWFkZXJzIiwidG9rZW5IYW5kbGVyIiwiY2FjaGVLZXlQcmVmaXgiLCJpc0NhY2hlV3JpdGVBbGxvd2VkIiwib3B0aW9ucyIsInJ1c2hQcm9qZWN0Um9vdCIsInJ1c2hKc29uRm9sZGVyIiwiSHR0cEJ1aWxkQ2FjaGVQcm92aWRlciIsImV4cG9ydHMiXSwic291cmNlcyI6WyIvaG9tZS92c3RzL3dvcmsvMS9zL3J1c2gtcGx1Z2lucy9ydXNoLWh0dHAtYnVpbGQtY2FjaGUtcGx1Z2luL3NyYy9SdXNoSHR0cEJ1aWxkQ2FjaGVQbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW1wb3J0IH0gZnJvbSAnQHJ1c2hzdGFjay9ub2RlLWNvcmUtbGlicmFyeSc7XG5pbXBvcnQgdHlwZSB7IElSdXNoUGx1Z2luLCBSdXNoU2Vzc2lvbiwgUnVzaENvbmZpZ3VyYXRpb24gfSBmcm9tICdAcnVzaHN0YWNrL3J1c2gtc2RrJztcbmltcG9ydCB0eXBlIHsgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlciwgSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zIH0gZnJvbSAnLi9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyJztcblxuY29uc3QgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlck1vZHVsZTogdHlwZW9mIGltcG9ydCgnLi9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyJykgPSBJbXBvcnQubGF6eShcbiAgJy4vSHR0cEJ1aWxkQ2FjaGVQcm92aWRlcicsXG4gIHJlcXVpcmVcbik7XG5cbmNvbnN0IFBMVUdJTl9OQU1FOiBzdHJpbmcgPSAnSHR0cEJ1aWxkQ2FjaGVQbHVnaW4nO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUnVzaEh0dHBCdWlsZENhY2hlUGx1Z2luQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIHNlcnZlciB0aGF0IHN0b3JlcyB0aGUgY2FjaGVzIChlLmcuIFwiaHR0cHM6Ly9idWlsZC1jYWNoZXMuZXhhbXBsZS5jb21cIikuXG4gICAqL1xuICB1cmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEhUVFAgbWV0aG9kIHRvIHVzZSB3aGVuIHdyaXRpbmcgdG8gdGhlIGNhY2hlIChkZWZhdWx0cyB0byBQVVQpLlxuICAgKi9cbiAgdXBsb2FkTWV0aG9kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBzZXQgb2YgSFRUUCBoZWFkZXJzIHRvIHBhc3MgdG8gdGhlIGNhY2hlIHNlcnZlci5cbiAgICovXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBjb21tYW5kIHRoYXQgcHJpbnRzIHRoZSBlbmRwb2ludCdzIGNyZWRlbnRpYWxzIHRvIHN0ZG91dC4gUHJvdmlkZSB0aGVcbiAgICogY29tbWFuZCBvciBzY3JpcHQgdG8gZXhlY3V0ZSBhbmQsIG9wdGlvbmFsbHksIGFueSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgc2NyaXB0LlxuICAgKi9cbiAgdG9rZW5IYW5kbGVyPzoge1xuICAgIGV4ZWM6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gIH07XG5cbiAgLyoqXG4gICAqIFByZWZpeCBmb3IgY2FjaGUga2V5cy5cbiAgICovXG4gIGNhY2hlS2V5UHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYWxsb3cgd3JpdGluZyB0byB0aGUgY2FjaGUuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaXNDYWNoZVdyaXRlQWxsb3dlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgUnVzaEh0dHBCdWlsZENhY2hlUGx1Z2luIGltcGxlbWVudHMgSVJ1c2hQbHVnaW4ge1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nID0gUExVR0lOX05BTUU7XG5cbiAgcHVibGljIGFwcGx5KHJ1c2hTZXNzaW9uOiBSdXNoU2Vzc2lvbiwgcnVzaENvbmZpZzogUnVzaENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBydXNoU2Vzc2lvbi5ob29rcy5pbml0aWFsaXplLnRhcCh0aGlzLnBsdWdpbk5hbWUsICgpID0+IHtcbiAgICAgIHJ1c2hTZXNzaW9uLnJlZ2lzdGVyQ2xvdWRCdWlsZENhY2hlUHJvdmlkZXJGYWN0b3J5KFxuICAgICAgICAnaHR0cCcsXG4gICAgICAgIChidWlsZENhY2hlQ29uZmlnKTogSHR0cEJ1aWxkQ2FjaGVQcm92aWRlciA9PiB7XG4gICAgICAgICAgY29uc3QgY29uZmlnOiBJUnVzaEh0dHBCdWlsZENhY2hlUGx1Z2luQ29uZmlnID0gKFxuICAgICAgICAgICAgYnVpbGRDYWNoZUNvbmZpZyBhcyB0eXBlb2YgYnVpbGRDYWNoZUNvbmZpZyAmIHtcbiAgICAgICAgICAgICAgaHR0cENvbmZpZ3VyYXRpb246IElSdXNoSHR0cEJ1aWxkQ2FjaGVQbHVnaW5Db25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKS5odHRwQ29uZmlndXJhdGlvbjtcblxuICAgICAgICAgIGNvbnN0IHsgdXJsLCB1cGxvYWRNZXRob2QsIGhlYWRlcnMsIHRva2VuSGFuZGxlciwgY2FjaGVLZXlQcmVmaXgsIGlzQ2FjaGVXcml0ZUFsbG93ZWQgfSA9IGNvbmZpZztcblxuICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IElIdHRwQnVpbGRDYWNoZVByb3ZpZGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMucGx1Z2luTmFtZSxcbiAgICAgICAgICAgIHJ1c2hQcm9qZWN0Um9vdDogcnVzaENvbmZpZy5ydXNoSnNvbkZvbGRlcixcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgdXBsb2FkTWV0aG9kOiB1cGxvYWRNZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgdG9rZW5IYW5kbGVyOiB0b2tlbkhhbmRsZXIsXG4gICAgICAgICAgICBjYWNoZUtleVByZWZpeDogY2FjaGVLZXlQcmVmaXgsXG4gICAgICAgICAgICBpc0NhY2hlV3JpdGVBbGxvd2VkOiAhIWlzQ2FjaGVXcml0ZUFsbG93ZWRcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBIdHRwQnVpbGRDYWNoZVByb3ZpZGVyTW9kdWxlLkh0dHBCdWlsZENhY2hlUHJvdmlkZXIob3B0aW9ucywgcnVzaFNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0DM;
|
|
1
|
+
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0DM;IAAA;MAAA;IAAA;EAAA;EAAA;AAAA;AAAA;AAAA;;;;;;;AA1DN;AAAA;AAAA;AAIA,MAAMA,4BAA4B;AAAA;AAAA,yBAA8CC,0BAAM,CAACC,IAAI,CACzF,0BAA0B,EAC1BC,OAAO,CACR;AAED,MAAMC,WAAW;AAAA;AAAA,yBAAW,sBAAsB;AAyClD;;;AAGA,MAAaC,wBAAwB;EAArCC;IAAA;IAAA;IAAA;IACkB,eAAU,GAAWF,WAAW;EA+BlD;EA7BSG,KAAK,CAACC,WAAwB,EAAEC,UAA6B;IAAA;IAAA;IAAA;IAClED,WAAW,CAACE,KAAK,CAACC,UAAU,CAACC,GAAG,CAAC,IAAI,CAACC,UAAU,EAAE,MAAK;MAAA;MAAA;MAAA;MACrDL,WAAW,CAACM,sCAAsC,CAChD,MAAM,EACLC,gBAAgB,IAA4B;QAAA;QAAA;QAC3C,MAAMC,MAAM;QAAA;QAAA,yBACVD,gBAGD,CAACE,iBAAiB;QAEnB,MAAM;UAAEC,GAAG;UAAEC,YAAY;UAAEC,OAAO;UAAEC,YAAY;UAAEC,cAAc;UAAEC;QAAmB,CAAE;QAAA;QAAA,yBAAGP,MAAM;QAEhG,MAAMQ,OAAO;QAAA;QAAA,0BAAmC;UAC9CX,UAAU,EAAE,IAAI,CAACA,UAAU;UAC3BY,eAAe,EAAEhB,UAAU,CAACiB,cAAc;UAC1CR,GAAG,EAAEA,GAAG;UACRC,YAAY,EAAEA,YAAY;UAC1BC,OAAO,EAAEA,OAAO;UAChBC,YAAY,EAAEA,YAAY;UAC1BC,cAAc,EAAEA,cAAc;UAC9BC,mBAAmB,EAAE,CAAC,CAACA;SACxB;QAAC;QAAA;QAEF,OAAO,IAAIvB,4BAA4B,CAAC2B,sBAAsB,CAACH,OAAO,EAAEhB,WAAW,CAAC;MACtF,CAAC,CACF;IACH,CAAC,CAAC;EACJ;;AACD;AAAA;AAhCDoB","names":["HttpBuildCacheProviderModule","node_core_library_1","lazy","require","PLUGIN_NAME","RushHttpBuildCachePlugin","constructor","apply","rushSession","rushConfig","hooks","initialize","tap","pluginName","registerCloudBuildCacheProviderFactory","buildCacheConfig","config","httpConfiguration","url","uploadMethod","headers","tokenHandler","cacheKeyPrefix","isCacheWriteAllowed","options","rushProjectRoot","rushJsonFolder","HttpBuildCacheProvider","exports"],"sources":["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/RushHttpBuildCachePlugin.ts"],"sourcesContent":["import { Import } from '@rushstack/node-core-library';\nimport type { IRushPlugin, RushSession, RushConfiguration } from '@rushstack/rush-sdk';\nimport type { HttpBuildCacheProvider, IHttpBuildCacheProviderOptions } from './HttpBuildCacheProvider';\n\nconst HttpBuildCacheProviderModule: typeof import('./HttpBuildCacheProvider') = Import.lazy(\n './HttpBuildCacheProvider',\n require\n);\n\nconst PLUGIN_NAME: string = 'HttpBuildCachePlugin';\n\n/**\n * @public\n */\nexport interface IRushHttpBuildCachePluginConfig {\n /**\n * The URL of the server that stores the caches (e.g. \"https://build-caches.example.com\").\n */\n url: string;\n\n /**\n * The HTTP method to use when writing to the cache (defaults to PUT).\n */\n uploadMethod?: string;\n\n /**\n * An optional set of HTTP headers to pass to the cache server.\n */\n headers?: Record<string, string>;\n\n /**\n * An optional command that prints the endpoint's credentials to stdout. Provide the\n * command or script to execute and, optionally, any arguments to pass to the script.\n */\n tokenHandler?: {\n exec: string;\n args?: string[];\n };\n\n /**\n * Prefix for cache keys.\n */\n cacheKeyPrefix?: string;\n\n /**\n * If set to true, allow writing to the cache. Defaults to false.\n */\n isCacheWriteAllowed?: boolean;\n}\n\n/**\n * @public\n */\nexport class RushHttpBuildCachePlugin implements IRushPlugin {\n public readonly pluginName: string = PLUGIN_NAME;\n\n public apply(rushSession: RushSession, rushConfig: RushConfiguration): void {\n rushSession.hooks.initialize.tap(this.pluginName, () => {\n rushSession.registerCloudBuildCacheProviderFactory(\n 'http',\n (buildCacheConfig): HttpBuildCacheProvider => {\n const config: IRushHttpBuildCachePluginConfig = (\n buildCacheConfig as typeof buildCacheConfig & {\n httpConfiguration: IRushHttpBuildCachePluginConfig;\n }\n ).httpConfiguration;\n\n const { url, uploadMethod, headers, tokenHandler, cacheKeyPrefix, isCacheWriteAllowed } = config;\n\n const options: IHttpBuildCacheProviderOptions = {\n pluginName: this.pluginName,\n rushProjectRoot: rushConfig.rushJsonFolder,\n url: url,\n uploadMethod: uploadMethod,\n headers: headers,\n tokenHandler: tokenHandler,\n cacheKeyPrefix: cacheKeyPrefix,\n isCacheWriteAllowed: !!isCacheWriteAllowed\n };\n\n return new HttpBuildCacheProviderModule.HttpBuildCacheProvider(options, rushSession);\n }\n );\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.test.ts":[1,
|
|
1
|
+
{"/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.test.ts":[1,724]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
This project does not define the caching behavior of the "_phase:test" command, so caching has been disabled.
|
|
2
|
+
Invoking: heft test --no-build --production
|
|
3
|
+
Using local Heft from /home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/node_modules/@rushstack/heft
|
|
4
|
+
|
|
5
|
+
Project build folder is "/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin"
|
|
6
|
+
Using rig configuration from ./node_modules/@rushstack/heft-node-rig/profiles/default
|
|
7
|
+
Starting test
|
|
8
|
+
[jest] Using Jest version 29.5.0
|
|
9
|
+
|
|
10
|
+
Run start. 1 test suite
|
|
11
|
+
START src/HttpBuildCacheProvider.test.ts
|
|
12
|
+
PASS src/HttpBuildCacheProvider.test.ts (duration: 0.724s, 1 passed, 0 failed)
|
|
13
|
+
|
|
14
|
+
Tests finished:
|
|
15
|
+
Successes: 1
|
|
16
|
+
Failures: 0
|
|
17
|
+
Total: 1
|
|
18
|
+
-----------------------------|---------|----------|---------|---------|---------------------------------------------------
|
|
19
|
+
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
20
|
+
-----------------------------|---------|----------|---------|---------|---------------------------------------------------
|
|
21
|
+
All files | 42.74 | 39.02 | 40.9 | 42.74 |
|
|
22
|
+
HttpBuildCacheProvider.ts | 47.45 | 39.02 | 50 | 47.45 | 58,89,101-174,184,209,213-214,237-249,258,297-380
|
|
23
|
+
RushHttpBuildCachePlugin.ts | 0 | 100 | 0 | 0 | 1-81
|
|
24
|
+
index.ts | 0 | 100 | 100 | 0 | 1-3
|
|
25
|
+
-----------------------------|---------|----------|---------|---------|---------------------------------------------------
|
|
26
|
+
-------------------- Finished (1.873s) --------------------
|
|
27
|
+
Project: @rushstack/rush-http-build-cache-plugin@5.97.1
|
|
28
|
+
Heft version: 0.50.0
|
|
29
|
+
Node version: v14.21.3
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"rush-plugins/rush-http-build-cache-plugin/README.md": "d8468855d6f34e6f4cc79b6a3f05d57e0b1aaf83",
|
|
4
4
|
"rush-plugins/rush-http-build-cache-plugin/config/jest.config.json": "fa6760fad1e1c41d73a7b6e38783d941a7c969dd",
|
|
5
5
|
"rush-plugins/rush-http-build-cache-plugin/config/rig.json": "f497ba3bb0a8bcb25471bfc11342bd9278d7c4c7",
|
|
6
|
-
"rush-plugins/rush-http-build-cache-plugin/package.json": "
|
|
6
|
+
"rush-plugins/rush-http-build-cache-plugin/package.json": "e08240f7c8e8d65a0a54cd1372b0b35f777e30c8",
|
|
7
7
|
"rush-plugins/rush-http-build-cache-plugin/rush-plugin-manifest.json": "126dfa796b3ce186d8a6892e8bdd26da17d88a57",
|
|
8
8
|
"rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.test.ts": "e5ec316a00a8bd8626fcfd0340e72a1704427be4",
|
|
9
9
|
"rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts": "cb77033abae83e2f2f4b6ea08e2c4672a3dee03c",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"rush-plugins/rush-http-build-cache-plugin/src/index.ts": "17e67ac185927e9c650b3c3004cc00d9ad996bb5",
|
|
12
12
|
"rush-plugins/rush-http-build-cache-plugin/src/schemas/plugin-config.schema.json": "abd50212fa286348eb3dc493c14f1794487756f4",
|
|
13
13
|
"rush-plugins/rush-http-build-cache-plugin/tsconfig.json": "6798ece734411b68717f5951516928084866c250",
|
|
14
|
-
"rush-plugins/rush-http-build-cache-plugin/.rush/temp/shrinkwrap-deps.json": "
|
|
14
|
+
"rush-plugins/rush-http-build-cache-plugin/.rush/temp/shrinkwrap-deps.json": "3fddc062a66b13bc08832b2600412cfb97ebfcdd"
|
|
15
15
|
},
|
|
16
16
|
"arguments": "heft build --clean --production"
|
|
17
17
|
}
|