@kontur.candy/tools 2.160.0-linux-compat.1 → 2.160.0-linux-compat.3

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/distr/Common/AutoValidationUtils.js +9 -0
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +29 -14
  4. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +8 -20
  5. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +4 -9
  6. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +8 -27
  7. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +8 -10
  8. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  9. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +4 -8
  10. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +18 -14
  11. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  12. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  13. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  14. package/distr/Common/EndPoints.js +4 -2
  15. package/distr/Common/FSPrinterClient/FSPrinterClient.js +136 -0
  16. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +19 -0
  17. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +44 -0
  18. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +53 -0
  19. package/distr/Common/ModelPath/BuildIterationSequence.js +20 -1
  20. package/distr/Common/ModelPath/Map/Map2.js +14 -1
  21. package/distr/Common/ModelPath/ModelPath.js +41 -69
  22. package/distr/Common/ModelPath/ModelPathHelper.js +23 -1
  23. package/distr/Common/ModelPath/Set/Set2.js +7 -2
  24. package/distr/Common/PicklistApiClient/IPicklistApiClient.js +6 -0
  25. package/distr/Common/PicklistApiClient/PicklistApiClient.js +30 -0
  26. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +34 -0
  27. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +53 -0
  28. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +37 -0
  29. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +6 -0
  30. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +6 -0
  31. package/distr/Common/StringArrayKey.js +4 -2
  32. package/distr/Common/getRngSchemaFilename.js +10 -4
  33. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -2
  34. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  35. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  36. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +182 -171
  37. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  38. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +192 -192
  39. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  40. package/package.json +2 -2
  41. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -6
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PathTokens = exports.ModelPathImpl = exports.AbsoluteModelFieldPath = void 0;
6
+ exports.PathTokens = exports.ModelPathImpl = void 0;
7
7
  exports.convertToAbsoluteModelPath = convertToAbsoluteModelPath;
8
8
  exports.convertToLegacyPath = convertToLegacyPath;
9
9
  exports.createAbsolute = createAbsolute;
@@ -20,7 +20,6 @@ exports.isModelPath = isModelPath;
20
20
  exports.joinModelPaths = joinModelPaths;
21
21
  var _IterableUtils = require("../IterableUtils");
22
22
  var _TypingUtils = require("../TypingUtils");
23
- var _hashUtils = require("../hashUtils");
24
23
  var _EachCurrentCollision = require("./EachCurrentCollision");
25
24
  var _ModelPathBuilder = require("./ModelPathBuilder");
26
25
  var _PathMatcher = require("./PathMatcher");
@@ -36,6 +35,9 @@ class PathTokens {
36
35
  static isInstanceToken(part) {
37
36
  return typeof part === "string" && /^\d+$/i.test(part);
38
37
  }
38
+ static isInstanceTokenOrInstancesSpec(part) {
39
+ return typeof part === "string" && (/^\d+$/i.test(part) || /^\[(\d+\,?)+\]$/i.test(part));
40
+ }
39
41
  }
40
42
  exports.PathTokens = PathTokens;
41
43
  PathTokens.each = EachSymbol;
@@ -140,48 +142,6 @@ function joinModelPaths(...parts) {
140
142
  }
141
143
  return new ModelPathImpl(resultParts, absolute);
142
144
  }
