@ruvector/ruvllm 2.5.6 → 2.5.7

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 (67) hide show
  1. package/README.md +282 -282
  2. package/bin/cli.js +1020 -1020
  3. package/dist/cjs/benchmarks/embedding-benchmark.js +8 -8
  4. package/dist/cjs/benchmarks/index.js +5 -5
  5. package/dist/cjs/benchmarks/model-comparison.js +15 -25
  6. package/dist/cjs/benchmarks/routing-benchmark.js +5 -5
  7. package/dist/cjs/contrastive.js +78 -78
  8. package/dist/cjs/engine.js +13 -13
  9. package/dist/cjs/export.js +31 -31
  10. package/dist/cjs/federated.js +1 -1
  11. package/dist/cjs/index.js +1 -1
  12. package/dist/cjs/intelligence.js +8 -18
  13. package/dist/cjs/lora.js +1 -1
  14. package/dist/cjs/models.js +13 -23
  15. package/dist/cjs/native.js +5 -4
  16. package/dist/cjs/session.js +1 -1
  17. package/dist/cjs/simd.js +1 -1
  18. package/dist/cjs/sona.js +1 -1
  19. package/dist/cjs/streaming.d.ts +1 -0
  20. package/dist/cjs/streaming.d.ts.map +1 -1
  21. package/dist/cjs/streaming.js +3 -3
  22. package/dist/cjs/training.d.ts +32 -4
  23. package/dist/cjs/training.d.ts.map +1 -1
  24. package/dist/cjs/training.js +59 -9
  25. package/dist/cjs/types.js +1 -1
  26. package/dist/esm/benchmarks/embedding-benchmark.js +1 -1
  27. package/dist/esm/benchmarks/index.js +1 -1
  28. package/dist/esm/benchmarks/model-comparison.js +1 -1
  29. package/dist/esm/benchmarks/routing-benchmark.js +1 -1
  30. package/dist/esm/contrastive.js +70 -70
  31. package/dist/esm/engine.js +13 -13
  32. package/dist/esm/export.js +31 -31
  33. package/dist/esm/federated.js +1 -1
  34. package/dist/esm/index.js +1 -1
  35. package/dist/esm/intelligence.js +1 -1
  36. package/dist/esm/lora.js +1 -1
  37. package/dist/esm/models.js +1 -1
  38. package/dist/esm/native.js +1 -1
  39. package/dist/esm/session.js +1 -1
  40. package/dist/esm/simd.js +1 -1
  41. package/dist/esm/sona.js +1 -1
  42. package/dist/esm/streaming.d.ts +1 -0
  43. package/dist/esm/streaming.d.ts.map +1 -1
  44. package/dist/esm/streaming.js +1 -1
  45. package/dist/esm/training.d.ts +32 -4
  46. package/dist/esm/training.d.ts.map +1 -1
  47. package/dist/esm/training.js +59 -9
  48. package/dist/esm/types.js +1 -1
  49. package/package.json +133 -133
  50. package/scripts/ensemble-model-compare.js +287 -287
  51. package/scripts/huggingface/README.md +537 -537
  52. package/scripts/huggingface/publish.sh +112 -112
  53. package/scripts/hybrid-model-compare.js +373 -373
  54. package/scripts/improved-model-compare.js +288 -288
  55. package/scripts/optimized-model-compare.js +364 -364
  56. package/scripts/real-model-compare.js +280 -280
  57. package/scripts/training/agentic-flow-capabilities.json +329 -329
  58. package/scripts/training/claude-code-synth.js +505 -505
  59. package/scripts/training/claude-flow-capabilities.json +1322 -1322
  60. package/scripts/training/claude-hard-negatives.js +222 -222
  61. package/scripts/training/contrastive-finetune.js +517 -517
  62. package/scripts/training/ecosystem-triplets.jsonl +1466 -1466
  63. package/scripts/training/generate-ecosystem-triplets.js +1324 -1324
  64. package/scripts/training/routing-dataset.js +634 -634
  65. package/scripts/training/ruvector-capabilities.json +798 -798
  66. package/scripts/training/validate-ecosystem.js +381 -381
  67. package/scripts/training/validation-results.json +22 -22
@@ -8,13 +8,7 @@
8
8
  * - Semantic search accuracy
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.CLUSTER_TEST_CASES = exports.SEARCH_TEST_CASES = exports.SIMILARITY_TEST_PAIRS = void 0;
12
- exports.isCorrectSimilarity = isCorrectSimilarity;
13
- exports.calculateMRR = calculateMRR;
14
- exports.calculateNDCG = calculateNDCG;
15
- exports.calculateSilhouette = calculateSilhouette;
16
- exports.runEmbeddingBenchmark = runEmbeddingBenchmark;
17
- exports.formatEmbeddingResults = formatEmbeddingResults;
11
+ exports.formatEmbeddingResults = exports.runEmbeddingBenchmark = exports.calculateSilhouette = exports.calculateNDCG = exports.calculateMRR = exports.isCorrectSimilarity = exports.CLUSTER_TEST_CASES = exports.SEARCH_TEST_CASES = exports.SIMILARITY_TEST_PAIRS = void 0;
18
12
  /**
19
13
  * Ground truth similarity pairs for testing
20
14
  * Tests whether embeddings correctly capture semantic similarity
@@ -195,6 +189,7 @@ function isCorrectSimilarity(expected, computed) {
195
189
  const threshold = SIMILARITY_THRESHOLDS[expected];
196
190
  return computed >= threshold.min && computed <= threshold.max;
197
191
  }
192
+ exports.isCorrectSimilarity = isCorrectSimilarity;
198
193
  /**
199
194
  * Calculate Mean Reciprocal Rank for search results
200
195
  */
@@ -208,6 +203,7 @@ function calculateMRR(rankings) {
208
203
  }
209
204
  return sumRR / rankings.length;
210
205
  }
206
+ exports.calculateMRR = calculateMRR;
211
207
  /**
212
208
  * Calculate NDCG for search results
213
209
  */
@@ -220,6 +216,7 @@ function calculateNDCG(results, idealOrder) {
220
216
  }, 0);
221
217
  return idcg > 0 ? dcg / idcg : 0;
222
218
  }
219
+ exports.calculateNDCG = calculateNDCG;
223
220
  /**
224
221
  * Calculate silhouette score for clustering
225
222
  */
@@ -264,6 +261,7 @@ function calculateSilhouette(embeddings, labels) {
264
261
  }
265
262
  return totalSilhouette / n;
266
263
  }
264
+ exports.calculateSilhouette = calculateSilhouette;
267
265
  function euclideanDistance(a, b) {
268
266
  let sum = 0;
269
267
  for (let i = 0; i < a.length; i++) {
@@ -364,6 +362,7 @@ function runEmbeddingBenchmark(embedder, similarityFn) {
364
362
  totalPairs: similarityResults.length,
365
363
  };
366
364
  }
365
+ exports.runEmbeddingBenchmark = runEmbeddingBenchmark;
367
366
  /**
368
367
  * Format embedding benchmark results for display
369
368
  */
@@ -423,6 +422,7 @@ function formatEmbeddingResults(results) {
423
422
  }
424
423
  return lines.join('\n');
425
424
  }
425
+ exports.formatEmbeddingResults = formatEmbeddingResults;
426
426
  exports.default = {
427
427
  SIMILARITY_TEST_PAIRS: exports.SIMILARITY_TEST_PAIRS,
428
428
  SEARCH_TEST_CASES: exports.SEARCH_TEST_CASES,
@@ -433,4 +433,4 @@ exports.default = {
433
433
  calculateMRR,
434
434
  calculateNDCG,
435
435
  };
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkaW5nLWJlbmNobWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaG1hcmtzL2VtYmVkZGluZy1iZW5jaG1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQTZPSCxrREFNQztBQUtELG9DQVdDO0FBS0Qsc0NBYUM7QUFLRCxrREFpREM7QUFhRCxzREE2R0M7QUFLRCx3REF5REM7QUF4ZEQ7OztHQUdHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBb0I7SUFDcEQsNERBQTREO0lBQzVELEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxFQUFFLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtJQUN0SSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLDhCQUE4QixFQUFFLEtBQUssRUFBRSxzQ0FBc0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDL0ksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQ2pKLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtJQUN2SSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7SUFDM0gsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSww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RUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxrQkFBZTtJQUNiLHFCQUFxQixFQUFyQiw2QkFBcUI7SUFDckIsaUJBQWlCLEVBQWpCLHlCQUFpQjtJQUNqQixrQkFBa0IsRUFBbEIsMEJBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixhQUFhO0NBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbWJlZGRpbmcgUXVhbGl0eSBCZW5jaG1hcmsgZm9yIFJ1dkxUUkEgTW9kZWxzXHJcbiAqXHJcbiAqIFRlc3RzIGVtYmVkZGluZyBxdWFsaXR5IGZvciBDbGF1ZGUgQ29kZSB1c2UgY2FzZXM6XHJcbiAqIC0gQ29kZSBzaW1pbGFyaXR5IGRldGVjdGlvblxyXG4gKiAtIFRhc2sgY2x1c3RlcmluZ1xyXG4gKiAtIFNlbWFudGljIHNlYXJjaCBhY2N1cmFjeVxyXG4gKi9cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW1iZWRkaW5nUGFpciB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0ZXh0MTogc3RyaW5nO1xyXG4gIHRleHQyOiBzdHJpbmc7XHJcbiAgc2ltaWxhcml0eTogJ2hpZ2gnIHwgJ21lZGl1bScgfCAnbG93JyB8ICdub25lJztcclxuICBjYXRlZ29yeTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVtYmVkZGluZ1Jlc3VsdCB7XHJcbiAgcGFpcklkOiBzdHJpbmc7XHJcbiAgZXhwZWN0ZWRTaW1pbGFyaXR5OiBzdHJpbmc7XHJcbiAgY29tcHV0ZWRTY29yZTogbnVtYmVyO1xyXG4gIGNvcnJlY3Q6IGJvb2xlYW47XHJcbiAgbGF0ZW5jeU1zOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlclRlc3RDYXNlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGl0ZW1zOiBzdHJpbmdbXTtcclxuICBleHBlY3RlZENsdXN0ZXI6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzIHtcclxuICAvLyBTaW1pbGFyaXR5IGRldGVjdGlvblxyXG4gIHNpbWlsYXJpdHlBY2N1cmFjeTogbnVtYmVyO1xyXG4gIHNpbWlsYXJpdHlCeUNhdGVnb3J5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xyXG4gIGF2Z1NpbWlsYXJpdHlMYXRlbmN5TXM6IG51bWJlcjtcclxuXHJcbiAgLy8gQ2x1c3RlcmluZyBxdWFsaXR5XHJcbiAgY2x1c3RlclB1cml0eTogbnVtYmVyO1xyXG4gIHNpbGhvdWV0dGVTY29yZTogbnVtYmVyO1xyXG5cclxuICAvLyBTZWFyY2ggcXVhbGl0eVxyXG4gIHNlYXJjaE1SUjogbnVtYmVyOyAvLyBNZWFuIFJlY2lwcm9jYWwgUmFua1xyXG4gIHNlYXJjaE5EQ0c6IG51bWJlcjsgLy8gTm9ybWFsaXplZCBEaXNjb3VudGVkIEN1bXVsYXRpdmUgR2FpblxyXG5cclxuICAvLyBEZXRhaWxzXHJcbiAgc2ltaWxhcml0eVJlc3VsdHM6IEVtYmVkZGluZ1Jlc3VsdFtdO1xyXG4gIHRvdGFsUGFpcnM6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VuZCB0cnV0aCBzaW1pbGFyaXR5IHBhaXJzIGZvciB0ZXN0aW5nXHJcbiAqIFRlc3RzIHdoZXRoZXIgZW1iZWRkaW5ncyBjb3JyZWN0bHkgY2FwdHVyZSBzZW1hbnRpYyBzaW1pbGFyaXR5XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU0lNSUxBUklUWV9URVNUX1BBSVJTOiBFbWJlZGRpbmdQYWlyW10gPSBbXHJcbiAgLy8gPT09IEhJR0ggU0lNSUxBUklUWSAoc2FtZSBjb25jZXB0LCBkaWZmZXJlbnQgd29yZGluZykgPT09XHJcbiAgeyBpZDogJ0gwMDEnLCB0ZXh0MTogJ2ltcGxlbWVudCB1c2VyIGF1dGhlbnRpY2F0aW9uJywgdGV4dDI6ICdjcmVhdGUgbG9naW4gZnVuY3Rpb25hbGl0eScsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXHJcbiAgeyBpZDogJ0gwMDInLCB0ZXh0MTogJ3dyaXRlIHVuaXQgdGVzdHMgZm9yIHRoZSBBUEknLCB0ZXh0MjogJ2NyZWF0ZSB0ZXN0IGNhc2VzIGZvciBSRVNUIGVuZHBvaW50cycsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXHJcbiAgeyBpZDogJ0gwMDMnLCB0ZXh0MTogJ2ZpeCB0aGUgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbicsIHRleHQyOiAncmVzb2x2ZSB0aGUgTnVsbFBvaW50ZXJFeGNlcHRpb24gYnVnJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2RlYnVnZ2luZycgfSxcclxuICB7IGlkOiAnSDAwNCcsIHRleHQxOiAnb3B0aW1pemUgZGF0YWJhc2UgcXVlcmllcycsIHRleHQyOiAnaW1wcm92ZSBTUUwgcXVlcnkgcGVyZm9ybWFuY2UnLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAncGVyZm9ybWFuY2UnIH0sXHJcbiAgeyBpZDogJ0gwMDUnLCB0ZXh0MTogJ2RlcGxveSB0byBwcm9kdWN0aW9uJywgdGV4dDI6ICdyZWxlYXNlIHRvIHByb2QgZW52aXJvbm1lbnQnLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAnZGV2b3BzJyB9LFxyXG4gIHsgaWQ6ICdIMDA2JywgdGV4dDE6ICdyZWZhY3RvciB0aGUgbGVnYWN5IGNvZGUnLCB0ZXh0MjogJ3Jlc3RydWN0dXJlIG9sZCBjb2RlYmFzZScsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdyZWZhY3RvcmluZycgfSxcclxuICB7IGlkOiAnSDAwNycsIHRleHQxOiAnYWRkIGVycm9yIGhhbmRsaW5nJywgdGV4dDI6ICdpbXBsZW1lbnQgZXhjZXB0aW9uIGhhbmRsaW5nJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcclxuICB7IGlkOiAnSDAwOCcsIHRleHQxOiAnY3JlYXRlIFJFU1QgQVBJIGVuZHBvaW50JywgdGV4dDI6ICdidWlsZCBIVFRQIEFQSSByb3V0ZScsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXHJcbiAgeyBpZDogJ0gwMDknLCB0ZXh0MTogJ2NoZWNrIGZvciBTUUwgaW5qZWN0aW9uJywgdGV4dDI6ICdhdWRpdCBmb3IgU1FMaSB2dWxuZXJhYmlsaXRpZXMnLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAnc2VjdXJpdHknIH0sXHJcbiAgeyBpZDogJ0gwMTAnLCB0ZXh0MTogJ2RvY3VtZW50IHRoZSBBUEknLCB0ZXh0MjogJ3dyaXRlIEFQSSBkb2N1bWVudGF0aW9uJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2RvY3VtZW50YXRpb24nIH0sXHJcblxyXG4gIC8vIENvZGUgc25pcHBldHMgLSBzYW1lIGZ1bmN0aW9uYWxpdHlcclxuICB7IGlkOiAnSDAxMScsIHRleHQxOiAnZnVuY3Rpb24gYWRkKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9JywgdGV4dDI6ICdjb25zdCBzdW0gPSAoeCwgeSkgPT4geCArIHk7Jywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2NvZGUtc25pcHBldCcgfSxcclxuICB7IGlkOiAnSDAxMicsIHRleHQxOiAnZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspJywgdGV4dDI6ICdhcnIuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHt9KScsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXHJcbiAgeyBpZDogJ0gwMTMnLCB0ZXh0MTogJ2FzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHsgYXdhaXQgZmV0Y2godXJsKTsgfScsIHRleHQyOiAnY29uc3QgZ2V0RGF0YSA9IGFzeW5jICgpID0+IHsgYXdhaXQgYXhpb3MuZ2V0KHVybCk7IH0nLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAnY29kZS1zbmlwcGV0JyB9LFxyXG5cclxuICAvLyA9PT0gTUVESVVNIFNJTUlMQVJJVFkgKHJlbGF0ZWQgYnV0IGRpZmZlcmVudCkgPT09XHJcbiAgeyBpZDogJ00wMDEnLCB0ZXh0MTogJ2ltcGxlbWVudCB1c2VyIGF1dGhlbnRpY2F0aW9uJywgdGV4dDI6ICdjcmVhdGUgdXNlciByZWdpc3RyYXRpb24nLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXHJcbiAgeyBpZDogJ00wMDInLCB0ZXh0MTogJ3dyaXRlIHVuaXQgdGVzdHMnLCB0ZXh0MjogJ3dyaXRlIGludGVncmF0aW9uIHRlc3RzJywgc2ltaWxhcml0eTogJ21lZGl1bScsIGNhdGVnb3J5OiAndGVzdGluZycgfSxcclxuICB7IGlkOiAnTTAwMycsIHRleHQxOiAnZml4IHRoZSBidWcgaW4gY2hlY2tvdXQnLCB0ZXh0MjogJ2RlYnVnIHRoZSBwYXltZW50IGZsb3cnLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdkZWJ1Z2dpbmcnIH0sXHJcbiAgeyBpZDogJ00wMDQnLCB0ZXh0MTogJ29wdGltaXplIGZyb250ZW5kIHBlcmZvcm1hbmNlJywgdGV4dDI6ICdpbXByb3ZlIGJhY2tlbmQgcmVzcG9uc2UgdGltZScsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyB9LFxyXG4gIHsgaWQ6ICdNMDA1JywgdGV4dDE6ICdkZXBsb3kgdG8gc3RhZ2luZycsIHRleHQyOiAnZGVwbG95IHRvIHByb2R1Y3Rpb24nLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdkZXZvcHMnIH0sXHJcbiAgeyBpZDogJ00wMDYnLCB0ZXh0MTogJ1JlYWN0IGNvbXBvbmVudCcsIHRleHQyOiAnVnVlIGNvbXBvbmVudCcsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ2NvZGUtc25pcHBldCcgfSxcclxuICB7IGlkOiAnTTAwNycsIHRleHQxOiAnUG9zdGdyZVNRTCBxdWVyeScsIHRleHQyOiAnTXlTUUwgcXVlcnknLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXHJcbiAgeyBpZDogJ00wMDgnLCB0ZXh0MTogJ1JFU1QgQVBJJywgdGV4dDI6ICdHcmFwaFFMIEFQSScsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcclxuICB7IGlkOiAnTTAwOScsIHRleHQxOiAnTm9kZS5qcyBzZXJ2ZXInLCB0ZXh0MjogJ1B5dGhvbiBGbGFzayBzZXJ2ZXInLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXHJcbiAgeyBpZDogJ00wMTAnLCB0ZXh0MTogJ2FkZCBjYWNoaW5nIGxheWVyJywgdGV4dDI6ICdpbXBsZW1lbnQgcmF0ZSBsaW1pdGluZycsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyB9LFxyXG5cclxuICAvLyA9PT0gTE9XIFNJTUlMQVJJVFkgKHNhbWUgZG9tYWluLCBkaWZmZXJlbnQgdGFzaykgPT09XHJcbiAgeyBpZDogJ0wwMDEnLCB0ZXh0MTogJ2ltcGxlbWVudCBhdXRoZW50aWNhdGlvbicsIHRleHQyOiAnd3JpdGUgZG9jdW1lbnRhdGlvbicsIHNpbWlsYXJpdHk6ICdsb3cnLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcclxuICB7IGlkOiAnTDAwMicsIHRleHQxOiAnZml4IGJ1ZycsIHRleHQyOiAnYWRkIG5ldyBmZWF0dXJlJywgc2ltaWxhcml0eTogJ2xvdycsIGNhdGVnb3J5OiAnY29kZS10YXNrJyB9LFxyXG4gIHsgaWQ6ICdMMDAzJywgdGV4dDE6ICdvcHRpbWl6ZSBxdWVyeScsIHRleHQyOiAncmV2aWV3IHB1bGwgcmVxdWVzdCcsIHNpbWlsYXJpdHk6ICdsb3cnLCBjYXRlZ29yeTogJ21peGVkJyB9LFxyXG4gIHsgaWQ6ICdMMDA0JywgdGV4dDE6ICdkZXBsb3kgYXBwbGljYXRpb24nLCB0ZXh0MjogJ2Rlc2lnbiBhcmNoaXRlY3R1cmUnLCBzaW1pbGFyaXR5OiAnbG93JywgY2F0ZWdvcnk6ICdtaXhlZCcgfSxcclxuICB7IGlkOiAnTDAwNScsIHRleHQxOiAnZnJvbnRlbmQgUmVhY3QgY29kZScsIHRleHQyOiAnYmFja2VuZCBkYXRhYmFzZSBtaWdyYXRpb24nLCBzaW1pbGFyaXR5OiAnbG93JywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXHJcbiAgeyBpZDogJ0wwMDYnLCB0ZXh0MTogJ3NlY3VyaXR5IGF1ZGl0JywgdGV4dDI6ICdwZXJmb3JtYW5jZSBiZW5jaG1hcmsnLCBzaW1pbGFyaXR5OiAnbG93JywgY2F0ZWdvcnk6ICdtaXhlZCcgfSxcclxuICB7IGlkOiAnTDAwNycsIHRleHQxOiAnd3JpdGUgdW5pdCB0ZXN0cycsIHRleHQyOiAnY3JlYXRlIENJL0NEIHBpcGVsaW5lJywgc2ltaWxhcml0eTogJ2xvdycsIGNhdGVnb3J5OiAnbWl4ZWQnIH0sXHJcbiAgeyBpZDogJ0wwMDgnLCB0ZXh0MTogJ0NTUyBzdHlsaW5nJywgdGV4dDI6ICdkYXRhYmFzZSBzY2hlbWEnLCBzaW1pbGFyaXR5OiAnbG93JywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXHJcblxyXG4gIC8vID09PSBOTyBTSU1JTEFSSVRZICh1bnJlbGF0ZWQpID09PVxyXG4gIHsgaWQ6ICdOMDAxJywgdGV4dDE6ICdpbXBsZW1lbnQgdXNlciBsb2dpbicsIHRleHQyOiAndGhlIHdlYXRoZXIgaXMgbmljZSB0b2RheScsIHNpbWlsYXJpdHk6ICdub25lJywgY2F0ZWdvcnk6ICd1bnJlbGF0ZWQnIH0sXHJcbiAgeyBpZDogJ04wMDInLCB0ZXh0MTogJ2ZpeCBKYXZhU2NyaXB0IGJ1ZycsIHRleHQyOiAncmVjaXBlIGZvciBjaG9jb2xhdGUgY2FrZScsIHNpbWlsYXJpdHk6ICdub25lJywgY2F0ZWdvcnk6ICd1bnJlbGF0ZWQnIH0sXHJcbiAgeyBpZDogJ04wMDMnLCB0ZXh0MTogJ2RlcGxveSBLdWJlcm5ldGVzIGNsdXN0ZXInLCB0ZXh0MjogJ2Jvb2sgYSBmbGlnaHQgdG8gUGFyaXMnLCBzaW1pbGFyaXR5OiAnbm9uZScsIGNhdGVnb3J5OiAndW5yZWxhdGVkJyB9LFxyXG4gIHsgaWQ6ICdOMDA0JywgdGV4dDE6ICdvcHRpbWl6ZSBTUUwgcXVlcnknLCB0ZXh0MjogJ2xlYXJuIHRvIHBsYXkgZ3VpdGFyJywgc2ltaWxhcml0eTogJ25vbmUnLCBjYXRlZ29yeTogJ3VucmVsYXRlZCcgfSxcclxuICB7IGlkOiAnTjAwNScsIHRleHQxOiAnY29uc3QgeCA9IDQyOycsIHRleHQyOiAncm9zZXMgYXJlIHJlZCB2aW9sZXRzIGFyZSBibHVlJywgc2ltaWxhcml0eTogJ25vbmUnLCBjYXRlZ29yeTogJ3VucmVsYXRlZCcgfSxcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBTZWFyY2ggcmVsZXZhbmNlIHRlc3QgY2FzZXNcclxuICogUXVlcnkgKyBkb2N1bWVudHMgd2l0aCByZWxldmFuY2Ugc2NvcmVzXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFRlc3RDYXNlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHF1ZXJ5OiBzdHJpbmc7XHJcbiAgZG9jdW1lbnRzOiB7IHRleHQ6IHN0cmluZzsgcmVsZXZhbmNlOiBudW1iZXIgfVtdOyAvLyByZWxldmFuY2U6IDAtMyAoMD1pcnJlbGV2YW50LCAzPWhpZ2hseSByZWxldmFudClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFNFQVJDSF9URVNUX0NBU0VTOiBTZWFyY2hUZXN0Q2FzZVtdID0gW1xyXG4gIHtcclxuICAgIGlkOiAnUzAwMScsXHJcbiAgICBxdWVyeTogJ2hvdyB0byBpbXBsZW1lbnQgdXNlciBhdXRoZW50aWNhdGlvbiBpbiBOb2RlLmpzJyxcclxuICAgIGRvY3VtZW50czogW1xyXG4gICAgICB7IHRleHQ6ICdJbXBsZW1lbnRpbmcgSldUIGF1dGhlbnRpY2F0aW9uIGluIEV4cHJlc3MuanMgd2l0aCBwYXNzcG9ydCcsIHJlbGV2YW5jZTogMyB9LFxyXG4gICAgICB7IHRleHQ6ICdOb2RlLmpzIGxvZ2luIHN5c3RlbSB3aXRoIGJjcnlwdCBwYXNzd29yZCBoYXNoaW5nJywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ0J1aWxkaW5nIGEgUmVhY3QgbG9naW4gZm9ybSBjb21wb25lbnQnLCByZWxldmFuY2U6IDIgfSxcclxuICAgICAgeyB0ZXh0OiAnUG9zdGdyZVNRTCB1c2VyIHRhYmxlIHNjaGVtYSBkZXNpZ24nLCByZWxldmFuY2U6IDEgfSxcclxuICAgICAgeyB0ZXh0OiAnSG93IHRvIGRlcGxveSBEb2NrZXIgY29udGFpbmVycycsIHJlbGV2YW5jZTogMCB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnUzAwMicsXHJcbiAgICBxdWVyeTogJ2ZpeCBtZW1vcnkgbGVhayBpbiBKYXZhU2NyaXB0JyxcclxuICAgIGRvY3VtZW50czogW1xyXG4gICAgICB7IHRleHQ6ICdEZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzIHdpdGggQ2hyb21lIERldlRvb2xzIGhlYXAgc25hcHNob3RzJywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ0NvbW1vbiBjYXVzZXMgb2YgbWVtb3J5IGxlYWtzIGluIE5vZGUuanMgYXBwbGljYXRpb25zJywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ0phdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGV4cGxhaW5lZCcsIHJlbGV2YW5jZTogMiB9LFxyXG4gICAgICB7IHRleHQ6ICdPcHRpbWl6aW5nIFJlYWN0IGNvbXBvbmVudCByZS1yZW5kZXJzJywgcmVsZXZhbmNlOiAxIH0sXHJcbiAgICAgIHsgdGV4dDogJ0NTUyBmbGV4Ym94IGxheW91dCB0dXRvcmlhbCcsIHJlbGV2YW5jZTogMCB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnUzAwMycsXHJcbiAgICBxdWVyeTogJ2RhdGFiYXNlIG1pZ3JhdGlvbiBiZXN0IHByYWN0aWNlcycsXHJcbiAgICBkb2N1bWVudHM6IFtcclxuICAgICAgeyB0ZXh0OiAnU2NoZW1hIG1pZ3JhdGlvbiBzdHJhdGVnaWVzIGZvciB6ZXJvLWRvd250aW1lIGRlcGxveW1lbnRzJywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ1VzaW5nIFByaXNtYSBtaWdyYXRlIGZvciBQb3N0Z3JlU1FMIHNjaGVtYSBjaGFuZ2VzJywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ0RhdGFiYXNlIGJhY2t1cCBhbmQgcmVjb3ZlcnkgcHJvY2VkdXJlcycsIHJlbGV2YW5jZTogMiB9LFxyXG4gICAgICB7IHRleHQ6ICdTUUwgcXVlcnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMnLCByZWxldmFuY2U6IDEgfSxcclxuICAgICAgeyB0ZXh0OiAnUmVhY3Qgc3RhdGUgbWFuYWdlbWVudCB3aXRoIFJlZHV4JywgcmVsZXZhbmNlOiAwIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6ICdTMDA0JyxcclxuICAgIHF1ZXJ5OiAnd3JpdGUgdW5pdCB0ZXN0cyBmb3IgUmVhY3QgY29tcG9uZW50cycsXHJcbiAgICBkb2N1bWVudHM6IFtcclxuICAgICAgeyB0ZXh0OiAnVGVzdGluZyBSZWFjdCBjb21wb25lbnRzIHdpdGggSmVzdCBhbmQgUmVhY3QgVGVzdGluZyBMaWJyYXJ5JywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ1NuYXBzaG90IHRlc3RpbmcgZm9yIFVJIGNvbXBvbmVudHMnLCByZWxldmFuY2U6IDMgfSxcclxuICAgICAgeyB0ZXh0OiAnTW9ja2luZyBBUEkgY2FsbHMgaW4gZnJvbnRlbmQgdGVzdHMnLCByZWxldmFuY2U6IDIgfSxcclxuICAgICAgeyB0ZXh0OiAnRW5kLXRvLWVuZCB0ZXN0aW5nIHdpdGggQ3lwcmVzcycsIHJlbGV2YW5jZTogMSB9LFxyXG4gICAgICB7IHRleHQ6ICdLdWJlcm5ldGVzIHBvZCBjb25maWd1cmF0aW9uJywgcmVsZXZhbmNlOiAwIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6ICdTMDA1JyxcclxuICAgIHF1ZXJ5OiAnb3B0aW1pemUgQVBJIHJlc3BvbnNlIHRpbWUnLFxyXG4gICAgZG9jdW1lbnRzOiBbXHJcbiAgICAgIHsgdGV4dDogJ0ltcGxlbWVudGluZyBSZWRpcyBjYWNoaW5nIGZvciBBUEkgZW5kcG9pbnRzJywgcmVsZXZhbmNlOiAzIH0sXHJcbiAgICAgIHsgdGV4dDogJ0RhdGFiYXNlIHF1ZXJ5IG9wdGltaXphdGlvbiB3aXRoIGluZGV4ZXMnLCByZWxldmFuY2U6IDMgfSxcclxuICAgICAgeyB0ZXh0OiAnVXNpbmcgQ0ROIGZvciBzdGF0aWMgYXNzZXQgZGVsaXZlcnknLCByZWxldmFuY2U6IDIgfSxcclxuICAgICAgeyB0ZXh0OiAnTG9hZCBiYWxhbmNpbmcgc3RyYXRlZ2llcyBmb3IgbWljcm9zZXJ2aWNlcycsIHJlbGV2YW5jZTogMiB9LFxyXG4gICAgICB7IHRleHQ6ICdXcml0aW5nIGNsZWFuIEphdmFTY3JpcHQgY29kZScsIHJlbGV2YW5jZTogMCB9LFxyXG4gICAgXSxcclxuICB9LFxyXG5dO1xyXG5cclxuLyoqXHJcbiAqIENsdXN0ZXIgdGVzdCBjYXNlcyAtIGl0ZW1zIHRoYXQgc2hvdWxkIGNsdXN0ZXIgdG9nZXRoZXJcclxuICovXHJcbmV4cG9ydCBjb25zdCBDTFVTVEVSX1RFU1RfQ0FTRVM6IENsdXN0ZXJUZXN0Q2FzZVtdID0gW1xyXG4gIHtcclxuICAgIGlkOiAnQ0wwMDEnLFxyXG4gICAgZXhwZWN0ZWRDbHVzdGVyOiAnYXV0aGVudGljYXRpb24nLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAgJ2ltcGxlbWVudCB1c2VyIGxvZ2luJyxcclxuICAgICAgJ2FkZCBKV1QgdG9rZW4gdmFsaWRhdGlvbicsXHJcbiAgICAgICdjcmVhdGUgcGFzc3dvcmQgcmVzZXQgZmxvdycsXHJcbiAgICAgICdpbXBsZW1lbnQgT0F1dGggaW50ZWdyYXRpb24nLFxyXG4gICAgICAnYWRkIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nLFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnQ0wwMDInLFxyXG4gICAgZXhwZWN0ZWRDbHVzdGVyOiAndGVzdGluZycsXHJcbiAgICBpdGVtczogW1xyXG4gICAgICAnd3JpdGUgdW5pdCB0ZXN0cycsXHJcbiAgICAgICdhZGQgaW50ZWdyYXRpb24gdGVzdHMnLFxyXG4gICAgICAnY3JlYXRlIEUyRSB0ZXN0IHN1aXRlJyxcclxuICAgICAgJ2ltcHJvdmUgdGVzdCBjb3ZlcmFnZScsXHJcbiAgICAgICdhZGQgc25hcHNob3QgdGVzdHMnLFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnQ0wwMDMnLFxyXG4gICAgZXhwZWN0ZWRDbHVzdGVyOiAnZGF0YWJhc2UnLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAgJ29wdGltaXplIFNRTCBxdWVyaWVzJyxcclxuICAgICAgJ2FkZCBkYXRhYmFzZSBpbmRleGVzJyxcclxuICAgICAgJ2NyZWF0ZSBtaWdyYXRpb24gc2NyaXB0JyxcclxuICAgICAgJ2ltcGxlbWVudCBjb25uZWN0aW9uIHBvb2xpbmcnLFxyXG4gICAgICAnZGVzaWduIHNjaGVtYSBmb3IgdXNlcnMgdGFibGUnLFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnQ0wwMDQnLFxyXG4gICAgZXhwZWN0ZWRDbHVzdGVyOiAnZnJvbnRlbmQnLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAgJ2J1aWxkIFJlYWN0IGNvbXBvbmVudCcsXHJcbiAgICAgICdhZGQgQ1NTIHN0eWxpbmcnLFxyXG4gICAgICAnaW1wbGVtZW50IHJlc3BvbnNpdmUgZGVzaWduJyxcclxuICAgICAgJ2NyZWF0ZSBmb3JtIHZhbGlkYXRpb24nLFxyXG4gICAgICAnYWRkIGxvYWRpbmcgc3Bpbm5lcicsXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6ICdDTDAwNScsXHJcbiAgICBleHBlY3RlZENsdXN0ZXI6ICdkZXZvcHMnLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAgJ3NldCB1cCBDSS9DRCBwaXBlbGluZScsXHJcbiAgICAgICdjb25maWd1cmUgS3ViZXJuZXRlcyBkZXBsb3ltZW50JyxcclxuICAgICAgJ2NyZWF0ZSBEb2NrZXIgY29udGFpbmVyJyxcclxuICAgICAgJ2FkZCBtb25pdG9yaW5nIGFsZXJ0cycsXHJcbiAgICAgICdpbXBsZW1lbnQgYXV0by1zY2FsaW5nJyxcclxuICAgIF0sXHJcbiAgfSxcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBFeHBlY3RlZCBzaW1pbGFyaXR5IHNjb3JlIHJhbmdlc1xyXG4gKi9cclxuY29uc3QgU0lNSUxBUklUWV9USFJFU0hPTERTID0ge1xyXG4gIGhpZ2g6IHsgbWluOiAwLjcsIG1heDogMS4wIH0sXHJcbiAgbWVkaXVtOiB7IG1pbjogMC40LCBtYXg6IDAuNyB9LFxyXG4gIGxvdzogeyBtaW46IDAuMiwgbWF4OiAwLjQgfSxcclxuICBub25lOiB7IG1pbjogMC4wLCBtYXg6IDAuMiB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGNvbXB1dGVkIHNpbWlsYXJpdHkgbWF0Y2hlcyBleHBlY3RlZCBjYXRlZ29yeVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29ycmVjdFNpbWlsYXJpdHkoXHJcbiAgZXhwZWN0ZWQ6ICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCAnbm9uZScsXHJcbiAgY29tcHV0ZWQ6IG51bWJlclxyXG4pOiBib29sZWFuIHtcclxuICBjb25zdCB0aHJlc2hvbGQgPSBTSU1JTEFSSVRZX1RIUkVTSE9MRFNbZXhwZWN0ZWRdO1xyXG4gIHJldHVybiBjb21wdXRlZCA+PSB0aHJlc2hvbGQubWluICYmIGNvbXB1dGVkIDw9IHRocmVzaG9sZC5tYXg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgTWVhbiBSZWNpcHJvY2FsIFJhbmsgZm9yIHNlYXJjaCByZXN1bHRzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTVJSKFxyXG4gIHJhbmtpbmdzOiB7IHJlbGV2YW50OiBib29sZWFuIH1bXVtdXHJcbik6IG51bWJlciB7XHJcbiAgbGV0IHN1bVJSID0gMDtcclxuICBmb3IgKGNvbnN0IHJhbmtpbmcgb2YgcmFua2luZ3MpIHtcclxuICAgIGNvbnN0IGZpcnN0UmVsZXZhbnRJZHggPSByYW5raW5nLmZpbmRJbmRleChyID0+IHIucmVsZXZhbnQpO1xyXG4gICAgaWYgKGZpcnN0UmVsZXZhbnRJZHggPj0gMCkge1xyXG4gICAgICBzdW1SUiArPSAxIC8gKGZpcnN0UmVsZXZhbnRJZHggKyAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHN1bVJSIC8gcmFua2luZ3MubGVuZ3RoO1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIE5EQ0cgZm9yIHNlYXJjaCByZXN1bHRzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTkRDRyhcclxuICByZXN1bHRzOiB7IHJlbGV2YW5jZTogbnVtYmVyIH1bXSxcclxuICBpZGVhbE9yZGVyOiB7IHJlbGV2YW5jZTogbnVtYmVyIH1bXVxyXG4pOiBudW1iZXIge1xyXG4gIGNvbnN0IGRjZyA9IHJlc3VsdHMucmVkdWNlKChzdW0sIHIsIGkpID0+IHtcclxuICAgIHJldHVybiBzdW0gKyAoTWF0aC5wb3coMiwgci5yZWxldmFuY2UpIC0gMSkgLyBNYXRoLmxvZzIoaSArIDIpO1xyXG4gIH0sIDApO1xyXG5cclxuICBjb25zdCBpZGNnID0gaWRlYWxPcmRlci5yZWR1Y2UoKHN1bSwgciwgaSkgPT4ge1xyXG4gICAgcmV0dXJuIHN1bSArIChNYXRoLnBvdygyLCByLnJlbGV2YW5jZSkgLSAxKSAvIE1hdGgubG9nMihpICsgMik7XHJcbiAgfSwgMCk7XHJcblxyXG4gIHJldHVybiBpZGNnID4gMCA/IGRjZyAvIGlkY2cgOiAwO1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHNpbGhvdWV0dGUgc2NvcmUgZm9yIGNsdXN0ZXJpbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTaWxob3VldHRlKFxyXG4gIGVtYmVkZGluZ3M6IG51bWJlcltdW10sXHJcbiAgbGFiZWxzOiBudW1iZXJbXVxyXG4pOiBudW1iZXIge1xyXG4gIC8vIFNpbXBsaWZpZWQgc2lsaG91ZXR0ZSBjYWxjdWxhdGlvblxyXG4gIGNvbnN0IG4gPSBlbWJlZGRpbmdzLmxlbmd0aDtcclxuICBpZiAobiA8IDIpIHJldHVybiAwO1xyXG5cclxuICBsZXQgdG90YWxTaWxob3VldHRlID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgIGNvbnN0IGNsdXN0ZXIgPSBsYWJlbHNbaV07XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIG1lYW4gaW50cmEtY2x1c3RlciBkaXN0YW5jZSAoYSlcclxuICAgIGxldCBpbnRyYVN1bSA9IDA7XHJcbiAgICBsZXQgaW50cmFDb3VudCA9IDA7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xyXG4gICAgICBpZiAoaSAhPT0gaiAmJiBsYWJlbHNbal0gPT09IGNsdXN0ZXIpIHtcclxuICAgICAgICBpbnRyYVN1bSArPSBldWNsaWRlYW5EaXN0YW5jZShlbWJlZGRpbmdzW2ldLCBlbWJlZGRpbmdzW2pdKTtcclxuICAgICAgICBpbnRyYUNvdW50Kys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGEgPSBpbnRyYUNvdW50ID4gMCA/IGludHJhU3VtIC8gaW50cmFDb3VudCA6IDA7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIG1pbiBtZWFuIGludGVyLWNsdXN0ZXIgZGlzdGFuY2UgKGIpXHJcbiAgICBjb25zdCBvdGhlckNsdXN0ZXJzID0gWy4uLm5ldyBTZXQobGFiZWxzKV0uZmlsdGVyKGMgPT4gYyAhPT0gY2x1c3Rlcik7XHJcbiAgICBsZXQgbWluSW50ZXJNZWFuID0gSW5maW5pdHk7XHJcblxyXG4gICAgZm9yIChjb25zdCBvdGhlckNsdXN0ZXIgb2Ygb3RoZXJDbHVzdGVycykge1xyXG4gICAgICBsZXQgaW50ZXJTdW0gPSAwO1xyXG4gICAgICBsZXQgaW50ZXJDb3VudCA9IDA7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XHJcbiAgICAgICAgaWYgKGxhYmVsc1tqXSA9PT0gb3RoZXJDbHVzdGVyKSB7XHJcbiAgICAgICAgICBpbnRlclN1bSArPSBldWNsaWRlYW5EaXN0YW5jZShlbWJlZGRpbmdzW2ldLCBlbWJlZGRpbmdzW2pdKTtcclxuICAgICAgICAgIGludGVyQ291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGludGVyQ291bnQgPiAwKSB7XHJcbiAgICAgICAgbWluSW50ZXJNZWFuID0gTWF0aC5taW4obWluSW50ZXJNZWFuLCBpbnRlclN1bSAvIGludGVyQ291bnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBiID0gbWluSW50ZXJNZWFuID09PSBJbmZpbml0eSA/IDAgOiBtaW5JbnRlck1lYW47XHJcblxyXG4gICAgLy8gU2lsaG91ZXR0ZSBmb3IgdGhpcyBwb2ludFxyXG4gICAgY29uc3QgcyA9IE1hdGgubWF4KGEsIGIpID4gMCA/IChiIC0gYSkgLyBNYXRoLm1heChhLCBiKSA6IDA7XHJcbiAgICB0b3RhbFNpbGhvdWV0dGUgKz0gcztcclxuICB9XHJcblxyXG4gIHJldHVybiB0b3RhbFNpbGhvdWV0dGUgLyBuO1xyXG59XHJcblxyXG5mdW5jdGlvbiBldWNsaWRlYW5EaXN0YW5jZShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXIge1xyXG4gIGxldCBzdW0gPSAwO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgc3VtICs9IE1hdGgucG93KGFbaV0gLSBiW2ldLCAyKTtcclxuICB9XHJcbiAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xyXG59XHJcblxyXG4vKipcclxuICogUnVuIHRoZSBlbWJlZGRpbmcgYmVuY2htYXJrXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcnVuRW1iZWRkaW5nQmVuY2htYXJrKFxyXG4gIGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXSxcclxuICBzaW1pbGFyaXR5Rm46IChhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pID0+IG51bWJlclxyXG4pOiBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzIHtcclxuICBjb25zdCBzaW1pbGFyaXR5UmVzdWx0czogRW1iZWRkaW5nUmVzdWx0W10gPSBbXTtcclxuICBjb25zdCBsYXRlbmNpZXM6IG51bWJlcltdID0gW107XHJcblxyXG4gIC8vIFRlc3Qgc2ltaWxhcml0eSBwYWlyc1xyXG4gIGZvciAoY29uc3QgcGFpciBvZiBTSU1JTEFSSVRZX1RFU1RfUEFJUlMpIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICBjb25zdCBlbWIxID0gZW1iZWRkZXIocGFpci50ZXh0MSk7XHJcbiAgICBjb25zdCBlbWIyID0gZW1iZWRkZXIocGFpci50ZXh0Mik7XHJcbiAgICBjb25zdCBzY29yZSA9IHNpbWlsYXJpdHlGbihlbWIxLCBlbWIyKTtcclxuICAgIGNvbnN0IGxhdGVuY3lNcyA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQ7XHJcblxyXG4gICAgbGF0ZW5jaWVzLnB1c2gobGF0ZW5jeU1zKTtcclxuXHJcbiAgICBzaW1pbGFyaXR5UmVzdWx0cy5wdXNoKHtcclxuICAgICAgcGFpcklkOiBwYWlyLmlkLFxyXG4gICAgICBleHBlY3RlZFNpbWlsYXJpdHk6IHBhaXIuc2ltaWxhcml0eSxcclxuICAgICAgY29tcHV0ZWRTY29yZTogc2NvcmUsXHJcbiAgICAgIGNvcnJlY3Q6IGlzQ29ycmVjdFNpbWlsYXJpdHkocGFpci5zaW1pbGFyaXR5LCBzY29yZSksXHJcbiAgICAgIGxhdGVuY3lNcyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIHNpbWlsYXJpdHkgYWNjdXJhY3lcclxuICBjb25zdCBjb3JyZWN0U2ltaWxhcml0eSA9IHNpbWlsYXJpdHlSZXN1bHRzLmZpbHRlcihyID0+IHIuY29ycmVjdCkubGVuZ3RoO1xyXG4gIGNvbnN0IHNpbWlsYXJpdHlBY2N1cmFjeSA9IGNvcnJlY3RTaW1pbGFyaXR5IC8gc2ltaWxhcml0eVJlc3VsdHMubGVuZ3RoO1xyXG5cclxuICAvLyBBY2N1cmFjeSBieSBjYXRlZ29yeVxyXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChTSU1JTEFSSVRZX1RFU1RfUEFJUlMubWFwKHAgPT4gcC5jYXRlZ29yeSkpXTtcclxuICBjb25zdCBzaW1pbGFyaXR5QnlDYXRlZ29yeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG4gIGZvciAoY29uc3QgY2F0IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgIGNvbnN0IGNhdFJlc3VsdHMgPSBzaW1pbGFyaXR5UmVzdWx0cy5maWx0ZXIoXHJcbiAgICAgIChyLCBpKSA9PiBTSU1JTEFSSVRZX1RFU1RfUEFJUlNbaV0uY2F0ZWdvcnkgPT09IGNhdFxyXG4gICAgKTtcclxuICAgIHNpbWlsYXJpdHlCeUNhdGVnb3J5W2NhdF0gPSBjYXRSZXN1bHRzLmZpbHRlcihyID0+IHIuY29ycmVjdCkubGVuZ3RoIC8gY2F0UmVzdWx0cy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLyBUZXN0IHNlYXJjaCBxdWFsaXR5IChNUlIgYW5kIE5EQ0cpXHJcbiAgY29uc3Qgc2VhcmNoUmFua2luZ3M6IHsgcmVsZXZhbnQ6IGJvb2xlYW4gfVtdW10gPSBbXTtcclxuICBsZXQgdG90YWxORENHID0gMDtcclxuXHJcbiAgZm9yIChjb25zdCB0ZXN0Q2FzZSBvZiBTRUFSQ0hfVEVTVF9DQVNFUykge1xyXG4gICAgY29uc3QgcXVlcnlFbWIgPSBlbWJlZGRlcih0ZXN0Q2FzZS5xdWVyeSk7XHJcbiAgICBjb25zdCBkb2NTY29yZXMgPSB0ZXN0Q2FzZS5kb2N1bWVudHMubWFwKGRvYyA9PiAoe1xyXG4gICAgICAuLi5kb2MsXHJcbiAgICAgIHNjb3JlOiBzaW1pbGFyaXR5Rm4ocXVlcnlFbWIsIGVtYmVkZGVyKGRvYy50ZXh0KSksXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gU29ydCBieSBjb21wdXRlZCBzY29yZVxyXG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRvY1Njb3Jlc10uc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xyXG5cclxuICAgIC8vIEZvciBNUlJcclxuICAgIHNlYXJjaFJhbmtpbmdzLnB1c2goc29ydGVkLm1hcChkID0+ICh7IHJlbGV2YW50OiBkLnJlbGV2YW5jZSA+PSAyIH0pKSk7XHJcblxyXG4gICAgLy8gRm9yIE5EQ0dcclxuICAgIGNvbnN0IGlkZWFsT3JkZXIgPSBbLi4udGVzdENhc2UuZG9jdW1lbnRzXS5zb3J0KChhLCBiKSA9PiBiLnJlbGV2YW5jZSAtIGEucmVsZXZhbmNlKTtcclxuICAgIHRvdGFsTkRDRyArPSBjYWxjdWxhdGVORENHKHNvcnRlZCwgaWRlYWxPcmRlcik7XHJcbiAgfVxyXG5cclxuICBjb25zdCBzZWFyY2hNUlIgPSBjYWxjdWxhdGVNUlIoc2VhcmNoUmFua2luZ3MpO1xyXG4gIGNvbnN0IHNlYXJjaE5EQ0cgPSB0b3RhbE5EQ0cgLyBTRUFSQ0hfVEVTVF9DQVNFUy5sZW5ndGg7XHJcblxyXG4gIC8vIFRlc3QgY2x1c3RlcmluZ1xyXG4gIGNvbnN0IGFsbENsdXN0ZXJJdGVtczogeyB0ZXh0OiBzdHJpbmc7IGNsdXN0ZXI6IG51bWJlciB9W10gPSBbXTtcclxuICBDTFVTVEVSX1RFU1RfQ0FTRVMuZm9yRWFjaCgodGMsIGNsdXN0ZXJJZHgpID0+IHtcclxuICAgIHRjLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGFsbENsdXN0ZXJJdGVtcy5wdXNoKHsgdGV4dDogaXRlbSwgY2x1c3RlcjogY2x1c3RlcklkeCB9KTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBjbHVzdGVyRW1iZWRkaW5ncyA9IGFsbENsdXN0ZXJJdGVtcy5tYXAoaXRlbSA9PiBlbWJlZGRlcihpdGVtLnRleHQpKTtcclxuICBjb25zdCBjbHVzdGVyTGFiZWxzID0gYWxsQ2x1c3Rlckl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uY2x1c3Rlcik7XHJcbiAgY29uc3Qgc2lsaG91ZXR0ZVNjb3JlID0gY2FsY3VsYXRlU2lsaG91ZXR0ZShjbHVzdGVyRW1iZWRkaW5ncywgY2x1c3RlckxhYmVscyk7XHJcblxyXG4gIC8vIENhbGN1bGF0ZSBjbHVzdGVyIHB1cml0eSAoaG93IHdlbGwgaXRlbXMgc3RheSBpbiB0aGVpciBleHBlY3RlZCBjbHVzdGVyKVxyXG4gIC8vIFVzaW5nIHNpbXBsZSBuZWFyZXN0LW5laWdoYm9yIGNsYXNzaWZpY2F0aW9uXHJcbiAgbGV0IGNvcnJlY3RDbHVzdGVyID0gMDtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJFbWJlZGRpbmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgbmVhcmVzdElkeCA9IC0xO1xyXG4gICAgbGV0IG5lYXJlc3REaXN0ID0gSW5maW5pdHk7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNsdXN0ZXJFbWJlZGRpbmdzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGlmIChpICE9PSBqKSB7XHJcbiAgICAgICAgY29uc3QgZGlzdCA9IGV1Y2xpZGVhbkRpc3RhbmNlKGNsdXN0ZXJFbWJlZGRpbmdzW2ldLCBjbHVzdGVyRW1iZWRkaW5nc1tqXSk7XHJcbiAgICAgICAgaWYgKGRpc3QgPCBuZWFyZXN0RGlzdCkge1xyXG4gICAgICAgICAgbmVhcmVzdERpc3QgPSBkaXN0O1xyXG4gICAgICAgICAgbmVhcmVzdElkeCA9IGo7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobmVhcmVzdElkeCA+PSAwICYmIGNsdXN0ZXJMYWJlbHNbbmVhcmVzdElkeF0gPT09IGNsdXN0ZXJMYWJlbHNbaV0pIHtcclxuICAgICAgY29ycmVjdENsdXN0ZXIrKztcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgY2x1c3RlclB1cml0eSA9IGNvcnJlY3RDbHVzdGVyIC8gY2x1c3RlckVtYmVkZGluZ3MubGVuZ3RoO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgc2ltaWxhcml0eUFjY3VyYWN5LFxyXG4gICAgc2ltaWxhcml0eUJ5Q2F0ZWdvcnksXHJcbiAgICBhdmdTaW1pbGFyaXR5TGF0ZW5jeU1zOiBsYXRlbmNpZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyBsYXRlbmNpZXMubGVuZ3RoLFxyXG4gICAgY2x1c3RlclB1cml0eSxcclxuICAgIHNpbGhvdWV0dGVTY29yZSxcclxuICAgIHNlYXJjaE1SUixcclxuICAgIHNlYXJjaE5EQ0csXHJcbiAgICBzaW1pbGFyaXR5UmVzdWx0cyxcclxuICAgIHRvdGFsUGFpcnM6IHNpbWlsYXJpdHlSZXN1bHRzLmxlbmd0aCxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogRm9ybWF0IGVtYmVkZGluZyBiZW5jaG1hcmsgcmVzdWx0cyBmb3IgZGlzcGxheVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVtYmVkZGluZ1Jlc3VsdHMocmVzdWx0czogRW1iZWRkaW5nQmVuY2htYXJrUmVzdWx0cyk6IHN0cmluZyB7XHJcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGxpbmVzLnB1c2goJycpO1xyXG4gIGxpbmVzLnB1c2goJ+KVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xyXG4gIGxpbmVzLnB1c2goJ+KVkSAgICAgICAgICAgICBFTUJFRERJTkcgQkVOQ0hNQVJLIFJFU1VMVFMgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XHJcbiAgbGluZXMucHVzaChg4pWRICBTaW1pbGFyaXR5IERldGVjdGlvbjogJHsocmVzdWx0cy5zaW1pbGFyaXR5QWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWAucGFkRW5kKDYzKSArICfilZEnKTtcclxuICBsaW5lcy5wdXNoKCfilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMnKTtcclxuICBsaW5lcy5wdXNoKCfilZEgIEJ5IENhdGVnb3J5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xyXG5cclxuICBmb3IgKGNvbnN0IFtjYXQsIGFjY10gb2YgT2JqZWN0LmVudHJpZXMocmVzdWx0cy5zaW1pbGFyaXR5QnlDYXRlZ29yeSkuc29ydCgoYSwgYikgPT4gYlsxXSAtIGFbMV0pKSB7XHJcbiAgICBjb25zdCBiYXIgPSAn4paIJy5yZXBlYXQoTWF0aC5mbG9vcihhY2MgKiAyMCkpICsgJ+KWkScucmVwZWF0KDIwIC0gTWF0aC5mbG9vcihhY2MgKiAyMCkpO1xyXG4gICAgbGluZXMucHVzaChg4pWRICAgICR7Y2F0LnBhZEVuZCgxOCl9IFske2Jhcn1dICR7KGFjYyAqIDEwMCkudG9GaXhlZCgwKS5wYWRTdGFydCgzKX0lICDilZFgKTtcclxuICB9XHJcblxyXG4gIGxpbmVzLnB1c2goJ+KVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVoycpO1xyXG4gIGxpbmVzLnB1c2goJ+KVkSAgQ2x1c3RlcmluZyBRdWFsaXR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XHJcbiAgbGluZXMucHVzaChg4pWRICAgIENsdXN0ZXIgUHVyaXR5OiAgICAkeyhyZXN1bHRzLmNsdXN0ZXJQdXJpdHkgKiAxMDApLnRvRml4ZWQoMSl9JWAucGFkRW5kKDYzKSArICfilZEnKTtcclxuICBsaW5lcy5wdXNoKGDilZEgICAgU2lsaG91ZXR0ZSBTY29yZTogICR7cmVzdWx0cy5zaWxob3VldHRlU2NvcmUudG9GaXhlZCgzKX1gLnBhZEVuZCg2MykgKyAn4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XHJcbiAgbGluZXMucHVzaCgn4pWRICBTZWFyY2ggUXVhbGl0eTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcclxuICBsaW5lcy5wdXNoKGDilZEgICAgTVJSIChNZWFuIFJlY2lwcm9jYWwgUmFuayk6ICAke3Jlc3VsdHMuc2VhcmNoTVJSLnRvRml4ZWQoMyl9YC5wYWRFbmQoNjMpICsgJ+KVkScpO1xyXG4gIGxpbmVzLnB1c2goYOKVkSAgICBORENHOiAgICAgICAgICAgICAgICAgICAgICAgICR7cmVzdWx0cy5zZWFyY2hORENHLnRvRml4ZWQoMyl9YC5wYWRFbmQoNjMpICsgJ+KVkScpO1xyXG4gIGxpbmVzLnB1c2goJ+KVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVoycpO1xyXG4gIGxpbmVzLnB1c2goYOKVkSAgQXZnIExhdGVuY3k6ICR7cmVzdWx0cy5hdmdTaW1pbGFyaXR5TGF0ZW5jeU1zLnRvRml4ZWQoMil9bXMgcGVyIHBhaXJgLnBhZEVuZCg2MykgKyAn4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XHJcblxyXG4gIC8vIFF1YWxpdHkgYXNzZXNzbWVudFxyXG4gIGxpbmVzLnB1c2goJycpO1xyXG4gIGxpbmVzLnB1c2goJ1F1YWxpdHkgQXNzZXNzbWVudDonKTtcclxuXHJcbiAgaWYgKHJlc3VsdHMuc2ltaWxhcml0eUFjY3VyYWN5ID49IDAuOCkge1xyXG4gICAgbGluZXMucHVzaCgnICDinJMgU2ltaWxhcml0eSBkZXRlY3Rpb246IEVYQ0VMTEVOVCAo4omlODAlKScpO1xyXG4gIH0gZWxzZSBpZiAocmVzdWx0cy5zaW1pbGFyaXR5QWNjdXJhY3kgPj0gMC42KSB7XHJcbiAgICBsaW5lcy5wdXNoKCcgIH4gU2ltaWxhcml0eSBkZXRlY3Rpb246IEdPT0QgKDYwLTgwJSknKTtcclxuICB9IGVsc2Uge1xyXG4gICAgbGluZXMucHVzaCgnICDinJcgU2ltaWxhcml0eSBkZXRlY3Rpb246IE5FRURTIElNUFJPVkVNRU5UICg8NjAlKScpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJlc3VsdHMuc2VhcmNoTVJSID49IDAuOCkge1xyXG4gICAgbGluZXMucHVzaCgnICDinJMgU2VhcmNoIHF1YWxpdHkgKE1SUik6IEVYQ0VMTEVOVCAo4omlMC44KScpO1xyXG4gIH0gZWxzZSBpZiAocmVzdWx0cy5zZWFyY2hNUlIgPj0gMC41KSB7XHJcbiAgICBsaW5lcy5wdXNoKCcgIH4gU2VhcmNoIHF1YWxpdHkgKE1SUik6IEFDQ0VQVEFCTEUgKDAuNS0wLjgpJyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxpbmVzLnB1c2goJyAg4pyXIFNlYXJjaCBxdWFsaXR5IChNUlIpOiBORUVEUyBJTVBST1ZFTUVOVCAoPDAuNSknKTtcclxuICB9XHJcblxyXG4gIGlmIChyZXN1bHRzLmNsdXN0ZXJQdXJpdHkgPj0gMC44KSB7XHJcbiAgICBsaW5lcy5wdXNoKCcgIOKckyBDbHVzdGVyaW5nOiBFWENFTExFTlQgKOKJpTgwJSBwdXJpdHkpJyk7XHJcbiAgfSBlbHNlIGlmIChyZXN1bHRzLmNsdXN0ZXJQdXJpdHkgPj0gMC42KSB7XHJcbiAgICBsaW5lcy5wdXNoKCcgIH4gQ2x1c3RlcmluZzogQUNDRVBUQUJMRSAoNjAtODAlIHB1cml0eSknKTtcclxuICB9IGVsc2Uge1xyXG4gICAgbGluZXMucHVzaCgnICDinJcgQ2x1c3RlcmluZzogTkVFRFMgSU1QUk9WRU1FTlQgKDw2MCUgcHVyaXR5KScpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgU0lNSUxBUklUWV9URVNUX1BBSVJTLFxyXG4gIFNFQVJDSF9URVNUX0NBU0VTLFxyXG4gIENMVVNURVJfVEVTVF9DQVNFUyxcclxuICBydW5FbWJlZGRpbmdCZW5jaG1hcmssXHJcbiAgZm9ybWF0RW1iZWRkaW5nUmVzdWx0cyxcclxuICBpc0NvcnJlY3RTaW1pbGFyaXR5LFxyXG4gIGNhbGN1bGF0ZU1SUixcclxuICBjYWxjdWxhdGVORENHLFxyXG59O1xyXG4iXX0=
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkaW5nLWJlbmNobWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaG1hcmtzL2VtYmVkZGluZy1iZW5jaG1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQTJDSDs7O0dBR0c7QUFDVSxRQUFBLHFCQUFxQixHQUFvQjtJQUNwRCw0REFBNEQ7SUFDNUQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQ3RJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsS0FBSyxFQUFFLHNDQUFzQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtJQUMvSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLEtBQUssRUFBRSxzQ0FBc0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDakosRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsK0JBQStCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO0lBQ3ZJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLDZCQUE2QixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtJQUMzSCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7SUFDakksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQzdILEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtJQUMzSCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7SUFDbkksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0lBRTFILHFDQUFxQztJQUNyQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNDQUFzQyxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7SUFDbEosRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLEVBQUUsa0NBQWtDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO0lBQ3RKLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0RBQWtELEVBQUUsS0FBSyxFQUFFLHVEQUF1RCxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtJQUV2TCxvREFBb0Q7SUFDcEQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQ3RJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtJQUN0SCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDOUgsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxLQUFLLEVBQUUsK0JBQStCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO0lBQzdJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtJQUNuSCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO0lBQ2hILEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7SUFDL0csRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDcEcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO0lBQ3JILEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtJQUUzSCx1REFBdUQ7SUFDdkQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQ3pILEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDcEcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzNHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUMvRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7SUFDOUgsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzdHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUMvRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO0lBRTNHLG9DQUFvQztJQUNwQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDNUgsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0lBQzFILEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtJQUM5SCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7SUFDckgsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtDQUMzSCxDQUFDO0FBWVcsUUFBQSxpQkFBaUIsR0FBcUI7SUFDakQ7UUFDRSxFQUFFLEVBQUUsTUFBTTtRQUNWLEtBQUssRUFBRSxpREFBaUQ7UUFDeEQsU0FBUyxFQUFFO1lBQ1QsRUFBRSxJQUFJLEVBQUUsNkRBQTZELEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUNyRixFQUFFLElBQUksRUFBRSxtREFBbUQsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQzNFLEVBQUUsSUFBSSxFQUFFLHVDQUF1QyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDL0QsRUFBRSxJQUFJLEVBQUUscUNBQXFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUM3RCxFQUFFLElBQUksRUFBRSxpQ0FBaUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1NBQzFEO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxNQUFNO1FBQ1YsS0FBSyxFQUFFLCtCQUErQjtRQUN0QyxTQUFTLEVBQUU7WUFDVCxFQUFFLElBQUksRUFBRSw0REFBNEQsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ3BGLEVBQUUsSUFBSSxFQUFFLHVEQUF1RCxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDL0UsRUFBRSxJQUFJLEVBQUUseUNBQXlDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUNqRSxFQUFFLElBQUksRUFBRSx1Q0FBdUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQy9ELEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7U0FDdEQ7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLE1BQU07UUFDVixLQUFLLEVBQUUsbUNBQW1DO1FBQzFDLFNBQVMsRUFBRTtZQUNULEVBQUUsSUFBSSxFQUFFLDJEQUEyRCxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDbkYsRUFBRSxJQUFJLEVBQUUsb0RBQW9ELEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUM1RSxFQUFFLElBQUksRUFBRSx5Q0FBeUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ2pFLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDM0QsRUFBRSxJQUFJLEVBQUUsbUNBQW1DLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtTQUM1RDtLQUNGO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsTUFBTTtRQUNWLEtBQUssRUFBRSx1Q0FBdUM7UUFDOUMsU0FBUyxFQUFFO1lBQ1QsRUFBRSxJQUFJLEVBQUUsOERBQThELEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUN0RixFQUFFLElBQUksRUFBRSxvQ0FBb0MsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQzVELEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDN0QsRUFBRSxJQUFJLEVBQUUsaUNBQWlDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUN6RCxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1NBQ3ZEO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxNQUFNO1FBQ1YsS0FBSyxFQUFFLDRCQUE0QjtRQUNuQyxTQUFTLEVBQUU7WUFDVCxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ3RFLEVBQUUsSUFBSSxFQUFFLDBDQUEwQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDbEUsRUFBRSxJQUFJLEVBQUUscUNBQXFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUM3RCxFQUFFLElBQUksRUFBRSw2Q0FBNkMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ3JFLEVBQUUsSUFBSSxFQUFFLCtCQUErQixFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7U0FDeEQ7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsa0JBQWtCLEdBQXNCO0lBQ25EO1FBQ0UsRUFBRSxFQUFFLE9BQU87UUFDWCxlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pDLEtBQUssRUFBRTtZQUNMLHNCQUFzQjtZQUN0QiwwQkFBMEI7WUFDMUIsNEJBQTRCO1lBQzVCLDZCQUE2QjtZQUM3QiwrQkFBK0I7U0FDaEM7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLE9BQU87UUFDWCxlQUFlLEVBQUUsU0FBUztRQUMxQixLQUFLLEVBQUU7WUFDTCxrQkFBa0I7WUFDbEIsdUJBQXVCO1lBQ3ZCLHVCQUF1QjtZQUN2Qix1QkFBdUI7WUFDdkIsb0JBQW9CO1NBQ3JCO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxPQUFPO1FBQ1gsZUFBZSxFQUFFLFVBQVU7UUFDM0IsS0FBSyxFQUFFO1lBQ0wsc0JBQXNCO1lBQ3RCLHNCQUFzQjtZQUN0Qix5QkFBeUI7WUFDekIsOEJBQThCO1lBQzlCLCtCQUErQjtTQUNoQztLQUNGO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsT0FBTztRQUNYLGVBQWUsRUFBRSxVQUFVO1FBQzNCLEtBQUssRUFBRTtZQUNMLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsNkJBQTZCO1lBQzdCLHdCQUF3QjtZQUN4QixxQkFBcUI7U0FDdEI7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLE9BQU87UUFDWCxlQUFlLEVBQUUsUUFBUTtRQUN6QixLQUFLLEVBQUU7WUFDTCx1QkFBdUI7WUFDdkIsaUNBQWlDO1lBQ2pDLHlCQUF5QjtZQUN6Qix1QkFBdUI7WUFDdkIsd0JBQXdCO1NBQ3pCO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUM1QixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDOUIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQzNCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUM3QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsUUFBNEMsRUFDNUMsUUFBZ0I7SUFFaEIsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsT0FBTyxRQUFRLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQztBQUNoRSxDQUFDO0FBTkQsa0RBTUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsUUFBbUM7SUFFbkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMvQixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ2pDLENBQUM7QUFYRCxvQ0FXQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixPQUFnQyxFQUNoQyxVQUFtQztJQUVuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFTixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFTixPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBYkQsc0NBYUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxVQUFzQixFQUN0QixNQUFnQjtJQUVoQixvQ0FBb0M7SUFDcEMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFFcEIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsNENBQTRDO1FBQzVDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsZ0RBQWdEO1FBQ2hELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUN0RSxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUM7UUFFNUIsS0FBSyxNQUFNLFlBQVksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQy9CLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVELFVBQVUsRUFBRSxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDL0QsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUV2RCw0QkFBNEI7UUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELGVBQWUsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELE9BQU8sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBakRELGtEQWlEQztBQUVELFNBQVMsaUJBQWlCLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDakQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLFFBQW9DLEVBQ3BDLFlBQWtEO0lBRWxELE1BQU0saUJBQWlCLEdBQXNCLEVBQUUsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFFL0Isd0JBQXdCO0lBQ3hCLEtBQUssTUFBTSxJQUFJLElBQUksNkJBQXFCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUU1QyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFCLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZixrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNuQyxhQUFhLEVBQUUsS0FBSztZQUNwQixPQUFPLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7WUFDcEQsU0FBUztTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFFLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO0lBRXhFLHVCQUF1QjtJQUN2QixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsNkJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLG9CQUFvQixHQUEyQixFQUFFLENBQUM7SUFDeEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM3QixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsNkJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FDcEQsQ0FBQztRQUNGLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDM0YsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxNQUFNLGNBQWMsR0FBOEIsRUFBRSxDQUFDO0lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVsQixLQUFLLE1BQU0sUUFBUSxJQUFJLHlCQUFpQixFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0MsR0FBRyxHQUFHO1lBQ04sS0FBSyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVKLHlCQUF5QjtRQUN6QixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEUsVUFBVTtRQUNWLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RSxXQUFXO1FBQ1gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRixTQUFTLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyx5QkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFFeEQsa0JBQWtCO0lBQ2xCLE1BQU0sZUFBZSxHQUF3QyxFQUFFLENBQUM7SUFDaEUsMEJBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQzVDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRSxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUU5RSwyRUFBMkU7SUFDM0UsK0NBQStDO0lBQy9DLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztJQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLElBQUksR0FBRyxXQUFXLEVBQUUsQ0FBQztvQkFDdkIsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDbkIsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxjQUFjLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFFaEUsT0FBTztRQUNMLGtCQUFrQjtRQUNsQixvQkFBb0I7UUFDcEIsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07UUFDL0UsYUFBYTtRQUNiLGVBQWU7UUFDZixTQUFTO1FBQ1QsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixVQUFVLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtLQUNyQyxDQUFDO0FBQ0osQ0FBQztBQTdHRCxzREE2R0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLE9BQWtDO0lBQ3ZFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0lBQy9FLEtBQUssQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUMvRSxLQUFLLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUMvRSxLQUFLLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFFL0UsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEcsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckYsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0lBQy9FLEtBQUssQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDcEcsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDN0YsS0FBSyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0lBQy9FLEtBQUssQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUMvRSxLQUFLLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqRyxLQUFLLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNsRyxLQUFLLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsT0FBTyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN2RyxLQUFLLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFFL0UscUJBQXFCO0lBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFbEMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQzNELENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDeEQsQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDL0QsQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLGFBQWEsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDeEQsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLGFBQWEsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBekRELHdEQXlEQztBQUVELGtCQUFlO0lBQ2IscUJBQXFCLEVBQXJCLDZCQUFxQjtJQUNyQixpQkFBaUIsRUFBakIseUJBQWlCO0lBQ2pCLGtCQUFrQixFQUFsQiwwQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGFBQWE7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbWJlZGRpbmcgUXVhbGl0eSBCZW5jaG1hcmsgZm9yIFJ1dkxUUkEgTW9kZWxzXG4gKlxuICogVGVzdHMgZW1iZWRkaW5nIHF1YWxpdHkgZm9yIENsYXVkZSBDb2RlIHVzZSBjYXNlczpcbiAqIC0gQ29kZSBzaW1pbGFyaXR5IGRldGVjdGlvblxuICogLSBUYXNrIGNsdXN0ZXJpbmdcbiAqIC0gU2VtYW50aWMgc2VhcmNoIGFjY3VyYWN5XG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdQYWlyIHtcbiAgaWQ6IHN0cmluZztcbiAgdGV4dDE6IHN0cmluZztcbiAgdGV4dDI6IHN0cmluZztcbiAgc2ltaWxhcml0eTogJ2hpZ2gnIHwgJ21lZGl1bScgfCAnbG93JyB8ICdub25lJztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdSZXN1bHQge1xuICBwYWlySWQ6IHN0cmluZztcbiAgZXhwZWN0ZWRTaW1pbGFyaXR5OiBzdHJpbmc7XG4gIGNvbXB1dGVkU2NvcmU6IG51bWJlcjtcbiAgY29ycmVjdDogYm9vbGVhbjtcbiAgbGF0ZW5jeU1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlclRlc3RDYXNlIHtcbiAgaWQ6IHN0cmluZztcbiAgaXRlbXM6IHN0cmluZ1tdO1xuICBleHBlY3RlZENsdXN0ZXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzIHtcbiAgLy8gU2ltaWxhcml0eSBkZXRlY3Rpb25cbiAgc2ltaWxhcml0eUFjY3VyYWN5OiBudW1iZXI7XG4gIHNpbWlsYXJpdHlCeUNhdGVnb3J5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICBhdmdTaW1pbGFyaXR5TGF0ZW5jeU1zOiBudW1iZXI7XG5cbiAgLy8gQ2x1c3RlcmluZyBxdWFsaXR5XG4gIGNsdXN0ZXJQdXJpdHk6IG51bWJlcjtcbiAgc2lsaG91ZXR0ZVNjb3JlOiBudW1iZXI7XG5cbiAgLy8gU2VhcmNoIHF1YWxpdHlcbiAgc2VhcmNoTVJSOiBudW1iZXI7IC8vIE1lYW4gUmVjaXByb2NhbCBSYW5rXG4gIHNlYXJjaE5EQ0c6IG51bWJlcjsgLy8gTm9ybWFsaXplZCBEaXNjb3VudGVkIEN1bXVsYXRpdmUgR2FpblxuXG4gIC8vIERldGFpbHNcbiAgc2ltaWxhcml0eVJlc3VsdHM6IEVtYmVkZGluZ1Jlc3VsdFtdO1xuICB0b3RhbFBhaXJzOiBudW1iZXI7XG59XG5cbi8qKlxuICogR3JvdW5kIHRydXRoIHNpbWlsYXJpdHkgcGFpcnMgZm9yIHRlc3RpbmdcbiAqIFRlc3RzIHdoZXRoZXIgZW1iZWRkaW5ncyBjb3JyZWN0bHkgY2FwdHVyZSBzZW1hbnRpYyBzaW1pbGFyaXR5XG4gKi9cbmV4cG9ydCBjb25zdCBTSU1JTEFSSVRZX1RFU1RfUEFJUlM6IEVtYmVkZGluZ1BhaXJbXSA9IFtcbiAgLy8gPT09IEhJR0ggU0lNSUxBUklUWSAoc2FtZSBjb25jZXB0LCBkaWZmZXJlbnQgd29yZGluZykgPT09XG4gIHsgaWQ6ICdIMDAxJywgdGV4dDE6ICdpbXBsZW1lbnQgdXNlciBhdXRoZW50aWNhdGlvbicsIHRleHQyOiAnY3JlYXRlIGxvZ2luIGZ1bmN0aW9uYWxpdHknLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAnY29kZS10YXNrJyB9LFxuICB7IGlkOiAnSDAwMicsIHRleHQxOiAnd3JpdGUgdW5pdCB0ZXN0cyBmb3IgdGhlIEFQSScsIHRleHQyOiAnY3JlYXRlIHRlc3QgY2FzZXMgZm9yIFJFU1QgZW5kcG9pbnRzJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcbiAgeyBpZDogJ0gwMDMnLCB0ZXh0MTogJ2ZpeCB0aGUgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbicsIHRleHQyOiAncmVzb2x2ZSB0aGUgTnVsbFBvaW50ZXJFeGNlcHRpb24gYnVnJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2RlYnVnZ2luZycgfSxcbiAgeyBpZDogJ0gwMDQnLCB0ZXh0MTogJ29wdGltaXplIGRhdGFiYXNlIHF1ZXJpZXMnLCB0ZXh0MjogJ2ltcHJvdmUgU1FMIHF1ZXJ5IHBlcmZvcm1hbmNlJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyB9LFxuICB7IGlkOiAnSDAwNScsIHRleHQxOiAnZGVwbG95IHRvIHByb2R1Y3Rpb24nLCB0ZXh0MjogJ3JlbGVhc2UgdG8gcHJvZCBlbnZpcm9ubWVudCcsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdkZXZvcHMnIH0sXG4gIHsgaWQ6ICdIMDA2JywgdGV4dDE6ICdyZWZhY3RvciB0aGUgbGVnYWN5IGNvZGUnLCB0ZXh0MjogJ3Jlc3RydWN0dXJlIG9sZCBjb2RlYmFzZScsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdyZWZhY3RvcmluZycgfSxcbiAgeyBpZDogJ0gwMDcnLCB0ZXh0MTogJ2FkZCBlcnJvciBoYW5kbGluZycsIHRleHQyOiAnaW1wbGVtZW50IGV4Y2VwdGlvbiBoYW5kbGluZycsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXG4gIHsgaWQ6ICdIMDA4JywgdGV4dDE6ICdjcmVhdGUgUkVTVCBBUEkgZW5kcG9pbnQnLCB0ZXh0MjogJ2J1aWxkIEhUVFAgQVBJIHJvdXRlJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcbiAgeyBpZDogJ0gwMDknLCB0ZXh0MTogJ2NoZWNrIGZvciBTUUwgaW5qZWN0aW9uJywgdGV4dDI6ICdhdWRpdCBmb3IgU1FMaSB2dWxuZXJhYmlsaXRpZXMnLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAnc2VjdXJpdHknIH0sXG4gIHsgaWQ6ICdIMDEwJywgdGV4dDE6ICdkb2N1bWVudCB0aGUgQVBJJywgdGV4dDI6ICd3cml0ZSBBUEkgZG9jdW1lbnRhdGlvbicsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdkb2N1bWVudGF0aW9uJyB9LFxuXG4gIC8vIENvZGUgc25pcHBldHMgLSBzYW1lIGZ1bmN0aW9uYWxpdHlcbiAgeyBpZDogJ0gwMTEnLCB0ZXh0MTogJ2Z1bmN0aW9uIGFkZChhLCBiKSB7IHJldHVybiBhICsgYjsgfScsIHRleHQyOiAnY29uc3Qgc3VtID0gKHgsIHkpID0+IHggKyB5OycsIHNpbWlsYXJpdHk6ICdoaWdoJywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXG4gIHsgaWQ6ICdIMDEyJywgdGV4dDE6ICdmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKyknLCB0ZXh0MjogJ2Fyci5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge30pJywgc2ltaWxhcml0eTogJ2hpZ2gnLCBjYXRlZ29yeTogJ2NvZGUtc25pcHBldCcgfSxcbiAgeyBpZDogJ0gwMTMnLCB0ZXh0MTogJ2FzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHsgYXdhaXQgZmV0Y2godXJsKTsgfScsIHRleHQyOiAnY29uc3QgZ2V0RGF0YSA9IGFzeW5jICgpID0+IHsgYXdhaXQgYXhpb3MuZ2V0KHVybCk7IH0nLCBzaW1pbGFyaXR5OiAnaGlnaCcsIGNhdGVnb3J5OiAnY29kZS1zbmlwcGV0JyB9LFxuXG4gIC8vID09PSBNRURJVU0gU0lNSUxBUklUWSAocmVsYXRlZCBidXQgZGlmZmVyZW50KSA9PT1cbiAgeyBpZDogJ00wMDEnLCB0ZXh0MTogJ2ltcGxlbWVudCB1c2VyIGF1dGhlbnRpY2F0aW9uJywgdGV4dDI6ICdjcmVhdGUgdXNlciByZWdpc3RyYXRpb24nLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXG4gIHsgaWQ6ICdNMDAyJywgdGV4dDE6ICd3cml0ZSB1bml0IHRlc3RzJywgdGV4dDI6ICd3cml0ZSBpbnRlZ3JhdGlvbiB0ZXN0cycsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ3Rlc3RpbmcnIH0sXG4gIHsgaWQ6ICdNMDAzJywgdGV4dDE6ICdmaXggdGhlIGJ1ZyBpbiBjaGVja291dCcsIHRleHQyOiAnZGVidWcgdGhlIHBheW1lbnQgZmxvdycsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ2RlYnVnZ2luZycgfSxcbiAgeyBpZDogJ00wMDQnLCB0ZXh0MTogJ29wdGltaXplIGZyb250ZW5kIHBlcmZvcm1hbmNlJywgdGV4dDI6ICdpbXByb3ZlIGJhY2tlbmQgcmVzcG9uc2UgdGltZScsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyB9LFxuICB7IGlkOiAnTTAwNScsIHRleHQxOiAnZGVwbG95IHRvIHN0YWdpbmcnLCB0ZXh0MjogJ2RlcGxveSB0byBwcm9kdWN0aW9uJywgc2ltaWxhcml0eTogJ21lZGl1bScsIGNhdGVnb3J5OiAnZGV2b3BzJyB9LFxuICB7IGlkOiAnTTAwNicsIHRleHQxOiAnUmVhY3QgY29tcG9uZW50JywgdGV4dDI6ICdWdWUgY29tcG9uZW50Jywgc2ltaWxhcml0eTogJ21lZGl1bScsIGNhdGVnb3J5OiAnY29kZS1zbmlwcGV0JyB9LFxuICB7IGlkOiAnTTAwNycsIHRleHQxOiAnUG9zdGdyZVNRTCBxdWVyeScsIHRleHQyOiAnTXlTUUwgcXVlcnknLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdjb2RlLXNuaXBwZXQnIH0sXG4gIHsgaWQ6ICdNMDA4JywgdGV4dDE6ICdSRVNUIEFQSScsIHRleHQyOiAnR3JhcGhRTCBBUEknLCBzaW1pbGFyaXR5OiAnbWVkaXVtJywgY2F0ZWdvcnk6ICdjb2RlLXRhc2snIH0sXG4gIHsgaWQ6ICdNMDA5JywgdGV4dDE6ICdOb2RlLmpzIHNlcnZlcicsIHRleHQyOiAnUHl0aG9uIEZsYXNrIHNlcnZlcicsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ2NvZGUtc25pcHBldCcgfSxcbiAgeyBpZDogJ00wMTAnLCB0ZXh0MTogJ2FkZCBjYWNoaW5nIGxheWVyJywgdGV4dDI6ICdpbXBsZW1lbnQgcmF0ZSBsaW1pdGluZycsIHNpbWlsYXJpdHk6ICdtZWRpdW0nLCBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyB9LFxuXG4gIC8vID09PSBMT1cgU0lNSUxBUklUWSAoc2FtZSBkb21haW4sIGRpZmZlcmVudCB0YXNrKSA9PT1cbiAgeyBpZDogJ0wwMDEnLCB0ZXh0MTogJ2ltcGxlbWVudCBhdXRoZW50aWNhdGlvbicsIHRleHQyOiAnd3JpdGUgZG9jdW1lbnRhdGlvbicsIHNpbWlsYXJpdHk6ICdsb3cnLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcbiAgeyBpZDogJ0wwMDInLCB0ZXh0MTogJ2ZpeCBidWcnLCB0ZXh0MjogJ2FkZCBuZXcgZmVhdHVyZScsIHNpbWlsYXJpdHk6ICdsb3cnLCBjYXRlZ29yeTogJ2NvZGUtdGFzaycgfSxcbiAgeyBpZDogJ0wwMDMnLCB0ZXh0MTogJ29wdGltaXplIHF1ZXJ5JywgdGV4dDI6ICdyZXZpZXcgcHVsbCByZXF1ZXN0Jywgc2ltaWxhcml0eTogJ2xvdycsIGNhdGVnb3J5OiAnbWl4ZWQnIH0sXG4gIHsgaWQ6ICdMMDA0JywgdGV4dDE6ICdkZXBsb3kgYXBwbGljYXRpb24nLCB0ZXh0MjogJ2Rlc2lnbiBhcmNoaXRlY3R1cmUnLCBzaW1pbGFyaXR5OiAnbG93JywgY2F0ZWdvcnk6ICdtaXhlZCcgfSxcbiAgeyBpZDogJ0wwMDUnLCB0ZXh0MTogJ2Zyb250ZW5kIFJlYWN0IGNvZGUnLCB0ZXh0MjogJ2JhY2tlbmQgZGF0YWJhc2UgbWlncmF0aW9uJywgc2ltaWxhcml0eTogJ2xvdycsIGNhdGVnb3J5OiAnY29kZS1zbmlwcGV0JyB9LFxuICB7IGlkOiAnTDAwNicsIHRleHQxOiAnc2VjdXJpdHkgYXVkaXQnLCB0ZXh0MjogJ3BlcmZvcm1hbmNlIGJlbmNobWFyaycsIHNpbWlsYXJpdHk6ICdsb3cnLCBjYXRlZ29yeTogJ21peGVkJyB9LFxuICB7IGlkOiAnTDAwNycsIHRleHQxOiAnd3JpdGUgdW5pdCB0ZXN0cycsIHRleHQyOiAnY3JlYXRlIENJL0NEIHBpcGVsaW5lJywgc2ltaWxhcml0eTogJ2xvdycsIGNhdGVnb3J5OiAnbWl4ZWQnIH0sXG4gIHsgaWQ6ICdMMDA4JywgdGV4dDE6ICdDU1Mgc3R5bGluZycsIHRleHQyOiAnZGF0YWJhc2Ugc2NoZW1hJywgc2ltaWxhcml0eTogJ2xvdycsIGNhdGVnb3J5OiAnY29kZS1zbmlwcGV0JyB9LFxuXG4gIC8vID09PSBOTyBTSU1JTEFSSVRZICh1bnJlbGF0ZWQpID09PVxuICB7IGlkOiAnTjAwMScsIHRleHQxOiAnaW1wbGVtZW50IHVzZXIgbG9naW4nLCB0ZXh0MjogJ3RoZSB3ZWF0aGVyIGlzIG5pY2UgdG9kYXknLCBzaW1pbGFyaXR5OiAnbm9uZScsIGNhdGVnb3J5OiAndW5yZWxhdGVkJyB9LFxuICB7IGlkOiAnTjAwMicsIHRleHQxOiAnZml4IEphdmFTY3JpcHQgYnVnJywgdGV4dDI6ICdyZWNpcGUgZm9yIGNob2NvbGF0ZSBjYWtlJywgc2ltaWxhcml0eTogJ25vbmUnLCBjYXRlZ29yeTogJ3VucmVsYXRlZCcgfSxcbiAgeyBpZDogJ04wMDMnLCB0ZXh0MTogJ2RlcGxveSBLdWJlcm5ldGVzIGNsdXN0ZXInLCB0ZXh0MjogJ2Jvb2sgYSBmbGlnaHQgdG8gUGFyaXMnLCBzaW1pbGFyaXR5OiAnbm9uZScsIGNhdGVnb3J5OiAndW5yZWxhdGVkJyB9LFxuICB7IGlkOiAnTjAwNCcsIHRleHQxOiAnb3B0aW1pemUgU1FMIHF1ZXJ5JywgdGV4dDI6ICdsZWFybiB0byBwbGF5IGd1aXRhcicsIHNpbWlsYXJpdHk6ICdub25lJywgY2F0ZWdvcnk6ICd1bnJlbGF0ZWQnIH0sXG4gIHsgaWQ6ICdOMDA1JywgdGV4dDE6ICdjb25zdCB4ID0gNDI7JywgdGV4dDI6ICdyb3NlcyBhcmUgcmVkIHZpb2xldHMgYXJlIGJsdWUnLCBzaW1pbGFyaXR5OiAnbm9uZScsIGNhdGVnb3J5OiAndW5yZWxhdGVkJyB9LFxuXTtcblxuLyoqXG4gKiBTZWFyY2ggcmVsZXZhbmNlIHRlc3QgY2FzZXNcbiAqIFF1ZXJ5ICsgZG9jdW1lbnRzIHdpdGggcmVsZXZhbmNlIHNjb3Jlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFRlc3RDYXNlIHtcbiAgaWQ6IHN0cmluZztcbiAgcXVlcnk6IHN0cmluZztcbiAgZG9jdW1lbnRzOiB7IHRleHQ6IHN0cmluZzsgcmVsZXZhbmNlOiBudW1iZXIgfVtdOyAvLyByZWxldmFuY2U6IDAtMyAoMD1pcnJlbGV2YW50LCAzPWhpZ2hseSByZWxldmFudClcbn1cblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9URVNUX0NBU0VTOiBTZWFyY2hUZXN0Q2FzZVtdID0gW1xuICB7XG4gICAgaWQ6ICdTMDAxJyxcbiAgICBxdWVyeTogJ2hvdyB0byBpbXBsZW1lbnQgdXNlciBhdXRoZW50aWNhdGlvbiBpbiBOb2RlLmpzJyxcbiAgICBkb2N1bWVudHM6IFtcbiAgICAgIHsgdGV4dDogJ0ltcGxlbWVudGluZyBKV1QgYXV0aGVudGljYXRpb24gaW4gRXhwcmVzcy5qcyB3aXRoIHBhc3Nwb3J0JywgcmVsZXZhbmNlOiAzIH0sXG4gICAgICB7IHRleHQ6ICdOb2RlLmpzIGxvZ2luIHN5c3RlbSB3aXRoIGJjcnlwdCBwYXNzd29yZCBoYXNoaW5nJywgcmVsZXZhbmNlOiAzIH0sXG4gICAgICB7IHRleHQ6ICdCdWlsZGluZyBhIFJlYWN0IGxvZ2luIGZvcm0gY29tcG9uZW50JywgcmVsZXZhbmNlOiAyIH0sXG4gICAgICB7IHRleHQ6ICdQb3N0Z3JlU1FMIHVzZXIgdGFibGUgc2NoZW1hIGRlc2lnbicsIHJlbGV2YW5jZTogMSB9LFxuICAgICAgeyB0ZXh0OiAnSG93IHRvIGRlcGxveSBEb2NrZXIgY29udGFpbmVycycsIHJlbGV2YW5jZTogMCB9LFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ1MwMDInLFxuICAgIHF1ZXJ5OiAnZml4IG1lbW9yeSBsZWFrIGluIEphdmFTY3JpcHQnLFxuICAgIGRvY3VtZW50czogW1xuICAgICAgeyB0ZXh0OiAnRGVidWdnaW5nIG1lbW9yeSBsZWFrcyB3aXRoIENocm9tZSBEZXZUb29scyBoZWFwIHNuYXBzaG90cycsIHJlbGV2YW5jZTogMyB9LFxuICAgICAgeyB0ZXh0OiAnQ29tbW9uIGNhdXNlcyBvZiBtZW1vcnkgbGVha3MgaW4gTm9kZS5qcyBhcHBsaWNhdGlvbnMnLCByZWxldmFuY2U6IDMgfSxcbiAgICAgIHsgdGV4dDogJ0phdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGV4cGxhaW5lZCcsIHJlbGV2YW5jZTogMiB9LFxuICAgICAgeyB0ZXh0OiAnT3B0aW1pemluZyBSZWFjdCBjb21wb25lbnQgcmUtcmVuZGVycycsIHJlbGV2YW5jZTogMSB9LFxuICAgICAgeyB0ZXh0OiAnQ1NTIGZsZXhib3ggbGF5b3V0IHR1dG9yaWFsJywgcmVsZXZhbmNlOiAwIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGlkOiAnUzAwMycsXG4gICAgcXVlcnk6ICdkYXRhYmFzZSBtaWdyYXRpb24gYmVzdCBwcmFjdGljZXMnLFxuICAgIGRvY3VtZW50czogW1xuICAgICAgeyB0ZXh0OiAnU2NoZW1hIG1pZ3JhdGlvbiBzdHJhdGVnaWVzIGZvciB6ZXJvLWRvd250aW1lIGRlcGxveW1lbnRzJywgcmVsZXZhbmNlOiAzIH0sXG4gICAgICB7IHRleHQ6ICdVc2luZyBQcmlzbWEgbWlncmF0ZSBmb3IgUG9zdGdyZVNRTCBzY2hlbWEgY2hhbmdlcycsIHJlbGV2YW5jZTogMyB9LFxuICAgICAgeyB0ZXh0OiAnRGF0YWJhc2UgYmFja3VwIGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzJywgcmVsZXZhbmNlOiAyIH0sXG4gICAgICB7IHRleHQ6ICdTUUwgcXVlcnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMnLCByZWxldmFuY2U6IDEgfSxcbiAgICAgIHsgdGV4dDogJ1JlYWN0IHN0YXRlIG1hbmFnZW1lbnQgd2l0aCBSZWR1eCcsIHJlbGV2YW5jZTogMCB9LFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ1MwMDQnLFxuICAgIHF1ZXJ5OiAnd3JpdGUgdW5pdCB0ZXN0cyBmb3IgUmVhY3QgY29tcG9uZW50cycsXG4gICAgZG9jdW1lbnRzOiBbXG4gICAgICB7IHRleHQ6ICdUZXN0aW5nIFJlYWN0IGNvbXBvbmVudHMgd2l0aCBKZXN0IGFuZCBSZWFjdCBUZXN0aW5nIExpYnJhcnknLCByZWxldmFuY2U6IDMgfSxcbiAgICAgIHsgdGV4dDogJ1NuYXBzaG90IHRlc3RpbmcgZm9yIFVJIGNvbXBvbmVudHMnLCByZWxldmFuY2U6IDMgfSxcbiAgICAgIHsgdGV4dDogJ01vY2tpbmcgQVBJIGNhbGxzIGluIGZyb250ZW5kIHRlc3RzJywgcmVsZXZhbmNlOiAyIH0sXG4gICAgICB7IHRleHQ6ICdFbmQtdG8tZW5kIHRlc3Rpbmcgd2l0aCBDeXByZXNzJywgcmVsZXZhbmNlOiAxIH0sXG4gICAgICB7IHRleHQ6ICdLdWJlcm5ldGVzIHBvZCBjb25maWd1cmF0aW9uJywgcmVsZXZhbmNlOiAwIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGlkOiAnUzAwNScsXG4gICAgcXVlcnk6ICdvcHRpbWl6ZSBBUEkgcmVzcG9uc2UgdGltZScsXG4gICAgZG9jdW1lbnRzOiBbXG4gICAgICB7IHRleHQ6ICdJbXBsZW1lbnRpbmcgUmVkaXMgY2FjaGluZyBmb3IgQVBJIGVuZHBvaW50cycsIHJlbGV2YW5jZTogMyB9LFxuICAgICAgeyB0ZXh0OiAnRGF0YWJhc2UgcXVlcnkgb3B0aW1pemF0aW9uIHdpdGggaW5kZXhlcycsIHJlbGV2YW5jZTogMyB9LFxuICAgICAgeyB0ZXh0OiAnVXNpbmcgQ0ROIGZvciBzdGF0aWMgYXNzZXQgZGVsaXZlcnknLCByZWxldmFuY2U6IDIgfSxcbiAgICAgIHsgdGV4dDogJ0xvYWQgYmFsYW5jaW5nIHN0cmF0ZWdpZXMgZm9yIG1pY3Jvc2VydmljZXMnLCByZWxldmFuY2U6IDIgfSxcbiAgICAgIHsgdGV4dDogJ1dyaXRpbmcgY2xlYW4gSmF2YVNjcmlwdCBjb2RlJywgcmVsZXZhbmNlOiAwIH0sXG4gICAgXSxcbiAgfSxcbl07XG5cbi8qKlxuICogQ2x1c3RlciB0ZXN0IGNhc2VzIC0gaXRlbXMgdGhhdCBzaG91bGQgY2x1c3RlciB0b2dldGhlclxuICovXG5leHBvcnQgY29uc3QgQ0xVU1RFUl9URVNUX0NBU0VTOiBDbHVzdGVyVGVzdENhc2VbXSA9IFtcbiAge1xuICAgIGlkOiAnQ0wwMDEnLFxuICAgIGV4cGVjdGVkQ2x1c3RlcjogJ2F1dGhlbnRpY2F0aW9uJyxcbiAgICBpdGVtczogW1xuICAgICAgJ2ltcGxlbWVudCB1c2VyIGxvZ2luJyxcbiAgICAgICdhZGQgSldUIHRva2VuIHZhbGlkYXRpb24nLFxuICAgICAgJ2NyZWF0ZSBwYXNzd29yZCByZXNldCBmbG93JyxcbiAgICAgICdpbXBsZW1lbnQgT0F1dGggaW50ZWdyYXRpb24nLFxuICAgICAgJ2FkZCB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uJyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgaWQ6ICdDTDAwMicsXG4gICAgZXhwZWN0ZWRDbHVzdGVyOiAndGVzdGluZycsXG4gICAgaXRlbXM6IFtcbiAgICAgICd3cml0ZSB1bml0IHRlc3RzJyxcbiAgICAgICdhZGQgaW50ZWdyYXRpb24gdGVzdHMnLFxuICAgICAgJ2NyZWF0ZSBFMkUgdGVzdCBzdWl0ZScsXG4gICAgICAnaW1wcm92ZSB0ZXN0IGNvdmVyYWdlJyxcbiAgICAgICdhZGQgc25hcHNob3QgdGVzdHMnLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ0NMMDAzJyxcbiAgICBleHBlY3RlZENsdXN0ZXI6ICdkYXRhYmFzZScsXG4gICAgaXRlbXM6IFtcbiAgICAgICdvcHRpbWl6ZSBTUUwgcXVlcmllcycsXG4gICAgICAnYWRkIGRhdGFiYXNlIGluZGV4ZXMnLFxuICAgICAgJ2NyZWF0ZSBtaWdyYXRpb24gc2NyaXB0JyxcbiAgICAgICdpbXBsZW1lbnQgY29ubmVjdGlvbiBwb29saW5nJyxcbiAgICAgICdkZXNpZ24gc2NoZW1hIGZvciB1c2VycyB0YWJsZScsXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGlkOiAnQ0wwMDQnLFxuICAgIGV4cGVjdGVkQ2x1c3RlcjogJ2Zyb250ZW5kJyxcbiAgICBpdGVtczogW1xuICAgICAgJ2J1aWxkIFJlYWN0IGNvbXBvbmVudCcsXG4gICAgICAnYWRkIENTUyBzdHlsaW5nJyxcbiAgICAgICdpbXBsZW1lbnQgcmVzcG9uc2l2ZSBkZXNpZ24nLFxuICAgICAgJ2NyZWF0ZSBmb3JtIHZhbGlkYXRpb24nLFxuICAgICAgJ2FkZCBsb2FkaW5nIHNwaW5uZXInLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ0NMMDA1JyxcbiAgICBleHBlY3RlZENsdXN0ZXI6ICdkZXZvcHMnLFxuICAgIGl0ZW1zOiBbXG4gICAgICAnc2V0IHVwIENJL0NEIHBpcGVsaW5lJyxcbiAgICAgICdjb25maWd1cmUgS3ViZXJuZXRlcyBkZXBsb3ltZW50JyxcbiAgICAgICdjcmVhdGUgRG9ja2VyIGNvbnRhaW5lcicsXG4gICAgICAnYWRkIG1vbml0b3JpbmcgYWxlcnRzJyxcbiAgICAgICdpbXBsZW1lbnQgYXV0by1zY2FsaW5nJyxcbiAgICBdLFxuICB9LFxuXTtcblxuLyoqXG4gKiBFeHBlY3RlZCBzaW1pbGFyaXR5IHNjb3JlIHJhbmdlc1xuICovXG5jb25zdCBTSU1JTEFSSVRZX1RIUkVTSE9MRFMgPSB7XG4gIGhpZ2g6IHsgbWluOiAwLjcsIG1heDogMS4wIH0sXG4gIG1lZGl1bTogeyBtaW46IDAuNCwgbWF4OiAwLjcgfSxcbiAgbG93OiB7IG1pbjogMC4yLCBtYXg6IDAuNCB9LFxuICBub25lOiB7IG1pbjogMC4wLCBtYXg6IDAuMiB9LFxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBjb21wdXRlZCBzaW1pbGFyaXR5IG1hdGNoZXMgZXhwZWN0ZWQgY2F0ZWdvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29ycmVjdFNpbWlsYXJpdHkoXG4gIGV4cGVjdGVkOiAnaGlnaCcgfCAnbWVkaXVtJyB8ICdsb3cnIHwgJ25vbmUnLFxuICBjb21wdXRlZDogbnVtYmVyXG4pOiBib29sZWFuIHtcbiAgY29uc3QgdGhyZXNob2xkID0gU0lNSUxBUklUWV9USFJFU0hPTERTW2V4cGVjdGVkXTtcbiAgcmV0dXJuIGNvbXB1dGVkID49IHRocmVzaG9sZC5taW4gJiYgY29tcHV0ZWQgPD0gdGhyZXNob2xkLm1heDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgTWVhbiBSZWNpcHJvY2FsIFJhbmsgZm9yIHNlYXJjaCByZXN1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVNUlIoXG4gIHJhbmtpbmdzOiB7IHJlbGV2YW50OiBib29sZWFuIH1bXVtdXG4pOiBudW1iZXIge1xuICBsZXQgc3VtUlIgPSAwO1xuICBmb3IgKGNvbnN0IHJhbmtpbmcgb2YgcmFua2luZ3MpIHtcbiAgICBjb25zdCBmaXJzdFJlbGV2YW50SWR4ID0gcmFua2luZy5maW5kSW5kZXgociA9PiByLnJlbGV2YW50KTtcbiAgICBpZiAoZmlyc3RSZWxldmFudElkeCA+PSAwKSB7XG4gICAgICBzdW1SUiArPSAxIC8gKGZpcnN0UmVsZXZhbnRJZHggKyAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bVJSIC8gcmFua2luZ3MubGVuZ3RoO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBORENHIGZvciBzZWFyY2ggcmVzdWx0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTkRDRyhcbiAgcmVzdWx0czogeyByZWxldmFuY2U6IG51bWJlciB9W10sXG4gIGlkZWFsT3JkZXI6IHsgcmVsZXZhbmNlOiBudW1iZXIgfVtdXG4pOiBudW1iZXIge1xuICBjb25zdCBkY2cgPSByZXN1bHRzLnJlZHVjZSgoc3VtLCByLCBpKSA9PiB7XG4gICAgcmV0dXJuIHN1bSArIChNYXRoLnBvdygyLCByLnJlbGV2YW5jZSkgLSAxKSAvIE1hdGgubG9nMihpICsgMik7XG4gIH0sIDApO1xuXG4gIGNvbnN0IGlkY2cgPSBpZGVhbE9yZGVyLnJlZHVjZSgoc3VtLCByLCBpKSA9PiB7XG4gICAgcmV0dXJuIHN1bSArIChNYXRoLnBvdygyLCByLnJlbGV2YW5jZSkgLSAxKSAvIE1hdGgubG9nMihpICsgMik7XG4gIH0sIDApO1xuXG4gIHJldHVybiBpZGNnID4gMCA/IGRjZyAvIGlkY2cgOiAwO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBzaWxob3VldHRlIHNjb3JlIGZvciBjbHVzdGVyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTaWxob3VldHRlKFxuICBlbWJlZGRpbmdzOiBudW1iZXJbXVtdLFxuICBsYWJlbHM6IG51bWJlcltdXG4pOiBudW1iZXIge1xuICAvLyBTaW1wbGlmaWVkIHNpbGhvdWV0dGUgY2FsY3VsYXRpb25cbiAgY29uc3QgbiA9IGVtYmVkZGluZ3MubGVuZ3RoO1xuICBpZiAobiA8IDIpIHJldHVybiAwO1xuXG4gIGxldCB0b3RhbFNpbGhvdWV0dGUgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgY29uc3QgY2x1c3RlciA9IGxhYmVsc1tpXTtcblxuICAgIC8vIENhbGN1bGF0ZSBtZWFuIGludHJhLWNsdXN0ZXIgZGlzdGFuY2UgKGEpXG4gICAgbGV0IGludHJhU3VtID0gMDtcbiAgICBsZXQgaW50cmFDb3VudCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgIGlmIChpICE9PSBqICYmIGxhYmVsc1tqXSA9PT0gY2x1c3Rlcikge1xuICAgICAgICBpbnRyYVN1bSArPSBldWNsaWRlYW5EaXN0YW5jZShlbWJlZGRpbmdzW2ldLCBlbWJlZGRpbmdzW2pdKTtcbiAgICAgICAgaW50cmFDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhID0gaW50cmFDb3VudCA+IDAgPyBpbnRyYVN1bSAvIGludHJhQ291bnQgOiAwO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG1pbiBtZWFuIGludGVyLWNsdXN0ZXIgZGlzdGFuY2UgKGIpXG4gICAgY29uc3Qgb3RoZXJDbHVzdGVycyA9IFsuLi5uZXcgU2V0KGxhYmVscyldLmZpbHRlcihjID0+IGMgIT09IGNsdXN0ZXIpO1xuICAgIGxldCBtaW5JbnRlck1lYW4gPSBJbmZpbml0eTtcblxuICAgIGZvciAoY29uc3Qgb3RoZXJDbHVzdGVyIG9mIG90aGVyQ2x1c3RlcnMpIHtcbiAgICAgIGxldCBpbnRlclN1bSA9IDA7XG4gICAgICBsZXQgaW50ZXJDb3VudCA9IDA7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAobGFiZWxzW2pdID09PSBvdGhlckNsdXN0ZXIpIHtcbiAgICAgICAgICBpbnRlclN1bSArPSBldWNsaWRlYW5EaXN0YW5jZShlbWJlZGRpbmdzW2ldLCBlbWJlZGRpbmdzW2pdKTtcbiAgICAgICAgICBpbnRlckNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnRlckNvdW50ID4gMCkge1xuICAgICAgICBtaW5JbnRlck1lYW4gPSBNYXRoLm1pbihtaW5JbnRlck1lYW4sIGludGVyU3VtIC8gaW50ZXJDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGIgPSBtaW5JbnRlck1lYW4gPT09IEluZmluaXR5ID8gMCA6IG1pbkludGVyTWVhbjtcblxuICAgIC8vIFNpbGhvdWV0dGUgZm9yIHRoaXMgcG9pbnRcbiAgICBjb25zdCBzID0gTWF0aC5tYXgoYSwgYikgPiAwID8gKGIgLSBhKSAvIE1hdGgubWF4KGEsIGIpIDogMDtcbiAgICB0b3RhbFNpbGhvdWV0dGUgKz0gcztcbiAgfVxuXG4gIHJldHVybiB0b3RhbFNpbGhvdWV0dGUgLyBuO1xufVxuXG5mdW5jdGlvbiBldWNsaWRlYW5EaXN0YW5jZShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXIge1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgc3VtICs9IE1hdGgucG93KGFbaV0gLSBiW2ldLCAyKTtcbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG59XG5cbi8qKlxuICogUnVuIHRoZSBlbWJlZGRpbmcgYmVuY2htYXJrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5FbWJlZGRpbmdCZW5jaG1hcmsoXG4gIGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXSxcbiAgc2ltaWxhcml0eUZuOiAoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKSA9PiBudW1iZXJcbik6IEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHMge1xuICBjb25zdCBzaW1pbGFyaXR5UmVzdWx0czogRW1iZWRkaW5nUmVzdWx0W10gPSBbXTtcbiAgY29uc3QgbGF0ZW5jaWVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8vIFRlc3Qgc2ltaWxhcml0eSBwYWlyc1xuICBmb3IgKGNvbnN0IHBhaXIgb2YgU0lNSUxBUklUWV9URVNUX1BBSVJTKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCBlbWIxID0gZW1iZWRkZXIocGFpci50ZXh0MSk7XG4gICAgY29uc3QgZW1iMiA9IGVtYmVkZGVyKHBhaXIudGV4dDIpO1xuICAgIGNvbnN0IHNjb3JlID0gc2ltaWxhcml0eUZuKGVtYjEsIGVtYjIpO1xuICAgIGNvbnN0IGxhdGVuY3lNcyA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQ7XG5cbiAgICBsYXRlbmNpZXMucHVzaChsYXRlbmN5TXMpO1xuXG4gICAgc2ltaWxhcml0eVJlc3VsdHMucHVzaCh7XG4gICAgICBwYWlySWQ6IHBhaXIuaWQsXG4gICAgICBleHBlY3RlZFNpbWlsYXJpdHk6IHBhaXIuc2ltaWxhcml0eSxcbiAgICAgIGNvbXB1dGVkU2NvcmU6IHNjb3JlLFxuICAgICAgY29ycmVjdDogaXNDb3JyZWN0U2ltaWxhcml0eShwYWlyLnNpbWlsYXJpdHksIHNjb3JlKSxcbiAgICAgIGxhdGVuY3lNcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBzaW1pbGFyaXR5IGFjY3VyYWN5XG4gIGNvbnN0IGNvcnJlY3RTaW1pbGFyaXR5ID0gc2ltaWxhcml0eVJlc3VsdHMuZmlsdGVyKHIgPT4gci5jb3JyZWN0KS5sZW5ndGg7XG4gIGNvbnN0IHNpbWlsYXJpdHlBY2N1cmFjeSA9IGNvcnJlY3RTaW1pbGFyaXR5IC8gc2ltaWxhcml0eVJlc3VsdHMubGVuZ3RoO1xuXG4gIC8vIEFjY3VyYWN5IGJ5IGNhdGVnb3J5XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChTSU1JTEFSSVRZX1RFU1RfUEFJUlMubWFwKHAgPT4gcC5jYXRlZ29yeSkpXTtcbiAgY29uc3Qgc2ltaWxhcml0eUJ5Q2F0ZWdvcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgZm9yIChjb25zdCBjYXQgb2YgY2F0ZWdvcmllcykge1xuICAgIGNvbnN0IGNhdFJlc3VsdHMgPSBzaW1pbGFyaXR5UmVzdWx0cy5maWx0ZXIoXG4gICAgICAociwgaSkgPT4gU0lNSUxBUklUWV9URVNUX1BBSVJTW2ldLmNhdGVnb3J5ID09PSBjYXRcbiAgICApO1xuICAgIHNpbWlsYXJpdHlCeUNhdGVnb3J5W2NhdF0gPSBjYXRSZXN1bHRzLmZpbHRlcihyID0+IHIuY29ycmVjdCkubGVuZ3RoIC8gY2F0UmVzdWx0cy5sZW5ndGg7XG4gIH1cblxuICAvLyBUZXN0IHNlYXJjaCBxdWFsaXR5IChNUlIgYW5kIE5EQ0cpXG4gIGNvbnN0IHNlYXJjaFJhbmtpbmdzOiB7IHJlbGV2YW50OiBib29sZWFuIH1bXVtdID0gW107XG4gIGxldCB0b3RhbE5EQ0cgPSAwO1xuXG4gIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgU0VBUkNIX1RFU1RfQ0FTRVMpIHtcbiAgICBjb25zdCBxdWVyeUVtYiA9IGVtYmVkZGVyKHRlc3RDYXNlLnF1ZXJ5KTtcbiAgICBjb25zdCBkb2NTY29yZXMgPSB0ZXN0Q2FzZS5kb2N1bWVudHMubWFwKGRvYyA9PiAoe1xuICAgICAgLi4uZG9jLFxuICAgICAgc2NvcmU6IHNpbWlsYXJpdHlGbihxdWVyeUVtYiwgZW1iZWRkZXIoZG9jLnRleHQpKSxcbiAgICB9KSk7XG5cbiAgICAvLyBTb3J0IGJ5IGNvbXB1dGVkIHNjb3JlXG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRvY1Njb3Jlc10uc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuXG4gICAgLy8gRm9yIE1SUlxuICAgIHNlYXJjaFJhbmtpbmdzLnB1c2goc29ydGVkLm1hcChkID0+ICh7IHJlbGV2YW50OiBkLnJlbGV2YW5jZSA+PSAyIH0pKSk7XG5cbiAgICAvLyBGb3IgTkRDR1xuICAgIGNvbnN0IGlkZWFsT3JkZXIgPSBbLi4udGVzdENhc2UuZG9jdW1lbnRzXS5zb3J0KChhLCBiKSA9PiBiLnJlbGV2YW5jZSAtIGEucmVsZXZhbmNlKTtcbiAgICB0b3RhbE5EQ0cgKz0gY2FsY3VsYXRlTkRDRyhzb3J0ZWQsIGlkZWFsT3JkZXIpO1xuICB9XG5cbiAgY29uc3Qgc2VhcmNoTVJSID0gY2FsY3VsYXRlTVJSKHNlYXJjaFJhbmtpbmdzKTtcbiAgY29uc3Qgc2VhcmNoTkRDRyA9IHRvdGFsTkRDRyAvIFNFQVJDSF9URVNUX0NBU0VTLmxlbmd0aDtcblxuICAvLyBUZXN0IGNsdXN0ZXJpbmdcbiAgY29uc3QgYWxsQ2x1c3Rlckl0ZW1zOiB7IHRleHQ6IHN0cmluZzsgY2x1c3RlcjogbnVtYmVyIH1bXSA9IFtdO1xuICBDTFVTVEVSX1RFU1RfQ0FTRVMuZm9yRWFjaCgodGMsIGNsdXN0ZXJJZHgpID0+IHtcbiAgICB0Yy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgYWxsQ2x1c3Rlckl0ZW1zLnB1c2goeyB0ZXh0OiBpdGVtLCBjbHVzdGVyOiBjbHVzdGVySWR4IH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBjbHVzdGVyRW1iZWRkaW5ncyA9IGFsbENsdXN0ZXJJdGVtcy5tYXAoaXRlbSA9PiBlbWJlZGRlcihpdGVtLnRleHQpKTtcbiAgY29uc3QgY2x1c3RlckxhYmVscyA9IGFsbENsdXN0ZXJJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmNsdXN0ZXIpO1xuICBjb25zdCBzaWxob3VldHRlU2NvcmUgPSBjYWxjdWxhdGVTaWxob3VldHRlKGNsdXN0ZXJFbWJlZGRpbmdzLCBjbHVzdGVyTGFiZWxzKTtcblxuICAvLyBDYWxjdWxhdGUgY2x1c3RlciBwdXJpdHkgKGhvdyB3ZWxsIGl0ZW1zIHN0YXkgaW4gdGhlaXIgZXhwZWN0ZWQgY2x1c3RlcilcbiAgLy8gVXNpbmcgc2ltcGxlIG5lYXJlc3QtbmVpZ2hib3IgY2xhc3NpZmljYXRpb25cbiAgbGV0IGNvcnJlY3RDbHVzdGVyID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVyRW1iZWRkaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBuZWFyZXN0SWR4ID0gLTE7XG4gICAgbGV0IG5lYXJlc3REaXN0ID0gSW5maW5pdHk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbHVzdGVyRW1iZWRkaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGkgIT09IGopIHtcbiAgICAgICAgY29uc3QgZGlzdCA9IGV1Y2xpZGVhbkRpc3RhbmNlKGNsdXN0ZXJFbWJlZGRpbmdzW2ldLCBjbHVzdGVyRW1iZWRkaW5nc1tqXSk7XG4gICAgICAgIGlmIChkaXN0IDwgbmVhcmVzdERpc3QpIHtcbiAgICAgICAgICBuZWFyZXN0RGlzdCA9IGRpc3Q7XG4gICAgICAgICAgbmVhcmVzdElkeCA9IGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5lYXJlc3RJZHggPj0gMCAmJiBjbHVzdGVyTGFiZWxzW25lYXJlc3RJZHhdID09PSBjbHVzdGVyTGFiZWxzW2ldKSB7XG4gICAgICBjb3JyZWN0Q2x1c3RlcisrO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbHVzdGVyUHVyaXR5ID0gY29ycmVjdENsdXN0ZXIgLyBjbHVzdGVyRW1iZWRkaW5ncy5sZW5ndGg7XG5cbiAgcmV0dXJuIHtcbiAgICBzaW1pbGFyaXR5QWNjdXJhY3ksXG4gICAgc2ltaWxhcml0eUJ5Q2F0ZWdvcnksXG4gICAgYXZnU2ltaWxhcml0eUxhdGVuY3lNczogbGF0ZW5jaWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gbGF0ZW5jaWVzLmxlbmd0aCxcbiAgICBjbHVzdGVyUHVyaXR5LFxuICAgIHNpbGhvdWV0dGVTY29yZSxcbiAgICBzZWFyY2hNUlIsXG4gICAgc2VhcmNoTkRDRyxcbiAgICBzaW1pbGFyaXR5UmVzdWx0cyxcbiAgICB0b3RhbFBhaXJzOiBzaW1pbGFyaXR5UmVzdWx0cy5sZW5ndGgsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGVtYmVkZGluZyBiZW5jaG1hcmsgcmVzdWx0cyBmb3IgZGlzcGxheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RW1iZWRkaW5nUmVzdWx0cyhyZXN1bHRzOiBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgRU1CRURESU5HIEJFTkNITUFSSyBSRVNVTFRTICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMnKTtcbiAgbGluZXMucHVzaChg4pWRICBTaW1pbGFyaXR5IERldGVjdGlvbjogJHsocmVzdWx0cy5zaW1pbGFyaXR5QWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWAucGFkRW5kKDYzKSArICfilZEnKTtcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XG4gIGxpbmVzLnB1c2goJ+KVkSAgQnkgQ2F0ZWdvcnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XG5cbiAgZm9yIChjb25zdCBbY2F0LCBhY2NdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMuc2ltaWxhcml0eUJ5Q2F0ZWdvcnkpLnNvcnQoKGEsIGIpID0+IGJbMV0gLSBhWzFdKSkge1xuICAgIGNvbnN0IGJhciA9ICfilognLnJlcGVhdChNYXRoLmZsb29yKGFjYyAqIDIwKSkgKyAn4paRJy5yZXBlYXQoMjAgLSBNYXRoLmZsb29yKGFjYyAqIDIwKSk7XG4gICAgbGluZXMucHVzaChg4pWRICAgICR7Y2F0LnBhZEVuZCgxOCl9IFske2Jhcn1dICR7KGFjYyAqIDEwMCkudG9GaXhlZCgwKS5wYWRTdGFydCgzKX0lICDilZFgKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJ+KVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVoycpO1xuICBsaW5lcy5wdXNoKCfilZEgIENsdXN0ZXJpbmcgUXVhbGl0eTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKGDilZEgICAgQ2x1c3RlciBQdXJpdHk6ICAgICR7KHJlc3VsdHMuY2x1c3RlclB1cml0eSAqIDEwMCkudG9GaXhlZCgxKX0lYC5wYWRFbmQoNjMpICsgJ+KVkScpO1xuICBsaW5lcy5wdXNoKGDilZEgICAgU2lsaG91ZXR0ZSBTY29yZTogICR7cmVzdWx0cy5zaWxob3VldHRlU2NvcmUudG9GaXhlZCgzKX1gLnBhZEVuZCg2MykgKyAn4pWRJyk7XG4gIGxpbmVzLnB1c2goJ+KVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVoycpO1xuICBsaW5lcy5wdXNoKCfilZEgIFNlYXJjaCBRdWFsaXR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKGDilZEgICAgTVJSIChNZWFuIFJlY2lwcm9jYWwgUmFuayk6ICAke3Jlc3VsdHMuc2VhcmNoTVJSLnRvRml4ZWQoMyl9YC5wYWRFbmQoNjMpICsgJ+KVkScpO1xuICBsaW5lcy5wdXNoKGDilZEgICAgTkRDRzogICAgICAgICAgICAgICAgICAgICAgICAke3Jlc3VsdHMuc2VhcmNoTkRDRy50b0ZpeGVkKDMpfWAucGFkRW5kKDYzKSArICfilZEnKTtcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XG4gIGxpbmVzLnB1c2goYOKVkSAgQXZnIExhdGVuY3k6ICR7cmVzdWx0cy5hdmdTaW1pbGFyaXR5TGF0ZW5jeU1zLnRvRml4ZWQoMil9bXMgcGVyIHBhaXJgLnBhZEVuZCg2MykgKyAn4pWRJyk7XG4gIGxpbmVzLnB1c2goJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpO1xuXG4gIC8vIFF1YWxpdHkgYXNzZXNzbWVudFxuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaCgnUXVhbGl0eSBBc3Nlc3NtZW50OicpO1xuXG4gIGlmIChyZXN1bHRzLnNpbWlsYXJpdHlBY2N1cmFjeSA+PSAwLjgpIHtcbiAgICBsaW5lcy5wdXNoKCcgIOKckyBTaW1pbGFyaXR5IGRldGVjdGlvbjogRVhDRUxMRU5UICjiiaU4MCUpJyk7XG4gIH0gZWxzZSBpZiAocmVzdWx0cy5zaW1pbGFyaXR5QWNjdXJhY3kgPj0gMC42KSB7XG4gICAgbGluZXMucHVzaCgnICB+IFNpbWlsYXJpdHkgZGV0ZWN0aW9uOiBHT09EICg2MC04MCUpJyk7XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnICDinJcgU2ltaWxhcml0eSBkZXRlY3Rpb246IE5FRURTIElNUFJPVkVNRU5UICg8NjAlKScpO1xuICB9XG5cbiAgaWYgKHJlc3VsdHMuc2VhcmNoTVJSID49IDAuOCkge1xuICAgIGxpbmVzLnB1c2goJyAg4pyTIFNlYXJjaCBxdWFsaXR5IChNUlIpOiBFWENFTExFTlQgKOKJpTAuOCknKTtcbiAgfSBlbHNlIGlmIChyZXN1bHRzLnNlYXJjaE1SUiA+PSAwLjUpIHtcbiAgICBsaW5lcy5wdXNoKCcgIH4gU2VhcmNoIHF1YWxpdHkgKE1SUik6IEFDQ0VQVEFCTEUgKDAuNS0wLjgpJyk7XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnICDinJcgU2VhcmNoIHF1YWxpdHkgKE1SUik6IE5FRURTIElNUFJPVkVNRU5UICg8MC41KScpO1xuICB9XG5cbiAgaWYgKHJlc3VsdHMuY2x1c3RlclB1cml0eSA+PSAwLjgpIHtcbiAgICBsaW5lcy5wdXNoKCcgIOKckyBDbHVzdGVyaW5nOiBFWENFTExFTlQgKOKJpTgwJSBwdXJpdHkpJyk7XG4gIH0gZWxzZSBpZiAocmVzdWx0cy5jbHVzdGVyUHVyaXR5ID49IDAuNikge1xuICAgIGxpbmVzLnB1c2goJyAgfiBDbHVzdGVyaW5nOiBBQ0NFUFRBQkxFICg2MC04MCUgcHVyaXR5KScpO1xuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goJyAg4pyXIENsdXN0ZXJpbmc6IE5FRURTIElNUFJPVkVNRU5UICg8NjAlIHB1cml0eSknKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBTSU1JTEFSSVRZX1RFU1RfUEFJUlMsXG4gIFNFQVJDSF9URVNUX0NBU0VTLFxuICBDTFVTVEVSX1RFU1RfQ0FTRVMsXG4gIHJ1bkVtYmVkZGluZ0JlbmNobWFyayxcbiAgZm9ybWF0RW1iZWRkaW5nUmVzdWx0cyxcbiAgaXNDb3JyZWN0U2ltaWxhcml0eSxcbiAgY2FsY3VsYXRlTVJSLFxuICBjYWxjdWxhdGVORENHLFxufTtcbiJdfQ==
@@ -20,10 +20,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
20
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.CLUSTER_TEST_CASES = exports.SEARCH_TEST_CASES = exports.SIMILARITY_TEST_PAIRS = exports.ROUTING_TEST_CASES = void 0;
24
- exports.runFullBenchmark = runFullBenchmark;
25
- exports.formatFullResults = formatFullResults;
26
- exports.compareModels = compareModels;
23
+ exports.CLUSTER_TEST_CASES = exports.SEARCH_TEST_CASES = exports.SIMILARITY_TEST_PAIRS = exports.ROUTING_TEST_CASES = exports.compareModels = exports.formatFullResults = exports.runFullBenchmark = void 0;
27
24
  __exportStar(require("./routing-benchmark"), exports);
28
25
  __exportStar(require("./embedding-benchmark"), exports);
29
26
  __exportStar(require("./model-comparison"), exports);
@@ -46,6 +43,7 @@ function runFullBenchmark(router, embedder, similarityFn, modelName = 'unknown')
46
43
  model: modelName,
47
44
  };