143
- class AbsoluteModelFieldPath {
144
- constructor(path, fieldName) {
145
- this.path = void 0;
146
- this.field = void 0;
147
- this.path = path;
148
- this.field = fieldName;
149
- }
150
- getHash() {
151
- return this.path.getHash() + (0, _hashUtils.getSimpleHashByString)(this.field);
152
- }
153
- isEquals(modelPath, eachCurrentCollision = _EachCurrentCollision.EachCurrentCollision.AreSame) {
154
- return this.path.isEquals(modelPath.path, eachCurrentCollision) && this.field === modelPath.field;
155
- }
156
- static createFromString(pathWithFieldName) {
157
- if (pathWithFieldName.endsWith(".$errorCount")) {
158
- return new AbsoluteModelFieldPath(createAbsolute(pathWithFieldName.replace(".$errorCount", "")), "$errorCount");
159
- }
160
- if (pathWithFieldName.endsWith(".$warningCount")) {
161
- return new AbsoluteModelFieldPath(createAbsolute(pathWithFieldName.replace(".$warningCount", "")), "$warningCount");
162
- }
163
- return new AbsoluteModelFieldPath(createAbsolute(pathWithFieldName), "value");
164
- }
165
- static createFromMask(pathWithFieldName, multiplicitySymbol) {
166
- if (pathWithFieldName.endsWith(".$errorCount")) {
167
- return new AbsoluteModelFieldPath(createAbsoluteFromMask(pathWithFieldName.replace(".$errorCount", ""), multiplicitySymbol), "$errorCount");
168
- }
169
- if (pathWithFieldName.endsWith(".$warningCount")) {
170
- return new AbsoluteModelFieldPath(createAbsoluteFromMask(pathWithFieldName.replace(".$warningCount", ""), multiplicitySymbol), "$warningCount");
171
- }
172
- if (pathWithFieldName.endsWith(".errorsCount")) {
173
- return new AbsoluteModelFieldPath(createAbsoluteFromMask(pathWithFieldName.replace(".errorsCount", ""), multiplicitySymbol), "errorsCount");
174
- }
175
- if (pathWithFieldName.endsWith(".warningsCount")) {
176
- return new AbsoluteModelFieldPath(createAbsoluteFromMask(pathWithFieldName.replace(".warningsCount", ""), multiplicitySymbol), "warningsCount");
177
- }
178
- return new AbsoluteModelFieldPath(createAbsoluteFromMask(pathWithFieldName, multiplicitySymbol), "value");
179
- }
180
- toString() {
181
- return `${this.path.toLegacyPath()}.${this.field}`;
182
- }
183
- }
184
- exports.AbsoluteModelFieldPath = AbsoluteModelFieldPath;
185
145
  function isAllTokensResolved(tokens) {
186
146
  // Я что-то немогу сообразить как тут всё строго написать...
187
147
  // @ts-expect-error
@@ -192,6 +152,7 @@ class ModelPathImpl {
192
152
  this.tokens = void 0;
193
153
  this.absolute = void 0;
194
154
  this.legacyPath = void 0;
155
+ this.cachedHash = void 0;
195
156
  this.tokens = pathParts.filter(x => x !== "");
196
157
  this.absolute = absolute;
197
158
  }
@@ -245,6 +206,9 @@ class ModelPathImpl {
245
206
  isContainCurrentIteration() {
246
207
  return this.tokens.some(x => x === PathTokens.current);
247
208
  }
209
+ isContainCurrentOrEachIteration() {
210
+ return this.tokens.some(x => x === PathTokens.current || x === PathTokens.each);
211
+ }
248
212
  getLastListPath() {
249
213
  if (!this.isContainIteration()) {
250
214
  throw new Error("Path must contain iteration");
@@ -259,6 +223,10 @@ class ModelPathImpl {
259
223
  const lastItem = _IterableUtils.IterUtils.last(this.tokens);
260
224
  return lastItem == PathTokens.each;
261
225
  }
226
+ isEndsWithCurrentIteration() {
227
+ const lastItem = _IterableUtils.IterUtils.last(this.tokens);
228
+ return lastItem == PathTokens.current;
229
+ }
262
230
  isAbsolute() {
263
231
  return this.absolute;
264
232
  }
@@ -284,32 +252,35 @@ class ModelPathImpl {
284
252
  * Всегда целое положительное беззнаковое 32-битное число
285
253
  */
286
254
  getHash(eachCurrentCollision = _EachCurrentCollision.EachCurrentCollision.AreSame) {
287
- let hash = 5381;
288
- for (const token of (0, _IterableUtils.reverseArray)(this.tokens)) {
289
- let currentStr;
290
- if (PathTokens.isSimpleToken(token)) {
291
- currentStr = token;
292
- } else {
293
- if (eachCurrentCollision === _EachCurrentCollision.EachCurrentCollision.AreDifferent) {
294
- currentStr = token === PathTokens.each ? "*" : "!";
255
+ if (this.cachedHash == undefined) {
256
+ let hash = 5381;
257
+ for (const token of (0, _IterableUtils.reverseArray)(this.tokens)) {
258
+ let currentStr;
259
+ if (PathTokens.isSimpleToken(token)) {
260
+ currentStr = token;
295
261
  } else {
296
- currentStr = "*";
262
+ if (eachCurrentCollision === _EachCurrentCollision.EachCurrentCollision.AreDifferent) {
263
+ currentStr = token === PathTokens.each ? "*" : "!";
264
+ } else {
265
+ currentStr = "*";
266
+ }
267
+ }
268
+ let stringIndex = currentStr.length;
269
+ while (stringIndex) {
270
+ // tslint:disable-next-line:no-bitwise
271
+ hash = hash * 33 ^ currentStr.charCodeAt(--stringIndex);
297
272
  }
298
273
  }
299
- let stringIndex = currentStr.length;
300
- while (stringIndex) {
301
- // tslint:disable-next-line:no-bitwise
302
- hash = hash * 33 ^ currentStr.charCodeAt(--stringIndex);
303
- }
304
- }
305
274
 
306
- /*
307
- tslint:disable-next-line:no-bitwise
308
- JavaScript does bitwise operations (like XOR, above) on 32-bit signed
309
- integers. Since we want the results to be always positive, convert the
310
- signed int to an unsigned by doing an unsigned bitshift.
311
- */
312
- return hash >>> 0;
275
+ /*
276
+ tslint:disable-next-line:no-bitwise
277
+ JavaScript does bitwise operations (like XOR, above) on 32-bit signed
278
+ integers. Since we want the results to be always positive, convert the
279
+ signed int to an unsigned by doing an unsigned bitshift.
280
+ */
281
+ this.cachedHash = hash >>> 0;
282
+ }
283
+ return this.cachedHash;
313
284
  }
314
285
  isIncludes(modelPath) {
315
286
  const targetTokens = modelPath.getPathPartsAsArray();
@@ -449,7 +420,7 @@ class ModelPathImpl {
449
420
  // @ts-expect-error
450
421
  return result.toPath();
451
422
  }
452
- applyInstancesDirty(instances) {
423
+ applyInstancesDirty(instances, fillWithMultiplicityIfHasNoInstance) {
453
424
  if (this.isResolved() || instances.length === 0) {
454
425
  return this;
455
426
  }
@@ -458,7 +429,8 @@ class ModelPathImpl {
458
429
  for (const token of this.getPathParts()) {
459
430
  if (PathTokens.isMultiToken(token) && instanceCounter < instances.length) {
460
431
  var _instances$instanceCo;
461
- result.append((_instances$instanceCo = instances[instanceCounter]) !== null && _instances$instanceCo !== void 0 ? _instances$instanceCo : (0, _TypingUtils.reject)());
432
+ const instanceOrEach = (_instances$instanceCo = instances[instanceCounter]) !== null && _instances$instanceCo !== void 0 ? _instances$instanceCo : fillWithMultiplicityIfHasNoInstance == true ? PathTokens.each : (0, _TypingUtils.reject)();
433
+ result.append(instanceOrEach);
462
434
  instanceCounter++;
463
435
  } else {
464
436
  result.append(token);
@@ -482,4 +454,4 @@ class ModelPathImpl {
482
454
  }
483
455
  }
484
456
  exports.ModelPathImpl = ModelPathImpl;
485
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSXRlcmFibGVVdGlscyIsInJlcXVpcmUiLCJfVHlwaW5nVXRpbHMiLCJfaGFzaFV0aWxzIiwiX0VhY2hDdXJyZW50Q29sbGlzaW9uIiwiX01vZGVsUGF0aEJ1aWxkZXIiLCJfUGF0aE1hdGNoZXIiLCJFYWNoU3ltYm9sIiwiU3ltYm9sIiwiZm9yIiwiQ3VycmVudFN5bWJvbCIsIlBhdGhUb2tlbnMiLCJpc011bHRpVG9rZW4iLCJwYXJ0IiwiZWFjaCIsImN1cnJlbnQiLCJpc1NpbXBsZVRva2VuIiwiaXNJbnN0YW5jZVRva2VuIiwidGVzdCIsImV4cG9ydHMiLCJpc01vZGVsUGF0aCIsInBhdGgiLCJNb2RlbFBhdGhJbXBsIiwiY29udmVydFRvTGVnYWN5UGF0aCIsInRvTGVnYWN5UGF0aCIsImNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tTWFzayIsImVtcHR5TW9kZWxQYXRoIiwiZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZU1vZGVsUGF0aCIsImFic29sdXRlIiwicGFydFBhcnRTdHJpbmdzIiwic3BsaXQiLCJlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5Iiwic3RhcnRzV2l0aCIsInNsaWNlIiwiY3JlYXRlRnJvbU1hc2siLCJtdWx0aXBsaWNpdHlTeW1ib2wiLCJtYXAiLCJ4IiwicGFydHMiLCJzb21lIiwiRXJyb3IiLCJjcmVhdGVBYnNvbHV0ZSIsImNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJ0b2tlbnMiLCJjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImpvaW5Nb2RlbFBhdGhzIiwicmVzdWx0UGFydHMiLCJqb2luSXRlbSIsInB1c2giLCJpc0Fic29sdXRlIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIkFic29sdXRlTW9kZWxGaWVsZFBhdGgiLCJjb25zdHJ1Y3RvciIsImZpZWxkTmFtZSIsImZpZWxkIiwiZ2V0SGFzaCIsImdldFNpbXBsZUhhc2hCeVN0cmluZyIsImlzRXF1YWxzIiwibW9kZWxQYXRoIiwiZWFjaEN1cnJlbnRDb2xsaXNpb24iLCJFYWNoQ3VycmVudENvbGxpc2lvbiIsIkFyZVNhbWUiLCJjcmVhdGVGcm9tU3RyaW5nIiwicGF0aFdpdGhGaWVsZE5hbWUiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJ0b1N0cmluZyIsImlzQWxsVG9rZW5zUmVzb2x2ZWQiLCJldmVyeSIsInBhdGhQYXJ0cyIsImxlZ2FjeVBhdGgiLCJmaWx0ZXIiLCJyZXNvbHZlZCIsImdldFBhdGhQYXJ0cyIsImdldFNpbXBsZVRva2Vuc1N0cmljdCIsInRva2VuIiwiZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCIsImpvaW5XaXRoIiwiaXNSZXNvbHZlZCIsInJlc29sdmVBbGwiLCJpbnN0YW5jZSIsImlzQ29udGFpbkl0ZXJhdGlvbiIsImlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24iLCJnZXRMYXN0TGlzdFBhdGgiLCJsYXN0SXRlcmF0aW9uSW5kZXgiLCJsYXN0SW5kZXhPZiIsImlzRW5kc1dpdGhJdGVyYXRpb24iLCJsYXN0SXRlbSIsIkl0ZXJVdGlscyIsImxhc3QiLCJsZW5ndGgiLCJwYXRoUGFydFRvU3RyaW5nIiwiam9pbiIsIl90aGlzJGxlZ2FjeVBhdGgiLCJJdGVyYXRvciIsImZyb20iLCJ6aXAiLCJ0MSIsInQyIiwiaGFzaCIsInJldmVyc2VBcnJheSIsImN1cnJlbnRTdHIiLCJBcmVEaWZmZXJlbnQiLCJzdHJpbmdJbmRleCIsImNoYXJDb2RlQXQiLCJpc0luY2x1ZGVzIiwidGFyZ2V0VG9rZW5zIiwiaSIsImxlZnRQYXJ0IiwicmlnaHRQYXJ0IiwiaXNGaW5pdGUiLCJOdW1iZXIiLCJnZXRJdGVyYXRpb25SYW5rIiwiY291bnQiLCJpc0VtcHR5IiwibWF0Y2hGb3IiLCJQYXRoTWF0Y2hlciIsIm1hdGNoIiwic3BsaXRCeU11bHRpcGxpY2l0eSIsImxhc3RTaW1wbGVQYXJ0cyIsIk1vZGVsUGF0aEJ1aWxkZXIiLCJhcHBlbmQiLCJlbXB0eSIsInRvUmVzb2x2ZWRQYXRoIiwibm9ybWFsaXplIiwicmVzdWx0VG9rZW5zIiwicGF0aFBhcnQiLCJwb3AiLCJ0b0N1cnJlbnRJdGVyYXRpb24iLCJ0b0VhY2hJdGVyYXRpb24iLCJ0b0Fic29sdXRlIiwiZ2V0QWxsUGFyZW50UGF0aHMiLCJyZXN1bHQiLCJza2lwTGFzdCIsInRvUGF0aCIsInRyaW1MYXN0U3RhcklmTGFzdFRva2VuIiwidW5kZWZpbmVkIiwiZ2V0UGFyZW50UGF0aCIsImFwcGx5SW5zdGFuY2VzRGlydHkiLCJpbnN0YW5jZXMiLCJpbnN0YW5jZUNvdW50ZXIiLCJfaW5zdGFuY2VzJGluc3RhbmNlQ28iLCJyZWplY3QiLCJlbnN1cmVBbmRHZXRTdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaW5kaW5nUGF0aCwgVmlld01vZGVsRmllbGROYW1lIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgeyBjb3VudCwgSXRlclV0aWxzLCByZXZlcnNlQXJyYXkgfSBmcm9tIFwiLi4vSXRlcmFibGVVdGlsc1wiO1xuaW1wb3J0IHsgZW5zdXJlQW5kR2V0U3RyaW5nLCByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IGdldFNpbXBsZUhhc2hCeVN0cmluZyB9IGZyb20gXCIuLi9oYXNoVXRpbHNcIjtcblxuaW1wb3J0IHsgRWFjaEN1cnJlbnRDb2xsaXNpb24gfSBmcm9tIFwiLi9FYWNoQ3VycmVudENvbGxpc2lvblwiO1xuaW1wb3J0IHsgTW9kZWxQYXRoQnVpbGRlciB9IGZyb20gXCIuL01vZGVsUGF0aEJ1aWxkZXJcIjtcbmltcG9ydCB7IFBhdGhNYXRjaGVyLCBQYXRoTWF0Y2hpbmcgfSBmcm9tIFwiLi9QYXRoTWF0Y2hlclwiO1xuaW1wb3J0IHsgSUVxdWF0YWJsZSB9IGZyb20gXCIuL0lFcXVhdGFibGVcIjtcblxuY29uc3QgRWFjaFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJfX0VBQ0hfX1wiKTtcbmNvbnN0IEN1cnJlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19DVVJSRU5UX19cIik7XG5cbmV4cG9ydCBjbGFzcyBQYXRoVG9rZW5zIHtcbiAgICBwdWJsaWMgc3RhdGljIGVhY2g6IHR5cGVvZiBFYWNoU3ltYm9sID0gRWFjaFN5bWJvbDtcbiAgICBwdWJsaWMgc3RhdGljIGN1cnJlbnQ6IHR5cGVvZiBDdXJyZW50U3ltYm9sID0gQ3VycmVudFN5bWJvbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbCB7XG4gICAgICAgIHJldHVybiBwYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2ggfHwgcGFydCA9PT0gUGF0aFRva2Vucy5jdXJyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNTaW1wbGVUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzSW5zdGFuY2VUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcZCskL2kudGVzdChwYXJ0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVBhdGhUb2tlbiA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgUGF0aFRva2VuID0gU2ltcGxlUGF0aFRva2VuIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoIHwgdW5rbm93bik6IHBhdGggaXMgTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gdHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIgJiYgcGF0aCBpbnN0YW5jZW9mIE1vZGVsUGF0aEltcGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9MZWdhY3lQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoKTogQmluZGluZ1BhdGgge1xuICAgIHJldHVybiBpc01vZGVsUGF0aChwYXRoKSA/IHBhdGgudG9MZWdhY3lQYXRoKCkgOiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQWJzb2x1dGVNb2RlbFBhdGg8UiBleHRlbmRzIGJvb2xlYW4sIEEgZXh0ZW5kcyBib29sZWFuPihcbiAgICBwYXRoOiBCaW5kaW5nUGF0aCB8IElNb2RlbFBhdGg8UiwgQT5cbik6IElNb2RlbFBhdGg8UiwgdHJ1ZT47XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQWJzb2x1dGVNb2RlbFBhdGgocGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZU1vZGVsUGF0aCk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gaXNNb2RlbFBhdGgocGF0aCkgPyBwYXRoIDogY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoLCBQYXRoVG9rZW5zLmVhY2gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlNb2RlbFBhdGgoKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihbXSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCgpOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4oW10sIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IHRydWUpOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IFwiYXV0b1wiKTogUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gfCBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRQYXJ0U3RyaW5ncyk7XG4gICAgaWYgKGFic29sdXRlID09PSBcImF1dG9cIikge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgZmFsc2U+KHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgYm9vbGVhbj4ocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IEFic29sdXRlTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGZhbHNlLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKS5tYXAoeCA9PiAoeCA9PT0gXCIqXCIgPyBtdWx0aXBsaWNpdHlTeW1ib2wgOiB4KSk7XG4gICAgaWYgKGFic29sdXRlID09PSBcImF1dG9cIikge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFic29sdXRlICYmIHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3MsIGFic29sdXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKS5tYXAoeCA9PiAoeCA9PT0gXCIqXCIgPyBtdWx0aXBsaWNpdHlTeW1ib2wgOiB4KSk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3MsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChwYXJ0cy5zb21lKHggPT4geCA9PT0gXCIqXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiAqIHN5bWJvbFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRQYXJ0U3RyaW5ncyk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3MsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aChwYXRoOiBzdHJpbmcpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRQYXJ0U3RyaW5ncyk7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlRnJvbVRva2Vucyh0b2tlbnM6IFBhdGhUb2tlbltdKTogQWJzb2x1dGVNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxmYWxzZSwgdHJ1ZT4odG9rZW5zLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlUmVzb2x2ZWRGcm9tVG9rZW5zKHRva2Vuczogc3RyaW5nW10pOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHRva2Vucyk7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zOiByZWFkb25seSBzdHJpbmdbXSk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zOiByZWFkb25seSBQYXRoVG9rZW5bXSk6IFJlbGF0aXZlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIGZhbHNlPih0b2tlbnMsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Nb2RlbFBhdGhzKC4uLnBhcnRzOiBBcnJheTxNb2RlbFBhdGggfCBQYXRoVG9rZW4gfCBQYXRoVG9rZW5bXT4pOiBNb2RlbFBhdGgge1xuICAgIGxldCBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGxldCByZXN1bHRQYXJ0czogUGF0aFRva2VuW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGpvaW5JdGVtIG9mIHBhcnRzKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygam9pbkl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW9kZWxQYXRoKGpvaW5JdGVtKSkge1xuICAgICAgICAgICAgaWYgKGpvaW5JdGVtLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgIGFic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXN1bHRQYXJ0cyA9IFsuLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtLmdldFBhdGhQYXJ0c0FzQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goLi4uam9pbkl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKFBhdGhUb2tlbnMuaXNNdWx0aVRva2VuKGpvaW5JdGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaChqb2luSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocmVzdWx0UGFydHMsIGFic29sdXRlKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFic29sdXRlTW9kZWxGaWVsZFBhdGggaW1wbGVtZW50cyBJRXF1YXRhYmxlPEFic29sdXRlTW9kZWxGaWVsZFBhdGg+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF0aDogQWJzb2x1dGVNb2RlbFBhdGg7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpZWxkOiBWaWV3TW9kZWxGaWVsZE5hbWUgfCBcIiRlcnJvckNvdW50XCIgfCBcIiR3YXJuaW5nQ291bnRcIjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoOiBBYnNvbHV0ZU1vZGVsUGF0aCwgZmllbGROYW1lOiBWaWV3TW9kZWxGaWVsZE5hbWUgfCBcIiRlcnJvckNvdW50XCIgfCBcIiR3YXJuaW5nQ291bnRcIikge1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLmZpZWxkID0gZmllbGROYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIYXNoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGguZ2V0SGFzaCgpICsgZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nKHRoaXMuZmllbGQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoLFxuICAgICAgICBlYWNoQ3VycmVudENvbGxpc2lvbjogRWFjaEN1cnJlbnRDb2xsaXNpb24gPSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGguaXNFcXVhbHMobW9kZWxQYXRoLnBhdGgsIGVhY2hDdXJyZW50Q29sbGlzaW9uKSAmJiB0aGlzLmZpZWxkID09PSBtb2RlbFBhdGguZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGcm9tU3RyaW5nKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcpOiBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIHtcbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiRlcnJvckNvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGUocGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkZXJyb3JDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kd2FybmluZ0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGUocGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kd2FybmluZ0NvdW50XCIsIFwiXCIpKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoY3JlYXRlQWJzb2x1dGUocGF0aFdpdGhGaWVsZE5hbWUpLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWU6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIHtcbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiRlcnJvckNvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLiRlcnJvckNvdW50XCIsIFwiXCIpLCBtdWx0aXBsaWNpdHlTeW1ib2wpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kd2FybmluZ0NvdW50XCIsIFwiXCIpLCBtdWx0aXBsaWNpdHlTeW1ib2wpLFxuICAgICAgICAgICAgICAgIFwiJHdhcm5pbmdDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi5lcnJvcnNDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi5lcnJvcnNDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcImVycm9yc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLndhcm5pbmdzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIud2FybmluZ3NDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIndhcm5pbmdzQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZSwgbXVsdGlwbGljaXR5U3ltYm9sKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucGF0aC50b0xlZ2FjeVBhdGgoKX0uJHt0aGlzLmZpZWxkfWA7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoZWFjaEN1cnJlbnRDb2xsaXNpb24/OiBFYWNoQ3VycmVudENvbGxpc2lvbik6IG51bWJlcjtcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW47XG4gICAgbWF0Y2hGb3IobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBQYXRoTWF0Y2hpbmc7XG4gICAgc3BsaXRCeU11bHRpcGxpY2l0eSgpOiBJdGVyYWJsZTxSZXNvbHZlZE1vZGVsUGF0aCB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w+O1xuICAgIG5vcm1hbGl6ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0N1cnJlbnRJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgdG9FYWNoSXRlcmF0aW9uKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGdldEFsbFBhcmVudFBhdGhzKCk6IEl0ZXJhYmxlPE1vZGVsUGF0aD47XG4gICAgdHJpbUxhc3RTdGFySWZMYXN0VG9rZW4oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBhcHBseUluc3RhbmNlc0RpcnR5KGluc3RhbmNlczogU2ltcGxlUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZztcbiAgICB0b0xlZ2FjeVBhdGgoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGJvb2xlYW4+O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGJvb2xlYW4+O1xuZXhwb3J0IHR5cGUgQWJzb2x1dGVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIHRydWU+O1xuZXhwb3J0IHR5cGUgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgdHJ1ZT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aXZlTW9kZWxQYXRoID0gSU1vZGVsUGF0aDxib29sZWFuLCBmYWxzZT47XG5leHBvcnQgdHlwZSBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCBmYWxzZT47XG5cbnR5cGUgUGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFRSZXNvbHZlZCBleHRlbmRzIHRydWUgPyBzdHJpbmcgOiBQYXRoVG9rZW47XG5cbnR5cGUgUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbj4gPSBBcnJheTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+O1xuXG50eXBlIFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbj4gPSBSZWFkb25seUFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbmZ1bmN0aW9uIGlzQWxsVG9rZW5zUmVzb2x2ZWQ8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbj4odG9rZW5zOiBSZWFkb25seVBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4pOiBUUmVzb2x2ZWQge1xuICAgIC8vINCvINGH0YLQvi3RgtC+INC90LXQvNC+0LPRgyDRgdC+0L7QsdGA0LDQt9C40YLRjCDQutCw0Log0YLRg9GCINCy0YHRkSDRgdGC0YDQvtCz0L4g0L3QsNC/0LjRgdCw0YLRjC4uLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gdG9rZW5zLmV2ZXJ5KFBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbik7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4sIFRBYnNvbHV0ZSBleHRlbmRzIGJvb2xlYW4+XG4gICAgaW1wbGVtZW50cyBJRXF1YXRhYmxlPE1vZGVsUGF0aD4sIElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcbiAgICBwcml2YXRlIGxlZ2FjeVBhdGg6IHVuZGVmaW5lZCB8IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoUGFydHM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiwgYWJzb2x1dGU6IFRBYnNvbHV0ZSkge1xuICAgICAgICB0aGlzLnRva2VucyA9IHBhdGhQYXJ0cy5maWx0ZXIoeCA9PiB4ICE9PSBcIlwiKTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IGFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWQoKTogVFJlc29sdmVkIHtcbiAgICAgICAgcmV0dXJuIGlzQWxsVG9rZW5zUmVzb2x2ZWQodGhpcy50b2tlbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGF0aFBhcnRzQXNBcnJheSgpOiBSZWFkb25seUFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgcHVibGljICpnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPiB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNpbXBsZVRva2Vuc0FzQXJyYXlTdHJpY3QoKTogcmVhZG9ubHkgU2ltcGxlUGF0aFRva2VuW10ge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMudG9rZW5zKSB7XG4gICAgICAgICAgICBpZiAoIVBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbih0b2tlbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gc3BlYyB0b2tlbnNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC10L3RgtC40YDRg9C10YIg0YfRgtC+INCx0YPQtNGD0YIg0YLQvtC70YzQutC+IFNpbXBsZVBhdGhUb2tlbi5cbiAgICAgICAgLy8g0JLRgdC1IG1hcCDQuCBmaWx0ZXIg0YPQsdGA0LDQvdGLINC00LvRjyDQv9GA0L7QuNC30LLQvtC00LjRgtC10LvRjNC90L7RgdGC0LhcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IHN0cmluZ1tdKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxSZXNvbHZlZE1vZGVsUGF0aCB8IHN0cmluZz4pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8QWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB8IHN0cmluZz4pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIGpvaW5Nb2RlbFBhdGhzKHRoaXMsIC4uLnBhdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgcmV0dXJuIGlzQWxsVG9rZW5zUmVzb2x2ZWQodGhpcy50b2tlbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlQWxsKGluc3RhbmNlOiBzdHJpbmcpOiBNb2RlbFBhdGgge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLnRva2Vucy5tYXAodG9rZW4gPT4ge1xuICAgICAgICAgICAgaWYgKFBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbih0b2tlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHRva2VucywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNvbWUoeCA9PiB4ID09PSBQYXRoVG9rZW5zLmVhY2gpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuY3VycmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExhc3RMaXN0UGF0aCgpOiBQYXRoVG9rZW5bXSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbnRhaW5JdGVyYXRpb24oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGNvbnRhaW4gaXRlcmF0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC90YLQuNGA0YPQtdGCLCDRh9GC0L4g0LHRg9C00LXRgiBQYXRoVG9rZW5zLmVhY2hcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBsYXN0SXRlcmF0aW9uSW5kZXggPSB0aGlzLnRva2Vucy5sYXN0SW5kZXhPZihQYXRoVG9rZW5zLmVhY2gpO1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc2xpY2UoMCwgbGFzdEl0ZXJhdGlvbkluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIHJldHVybiBsYXN0SXRlbSA9PSBQYXRoVG9rZW5zLmVhY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hYnNvbHV0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLmFic29sdXRlID8gXCIvXCIgOiBcIlwiKSArIHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5sZWdhY3lQYXRoID8/ICh0aGlzLmxlZ2FjeVBhdGggPSB0aGlzLnRva2Vucy5tYXAoeCA9PiB0aGlzLnBhdGhQYXJ0VG9TdHJpbmcoeCkpLmpvaW4oXCIvXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogTW9kZWxQYXRoLFxuICAgICAgICBlYWNoQ3VycmVudENvbGxpc2lvbjogRWFjaEN1cnJlbnRDb2xsaXNpb24gPSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChlYWNoQ3VycmVudENvbGxpc2lvbiA9PT0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9MZWdhY3lQYXRoKCkgPT09IG1vZGVsUGF0aC50b0xlZ2FjeVBhdGgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Fic29sdXRlKCkgPT09IG1vZGVsUGF0aC5pc0Fic29sdXRlKCkgJiZcbiAgICAgICAgICAgICAgICBJdGVyYXRvci5mcm9tKEl0ZXJVdGlscy56aXAodGhpcy5nZXRQYXRoUGFydHMoKSwgbW9kZWxQYXRoLmdldFBhdGhQYXJ0cygpKSkuZXZlcnkoXG4gICAgICAgICAgICAgICAgICAgIChbdDEsIHQyXSkgPT4gdDEgPT09IHQyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YHQtdCz0LTQsCDRhtC10LvQvtC1INC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QvtC1INCx0LXQt9C30L3QsNC60L7QstC+0LUgMzIt0LHQuNGC0L3QvtC1INGH0LjRgdC70L5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SGFzaChlYWNoQ3VycmVudENvbGxpc2lvbjogRWFjaEN1cnJlbnRDb2xsaXNpb24gPSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGhhc2ggPSA1MzgxO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHJldmVyc2VBcnJheSh0aGlzLnRva2VucykpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50U3RyOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdHIgPSB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVEaWZmZXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuID09PSBQYXRoVG9rZW5zLmVhY2ggPyBcIipcIiA6IFwiIVwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHIgPSBcIipcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3RyaW5nSW5kZXggPSBjdXJyZW50U3RyLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChzdHJpbmdJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgICAgICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gY3VycmVudFN0ci5jaGFyQ29kZUF0KC0tc3RyaW5nSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgICAgICBKYXZhU2NyaXB0IGRvZXMgYml0d2lzZSBvcGVyYXRpb25zIChsaWtlIFhPUiwgYWJvdmUpIG9uIDMyLWJpdCBzaWduZWRcbiAgICAgICAgICAgIGludGVnZXJzLiBTaW5jZSB3ZSB3YW50IHRoZSByZXN1bHRzIHRvIGJlIGFsd2F5cyBwb3NpdGl2ZSwgY29udmVydCB0aGVcbiAgICAgICAgICAgIHNpZ25lZCBpbnQgdG8gYW4gdW5zaWduZWQgYnkgZG9pbmcgYW4gdW5zaWduZWQgYml0c2hpZnQuXG4gICAgICAqL1xuICAgICAgICByZXR1cm4gaGFzaCA+Pj4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNJbmNsdWRlcyhtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0YXJnZXRUb2tlbnMgPSBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoICE9PSB0YXJnZXRUb2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGVmdFBhcnQgPSB0aGlzLnRva2Vuc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0UGFydCA9IHRhcmdldFRva2Vuc1tpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJpZ2h0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGVmdFBhcnQgIT09IHJpZ2h0UGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRQYXJ0ID09PSBQYXRoVG9rZW5zLmN1cnJlbnQgfHwgbGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuZWFjaCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoTnVtYmVyKHJpZ2h0UGFydCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0UGFydCAhPT0gUGF0aFRva2Vucy5jdXJyZW50ICYmIHJpZ2h0UGFydCAhPT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVyYXRpb25SYW5rKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBjb3VudChcbiAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+XG4gICAgICAgICAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb24gPT0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlRGlmZmVyZW50XG4gICAgICAgICAgICAgICAgICAgID8geCA9PT0gUGF0aFRva2Vucy5lYWNoXG4gICAgICAgICAgICAgICAgICAgIDogUGF0aFRva2Vucy5pc011bHRpVG9rZW4oeClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWF0Y2hGb3IobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBQYXRoTWF0Y2hpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHt0aGlzLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbWF0Y2ggbm9uIGFic29sdXRlIHBhdGggJyR7bW9kZWxQYXRoLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXRoTWF0Y2hlci5tYXRjaCh0aGlzLnRva2VucywgbW9kZWxQYXRoLmdldFBhdGhQYXJ0c0FzQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgcHVibGljICpzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD4ge1xuICAgICAgICBsZXQgbGFzdFNpbXBsZVBhcnRzID0gbmV3IE1vZGVsUGF0aEJ1aWxkZXIodGhpcy5pc0Fic29sdXRlKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMudG9rZW5zKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIGxhc3RTaW1wbGVQYXJ0cy5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3RTaW1wbGVQYXJ0cy5lbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzID0gbmV3IE1vZGVsUGF0aEJ1aWxkZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxhc3RTaW1wbGVQYXJ0cy5lbXB0eSkge1xuICAgICAgICAgICAgeWllbGQgbGFzdFNpbXBsZVBhcnRzLnRvUmVzb2x2ZWRQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0VG9rZW5zOiBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGF0aFBhcnQgb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChwYXRoUGFydCA9PT0gXCIuLlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRUb2tlbnMucG9wKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggaXMgaW52YWxpZCAnJHt0aGlzLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0VG9rZW5zLnB1c2goXCIuLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi5cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0VG9rZW5zLnB1c2gocGF0aFBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocmVzdWx0VG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSDQodC/0LXRhtC40YTQuNC60LDRgtC+0YDRiyDQvNC90L7QttC10YHRgtCy0LXQvdC90L7RgdGC0LggRWFjaCDQt9Cw0LzQtdC90Y/QtdGCINC90LAgQ3VycmVudFxuICAgICAqL1xuICAgIHB1YmxpYyB0b0N1cnJlbnRJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuZWFjaCA/IFBhdGhUb2tlbnMuY3VycmVudCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9FYWNoSXRlcmF0aW9uKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5PVEUg0KLRg9GCINC90LUg0L/QvtC70YPRh9Cw0LXRgtGB0Y8g0L3QsNC70L7QttC40YLRjCDQtNC40YHQutGA0LjQvNC40L3QsNGC0L7RgFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgY29uc3QgcGF0aFBhcnRzOiBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+ID0gdGhpcy50b2tlbnMubWFwKHggPT5cbiAgICAgICAgICAgICAgICB4ID09PSBQYXRoVG9rZW5zLmN1cnJlbnQgPyBQYXRoVG9rZW5zLmVhY2ggOiB4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihwYXRoUGFydHMsIHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRvQWJzb2x1dGUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFic29sdXRlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJyR7dGhpcy50b0xlZ2FjeVBhdGgoKX0gaXMgbm90IGFic29sdXRlJ2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIHRydWU+KHRoaXMudG9rZW5zLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldEFsbFBhcmVudFBhdGhzKCk6IEl0ZXJhYmxlPE1vZGVsUGF0aD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgSXRlclV0aWxzLnNraXBMYXN0KHRoaXMuZ2V0UGF0aFBhcnRzKCksIDEpKSB7XG4gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRva2VuKTtcbiAgICAgICAgICAgIHlpZWxkIHJlc3VsdC50b1BhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IGxhc3RJdGVtID0gSXRlclV0aWxzLmxhc3QodGhpcy50b2tlbnMpO1xuICAgICAgICBpZiAobGFzdEl0ZW0gIT0gdW5kZWZpbmVkICYmIFBhdGhUb2tlbnMuaXNNdWx0aVRva2VuKGxhc3RJdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHRoaXMudG9rZW5zLnNsaWNlKDAsIC0xKSwgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmVudFBhdGgoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmFic29sdXRlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIC8vINCi0YPRgiDQv9C+0LvRg9GH0LDQtdGC0YHRjyDRgtCw0LosINGH0YLQviDQv9C+INC00YDRg9Cz0L7QvNGDINC90LjQutCw0LpcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gcmVzdWx0LnRvUGF0aCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBseUluc3RhbmNlc0RpcnR5KGluc3RhbmNlczogU2ltcGxlUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSB8fCBpbnN0YW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5zdGFuY2VDb3VudGVyID0gMDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1vZGVsUGF0aEJ1aWxkZXIodHJ1ZSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy5nZXRQYXRoUGFydHMoKSkge1xuICAgICAgICAgICAgaWYgKFBhdGhUb2tlbnMuaXNNdWx0aVRva2VuKHRva2VuKSAmJiBpbnN0YW5jZUNvdW50ZXIgPCBpbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpbnN0YW5jZXNbaW5zdGFuY2VDb3VudGVyXSA/PyByZWplY3QoKSk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudGVyKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vINCi0YPRgiDQv9C+0LvRg9GH0LDQtdGC0YHRjyDRgtCw0LosINGH0YLQviDQv9C+INC00YDRg9Cz0L7QvNGDINC90LjQutCw0LpcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gcmVzdWx0LnRvUGF0aCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGF0aFBhcnRUb1N0cmluZyhwYXRoUGFydDogUGF0aFRva2VuKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoUGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhQYXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIqXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGF0aCBwYXJ0IHNwZWNpZmllZDogJHtlbnN1cmVBbmRHZXRTdHJpbmcocGF0aFBhcnQpfWApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7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
457
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSXRlcmFibGVVdGlscyIsInJlcXVpcmUiLCJfVHlwaW5nVXRpbHMiLCJfRWFjaEN1cnJlbnRDb2xsaXNpb24iLCJfTW9kZWxQYXRoQnVpbGRlciIsIl9QYXRoTWF0Y2hlciIsIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNJbnN0YW5jZVRva2VuT3JJbnN0YW5jZXNTcGVjIiwiZXhwb3J0cyIsImlzTW9kZWxQYXRoIiwicGF0aCIsIk1vZGVsUGF0aEltcGwiLCJjb252ZXJ0VG9MZWdhY3lQYXRoIiwidG9MZWdhY3lQYXRoIiwiY29udmVydFRvQWJzb2x1dGVNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21NYXNrIiwiZW1wdHlNb2RlbFBhdGgiLCJlbXB0eUFic29sdXRlTW9kZWxQYXRoIiwiY3JlYXRlTW9kZWxQYXRoIiwiYWJzb2x1dGUiLCJwYXJ0UGFydFN0cmluZ3MiLCJzcGxpdCIsImVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkiLCJzdGFydHNXaXRoIiwic2xpY2UiLCJjcmVhdGVGcm9tTWFzayIsIm11bHRpcGxpY2l0eVN5bWJvbCIsIm1hcCIsIngiLCJwYXJ0cyIsInNvbWUiLCJFcnJvciIsImNyZWF0ZUFic29sdXRlIiwiY3JlYXRlUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCIsImNyZWF0ZUFic29sdXRlRnJvbVRva2VucyIsInRva2VucyIsImNyZWF0ZUFic29sdXRlUmVzb2x2ZWRGcm9tVG9rZW5zIiwiY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zIiwiam9pbk1vZGVsUGF0aHMiLCJyZXN1bHRQYXJ0cyIsImpvaW5JdGVtIiwicHVzaCIsImlzQWJzb2x1dGUiLCJnZXRQYXRoUGFydHNBc0FycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNBbGxUb2tlbnNSZXNvbHZlZCIsImV2ZXJ5IiwiY29uc3RydWN0b3IiLCJwYXRoUGFydHMiLCJsZWdhY3lQYXRoIiwiY2FjaGVkSGFzaCIsImZpbHRlciIsInJlc29sdmVkIiwiZ2V0UGF0aFBhcnRzIiwiZ2V0U2ltcGxlVG9rZW5zU3RyaWN0IiwidG9rZW4iLCJnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0Iiwiam9pbldpdGgiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZUFsbCIsImluc3RhbmNlIiwiaXNDb250YWluSXRlcmF0aW9uIiwiaXNDb250YWluQ3VycmVudEl0ZXJhdGlvbiIsImlzQ29udGFpbkN1cnJlbnRPckVhY2hJdGVyYXRpb24iLCJnZXRMYXN0TGlzdFBhdGgiLCJsYXN0SXRlcmF0aW9uSW5kZXgiLCJsYXN0SW5kZXhPZiIsImlzRW5kc1dpdGhJdGVyYXRpb24iLCJsYXN0SXRlbSIsIkl0ZXJVdGlscyIsImxhc3QiLCJpc0VuZHNXaXRoQ3VycmVudEl0ZXJhdGlvbiIsInRvU3RyaW5nIiwibGVuZ3RoIiwicGF0aFBhcnRUb1N0cmluZyIsImpvaW4iLCJfdGhpcyRsZWdhY3lQYXRoIiwiaXNFcXVhbHMiLCJtb2RlbFBhdGgiLCJlYWNoQ3VycmVudENvbGxpc2lvbiIsIkVhY2hDdXJyZW50Q29sbGlzaW9uIiwiQXJlU2FtZSIsIkl0ZXJhdG9yIiwiZnJvbSIsInppcCIsInQxIiwidDIiLCJnZXRIYXNoIiwidW5kZWZpbmVkIiwiaGFzaCIsInJldmVyc2VBcnJheSIsImN1cnJlbnRTdHIiLCJBcmVEaWZmZXJlbnQiLCJzdHJpbmdJbmRleCIsImNoYXJDb2RlQXQiLCJpc0luY2x1ZGVzIiwidGFyZ2V0VG9rZW5zIiwiaSIsImxlZnRQYXJ0IiwicmlnaHRQYXJ0IiwiaXNGaW5pdGUiLCJOdW1iZXIiLCJnZXRJdGVyYXRpb25SYW5rIiwiY291bnQiLCJpc0VtcHR5IiwibWF0Y2hGb3IiLCJQYXRoTWF0Y2hlciIsIm1hdGNoIiwic3BsaXRCeU11bHRpcGxpY2l0eSIsImxhc3RTaW1wbGVQYXJ0cyIsIk1vZGVsUGF0aEJ1aWxkZXIiLCJhcHBlbmQiLCJlbXB0eSIsInRvUmVzb2x2ZWRQYXRoIiwibm9ybWFsaXplIiwicmVzdWx0VG9rZW5zIiwicGF0aFBhcnQiLCJwb3AiLCJ0b0N1cnJlbnRJdGVyYXRpb24iLCJ0b0VhY2hJdGVyYXRpb24iLCJ0b0Fic29sdXRlIiwiZ2V0QWxsUGFyZW50UGF0aHMiLCJyZXN1bHQiLCJza2lwTGFzdCIsInRvUGF0aCIsInRyaW1MYXN0U3RhcklmTGFzdFRva2VuIiwiZ2V0UGFyZW50UGF0aCIsImFwcGx5SW5zdGFuY2VzRGlydHkiLCJpbnN0YW5jZXMiLCJmaWxsV2l0aE11bHRpcGxpY2l0eUlmSGFzTm9JbnN0YW5jZSIsImluc3RhbmNlQ291bnRlciIsIl9pbnN0YW5jZXMkaW5zdGFuY2VDbyIsImluc3RhbmNlT3JFYWNoIiwicmVqZWN0IiwiZW5zdXJlQW5kR2V0U3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmluZGluZ1BhdGggfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB7IGNvdW50LCBJdGVyVXRpbHMsIHJldmVyc2VBcnJheSB9IGZyb20gXCIuLi9JdGVyYWJsZVV0aWxzXCI7XG5pbXBvcnQgeyBlbnN1cmVBbmRHZXRTdHJpbmcsIHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuXG5pbXBvcnQgeyBFYWNoQ3VycmVudENvbGxpc2lvbiB9IGZyb20gXCIuL0VhY2hDdXJyZW50Q29sbGlzaW9uXCI7XG5pbXBvcnQgeyBNb2RlbFBhdGhCdWlsZGVyIH0gZnJvbSBcIi4vTW9kZWxQYXRoQnVpbGRlclwiO1xuaW1wb3J0IHsgUGF0aE1hdGNoZXIsIFBhdGhNYXRjaGluZyB9IGZyb20gXCIuL1BhdGhNYXRjaGVyXCI7XG5pbXBvcnQgeyBJRXF1YXRhYmxlIH0gZnJvbSBcIi4vSUVxdWF0YWJsZVwiO1xuXG5jb25zdCBFYWNoU3ltYm9sID0gU3ltYm9sLmZvcihcIl9fRUFDSF9fXCIpO1xuY29uc3QgQ3VycmVudFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJfX0NVUlJFTlRfX1wiKTtcblxuZXhwb3J0IGNsYXNzIFBhdGhUb2tlbnMge1xuICAgIHB1YmxpYyBzdGF0aWMgZWFjaDogdHlwZW9mIEVhY2hTeW1ib2wgPSBFYWNoU3ltYm9sO1xuICAgIHB1YmxpYyBzdGF0aWMgY3VycmVudDogdHlwZW9mIEN1cnJlbnRTeW1ib2wgPSBDdXJyZW50U3ltYm9sO1xuXG4gICAgcHVibGljIHN0YXRpYyBpc011bHRpVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sIHtcbiAgICAgICAgcmV0dXJuIHBhcnQgPT09IFBhdGhUb2tlbnMuZWFjaCB8fCBwYXJ0ID09PSBQYXRoVG9rZW5zLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1NpbXBsZVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNJbnN0YW5jZVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiICYmIC9eXFxkKyQvaS50ZXN0KHBhcnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNJbnN0YW5jZVRva2VuT3JJbnN0YW5jZXNTcGVjKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiICYmICgvXlxcZCskL2kudGVzdChwYXJ0KSB8fCAvXlxcWyhcXGQrXFwsPykrXFxdJC9pLnRlc3QocGFydCkpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgU2ltcGxlUGF0aFRva2VuID0gc3RyaW5nO1xuXG5leHBvcnQgdHlwZSBQYXRoVG9rZW4gPSBTaW1wbGVQYXRoVG9rZW4gfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RlbFBhdGgocGF0aDogQmluZGluZ1BhdGggfCBNb2RlbFBhdGggfCB1bmtub3duKTogcGF0aCBpcyBNb2RlbFBhdGgge1xuICAgIHJldHVybiB0eXBlb2YgcGF0aCAhPT0gXCJzdHJpbmdcIiAmJiBwYXRoIGluc3RhbmNlb2YgTW9kZWxQYXRoSW1wbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0xlZ2FjeVBhdGgocGF0aDogQmluZGluZ1BhdGggfCBNb2RlbFBhdGgpOiBCaW5kaW5nUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aC50b0xlZ2FjeVBhdGgoKSA6IHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9BYnNvbHV0ZU1vZGVsUGF0aDxSIGV4dGVuZHMgYm9vbGVhbiwgQSBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHBhdGg6IEJpbmRpbmdQYXRoIHwgSU1vZGVsUGF0aDxSLCBBPlxuKTogSU1vZGVsUGF0aDxSLCB0cnVlPjtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9BYnNvbHV0ZU1vZGVsUGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlTW9kZWxQYXRoKTogQWJzb2x1dGVNb2RlbFBhdGgge1xuICAgIHJldHVybiBpc01vZGVsUGF0aChwYXRoKSA/IHBhdGggOiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGgsIFBhdGhUb2tlbnMuZWFjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eU1vZGVsUGF0aCgpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgZmFsc2U+KFtdLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFic29sdXRlTW9kZWxQYXRoKCk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihbXSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGZhbHNlKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiKTogUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydFBhcnRTdHJpbmdzKTtcbiAgICBpZiAoYWJzb2x1dGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFic29sdXRlICYmIHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBib29sZWFuPihwYXJ0UGFydFN0cmluZ3MsIGFic29sdXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IHRydWUsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogXCJhdXRvXCIsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gfCBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpLm1hcCh4ID0+ICh4ID09PSBcIipcIiA/IG11bHRpcGxpY2l0eVN5bWJvbCA6IHgpKTtcbiAgICBpZiAoYWJzb2x1dGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpLm1hcCh4ID0+ICh4ID09PSBcIipcIiA/IG11bHRpcGxpY2l0eVN5bWJvbCA6IHgpKTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHBhcnRzLnNvbWUoeCA9PiB4ID09PSBcIipcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluICogc3ltYm9sXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlKHBhdGg6IHN0cmluZyk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydFBhcnRTdHJpbmdzKTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoKHBhdGg6IHN0cmluZyk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydFBhcnRTdHJpbmdzKTtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgZmFsc2U+KHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zKHRva2VuczogUGF0aFRva2VuW10pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGVSZXNvbHZlZEZyb21Ub2tlbnModG9rZW5zOiBzdHJpbmdbXSk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkodG9rZW5zKTtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4odG9rZW5zLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zOiByZWFkb25seSBQYXRoVG9rZW5bXSk6IFJlbGF0aXZlTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxmYWxzZSwgZmFsc2U+KHRva2VucywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pbk1vZGVsUGF0aHMoLi4ucGFydHM6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbiB8IFBhdGhUb2tlbltdPik6IE1vZGVsUGF0aCB7XG4gICAgbGV0IGFic29sdXRlID0gZmFsc2U7XG4gICAgbGV0IHJlc3VsdFBhcnRzOiBQYXRoVG9rZW5bXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgam9pbkl0ZW0gb2YgcGFydHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqb2luSXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaChqb2luSXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RlbFBhdGgoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICBpZiAoam9pbkl0ZW0uaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgYWJzb2x1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdFBhcnRzID0gWy4uLmpvaW5JdGVtLmdldFBhdGhQYXJ0c0FzQXJyYXkoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpvaW5JdGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4oam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChyZXN1bHRQYXJ0cywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBpc0NvbnRhaW5DdXJyZW50T3JFYWNoSXRlcmF0aW9uKCk6IGJvb2xlYW47XG4gICAgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdO1xuICAgIGlzRW5kc1dpdGhJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBpc0VuZHNXaXRoQ3VycmVudEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoZWFjaEN1cnJlbnRDb2xsaXNpb24/OiBFYWNoQ3VycmVudENvbGxpc2lvbik6IG51bWJlcjtcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW47XG4gICAgbWF0Y2hGb3IobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBQYXRoTWF0Y2hpbmc7XG4gICAgc3BsaXRCeU11bHRpcGxpY2l0eSgpOiBJdGVyYWJsZTxSZXNvbHZlZE1vZGVsUGF0aCB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w+O1xuICAgIG5vcm1hbGl6ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0N1cnJlbnRJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgdG9FYWNoSXRlcmF0aW9uKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGdldEFsbFBhcmVudFBhdGhzKCk6IEl0ZXJhYmxlPE1vZGVsUGF0aD47XG4gICAgdHJpbUxhc3RTdGFySWZMYXN0VG9rZW4oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBhcHBseUluc3RhbmNlc0RpcnR5KFxuICAgICAgICBpbnN0YW5jZXM6IFNpbXBsZVBhdGhUb2tlbltdLFxuICAgICAgICBmaWxsV2l0aE11bHRpcGxpY2l0eUlmSGFzTm9JbnN0YW5jZT86IGJvb2xlYW5cbiAgICApOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZztcbiAgICB0b0xlZ2FjeVBhdGgoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGJvb2xlYW4+O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGJvb2xlYW4+O1xuZXhwb3J0IHR5cGUgQWJzb2x1dGVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIHRydWU+O1xuZXhwb3J0IHR5cGUgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgdHJ1ZT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aXZlTW9kZWxQYXRoID0gSU1vZGVsUGF0aDxib29sZWFuLCBmYWxzZT47XG5leHBvcnQgdHlwZSBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCBmYWxzZT47XG5cbnR5cGUgUGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFRSZXNvbHZlZCBleHRlbmRzIHRydWUgPyBzdHJpbmcgOiBQYXRoVG9rZW47XG5cbnR5cGUgUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbj4gPSBBcnJheTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+O1xuXG50eXBlIFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbj4gPSBSZWFkb25seUFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbmZ1bmN0aW9uIGlzQWxsVG9rZW5zUmVzb2x2ZWQ8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbj4odG9rZW5zOiBSZWFkb25seVBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4pOiBUUmVzb2x2ZWQge1xuICAgIC8vINCvINGH0YLQvi3RgtC+INC90LXQvNC+0LPRgyDRgdC+0L7QsdGA0LDQt9C40YLRjCDQutCw0Log0YLRg9GCINCy0YHRkSDRgdGC0YDQvtCz0L4g0L3QsNC/0LjRgdCw0YLRjC4uLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gdG9rZW5zLmV2ZXJ5KFBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbik7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4sIFRBYnNvbHV0ZSBleHRlbmRzIGJvb2xlYW4+XG4gICAgaW1wbGVtZW50cyBJRXF1YXRhYmxlPE1vZGVsUGF0aD4sIElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcbiAgICBwcml2YXRlIGxlZ2FjeVBhdGg6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIGNhY2hlZEhhc2g6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoUGFydHM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiwgYWJzb2x1dGU6IFRBYnNvbHV0ZSkge1xuICAgICAgICB0aGlzLnRva2VucyA9IHBhdGhQYXJ0cy5maWx0ZXIoeCA9PiB4ICE9PSBcIlwiKTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IGFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWQoKTogVFJlc29sdmVkIHtcbiAgICAgICAgcmV0dXJuIGlzQWxsVG9rZW5zUmVzb2x2ZWQodGhpcy50b2tlbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGF0aFBhcnRzQXNBcnJheSgpOiBSZWFkb25seUFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgcHVibGljICpnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPiB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNpbXBsZVRva2Vuc0FzQXJyYXlTdHJpY3QoKTogcmVhZG9ubHkgU2ltcGxlUGF0aFRva2VuW10ge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMudG9rZW5zKSB7XG4gICAgICAgICAgICBpZiAoIVBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbih0b2tlbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gc3BlYyB0b2tlbnNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC10L3RgtC40YDRg9C10YIg0YfRgtC+INCx0YPQtNGD0YIg0YLQvtC70YzQutC+IFNpbXBsZVBhdGhUb2tlbi5cbiAgICAgICAgLy8g0JLRgdC1IG1hcCDQuCBmaWx0ZXIg0YPQsdGA0LDQvdGLINC00LvRjyDQv9GA0L7QuNC30LLQvtC00LjRgtC10LvRjNC90L7RgdGC0LhcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IHN0cmluZ1tdKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxSZXNvbHZlZE1vZGVsUGF0aCB8IHN0cmluZz4pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8QWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB8IHN0cmluZz4pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIGpvaW5Nb2RlbFBhdGhzKHRoaXMsIC4uLnBhdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgcmV0dXJuIGlzQWxsVG9rZW5zUmVzb2x2ZWQodGhpcy50b2tlbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlQWxsKGluc3RhbmNlOiBzdHJpbmcpOiBNb2RlbFBhdGgge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLnRva2Vucy5tYXAodG9rZW4gPT4ge1xuICAgICAgICAgICAgaWYgKFBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbih0b2tlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHRva2VucywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNvbWUoeCA9PiB4ID09PSBQYXRoVG9rZW5zLmVhY2gpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuY3VycmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRPckVhY2hJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50IHx8IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExhc3RMaXN0UGF0aCgpOiBQYXRoVG9rZW5bXSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbnRhaW5JdGVyYXRpb24oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGNvbnRhaW4gaXRlcmF0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC90YLQuNGA0YPQtdGCLCDRh9GC0L4g0LHRg9C00LXRgiBQYXRoVG9rZW5zLmVhY2hcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBsYXN0SXRlcmF0aW9uSW5kZXggPSB0aGlzLnRva2Vucy5sYXN0SW5kZXhPZihQYXRoVG9rZW5zLmVhY2gpO1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc2xpY2UoMCwgbGFzdEl0ZXJhdGlvbkluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIHJldHVybiBsYXN0SXRlbSA9PSBQYXRoVG9rZW5zLmVhY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRW5kc1dpdGhDdXJyZW50SXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuY3VycmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5jYWNoZWRIYXNoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IGhhc2ggPSA1MzgxO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiByZXZlcnNlQXJyYXkodGhpcy50b2tlbnMpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVEaWZmZXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHIgPSB0b2tlbiA9PT0gUGF0aFRva2Vucy5lYWNoID8gXCIqXCIgOiBcIiFcIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHIgPSBcIipcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3RyaW5nSW5kZXggPSBjdXJyZW50U3RyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gY3VycmVudFN0ci5jaGFyQ29kZUF0KC0tc3RyaW5nSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgICAgIGludGVnZXJzLiBTaW5jZSB3ZSB3YW50IHRoZSByZXN1bHRzIHRvIGJlIGFsd2F5cyBwb3NpdGl2ZSwgY29udmVydCB0aGVcbiAgICAgICAgICAgICAgICBzaWduZWQgaW50IHRvIGFuIHVuc2lnbmVkIGJ5IGRvaW5nIGFuIHVuc2lnbmVkIGJpdHNoaWZ0LlxuICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmNhY2hlZEhhc2ggPSBoYXNoID4+PiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEhhc2g7XG4gICAgfVxuXG4gICAgcHVibGljIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0VG9rZW5zID0gbW9kZWxQYXRoLmdldFBhdGhQYXJ0c0FzQXJyYXkoKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLmxlbmd0aCAhPT0gdGFyZ2V0VG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRQYXJ0ID0gdGhpcy50b2tlbnNbaV07XG4gICAgICAgICAgICBjb25zdCByaWdodFBhcnQgPSB0YXJnZXRUb2tlbnNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxlZnRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRQYXJ0ICE9PSByaWdodFBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5jdXJyZW50IHx8IGxlZnRQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJpZ2h0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKE51bWJlcihyaWdodFBhcnQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyaWdodFBhcnQgIT09IFBhdGhUb2tlbnMuY3VycmVudCAmJiByaWdodFBhcnQgIT09IFBhdGhUb2tlbnMuZWFjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SXRlcmF0aW9uUmFuayhlYWNoQ3VycmVudENvbGxpc2lvbjogRWFjaEN1cnJlbnRDb2xsaXNpb24gPSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVEaWZmZXJlbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gY291bnQoXG4gICAgICAgICAgICBJdGVyYXRvci5mcm9tKHRoaXMudG9rZW5zKS5maWx0ZXIoeCA9PlxuICAgICAgICAgICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uID09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudFxuICAgICAgICAgICAgICAgICAgICA/IHggPT09IFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAgICAgICAgICAgICA6IFBhdGhUb2tlbnMuaXNNdWx0aVRva2VuKHgpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG1hdGNoRm9yKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogUGF0aE1hdGNoaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbWF0Y2ggbm9uIGFic29sdXRlIHBhdGggJyR7dGhpcy50b1N0cmluZygpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vZGVsUGF0aC5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke21vZGVsUGF0aC50b1N0cmluZygpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGF0aE1hdGNoZXIubWF0Y2godGhpcy50b2tlbnMsIG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqc3BsaXRCeU11bHRpcGxpY2l0eSgpOiBJdGVyYWJsZTxSZXNvbHZlZE1vZGVsUGF0aCB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w+IHtcbiAgICAgICAgbGV0IGxhc3RTaW1wbGVQYXJ0cyA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKFBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbih0b2tlbikpIHtcbiAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMuYXBwZW5kKHRva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFsYXN0U2ltcGxlUGFydHMuZW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgbGFzdFNpbXBsZVBhcnRzLnRvUmVzb2x2ZWRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RTaW1wbGVQYXJ0cyA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsYXN0U2ltcGxlUGFydHMuZW1wdHkpIHtcbiAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5vcm1hbGl6ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFRva2VuczogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIHRoaXMudG9rZW5zKSB7XG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLi5cIikge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0VG9rZW5zLnBvcCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGlzIGludmFsaWQgJyR7dGhpcy50b1N0cmluZygpfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRva2Vucy5wdXNoKFwiLi5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXRoUGFydCA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFRva2Vucy5wdXNoKHBhdGhQYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHJlc3VsdFRva2VucywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkg0KHQv9C10YbQuNGE0LjQutCw0YLQvtGA0Ysg0LzQvdC+0LbQtdGB0YLQstC10L3QvdC+0YHRgtC4IEVhY2gg0LfQsNC80LXQvdGP0LXRgiDQvdCwIEN1cnJlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9DdXJyZW50SXRlcmF0aW9uKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5PVEUg0KLRg9GCINC90LUg0L/QvtC70YPRh9Cw0LXRgtGB0Y8g0L3QsNC70L7QttC40YLRjCDQtNC40YHQutGA0LjQvNC40L3QsNGC0L7RgFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgY29uc3QgcGF0aFBhcnRzOiBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+ID0gdGhpcy50b2tlbnMubWFwKHggPT5cbiAgICAgICAgICAgICAgICB4ID09PSBQYXRoVG9rZW5zLmVhY2ggPyBQYXRoVG9rZW5zLmN1cnJlbnQgOiB4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihwYXRoUGFydHMsIHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRvRWFjaEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5jdXJyZW50ID8gUGF0aFRva2Vucy5lYWNoIDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0Fic29sdXRlKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIGlmICghdGhpcy5hYnNvbHV0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoICcke3RoaXMudG9MZWdhY3lQYXRoKCl9IGlzIG5vdCBhYnNvbHV0ZSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCB0cnVlPih0aGlzLnRva2VucywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljICpnZXRBbGxQYXJlbnRQYXRocygpOiBJdGVyYWJsZTxNb2RlbFBhdGg+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1vZGVsUGF0aEJ1aWxkZXIodGhpcy5pc0Fic29sdXRlKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB5aWVsZCByZXN1bHQudG9QYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpbUxhc3RTdGFySWZMYXN0VG9rZW4oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgaWYgKGxhc3RJdGVtICE9IHVuZGVmaW5lZCAmJiBQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihsYXN0SXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbCh0aGlzLnRva2Vucy5zbGljZSgwLCAtMSksIHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1vZGVsUGF0aEJ1aWxkZXIodGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgSXRlclV0aWxzLnNraXBMYXN0KHRoaXMuZ2V0UGF0aFBhcnRzKCksIDEpKSB7XG4gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDQotGD0YIg0L/QvtC70YPRh9Cw0LXRgtGB0Y8g0YLQsNC6LCDRh9GC0L4g0L/QviDQtNGA0YPQs9C+0LzRgyDQvdC40LrQsNC6XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50b1BhdGgoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlJbnN0YW5jZXNEaXJ0eShcbiAgICAgICAgaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSxcbiAgICAgICAgZmlsbFdpdGhNdWx0aXBsaWNpdHlJZkhhc05vSW5zdGFuY2U/OiBib29sZWFuXG4gICAgKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkgfHwgaW5zdGFuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluc3RhbmNlQ291bnRlciA9IDA7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRydWUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuZ2V0UGF0aFBhcnRzKCkpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbih0b2tlbikgJiYgaW5zdGFuY2VDb3VudGVyIDwgaW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlT3JFYWNoID1cbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzW2luc3RhbmNlQ291bnRlcl0gPz9cbiAgICAgICAgICAgICAgICAgICAgKGZpbGxXaXRoTXVsdGlwbGljaXR5SWZIYXNOb0luc3RhbmNlID09IHRydWUgPyBQYXRoVG9rZW5zLmVhY2ggOiByZWplY3QoKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpbnN0YW5jZU9yRWFjaCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudGVyKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vINCi0YPRgiDQv9C+0LvRg9GH0LDQtdGC0YHRjyDRgtCw0LosINGH0YLQviDQv9C+INC00YDRg9Cz0L7QvNGDINC90LjQutCw0LpcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gcmVzdWx0LnRvUGF0aCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGF0aFBhcnRUb1N0cmluZyhwYXRoUGFydDogUGF0aFRva2VuKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoUGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhQYXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIqXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGF0aCBwYXJ0IHNwZWNpZmllZDogJHtlbnN1cmVBbmRHZXRTdHJpbmcocGF0aFBhcnQpfWApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxjQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxx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
@@ -3,10 +3,32 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getMask = getMask;
7
+ exports.getMaskWithInstances = getMaskWithInstances;
6
8
  exports.isAggregationPath = isAggregationPath;
9
+ var _ModelPath = require("./ModelPath");
7
10
  function isAggregationPath(modelPath) {
8
11
  const tokens = modelPath.getPathPartsAsArray();
9
12
  const lastToken = tokens[tokens.length - 1];
10
13
  return lastToken === "Sum" || lastToken === "Count";
11
14
  }
12
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0FnZ3JlZ2F0aW9uUGF0aCIsIm1vZGVsUGF0aCIsInRva2VucyIsImdldFBhdGhQYXJ0c0FzQXJyYXkiLCJsYXN0VG9rZW4iLCJsZW5ndGgiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbFBhdGggfSBmcm9tIFwiLi9Nb2RlbFBhdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWdncmVnYXRpb25QYXRoKG1vZGVsUGF0aDogTW9kZWxQYXRoKSB7XG4gICAgY29uc3QgdG9rZW5zID0gbW9kZWxQYXRoLmdldFBhdGhQYXJ0c0FzQXJyYXkoKTtcbiAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBsYXN0VG9rZW4gPT09IFwiU3VtXCIgfHwgbGFzdFRva2VuID09PSBcIkNvdW50XCI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVPLFNBQVNBLGlCQUFpQkEsQ0FBQ0MsU0FBb0IsRUFBRTtFQUNwRCxNQUFNQyxNQUFNLEdBQUdELFNBQVMsQ0FBQ0UsbUJBQW1CLENBQUMsQ0FBQztFQUM5QyxNQUFNQyxTQUFTLEdBQUdGLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLE9BQU9ELFNBQVMsS0FBSyxLQUFLLElBQUlBLFNBQVMsS0FBSyxPQUFPO0FBQ3ZEIn0=
15
+ function getMask(exactPath) {
16
+ return (0, _ModelPath.createAbsoluteFromTokens)(Iterator.from(exactPath.getPathParts()).map(x => _ModelPath.PathTokens.isInstanceToken(x) ? _ModelPath.PathTokens.each : x).toArray());
17
+ }
18
+ function getMaskWithInstances(exactPath) {
19
+ const reduceResult = Iterator.from(exactPath.getPathParts()).reduce((result, token) => {
20
+ if (_ModelPath.PathTokens.isInstanceToken(token) || _ModelPath.PathTokens.isMultiToken(token)) {
21
+ result.instances.push(token);
22
+ }
23
+ result.tokens.push(_ModelPath.PathTokens.isInstanceToken(token) ? _ModelPath.PathTokens.each : token);
24
+ return result;
25
+ }, {
26
+ tokens: [],
27
+ instances: []
28
+ });
29
+ return {
30
+ mask: (0, _ModelPath.createAbsoluteFromTokens)(reduceResult.tokens),
31
+ instances: reduceResult.instances
32
+ };
33
+ }
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfTW9kZWxQYXRoIiwicmVxdWlyZSIsImlzQWdncmVnYXRpb25QYXRoIiwibW9kZWxQYXRoIiwidG9rZW5zIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsImxhc3RUb2tlbiIsImxlbmd0aCIsImdldE1hc2siLCJleGFjdFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJJdGVyYXRvciIsImZyb20iLCJnZXRQYXRoUGFydHMiLCJtYXAiLCJ4IiwiUGF0aFRva2VucyIsImlzSW5zdGFuY2VUb2tlbiIsImVhY2giLCJ0b0FycmF5IiwiZ2V0TWFza1dpdGhJbnN0YW5jZXMiLCJyZWR1Y2VSZXN1bHQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ0b2tlbiIsImlzTXVsdGlUb2tlbiIsImluc3RhbmNlcyIsInB1c2giLCJtYXNrIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzb2x1dGVNb2RlbFBhdGgsIGNyZWF0ZUFic29sdXRlRnJvbVRva2VucywgTW9kZWxQYXRoLCBQYXRoVG9rZW4sIFBhdGhUb2tlbnMgfSBmcm9tIFwiLi9Nb2RlbFBhdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWdncmVnYXRpb25QYXRoKG1vZGVsUGF0aDogTW9kZWxQYXRoKSB7XG4gICAgY29uc3QgdG9rZW5zID0gbW9kZWxQYXRoLmdldFBhdGhQYXJ0c0FzQXJyYXkoKTtcbiAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBsYXN0VG9rZW4gPT09IFwiU3VtXCIgfHwgbGFzdFRva2VuID09PSBcIkNvdW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNrKGV4YWN0UGF0aDogQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGNyZWF0ZUFic29sdXRlRnJvbVRva2VucyhcbiAgICAgICAgSXRlcmF0b3IuZnJvbShleGFjdFBhdGguZ2V0UGF0aFBhcnRzKCkpXG4gICAgICAgICAgICAubWFwKHggPT4gKFBhdGhUb2tlbnMuaXNJbnN0YW5jZVRva2VuKHgpID8gUGF0aFRva2Vucy5lYWNoIDogeCkpXG4gICAgICAgICAgICAudG9BcnJheSgpXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc2tXaXRoSW5zdGFuY2VzKGV4YWN0UGF0aDogQWJzb2x1dGVNb2RlbFBhdGgpOiB7XG4gICAgbWFzazogQWJzb2x1dGVNb2RlbFBhdGg7XG4gICAgaW5zdGFuY2VzOiBQYXRoVG9rZW5bXTtcbn0ge1xuICAgIGNvbnN0IHJlZHVjZVJlc3VsdCA9IEl0ZXJhdG9yLmZyb20oZXhhY3RQYXRoLmdldFBhdGhQYXJ0cygpKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc0luc3RhbmNlVG9rZW4odG9rZW4pIHx8IFBhdGhUb2tlbnMuaXNNdWx0aVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5pbnN0YW5jZXMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQudG9rZW5zLnB1c2goUGF0aFRva2Vucy5pc0luc3RhbmNlVG9rZW4odG9rZW4pID8gUGF0aFRva2Vucy5lYWNoIDogdG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5zOiBbXSBhcyBQYXRoVG9rZW5bXSxcbiAgICAgICAgICAgIGluc3RhbmNlczogW10gYXMgUGF0aFRva2VuW10sXG4gICAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1hc2s6IGNyZWF0ZUFic29sdXRlRnJvbVRva2VucyhyZWR1Y2VSZXN1bHQudG9rZW5zKSxcbiAgICAgICAgaW5zdGFuY2VzOiByZWR1Y2VSZXN1bHQuaW5zdGFuY2VzLFxuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBRU8sU0FBU0MsaUJBQWlCQSxDQUFDQyxTQUFvQixFQUFFO0VBQ3BELE1BQU1DLE1BQU0sR0FBR0QsU0FBUyxDQUFDRSxtQkFBbUIsQ0FBQyxDQUFDO0VBQzlDLE1BQU1DLFNBQVMsR0FBR0YsTUFBTSxDQUFDQSxNQUFNLENBQUNHLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDM0MsT0FBT0QsU0FBUyxLQUFLLEtBQUssSUFBSUEsU0FBUyxLQUFLLE9BQU87QUFDdkQ7QUFFTyxTQUFTRSxPQUFPQSxDQUFDQyxTQUE0QixFQUFxQjtFQUNyRSxPQUFPLElBQUFDLG1DQUF3QixFQUMzQkMsUUFBUSxDQUFDQyxJQUFJLENBQUNILFNBQVMsQ0FBQ0ksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNsQ0MsR0FBRyxDQUFDQyxDQUFDLElBQUtDLHFCQUFVLENBQUNDLGVBQWUsQ0FBQ0YsQ0FBQyxDQUFDLEdBQUdDLHFCQUFVLENBQUNFLElBQUksR0FBR0gsQ0FBRSxDQUFDLENBQy9ESSxPQUFPLENBQUMsQ0FDakIsQ0FBQztBQUNMO0FBRU8sU0FBU0Msb0JBQW9CQSxDQUFDWCxTQUE0QixFQUcvRDtFQUNFLE1BQU1ZLFlBQVksR0FBR1YsUUFBUSxDQUFDQyxJQUFJLENBQUNILFNBQVMsQ0FBQ0ksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDUyxNQUFNLENBQy9ELENBQUNDLE1BQU0sRUFBRUMsS0FBSyxLQUFLO0lBQ2YsSUFBSVIscUJBQVUsQ0FBQ0MsZUFBZSxDQUFDTyxLQUFLLENBQUMsSUFBSVIscUJBQVUsQ0FBQ1MsWUFBWSxDQUFDRCxLQUFLLENBQUMsRUFBRTtNQUNyRUQsTUFBTSxDQUFDRyxTQUFTLENBQUNDLElBQUksQ0FBQ0gsS0FBSyxDQUFDO0lBQ2hDO0lBQ0FELE1BQU0sQ0FBQ25CLE1BQU0sQ0FBQ3VCLElBQUksQ0FBQ1gscUJBQVUsQ0FBQ0MsZUFBZSxDQUFDTyxLQUFLLENBQUMsR0FBR1IscUJBQVUsQ0FBQ0UsSUFBSSxHQUFHTSxLQUFLLENBQUM7SUFDL0UsT0FBT0QsTUFBTTtFQUNqQixDQUFDLEVBQ0Q7SUFDSW5CLE1BQU0sRUFBRSxFQUFpQjtJQUN6QnNCLFNBQVMsRUFBRTtFQUNmLENBQ0osQ0FBQztFQUNELE9BQU87SUFDSEUsSUFBSSxFQUFFLElBQUFsQixtQ0FBd0IsRUFBQ1csWUFBWSxDQUFDakIsTUFBTSxDQUFDO0lBQ25Ec0IsU0FBUyxFQUFFTCxZQUFZLENBQUNLO0VBQzVCLENBQUM7QUFDTCJ9
@@ -5,8 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Set2 = void 0;
7
7
  class Set2 {
8
- constructor() {
8
+ constructor(source) {
9
9
  this.hashMap = new Map();
10
+ if (source != undefined) {
11
+ for (const sourceElement of source) {
12
+ this.add(sourceElement);
13
+ }
14
+ }
10
15
  }
11
16
  add(path) {
12
17
  const hash = this.getItemHash(path);
@@ -51,4 +56,4 @@ class Set2 {
51
56
  }
52
57
  }
53
58
  exports.Set2 = Set2;
54
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTZXQyIiwiY29uc3RydWN0b3IiLCJoYXNoTWFwIiwiTWFwIiwiYWRkIiwicGF0aCIsImhhc2giLCJnZXRJdGVtSGFzaCIsImxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJmaW5kIiwieCIsImFyZUl0ZW1zRXF1YWwiLCJwdXNoIiwicmVtb3ZlIiwiZmlsdGVyIiwiaGFzIiwiX3RoaXMkaGFzaE1hcCRnZXQiLCJpc0VtcHR5Iiwic2l6ZSIsInZhbHVlcyIsIkl0ZXJhdG9yIiwiZnJvbSIsImZsYXRNYXAiLCJjbGVhciIsImtleSIsImdldEhhc2giLCJsZWZ0IiwicmlnaHQiLCJpc0VxdWFscyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL1NldC9TZXQyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFcXVhdGFibGUgfSBmcm9tIFwiLi4vSUVxdWF0YWJsZVwiO1xuXG5leHBvcnQgY2xhc3MgU2V0MjxUSSBleHRlbmRzIElFcXVhdGFibGU8VEk+PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBoYXNoTWFwID0gbmV3IE1hcDxudW1iZXIsIFRJW10+KCk7XG5cbiAgICBwdWJsaWMgYWRkKHBhdGg6IFRJKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldEl0ZW1IYXNoKHBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5oYXNoTWFwLmdldChoYXNoKTtcbiAgICAgICAgaWYgKGxpc3QgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmhhc2hNYXAuc2V0KGhhc2gsIFtwYXRoXSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaXN0LmZpbmQoeCA9PiB0aGlzLmFyZUl0ZW1zRXF1YWwoeCwgcGF0aCkpID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxpc3QucHVzaChwYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShwYXRoOiBUSSk6IHZvaWQge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRJdGVtSGFzaChwYXRoKTtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuaGFzaE1hcC5nZXQoaGFzaCk7XG4gICAgICAgIGlmIChsaXN0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5oYXNoTWFwLnNldChcbiAgICAgICAgICAgICAgICBoYXNoLFxuICAgICAgICAgICAgICAgIGxpc3QuZmlsdGVyKHggPT4gIXRoaXMuYXJlSXRlbXNFcXVhbCh4LCBwYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzKHBhdGg6IFRJKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldEl0ZW1IYXNoKHBhdGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoTWFwLmdldChoYXNoKT8uZmluZCh4ID0+IHRoaXMuYXJlSXRlbXNFcXVhbCh4LCBwYXRoKSkgIT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoTWFwLnNpemUgPT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlcygpOiBJdGVyYWJsZTxUST4ge1xuICAgICAgICByZXR1cm4gSXRlcmF0b3IuZnJvbSh0aGlzLmhhc2hNYXAudmFsdWVzKCkpLmZsYXRNYXAoeCA9PiB4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzaE1hcC5jbGVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtSGFzaChrZXk6IFRJKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGtleS5nZXRIYXNoKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFyZUl0ZW1zRXF1YWwobGVmdDogVEksIHJpZ2h0OiBUSSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbGVmdC5pc0VxdWFscyhyaWdodCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFTyxNQUFNQSxJQUFJLENBQTRCO0VBQUFDLFlBQUE7SUFBQSxLQUN4QkMsT0FBTyxHQUFHLElBQUlDLEdBQUcsQ0FBZSxDQUFDO0VBQUE7RUFFM0NDLEdBQUdBLENBQUNDLElBQVEsRUFBVztJQUMxQixNQUFNQyxJQUFJLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNGLElBQUksQ0FBQztJQUNuQyxNQUFNRyxJQUFJLEdBQUcsSUFBSSxDQUFDTixPQUFPLENBQUNPLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO0lBQ25DLElBQUlFLElBQUksSUFBSUUsU0FBUyxFQUFFO01BQ25CLElBQUksQ0FBQ1IsT0FBTyxDQUFDUyxHQUFHLENBQUNMLElBQUksRUFBRSxDQUFDRCxJQUFJLENBQUMsQ0FBQztNQUM5QixPQUFPLElBQUk7SUFDZixDQUFDLE1BQU07TUFDSCxJQUFJRyxJQUFJLENBQUNJLElBQUksQ0FBQ0MsQ0FBQyxJQUFJLElBQUksQ0FBQ0MsYUFBYSxDQUFDRCxDQUFDLEVBQUVSLElBQUksQ0FBQyxDQUFDLElBQUlLLFNBQVMsRUFBRTtRQUMxREYsSUFBSSxDQUFDTyxJQUFJLENBQUNWLElBQUksQ0FBQztRQUNmLE9BQU8sSUFBSTtNQUNmO0lBQ0o7SUFDQSxPQUFPLEtBQUs7RUFDaEI7RUFFT1csTUFBTUEsQ0FBQ1gsSUFBUSxFQUFRO0lBQzFCLE1BQU1DLElBQUksR0FBRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDO0lBQ25DLE1BQU1HLElBQUksR0FBRyxJQUFJLENBQUNOLE9BQU8sQ0FBQ08sR0FBRyxDQUFDSCxJQUFJLENBQUM7SUFDbkMsSUFBSUUsSUFBSSxJQUFJRSxTQUFTLEVBQUU7TUFDbkIsSUFBSSxDQUFDUixPQUFPLENBQUNTLEdBQUcsQ0FDWkwsSUFBSSxFQUNKRSxJQUFJLENBQUNTLE1BQU0sQ0FBQ0osQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDQyxhQUFhLENBQUNELENBQUMsRUFBRVIsSUFBSSxDQUFDLENBQ2pELENBQUM7SUFDTDtFQUNKO0VBRU9hLEdBQUdBLENBQUNiLElBQVEsRUFBVztJQUFBLElBQUFjLGlCQUFBO0lBQzFCLE1BQU1iLElBQUksR0FBRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDO0lBQ25DLE9BQU8sRUFBQWMsaUJBQUEsT0FBSSxDQUFDakIsT0FBTyxDQUFDTyxHQUFHLENBQUNILElBQUksQ0FBQyxjQUFBYSxpQkFBQSx1QkFBdEJBLGlCQUFBLENBQXdCUCxJQUFJLENBQUNDLENBQUMsSUFBSSxJQUFJLENBQUNDLGFBQWEsQ0FBQ0QsQ0FBQyxFQUFFUixJQUFJLENBQUMsQ0FBQyxLQUFJSyxTQUFTO0VBQ3RGO0VBRU9VLE9BQU9BLENBQUEsRUFBWTtJQUN0QixPQUFPLElBQUksQ0FBQ2xCLE9BQU8sQ0FBQ21CLElBQUksS0FBSyxDQUFDO0VBQ2xDO0VBRU9DLE1BQU1BLENBQUEsRUFBaUI7SUFDMUIsT0FBT0MsUUFBUSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDdEIsT0FBTyxDQUFDb0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxPQUFPLENBQUNaLENBQUMsSUFBSUEsQ0FBQyxDQUFDO0VBQy9EO0VBRU9hLEtBQUtBLENBQUEsRUFBUztJQUNqQixJQUFJLENBQUN4QixPQUFPLENBQUN3QixLQUFLLENBQUMsQ0FBQztFQUN4QjtFQUVVbkIsV0FBV0EsQ0FBQ29CLEdBQU8sRUFBVTtJQUNuQyxPQUFPQSxHQUFHLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0VBQ3hCO0VBRVVkLGFBQWFBLENBQUNlLElBQVEsRUFBRUMsS0FBUyxFQUFXO0lBQ2xELE9BQU9ELElBQUksQ0FBQ0UsUUFBUSxDQUFDRCxLQUFLLENBQUM7RUFDL0I7QUFDSjtBQUFDRSxPQUFBLENBQUFoQyxJQUFBLEdBQUFBLElBQUEifQ==
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTZXQyIiwiY29uc3RydWN0b3IiLCJzb3VyY2UiLCJoYXNoTWFwIiwiTWFwIiwidW5kZWZpbmVkIiwic291cmNlRWxlbWVudCIsImFkZCIsInBhdGgiLCJoYXNoIiwiZ2V0SXRlbUhhc2giLCJsaXN0IiwiZ2V0Iiwic2V0IiwiZmluZCIsIngiLCJhcmVJdGVtc0VxdWFsIiwicHVzaCIsInJlbW92ZSIsImZpbHRlciIsImhhcyIsIl90aGlzJGhhc2hNYXAkZ2V0IiwiaXNFbXB0eSIsInNpemUiLCJ2YWx1ZXMiLCJJdGVyYXRvciIsImZyb20iLCJmbGF0TWFwIiwiY2xlYXIiLCJrZXkiLCJnZXRIYXNoIiwibGVmdCIsInJpZ2h0IiwiaXNFcXVhbHMiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9TZXQvU2V0Mi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRXF1YXRhYmxlIH0gZnJvbSBcIi4uL0lFcXVhdGFibGVcIjtcblxuZXhwb3J0IGNsYXNzIFNldDI8VEkgZXh0ZW5kcyBJRXF1YXRhYmxlPFRJPj4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFzaE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBUSVtdPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNvdXJjZT86IEl0ZXJhYmxlPFRJPikge1xuICAgICAgICBpZiAoc291cmNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzb3VyY2VFbGVtZW50IG9mIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZChwYXRoOiBUSSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRJdGVtSGFzaChwYXRoKTtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuaGFzaE1hcC5nZXQoaGFzaCk7XG4gICAgICAgIGlmIChsaXN0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5oYXNoTWFwLnNldChoYXNoLCBbcGF0aF0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGlzdC5maW5kKHggPT4gdGhpcy5hcmVJdGVtc0VxdWFsKHgsIHBhdGgpKSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUocGF0aDogVEkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0SXRlbUhhc2gocGF0aCk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmhhc2hNYXAuZ2V0KGhhc2gpO1xuICAgICAgICBpZiAobGlzdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzaE1hcC5zZXQoXG4gICAgICAgICAgICAgICAgaGFzaCxcbiAgICAgICAgICAgICAgICBsaXN0LmZpbHRlcih4ID0+ICF0aGlzLmFyZUl0ZW1zRXF1YWwoeCwgcGF0aCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhwYXRoOiBUSSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRJdGVtSGFzaChwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzaE1hcC5nZXQoaGFzaCk/LmZpbmQoeCA9PiB0aGlzLmFyZUl0ZW1zRXF1YWwoeCwgcGF0aCkpICE9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzaE1hcC5zaXplID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZXMoKTogSXRlcmFibGU8VEk+IHtcbiAgICAgICAgcmV0dXJuIEl0ZXJhdG9yLmZyb20odGhpcy5oYXNoTWFwLnZhbHVlcygpKS5mbGF0TWFwKHggPT4geCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc2hNYXAuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbUhhc2goa2V5OiBUSSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBrZXkuZ2V0SGFzaCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcmVJdGVtc0VxdWFsKGxlZnQ6IFRJLCByaWdodDogVEkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGxlZnQuaXNFcXVhbHMocmlnaHQpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRU8sTUFBTUEsSUFBSSxDQUE0QjtFQUdsQ0MsV0FBV0EsQ0FBQ0MsTUFBcUIsRUFBRTtJQUFBLEtBRnpCQyxPQUFPLEdBQUcsSUFBSUMsR0FBRyxDQUFlLENBQUM7SUFHOUMsSUFBSUYsTUFBTSxJQUFJRyxTQUFTLEVBQUU7TUFDckIsS0FBSyxNQUFNQyxhQUFhLElBQUlKLE1BQU0sRUFBRTtRQUNoQyxJQUFJLENBQUNLLEdBQUcsQ0FBQ0QsYUFBYSxDQUFDO01BQzNCO0lBQ0o7RUFDSjtFQUVPQyxHQUFHQSxDQUFDQyxJQUFRLEVBQVc7SUFDMUIsTUFBTUMsSUFBSSxHQUFHLElBQUksQ0FBQ0MsV0FBVyxDQUFDRixJQUFJLENBQUM7SUFDbkMsTUFBTUcsSUFBSSxHQUFHLElBQUksQ0FBQ1IsT0FBTyxDQUFDUyxHQUFHLENBQUNILElBQUksQ0FBQztJQUNuQyxJQUFJRSxJQUFJLElBQUlOLFNBQVMsRUFBRTtNQUNuQixJQUFJLENBQUNGLE9BQU8sQ0FBQ1UsR0FBRyxDQUFDSixJQUFJLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDLENBQUM7TUFDOUIsT0FBTyxJQUFJO0lBQ2YsQ0FBQyxNQUFNO01BQ0gsSUFBSUcsSUFBSSxDQUFDRyxJQUFJLENBQUNDLENBQUMsSUFBSSxJQUFJLENBQUNDLGFBQWEsQ0FBQ0QsQ0FBQyxFQUFFUCxJQUFJLENBQUMsQ0FBQyxJQUFJSCxTQUFTLEVBQUU7UUFDMURNLElBQUksQ0FBQ00sSUFBSSxDQUFDVCxJQUFJLENBQUM7UUFDZixPQUFPLElBQUk7TUFDZjtJQUNKO0lBQ0EsT0FBTyxLQUFLO0VBQ2hCO0VBRU9VLE1BQU1BLENBQUNWLElBQVEsRUFBUTtJQUMxQixNQUFNQyxJQUFJLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNGLElBQUksQ0FBQztJQUNuQyxNQUFNRyxJQUFJLEdBQUcsSUFBSSxDQUFDUixPQUFPLENBQUNTLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO0lBQ25DLElBQUlFLElBQUksSUFBSU4sU0FBUyxFQUFFO01BQ25CLElBQUksQ0FBQ0YsT0FBTyxDQUFDVSxHQUFHLENBQ1pKLElBQUksRUFDSkUsSUFBSSxDQUFDUSxNQUFNLENBQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDRCxDQUFDLEVBQUVQLElBQUksQ0FBQyxDQUNqRCxDQUFDO0lBQ0w7RUFDSjtFQUVPWSxHQUFHQSxDQUFDWixJQUFRLEVBQVc7SUFBQSxJQUFBYSxpQkFBQTtJQUMxQixNQUFNWixJQUFJLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNGLElBQUksQ0FBQztJQUNuQyxPQUFPLEVBQUFhLGlCQUFBLE9BQUksQ0FBQ2xCLE9BQU8sQ0FBQ1MsR0FBRyxDQUFDSCxJQUFJLENBQUMsY0FBQVksaUJBQUEsdUJBQXRCQSxpQkFBQSxDQUF3QlAsSUFBSSxDQUFDQyxDQUFDLElBQUksSUFBSSxDQUFDQyxhQUFhLENBQUNELENBQUMsRUFBRVAsSUFBSSxDQUFDLENBQUMsS0FBSUgsU0FBUztFQUN0RjtFQUVPaUIsT0FBT0EsQ0FBQSxFQUFZO0lBQ3RCLE9BQU8sSUFBSSxDQUFDbkIsT0FBTyxDQUFDb0IsSUFBSSxLQUFLLENBQUM7RUFDbEM7RUFFT0MsTUFBTUEsQ0FBQSxFQUFpQjtJQUMxQixPQUFPQyxRQUFRLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUN2QixPQUFPLENBQUNxQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNHLE9BQU8sQ0FBQ1osQ0FBQyxJQUFJQSxDQUFDLENBQUM7RUFDL0Q7RUFFT2EsS0FBS0EsQ0FBQSxFQUFTO0lBQ2pCLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQ3lCLEtBQUssQ0FBQyxDQUFDO0VBQ3hCO0VBRVVsQixXQUFXQSxDQUFDbUIsR0FBTyxFQUFVO0lBQ25DLE9BQU9BLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7RUFDeEI7RUFFVWQsYUFBYUEsQ0FBQ2UsSUFBUSxFQUFFQyxLQUFTLEVBQVc7SUFDbEQsT0FBT0QsSUFBSSxDQUFDRSxRQUFRLENBQUNELEtBQUssQ0FBQztFQUMvQjtBQUNKO0FBQUNFLE9BQUEsQ0FBQWxDLElBQUEsR0FBQUEsSUFBQSJ9
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQ29tbW9uL1BpY2tsaXN0QXBpQ2xpZW50L0lQaWNrbGlzdEFwaUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaWNrbGlzdFJlcXVlc3RWMiB9IGZyb20gXCIuL1R5cGVzL1BpY2tsaXN0UmVxdWVzdFYyXCI7XG5pbXBvcnQgeyBQaWNrbGlzdFJlc3VsdFYyIH0gZnJvbSBcIi4vVHlwZXMvUGlja2xpc3RSZXN1bHRWMlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQaWNrbGlzdEFwaUNsaWVudCB7XG4gICAgc2VhcmNoQXN5bmMoZ2lkOiBzdHJpbmcsIHJlcXVlc3Q6IFJlYWRvbmx5PFBpY2tsaXN0UmVxdWVzdFYyPik6IFByb21pc2U8UGlja2xpc3RSZXN1bHRWMj47XG59XG4iXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PicklistApiClient = void 0;
7
+ var _AuthenticationMode = require("../HttpClient/AuthenticationMode");
8
+ var _HttpClient = require("../HttpClient/HttpClient");
9
+ class PicklistApiClient {
10
+ constructor(fetchImpl, baseUrl, resourceZone, authentication) {
11
+ this.httpClient = void 0;
12
+ this.httpClient = new _HttpClient.HttpClient(fetchImpl, baseUrl, (0, _AuthenticationMode.createAuthenticationProvider)(authentication), {
13
+ resourceZone: resourceZone
14
+ });
15
+ }
16
+ searchAsync(gid, request) {
17
+ const {
18
+ filter,
19
+ take,
20
+ skip
21
+ } = request;
22
+ return this.httpClient.get(`v2/${gid}/`).withQueryParams({
23
+ filter: filter,
24
+ take: take,
25
+ skip: skip
26
+ }).json();
27
+ }
28
+ }
29
+ exports.PicklistApiClient = PicklistApiClient;
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXV0aGVudGljYXRpb25Nb2RlIiwicmVxdWlyZSIsIl9IdHRwQ2xpZW50IiwiUGlja2xpc3RBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsInNlYXJjaEFzeW5jIiwiZ2lkIiwicmVxdWVzdCIsImZpbHRlciIsInRha2UiLCJza2lwIiwiZ2V0Iiwid2l0aFF1ZXJ5UGFyYW1zIiwianNvbiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9Db21tb24vUGlja2xpc3RBcGlDbGllbnQvUGlja2xpc3RBcGlDbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUh0dHBDbGllbnQgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5cbmltcG9ydCB7IElQaWNrbGlzdEFwaUNsaWVudCB9IGZyb20gXCIuL0lQaWNrbGlzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgUGlja2xpc3RSZXF1ZXN0VjIgfSBmcm9tIFwiLi9UeXBlcy9QaWNrbGlzdFJlcXVlc3RWMlwiO1xuaW1wb3J0IHsgUGlja2xpc3RSZXN1bHRWMiB9IGZyb20gXCIuL1R5cGVzL1BpY2tsaXN0UmVzdWx0VjJcIjtcblxuZXhwb3J0IGNsYXNzIFBpY2tsaXN0QXBpQ2xpZW50IGltcGxlbWVudHMgSVBpY2tsaXN0QXBpQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgICAgIHJlc291cmNlWm9uZTogdW5kZWZpbmVkIHwgc3RyaW5nLFxuICAgICAgICBhdXRoZW50aWNhdGlvbjogdW5kZWZpbmVkIHwgQXV0aGVudGljYXRpb25Nb2RlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KGZldGNoSW1wbCwgYmFzZVVybCwgY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlcihhdXRoZW50aWNhdGlvbiksIHtcbiAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoQXN5bmMoZ2lkOiBzdHJpbmcsIHJlcXVlc3Q6IFJlYWRvbmx5PFBpY2tsaXN0UmVxdWVzdFYyPik6IFByb21pc2U8UGlja2xpc3RSZXN1bHRWMj4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlciwgdGFrZSwgc2tpcCB9ID0gcmVxdWVzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjIvJHtnaWR9L2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZmlsdGVyOiBmaWx0ZXIsIHRha2U6IHRha2UsIHNraXA6IHNraXAgfSlcbiAgICAgICAgICAgIC5qc29uPFBpY2tsaXN0UmVzdWx0VjI+KCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFBQSxtQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBTU8sTUFBTUUsaUJBQWlCLENBQStCO0VBR2xEQyxXQUFXQSxDQUNkQyxTQUFnQixFQUNoQkMsT0FBZSxFQUNmQyxZQUFnQyxFQUNoQ0MsY0FBOEMsRUFDaEQ7SUFBQSxLQVBlQyxVQUFVO0lBUXZCLElBQUksQ0FBQ0EsVUFBVSxHQUFHLElBQUlDLHNCQUFVLENBQUNMLFNBQVMsRUFBRUMsT0FBTyxFQUFFLElBQUFLLGdEQUE0QixFQUFDSCxjQUFjLENBQUMsRUFBRTtNQUMvRkQsWUFBWSxFQUFFQTtJQUNsQixDQUFDLENBQUM7RUFDTjtFQUVPSyxXQUFXQSxDQUFDQyxHQUFXLEVBQUVDLE9BQW9DLEVBQTZCO0lBQzdGLE1BQU07TUFBRUMsTUFBTTtNQUFFQyxJQUFJO01BQUVDO0lBQUssQ0FBQyxHQUFHSCxPQUFPO0lBQ3RDLE9BQU8sSUFBSSxDQUFDTCxVQUFVLENBQ2pCUyxHQUFHLENBQUUsTUFBS0wsR0FBSSxHQUFFLENBQUMsQ0FDakJNLGVBQWUsQ0FBQztNQUFFSixNQUFNLEVBQUVBLE1BQU07TUFBRUMsSUFBSSxFQUFFQSxJQUFJO01BQUVDLElBQUksRUFBRUE7SUFBSyxDQUFDLENBQUMsQ0FDM0RHLElBQUksQ0FBbUIsQ0FBQztFQUNqQztBQUNKO0FBQUNDLE9BQUEsQ0FBQWxCLGlCQUFBLEdBQUFBLGlCQUFBIn0=
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildPicklistRequest = void 0;
7
+ var _util = require("util");
8
+ var _DigestFilterColumnSerializer = require("./Serializers/DigestFilterColumnSerializer");
9
+ var _DigestLogicalFilterSerializer = require("./Serializers/DigestLogicalFilterSerializer");
10
+ const buildPicklistRequest = filter => {
11
+ if ((0, _util.isNullOrUndefined)(filter)) {
12
+ return {};
13
+ }
14
+ const picklistFilter = convertToPicklistFilter(filter.filter);
15
+ return {
16
+ filter: picklistFilter,
17
+ skip: filter === null || filter === void 0 ? void 0 : filter.skip,
18
+ take: filter === null || filter === void 0 ? void 0 : filter.take
19
+ };
20
+ };
21
+ exports.buildPicklistRequest = buildPicklistRequest;
22
+ const convertToPicklistFilter = filter => {
23
+ if ((0, _util.isNullOrUndefined)(filter)) {
24
+ return undefined;
25
+ }
26
+ if ("operands" in filter) {
27
+ return (0, _DigestLogicalFilterSerializer.serializeToString)(filter);
28
+ }
29
+ if ("column" in filter) {
30
+ return (0, _DigestFilterColumnSerializer.serializeToString)(filter);
31
+ }
32
+ return undefined;
33
+ };
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbCIsInJlcXVpcmUiLCJfRGlnZXN0RmlsdGVyQ29sdW1uU2VyaWFsaXplciIsIl9EaWdlc3RMb2dpY2FsRmlsdGVyU2VyaWFsaXplciIsImJ1aWxkUGlja2xpc3RSZXF1ZXN0IiwiZmlsdGVyIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJwaWNrbGlzdEZpbHRlciIsImNvbnZlcnRUb1BpY2tsaXN0RmlsdGVyIiwic2tpcCIsInRha2UiLCJleHBvcnRzIiwidW5kZWZpbmVkIiwic2VyaWFsaXplRGlnZXN0TG9naWNhbEZpbHRlclRvU3RyaW5nIiwic2VyaWFsaXplRGlnZXN0RmlsdGVyQ29sdW1uVG9TdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9Db21tb24vUGlja2xpc3RBcGlDbGllbnQvUGlja2xpc3RSZXF1ZXN0VjJCdWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSBcInV0aWxcIjtcblxuaW1wb3J0IHsgRGlnZXN0RmlsdGVyLCBEaWdlc3RRdWVyeUZpbHRlciB9IGZyb20gXCIuLi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcblxuaW1wb3J0IHsgUGlja2xpc3RSZXF1ZXN0VjIgfSBmcm9tIFwiLi9UeXBlcy9QaWNrbGlzdFJlcXVlc3RWMlwiO1xuaW1wb3J0IHsgc2VyaWFsaXplVG9TdHJpbmcgYXMgc2VyaWFsaXplRGlnZXN0RmlsdGVyQ29sdW1uVG9TdHJpbmcgfSBmcm9tIFwiLi9TZXJpYWxpemVycy9EaWdlc3RGaWx0ZXJDb2x1bW5TZXJpYWxpemVyXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVUb1N0cmluZyBhcyBzZXJpYWxpemVEaWdlc3RMb2dpY2FsRmlsdGVyVG9TdHJpbmcgfSBmcm9tIFwiLi9TZXJpYWxpemVycy9EaWdlc3RMb2dpY2FsRmlsdGVyU2VyaWFsaXplclwiO1xuXG5leHBvcnQgY29uc3QgYnVpbGRQaWNrbGlzdFJlcXVlc3QgPSAoZmlsdGVyPzogRGlnZXN0UXVlcnlGaWx0ZXIpOiBQaWNrbGlzdFJlcXVlc3RWMiA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGZpbHRlcikpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IHBpY2tsaXN0RmlsdGVyID0gY29udmVydFRvUGlja2xpc3RGaWx0ZXIoZmlsdGVyLmZpbHRlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyOiBwaWNrbGlzdEZpbHRlcixcbiAgICAgICAgc2tpcDogZmlsdGVyPy5za2lwLFxuICAgICAgICB0YWtlOiBmaWx0ZXI/LnRha2UsXG4gICAgfTtcbn07XG5cbmNvbnN0IGNvbnZlcnRUb1BpY2tsaXN0RmlsdGVyID0gKGZpbHRlcj86IERpZ2VzdEZpbHRlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGZpbHRlcikpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoXCJvcGVyYW5kc1wiIGluIGZpbHRlcikge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplRGlnZXN0TG9naWNhbEZpbHRlclRvU3RyaW5nKGZpbHRlcik7XG4gICAgfVxuXG4gICAgaWYgKFwiY29sdW1uXCIgaW4gZmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVEaWdlc3RGaWx0ZXJDb2x1bW5Ub1N0cmluZyhmaWx0ZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFLQSxJQUFBQyw2QkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsOEJBQUEsR0FBQUYsT0FBQTtBQUVPLE1BQU1HLG9CQUFvQixHQUFJQyxNQUEwQixJQUF3QjtFQUNuRixJQUFJLElBQUFDLHVCQUFpQixFQUFDRCxNQUFNLENBQUMsRUFBRTtJQUMzQixPQUFPLENBQUMsQ0FBQztFQUNiO0VBRUEsTUFBTUUsY0FBYyxHQUFHQyx1QkFBdUIsQ0FBQ0gsTUFBTSxDQUFDQSxNQUFNLENBQUM7RUFDN0QsT0FBTztJQUNIQSxNQUFNLEVBQUVFLGNBQWM7SUFDdEJFLElBQUksRUFBRUosTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVJLElBQUk7SUFDbEJDLElBQUksRUFBRUwsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVLO0VBQ2xCLENBQUM7QUFDTCxDQUFDO0FBQUNDLE9BQUEsQ0FBQVAsb0JBQUEsR0FBQUEsb0JBQUE7QUFFRixNQUFNSSx1QkFBdUIsR0FBSUgsTUFBcUIsSUFBeUI7RUFDM0UsSUFBSSxJQUFBQyx1QkFBaUIsRUFBQ0QsTUFBTSxDQUFDLEVBQUU7SUFDM0IsT0FBT08sU0FBUztFQUNwQjtFQUVBLElBQUksVUFBVSxJQUFJUCxNQUFNLEVBQUU7SUFDdEIsT0FBTyxJQUFBUSxnREFBb0MsRUFBQ1IsTUFBTSxDQUFDO0VBQ3ZEO0VBRUEsSUFBSSxRQUFRLElBQUlBLE1BQU0sRUFBRTtJQUNwQixPQUFPLElBQUFTLCtDQUFtQyxFQUFDVCxNQUFNLENBQUM7RUFDdEQ7RUFFQSxPQUFPTyxTQUFTO0FBQ3BCLENBQUMifQ==