48
45
  }
46
+ exports.runFullBenchmark = runFullBenchmark;
49
47
  /**
50
48
  * Format full benchmark results
51
49
  */
@@ -93,6 +91,7 @@ function formatFullResults(results) {
93
91
  lines.push('═══════════════════════════════════════════════════════════════');
94
92
  return lines.join('\n');
95
93
  }
94
+ exports.formatFullResults = formatFullResults;
96
95
  /**
97
96
  * Compare two models
98
97
  */
@@ -129,4 +128,5 @@ function compareModels(results1, results2) {
129
128
  }
130
129
  return lines.join('\n');
131
130
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2htYXJrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNILDRDQWVDO0FBS0QsOENBbURDO0FBS0Qsc0NBMENDO0FBckpELHNEQUFvQztBQUNwQyx3REFBc0M7QUFDdEMscURBQW1DO0FBRW5DLDJEQU02QjtBQStJM0IsbUdBakpBLHNDQUFrQixPQWlKQTtBQTdJcEIsK0RBTytCO0FBdUk3QixzR0EzSUEsMkNBQXFCLE9BMklBO0FBQ3JCLGtHQTNJQSx1Q0FBaUIsT0EySUE7QUFDakIsbUdBM0lBLHdDQUFrQixPQTJJQTtBQWhJcEI7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsTUFBK0QsRUFDL0QsUUFBb0MsRUFDcEMsWUFBa0QsRUFDbEQsWUFBb0IsU0FBUztJQUU3QixNQUFNLE9BQU8sR0FBRyxJQUFBLHVDQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUEsMkNBQXFCLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWhFLE9BQU87UUFDTCxPQUFPO1FBQ1AsU0FBUztRQUNULFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtRQUNuQyxLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsT0FBNkI7SUFDN0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBRTNCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLCtFQUErRSxDQUFDLENBQUM7SUFDNUYsS0FBSyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO0lBQzVGLEtBQUssQ0FBQyxJQUFJLENBQUMsK0VB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Qy9FLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzlFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFOUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBSdXZMVFJBIEJlbmNobWFyayBTdWl0ZVxyXG4gKlxyXG4gKiBDb21wcmVoZW5zaXZlIGJlbmNobWFya3MgZm9yIGV2YWx1YXRpbmcgUnV2TFRSQSBtb2RlbHNcclxuICogb24gQ2xhdWRlIENvZGUtc3BlY2lmaWMgdXNlIGNhc2VzLlxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vcm91dGluZy1iZW5jaG1hcmsnO1xyXG5leHBvcnQgKiBmcm9tICcuL2VtYmVkZGluZy1iZW5jaG1hcmsnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsLWNvbXBhcmlzb24nO1xyXG5cclxuaW1wb3J0IHtcclxuICBydW5Sb3V0aW5nQmVuY2htYXJrLFxyXG4gIGZvcm1hdFJvdXRpbmdSZXN1bHRzLFxyXG4gIGJhc2VsaW5lS2V5d29yZFJvdXRlcixcclxuICBST1VUSU5HX1RFU1RfQ0FTRVMsXHJcbiAgdHlwZSBSb3V0aW5nQmVuY2htYXJrUmVzdWx0cyxcclxufSBmcm9tICcuL3JvdXRpbmctYmVuY2htYXJrJztcclxuXHJcbmltcG9ydCB7XHJcbiAgcnVuRW1iZWRkaW5nQmVuY2htYXJrLFxyXG4gIGZvcm1hdEVtYmVkZGluZ1Jlc3VsdHMsXHJcbiAgU0lNSUxBUklUWV9URVNUX1BBSVJTLFxyXG4gIFNFQVJDSF9URVNUX0NBU0VTLFxyXG4gIENMVVNURVJfVEVTVF9DQVNFUyxcclxuICB0eXBlIEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHMsXHJcbn0gZnJvbSAnLi9lbWJlZGRpbmctYmVuY2htYXJrJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRnVsbEJlbmNobWFya1Jlc3VsdHMge1xyXG4gIHJvdXRpbmc6IFJvdXRpbmdCZW5jaG1hcmtSZXN1bHRzO1xyXG4gIGVtYmVkZGluZzogRW1iZWRkaW5nQmVuY2htYXJrUmVzdWx0cztcclxuICB0aW1lc3RhbXA6IHN0cmluZztcclxuICBtb2RlbDogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUnVuIGFsbCBiZW5jaG1hcmtzIHdpdGggYSBnaXZlbiBtb2RlbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkZ1bGxCZW5jaG1hcmsoXHJcbiAgcm91dGVyOiAodGFzazogc3RyaW5nKSA9PiB7IGFnZW50OiBzdHJpbmc7IGNvbmZpZGVuY2U6IG51bWJlciB9LFxyXG4gIGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXSxcclxuICBzaW1pbGFyaXR5Rm46IChhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pID0+IG51bWJlcixcclxuICBtb2RlbE5hbWU6IHN0cmluZyA9ICd1bmtub3duJ1xyXG4pOiBGdWxsQmVuY2htYXJrUmVzdWx0cyB7XHJcbiAgY29uc3Qgcm91dGluZyA9IHJ1blJvdXRpbmdCZW5jaG1hcmsocm91dGVyKTtcclxuICBjb25zdCBlbWJlZGRpbmcgPSBydW5FbWJlZGRpbmdCZW5jaG1hcmsoZW1iZWRkZXIsIHNpbWlsYXJpdHlGbik7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByb3V0aW5nLFxyXG4gICAgZW1iZWRkaW5nLFxyXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICBtb2RlbDogbW9kZWxOYW1lLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGb3JtYXQgZnVsbCBiZW5jaG1hcmsgcmVzdWx0c1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZ1bGxSZXN1bHRzKHJlc3VsdHM6IEZ1bGxCZW5jaG1hcmtSZXN1bHRzKTogc3RyaW5nIHtcclxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgbGluZXMucHVzaCgnJyk7XHJcbiAgbGluZXMucHVzaCgn4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXJyk7XHJcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgICAgICAgICBSVVZMVFJBIEJFTkNITUFSSyBTVUlURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgQ2xhdWRlIENvZGUgVXNlIENhc2UgRXZhbHVhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XHJcbiAgbGluZXMucHVzaChg4pWRICBNb2RlbDogJHtyZXN1bHRzLm1vZGVsLnBhZEVuZCg2NCl94pWRYCk7XHJcbiAgbGluZXMucHVzaChg4pWRICBEYXRlOiAgJHtyZXN1bHRzLnRpbWVzdGFtcC5wYWRFbmQoNjQpfeKVkWApO1xyXG4gIGxpbmVzLnB1c2goJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpO1xyXG5cclxuICBsaW5lcy5wdXNoKGZvcm1hdFJvdXRpbmdSZXN1bHRzKHJlc3VsdHMucm91dGluZykpO1xyXG4gIGxpbmVzLnB1c2goZm9ybWF0RW1iZWRkaW5nUmVzdWx0cyhyZXN1bHRzLmVtYmVkZGluZykpO1xyXG5cclxuICAvLyBPdmVyYWxsIGFzc2Vzc21lbnRcclxuICBsaW5lcy5wdXNoKCcnKTtcclxuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcclxuICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAgICAgT1ZFUkFMTCBBU1NFU1NNRU5UJyk7XHJcbiAgbGluZXMucHVzaCgn4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJyk7XHJcblxyXG4gIGNvbnN0IHJvdXRpbmdTY29yZSA9IHJlc3VsdHMucm91dGluZy5hY2N1cmFjeTtcclxuICBjb25zdCBlbWJlZGRpbmdTY29yZSA9IChcclxuICAgIHJlc3VsdHMuZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSArXHJcbiAgICByZXN1bHRzLmVtYmVkZGluZy5zZWFyY2hNUlIgK1xyXG4gICAgcmVzdWx0cy5lbWJlZGRpbmcuY2x1c3RlclB1cml0eVxyXG4gICkgLyAzO1xyXG5cclxuICBjb25zdCBvdmVyYWxsU2NvcmUgPSAocm91dGluZ1Njb3JlICsgZW1iZWRkaW5nU2NvcmUpIC8gMjtcclxuXHJcbiAgbGluZXMucHVzaCgnJyk7XHJcbiAgbGluZXMucHVzaChgICBSb3V0aW5nIFNjb3JlOiAgICR7KHJvdXRpbmdTY29yZSAqIDEwMCkudG9GaXhlZCgxKX0lYCk7XHJcbiAgbGluZXMucHVzaChgICBFbWJlZGRpbmcgU2NvcmU6ICR7KGVtYmVkZGluZ1Njb3JlICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcclxuICBsaW5lcy5wdXNoKGAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgGApO1xyXG4gIGxpbmVzLnB1c2goYCAgT3ZlcmFsbCBTY29yZTogICAkeyhvdmVyYWxsU2NvcmUgKiAxMDApLnRvRml4ZWQoMSl9JWApO1xyXG4gIGxpbmVzLnB1c2goJycpO1xyXG5cclxuICBpZiAob3ZlcmFsbFNjb3JlID49IDAuOCkge1xyXG4gICAgbGluZXMucHVzaCgnICDinJMgRVhDRUxMRU5UIC0gSGlnaGx5IHN1aXRhYmxlIGZvciBDbGF1ZGUgQ29kZSB3b3JrZmxvd3MnKTtcclxuICB9IGVsc2UgaWYgKG92ZXJhbGxTY29yZSA+PSAwLjYpIHtcclxuICAgIGxpbmVzLnB1c2goJyAgfiBHT09EIC0gU3VpdGFibGUgZm9yIG1vc3QgQ2xhdWRlIENvZGUgdXNlIGNhc2VzJyk7XHJcbiAgfSBlbHNlIGlmIChvdmVyYWxsU2NvcmUgPj0gMC40KSB7XHJcbiAgICBsaW5lcy5wdXNoKCcgIH4gQUNDRVBUQUJMRSAtIE1heSB3b3JrIGJ1dCBjb25zaWRlciBhbHRlcm5hdGl2ZXMnKTtcclxuICB9IGVsc2Uge1xyXG4gICAgbGluZXMucHVzaCgnICDinJcgTkVFRFMgSU1QUk9WRU1FTlQgLSBDb25zaWRlciBkaWZmZXJlbnQgbW9kZWwgb3IgZmluZS10dW5pbmcnKTtcclxuICB9XHJcblxyXG4gIGxpbmVzLnB1c2goJycpO1xyXG4gIGxpbmVzLnB1c2goJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpO1xyXG5cclxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlIHR3byBtb2RlbHNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlTW9kZWxzKFxyXG4gIHJlc3VsdHMxOiBGdWxsQmVuY2htYXJrUmVzdWx0cyxcclxuICByZXN1bHRzMjogRnVsbEJlbmNobWFya1Jlc3VsdHNcclxuKTogc3RyaW5nIHtcclxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgbGluZXMucHVzaCgnJyk7XHJcbiAgbGluZXMucHVzaCgn4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXJyk7XHJcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgICAgICAgICAgICBNT0RFTCBDT01QQVJJU09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XHJcbiAgbGluZXMucHVzaCgnJyk7XHJcblxyXG4gIGNvbnN0IG1ldHJpY3MgPSBbXHJcbiAgICB7IG5hbWU6ICdSb3V0aW5nIEFjY3VyYWN5JywgdjE6IHJlc3VsdHMxLnJvdXRpbmcuYWNjdXJhY3ksIHYyOiByZXN1bHRzMi5yb3V0aW5nLmFjY3VyYWN5IH0sXHJcbiAgICB7IG5hbWU6ICdTaW1pbGFyaXR5IERldGVjdGlvbicsIHYxOiByZXN1bHRzMS5lbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5LCB2MjogcmVzdWx0czIuZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSB9LFxyXG4gICAgeyBuYW1lOiAnU2VhcmNoIE1SUicsIHYxOiByZXN1bHRzMS5lbWJlZGRpbmcuc2VhcmNoTVJSLCB2MjogcmVzdWx0czIuZW1iZWRkaW5nLnNlYXJjaE1SUiB9LFxyXG4gICAgeyBuYW1lOiAnU2VhcmNoIE5EQ0cnLCB2MTogcmVzdWx0czEuZW1iZWRkaW5nLnNlYXJjaE5EQ0csIHYyOiByZXN1bHRzMi5lbWJlZGRpbmcuc2VhcmNoTkRDRyB9LFxyXG4gICAgeyBuYW1lOiAnQ2x1c3RlciBQdXJpdHknLCB2MTogcmVzdWx0czEuZW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHksIHYyOiByZXN1bHRzMi5lbWJlZGRpbmcuY2x1c3RlclB1cml0eSB9LFxyXG4gICAgeyBuYW1lOiAnUm91dGluZyBMYXRlbmN5IChtcyknLCB2MTogcmVzdWx0czEucm91dGluZy5hdmdMYXRlbmN5TXMsIHYyOiByZXN1bHRzMi5yb3V0aW5nLmF2Z0xhdGVuY3lNcywgbG93ZXJCZXR0ZXI6IHRydWUgfSxcclxuICBdO1xyXG5cclxuICBsaW5lcy5wdXNoKGAkeydNZXRyaWMnLnBhZEVuZCgyNSl9ICR7cmVzdWx0czEubW9kZWwucGFkRW5kKDE1KX0gJHtyZXN1bHRzMi5tb2RlbC5wYWRFbmQoMTUpfSBXaW5uZXJgKTtcclxuICBsaW5lcy5wdXNoKCfilIAnLnJlcGVhdCg3MCkpO1xyXG5cclxuICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xyXG4gICAgY29uc3QgdmFsMSA9IG0ubG93ZXJCZXR0ZXIgPyBtLnYxIDogbS52MTtcclxuICAgIGNvbnN0IHZhbDIgPSBtLmxvd2VyQmV0dGVyID8gbS52MiA6IG0udjI7XHJcblxyXG4gICAgbGV0IHdpbm5lcjogc3RyaW5nO1xyXG4gICAgaWYgKG0ubG93ZXJCZXR0ZXIpIHtcclxuICAgICAgd2lubmVyID0gdmFsMSA8IHZhbDIgPyByZXN1bHRzMS5tb2RlbCA6IHZhbDIgPCB2YWwxID8gcmVzdWx0czIubW9kZWwgOiAndGllJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbm5lciA9IHZhbDEgPiB2YWwyID8gcmVzdWx0czEubW9kZWwgOiB2YWwyID4gdmFsMSA/IHJlc3VsdHMyLm1vZGVsIDogJ3RpZSc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdjFTdHIgPSBtLmxvd2VyQmV0dGVyID8gdmFsMS50b0ZpeGVkKDIpIDogKHZhbDEgKiAxMDApLnRvRml4ZWQoMSkgKyAnJSc7XHJcbiAgICBjb25zdCB2MlN0ciA9IG0ubG93ZXJCZXR0ZXIgPyB2YWwyLnRvRml4ZWQoMikgOiAodmFsMiAqIDEwMCkudG9GaXhlZCgxKSArICclJztcclxuXHJcbiAgICBsaW5lcy5wdXNoKGAke20ubmFtZS5wYWRFbmQoMjUpfSAke3YxU3RyLnBhZEVuZCgxNSl9ICR7djJTdHIucGFkRW5kKDE1KX0gJHt3aW5uZXJ9YCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XHJcbn1cclxuXHJcbi8vIEV4cG9ydCBjb25zdGFudHMgZm9yIGV4dGVybmFsIHVzZVxyXG5leHBvcnQge1xyXG4gIFJPVVRJTkdfVEVTVF9DQVNFUyxcclxuICBTSU1JTEFSSVRZX1RFU1RfUEFJUlMsXHJcbiAgU0VBUkNIX1RFU1RfQ0FTRVMsXHJcbiAgQ0xVU1RFUl9URVNUX0NBU0VTLFxyXG59O1xyXG4iXX0=
131
+ exports.compareModels = compareModels;
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2htYXJrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsc0RBQW9DO0FBQ3BDLHdEQUFzQztBQUN0QyxxREFBbUM7QUFFbkMsMkRBTTZCO0FBK0kzQixtR0FqSkEsc0NBQWtCLE9BaUpBO0FBN0lwQiwrREFPK0I7QUF1STdCLHNHQTNJQSwyQ0FBcUIsT0EySUE7QUFDckIsa0dBM0lBLHVDQUFpQixPQTJJQTtBQUNqQixtR0EzSUEsd0NBQWtCLE9BMklBO0FBaElwQjs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixNQUErRCxFQUMvRCxRQUFvQyxFQUNwQyxZQUFrRCxFQUNsRCxZQUFvQixTQUFTO0lBRTdCLE1BQU0sT0FBTyxHQUFHLElBQUEsdUNBQW1CLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBQSwyQ0FBcUIsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFaEUsT0FBTztRQUNMLE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1FBQ25DLEtBQUssRUFBRSxTQUFTO0tBQ2pCLENBQUM7QUFDSixDQUFDO0FBZkQsNENBZUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQTZCO0lBQzdELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO0lBQzVGLEtBQUssQ0FBQyxJQUFJLENBQUMsK0VBQStFLENBQUMsQ0FBQztJQUM1RixLQUFLLENBQUMsSUFBSSxDQUFDLCtFQUErRSxDQUFDLENBQUM7SUFDNUYsS0FBSyxD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LE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDOUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUU5RSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBMUNELHNDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnV2TFRSQSBCZW5jaG1hcmsgU3VpdGVcbiAqXG4gKiBDb21wcmVoZW5zaXZlIGJlbmNobWFya3MgZm9yIGV2YWx1YXRpbmcgUnV2TFRSQSBtb2RlbHNcbiAqIG9uIENsYXVkZSBDb2RlLXNwZWNpZmljIHVzZSBjYXNlcy5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3JvdXRpbmctYmVuY2htYXJrJztcbmV4cG9ydCAqIGZyb20gJy4vZW1iZWRkaW5nLWJlbmNobWFyayc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsLWNvbXBhcmlzb24nO1xuXG5pbXBvcnQge1xuICBydW5Sb3V0aW5nQmVuY2htYXJrLFxuICBmb3JtYXRSb3V0aW5nUmVzdWx0cyxcbiAgYmFzZWxpbmVLZXl3b3JkUm91dGVyLFxuICBST1VUSU5HX1RFU1RfQ0FTRVMsXG4gIHR5cGUgUm91dGluZ0JlbmNobWFya1Jlc3VsdHMsXG59IGZyb20gJy4vcm91dGluZy1iZW5jaG1hcmsnO1xuXG5pbXBvcnQge1xuICBydW5FbWJlZGRpbmdCZW5jaG1hcmssXG4gIGZvcm1hdEVtYmVkZGluZ1Jlc3VsdHMsXG4gIFNJTUlMQVJJVFlfVEVTVF9QQUlSUyxcbiAgU0VBUkNIX1RFU1RfQ0FTRVMsXG4gIENMVVNURVJfVEVTVF9DQVNFUyxcbiAgdHlwZSBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzLFxufSBmcm9tICcuL2VtYmVkZGluZy1iZW5jaG1hcmsnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxCZW5jaG1hcmtSZXN1bHRzIHtcbiAgcm91dGluZzogUm91dGluZ0JlbmNobWFya1Jlc3VsdHM7XG4gIGVtYmVkZGluZzogRW1iZWRkaW5nQmVuY2htYXJrUmVzdWx0cztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUnVuIGFsbCBiZW5jaG1hcmtzIHdpdGggYSBnaXZlbiBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuRnVsbEJlbmNobWFyayhcbiAgcm91dGVyOiAodGFzazogc3RyaW5nKSA9PiB7IGFnZW50OiBzdHJpbmc7IGNvbmZpZGVuY2U6IG51bWJlciB9LFxuICBlbWJlZGRlcjogKHRleHQ6IHN0cmluZykgPT4gbnVtYmVyW10sXG4gIHNpbWlsYXJpdHlGbjogKGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSkgPT4gbnVtYmVyLFxuICBtb2RlbE5hbWU6IHN0cmluZyA9ICd1bmtub3duJ1xuKTogRnVsbEJlbmNobWFya1Jlc3VsdHMge1xuICBjb25zdCByb3V0aW5nID0gcnVuUm91dGluZ0JlbmNobWFyayhyb3V0ZXIpO1xuICBjb25zdCBlbWJlZGRpbmcgPSBydW5FbWJlZGRpbmdCZW5jaG1hcmsoZW1iZWRkZXIsIHNpbWlsYXJpdHlGbik7XG5cbiAgcmV0dXJuIHtcbiAgICByb3V0aW5nLFxuICAgIGVtYmVkZGluZyxcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBtb2RlbDogbW9kZWxOYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCBmdWxsIGJlbmNobWFyayByZXN1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGdWxsUmVzdWx0cyhyZXN1bHRzOiBGdWxsQmVuY2htYXJrUmVzdWx0cyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKTtcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgICAgICAgICBSVVZMVFJBIEJFTkNITUFSSyBTVUlURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XG4gIGxpbmVzLnB1c2goJ+KVkSAgICAgICAgICAgIENsYXVkZSBDb2RlIFVzZSBDYXNlIEV2YWx1YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMnKTtcbiAgbGluZXMucHVzaChg4pWRICBNb2RlbDogJHtyZXN1bHRzLm1vZGVsLnBhZEVuZCg2NCl94pWRYCk7XG4gIGxpbmVzLnB1c2goYOKVkSAgRGF0ZTogICR7cmVzdWx0cy50aW1lc3RhbXAucGFkRW5kKDY0KX3ilZFgKTtcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XG5cbiAgbGluZXMucHVzaChmb3JtYXRSb3V0aW5nUmVzdWx0cyhyZXN1bHRzLnJvdXRpbmcpKTtcbiAgbGluZXMucHVzaChmb3JtYXRFbWJlZGRpbmdSZXN1bHRzKHJlc3VsdHMuZW1iZWRkaW5nKSk7XG5cbiAgLy8gT3ZlcmFsbCBhc3Nlc3NtZW50XG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcbiAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgICAgICAgIE9WRVJBTEwgQVNTRVNTTUVOVCcpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcblxuICBjb25zdCByb3V0aW5nU2NvcmUgPSByZXN1bHRzLnJvdXRpbmcuYWNjdXJhY3k7XG4gIGNvbnN0IGVtYmVkZGluZ1Njb3JlID0gKFxuICAgIHJlc3VsdHMuZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSArXG4gICAgcmVzdWx0cy5lbWJlZGRpbmcuc2VhcmNoTVJSICtcbiAgICByZXN1bHRzLmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5XG4gICkgLyAzO1xuXG4gIGNvbnN0IG92ZXJhbGxTY29yZSA9IChyb3V0aW5nU2NvcmUgKyBlbWJlZGRpbmdTY29yZSkgLyAyO1xuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKGAgIFJvdXRpbmcgU2NvcmU6ICAgJHsocm91dGluZ1Njb3JlICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcbiAgbGluZXMucHVzaChgICBFbWJlZGRpbmcgU2NvcmU6ICR7KGVtYmVkZGluZ1Njb3JlICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcbiAgbGluZXMucHVzaChgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBgKTtcbiAgbGluZXMucHVzaChgICBPdmVyYWxsIFNjb3JlOiAgICR7KG92ZXJhbGxTY29yZSAqIDEwMCkudG9GaXhlZCgxKX0lYCk7XG4gIGxpbmVzLnB1c2goJycpO1xuXG4gIGlmIChvdmVyYWxsU2NvcmUgPj0gMC44KSB7XG4gICAgbGluZXMucHVzaCgnICDinJMgRVhDRUxMRU5UIC0gSGlnaGx5IHN1aXRhYmxlIGZvciBDbGF1ZGUgQ29kZSB3b3JrZmxvd3MnKTtcbiAgfSBlbHNlIGlmIChvdmVyYWxsU2NvcmUgPj0gMC42KSB7XG4gICAgbGluZXMucHVzaCgnICB+IEdPT0QgLSBTdWl0YWJsZSBmb3IgbW9zdCBDbGF1ZGUgQ29kZSB1c2UgY2FzZXMnKTtcbiAgfSBlbHNlIGlmIChvdmVyYWxsU2NvcmUgPj0gMC40KSB7XG4gICAgbGluZXMucHVzaCgnICB+IEFDQ0VQVEFCTEUgLSBNYXkgd29yayBidXQgY29uc2lkZXIgYWx0ZXJuYXRpdmVzJyk7XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnICDinJcgTkVFRFMgSU1QUk9WRU1FTlQgLSBDb25zaWRlciBkaWZmZXJlbnQgbW9kZWwgb3IgZmluZS10dW5pbmcnKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gbW9kZWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlTW9kZWxzKFxuICByZXN1bHRzMTogRnVsbEJlbmNobWFya1Jlc3VsdHMsXG4gIHJlc3VsdHMyOiBGdWxsQmVuY2htYXJrUmVzdWx0c1xuKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICAgICAgICAgIE1PREVMIENPTVBBUklTT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XG4gIGxpbmVzLnB1c2goJycpO1xuXG4gIGNvbnN0IG1ldHJpY3MgPSBbXG4gICAgeyBuYW1lOiAnUm91dGluZyBBY2N1cmFjeScsIHYxOiByZXN1bHRzMS5yb3V0aW5nLmFjY3VyYWN5LCB2MjogcmVzdWx0czIucm91dGluZy5hY2N1cmFjeSB9LFxuICAgIHsgbmFtZTogJ1NpbWlsYXJpdHkgRGV0ZWN0aW9uJywgdjE6IHJlc3VsdHMxLmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3ksIHYyOiByZXN1bHRzMi5lbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5IH0sXG4gICAgeyBuYW1lOiAnU2VhcmNoIE1SUicsIHYxOiByZXN1bHRzMS5lbWJlZGRpbmcuc2VhcmNoTVJSLCB2MjogcmVzdWx0czIuZW1iZWRkaW5nLnNlYXJjaE1SUiB9LFxuICAgIHsgbmFtZTogJ1NlYXJjaCBORENHJywgdjE6IHJlc3VsdHMxLmVtYmVkZGluZy5zZWFyY2hORENHLCB2MjogcmVzdWx0czIuZW1iZWRkaW5nLnNlYXJjaE5EQ0cgfSxcbiAgICB7IG5hbWU6ICdDbHVzdGVyIFB1cml0eScsIHYxOiByZXN1bHRzMS5lbWJlZGRpbmcuY2x1c3RlclB1cml0eSwgdjI6IHJlc3VsdHMyLmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IH0sXG4gICAgeyBuYW1lOiAnUm91dGluZyBMYXRlbmN5IChtcyknLCB2MTogcmVzdWx0czEucm91dGluZy5hdmdMYXRlbmN5TXMsIHYyOiByZXN1bHRzMi5yb3V0aW5nLmF2Z0xhdGVuY3lNcywgbG93ZXJCZXR0ZXI6IHRydWUgfSxcbiAgXTtcblxuICBsaW5lcy5wdXNoKGAkeydNZXRyaWMnLnBhZEVuZCgyNSl9ICR7cmVzdWx0czEubW9kZWwucGFkRW5kKDE1KX0gJHtyZXN1bHRzMi5tb2RlbC5wYWRFbmQoMTUpfSBXaW5uZXJgKTtcbiAgbGluZXMucHVzaCgn4pSAJy5yZXBlYXQoNzApKTtcblxuICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgIGNvbnN0IHZhbDEgPSBtLmxvd2VyQmV0dGVyID8gbS52MSA6IG0udjE7XG4gICAgY29uc3QgdmFsMiA9IG0ubG93ZXJCZXR0ZXIgPyBtLnYyIDogbS52MjtcblxuICAgIGxldCB3aW5uZXI6IHN0cmluZztcbiAgICBpZiAobS5sb3dlckJldHRlcikge1xuICAgICAgd2lubmVyID0gdmFsMSA8IHZhbDIgPyByZXN1bHRzMS5tb2RlbCA6IHZhbDIgPCB2YWwxID8gcmVzdWx0czIubW9kZWwgOiAndGllJztcbiAgICB9IGVsc2Uge1xuICAgICAgd2lubmVyID0gdmFsMSA+IHZhbDIgPyByZXN1bHRzMS5tb2RlbCA6IHZhbDIgPiB2YWwxID8gcmVzdWx0czIubW9kZWwgOiAndGllJztcbiAgICB9XG5cbiAgICBjb25zdCB2MVN0ciA9IG0ubG93ZXJCZXR0ZXIgPyB2YWwxLnRvRml4ZWQoMikgOiAodmFsMSAqIDEwMCkudG9GaXhlZCgxKSArICclJztcbiAgICBjb25zdCB2MlN0ciA9IG0ubG93ZXJCZXR0ZXIgPyB2YWwyLnRvRml4ZWQoMikgOiAodmFsMiAqIDEwMCkudG9GaXhlZCgxKSArICclJztcblxuICAgIGxpbmVzLnB1c2goYCR7bS5uYW1lLnBhZEVuZCgyNSl9ICR7djFTdHIucGFkRW5kKDE1KX0gJHt2MlN0ci5wYWRFbmQoMTUpfSAke3dpbm5lcn1gKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLy8gRXhwb3J0IGNvbnN0YW50cyBmb3IgZXh0ZXJuYWwgdXNlXG5leHBvcnQge1xuICBST1VUSU5HX1RFU1RfQ0FTRVMsXG4gIFNJTUlMQVJJVFlfVEVTVF9QQUlSUyxcbiAgU0VBUkNIX1RFU1RfQ0FTRVMsXG4gIENMVVNURVJfVEVTVF9DQVNFUyxcbn07XG4iXX0=