ng-easycommerce 0.0.653 → 0.0.655-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +6 -0
  2. package/bundles/ng-easycommerce.umd.js +96 -30
  3. package/bundles/ng-easycommerce.umd.js.map +1 -1
  4. package/bundles/ng-easycommerce.umd.min.js +1 -1
  5. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  6. package/esm2015/lib/core.consts.js +6 -1
  7. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +5 -4
  8. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +10 -4
  9. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +27 -2
  10. package/esm2015/lib/ec-component/product-ec/product-ec.component.js +1 -2
  11. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -4
  12. package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  13. package/esm2015/lib/services/cart.service.js +27 -12
  14. package/esm5/lib/core.consts.js +6 -1
  15. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +5 -4
  16. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +10 -4
  17. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +45 -2
  18. package/esm5/lib/ec-component/product-ec/product-ec.component.js +1 -2
  19. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -4
  20. package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  21. package/esm5/lib/services/cart.service.js +27 -12
  22. package/fesm2015/ng-easycommerce.js +73 -25
  23. package/fesm2015/ng-easycommerce.js.map +1 -1
  24. package/fesm5/ng-easycommerce.js +97 -31
  25. package/fesm5/ng-easycommerce.js.map +1 -1
  26. package/lib/core.consts.d.ts +5 -0
  27. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +2 -0
  28. package/lib/services/cart.service.d.ts +2 -2
  29. package/ng-easycommerce.metadata.json +1 -1
  30. package/package.json +1 -1
@@ -317,6 +317,11 @@ var Constants = /** @class */ (function () {
317
317
  * @example ['AR','ES','GB']
318
318
  */
319
319
  this.countries = [];
320
+ /**
321
+ * @description contiene un arreglo de string cuyo contenido son los codigos de los paises a excluir.
322
+ * @example ['GB']
323
+ */
324
+ this.excludedCountries = [];
320
325
  /**
321
326
  *
322
327
  * @param countries debe contener los codigos de los paises que se quiere mostrar
@@ -431,4 +436,4 @@ var Constants = /** @class */ (function () {
431
436
  return Constants;
432
437
  }());
433
438
  export { Constants };
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvY29yZS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFtQixhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBWXREO0lBRUksbUJBQW1CLFNBQTJCLEVBQVUsTUFBYyxFQUF5QixHQUFHO1FBQWxHLGlCQUF1RztRQUFwRixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBeUIsUUFBRyxHQUFILEdBQUcsQ0FBQTtRQUVqRixXQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxTQUFTLENBQUM7UUFDOUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFeEIseUJBQW9CLEdBQUcsSUFBSSxhQUFhLEVBQU8sQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxxQkFBZ0IsR0FBRyxVQUFDLE9BQU8sSUFBSyxPQUFBLFlBQVksR0FBRyxPQUFPLEdBQUcsU0FBUyxFQUFsQyxDQUFrQyxDQUFDO1FBRW5FLGtCQUFhLEdBQVcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxxQkFBZ0IsR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyRSxnRkFBZ0Y7UUFDeEUsWUFBTyxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLG1DQUFtQyxDQUFDLENBQUM7UUFDL0ksY0FBUyxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuSSxnQkFBVyxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLHFDQUFxQyxDQUFDLENBQUM7UUFDcEssV0FBTSxHQUFXLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUM7UUFDMUwsWUFBTyxHQUFXLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLENBQUE7UUFDbk0sb0JBQWUsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUM7UUFFbkosZ0JBQVcsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyRyxtQkFBYyxHQUFHLFVBQUMsTUFBVyxJQUFLLE9BQUEsS0FBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQXpCLENBQXlCLENBQUM7UUFDNUQsbUJBQWMsR0FBRyxjQUFNLE9BQUEsS0FBSSxDQUFDLFdBQVcsRUFBaEIsQ0FBZ0IsQ0FBQztRQUVoQyxZQUFPLEdBQVcsSUFBSSxDQUFDO1FBRXZCLFdBQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxzQ0FBc0MsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVuRiwyQkFBMkI7UUFDbkIsa0JBQWEsR0FBRyxJQUFJLENBQUE7UUFFckIscUJBQWdCLEdBQUc7WUFDdEIsSUFBSSxDQUFDLEtBQUksQ0FBQyxhQUFhO2dCQUFFLEtBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ3BGLE9BQU8sS0FBSSxDQUFDLGFBQWEsQ0FBQTtRQUM3QixDQUFDLENBQUE7UUFFTSxxQkFBZ0IsR0FBRyxVQUFBLE9BQU87WUFDN0IsS0FBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUE7WUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUE7UUFFTyxpQkFBWSxHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsRUFBMUcsQ0FBMEcsQ0FBQztRQUV4SSxlQUFVLEdBQUcsVUFBQyxHQUFHLElBQUssT0FBQSxLQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBbEIsQ0FBa0IsQ0FBQztRQUN6QyxpQkFBWSxHQUFHLFVBQUMsR0FBRyxJQUFLLE9BQUEsS0FBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQXBCLENBQW9CLENBQUM7UUFFN0M7Ozs7O1dBS0c7UUFDSCxxQkFBZ0IsR0FBRyxVQUFDLElBQUksRUFBRSxNQUFNLElBQUssT0FBQSxLQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFuQyxDQUFtQyxDQUFDO1FBRXpFOzs7O1dBSUc7UUFDSCxhQUFRLEdBQUcsVUFBQyxTQUFrQixJQUFLLE9BQUEsS0FBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUksQ0FBQyxTQUFTLElBQUksS0FBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBdEcsQ0FBc0csQ0FBQztRQUMxSSxtQkFBYyxHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSSxDQUFDLFNBQVMsSUFBSSxLQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBbkYsQ0FBbUYsQ0FBQztRQUMzRyxrQkFBYSxHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSSxDQUFDLFNBQVMsSUFBSSxLQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBbEYsQ0FBa0YsQ0FBQztRQUV6Ryx5QkFBb0IsR0FBRyxjQUFNLE9BQUEsYUFBYSxFQUFiLENBQWEsQ0FBQztRQUUzQyxxQkFBZ0IsR0FBRyxjQUFNLE9BQUEsVUFBVSxFQUFWLENBQVUsQ0FBQztRQUVwQyxlQUFVLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEVBQVosQ0FBWSxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxXQUFXLEVBQWhCLENBQWdCLENBQUM7UUFFeEMsdUJBQWtCLEdBQUcsY0FBYyxPQUFBLEtBQUksQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLEtBQUksQ0FBQyxlQUFlLENBQUMsRUFBdEQsQ0FBc0QsQ0FBQztRQUUxRixpQ0FBaUM7UUFDakMsZ0RBQWdEO1FBRWhELGNBQVMsR0FBRztZQUNSLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ25DLEtBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDbEQ7WUFDRCxPQUFPLEtBQUksQ0FBQyxNQUFNLENBQUE7UUFDdEIsQ0FBQyxDQUFBO1FBRUQsdUJBQWtCLEdBQUc7WUFDakIsT0FBTyxLQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3pDLENBQUMsQ0FBQTtRQUVNLGNBQVMsR0FBRyxVQUFBLE1BQU07WUFDckIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ3pDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN4QyxLQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUN4QixDQUFDLENBQUE7UUFFRCxlQUFVLEdBQUc7WUFDVCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQyxLQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ3BEO1lBQ0QsT0FBTyxLQUFJLENBQUMsT0FBTyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQTtRQUVNLGVBQVUsR0FBRyxVQUFBLE9BQU87WUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzNDLEtBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQzFCLENBQUMsQ0FBQTtRQUVELGVBQVUsR0FBRyxjQUFNLE9BQUEsS0FBSSxDQUFDLE9BQU8sRUFBWixDQUFZLENBQUM7UUFFaEMsbUJBQWMsR0FBRztZQUNiLE9BQU87Z0JBQ0gsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLGFBQWEsRUFBRSxvQkFBb0I7Z0JBQ25DLFVBQVUsRUFBRSxVQUFVO2FBQ3pCLENBQUE7UUFDTCxDQUFDLENBQUE7UUFFRCxpQkFBWSxHQUFHLFVBQUMsSUFBSSxJQUFLLE9BQUEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBbkQsQ0FBbUQsQ0FBQztRQUU3RTs7V0FFRztRQUVILFdBQU0sR0FBRyxjQUFNLE9BQUEsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQXZCLENBQXVCLENBQUM7UUFFdkMsc0JBQWlCLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksT0FBTyxFQUFyQyxDQUFxQyxDQUFDO1FBRWhFLGNBQVMsR0FBRyxVQUFDLEtBQUssSUFBSyxPQUFBLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBdEQsQ0FBc0QsQ0FBQztRQUU5RTs7V0FFRztRQUVILG9CQUFlLEdBQUcsVUFBQyxLQUFhLElBQUssT0FBQSxLQUFLLElBQUksS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQWhDLENBQWdDLENBQUM7UUFFdEUsdUJBQWtCLEdBQUcsVUFBQyxLQUFhO1lBQy9CLElBQU0sS0FBSyxHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNaLEtBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNoQztRQUNMLENBQUMsQ0FBQTtRQUVELHFCQUFnQixHQUFHLGNBQWdCLE9BQUEsS0FBSSxDQUFDLE1BQU0sRUFBWCxDQUFXLENBQUM7UUFJL0M7Ozs7O1dBS0c7UUFDSCxrQkFBYSxHQUFHLFVBQUMsTUFBVyxFQUFFLElBQVksRUFBRSxPQUFlO1lBQ3ZELElBQUk7Z0JBQ0EsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNwQyxPQUFPLENBQUMsSUFBSSxDQUNSLFFBQVEsR0FBRyxDQUFDO3dCQUNSLENBQUMsQ0FBQyxJQUFJO3dCQUNOLENBQUMsQ0FBQyxPQUFPLENBQ2hCLENBQUM7b0JBQ0YsUUFBUSxFQUFFLENBQUM7aUJBQ2Q7Z0JBQ0QsT0FBTyxPQUFPLENBQUM7YUFDbEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzlEO1FBRUwsQ0FBQyxDQUFDO1FBRUY7Ozs7OztXQU1HO1FBQ0gsaUNBQTRCLEdBQUcsVUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQWdCO1lBQWhCLDBCQUFBLEVBQUEsZ0JBQWdCO1lBQ3ZELElBQUk7Z0JBQ0EsSUFBSSxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDN0MsSUFBSSxLQUFLLElBQUksQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2xDLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtvQkFDbkIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQztpQkFDbkQ7Z0JBQ0QsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2FBQ3JDO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM3RTtRQUNMLENBQUMsQ0FBQTtRQXNCRDs7O1dBR0c7UUFDSSxhQUFRLEdBQW1CO1lBQzlCLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEdBQUc7WUFDWCxRQUFRLEVBQUUsTUFBTTtZQUNoQixjQUFjLEVBQUUsS0FBSztTQUN4QixDQUFBO1FBRUQ7O1dBRUc7UUFDSSx1QkFBa0IsR0FBcUI7WUFDMUM7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLGNBQWMsRUFBRSxLQUFLO2FBRXhCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3hCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3hCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3hCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3hCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLElBQUk7Z0JBQ1osUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3hCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLGNBQWMsRUFBRSxJQUFJO2FBQ3ZCO1NBQ0osQ0FBQTtRQUVNLDBCQUFxQixHQUFHLFVBQUMsa0JBQW9DO1lBQ2hFLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUNqRCxDQUFDLENBQUE7UUFHRDs7Ozs7V0FLRztRQUNJLDhCQUF5QixHQUFHLFVBQUMsZ0JBQThCLEVBQUUsVUFBMEI7O1lBQzFGLElBQUksWUFBWSxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUE3QixDQUE2QixDQUFDLENBQUE7WUFDdEYsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsWUFBWSxDQUFDLE1BQU0sR0FBRyxPQUFBLFVBQVUsMENBQUUsTUFBTSxLQUFJLFlBQVksQ0FBQyxNQUFNLENBQUE7Z0JBQy9ELFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBQSxVQUFVLDBDQUFFLElBQUksS0FBSSxZQUFZLENBQUMsSUFBSSxDQUFBO2dCQUN6RCxZQUFZLENBQUMsUUFBUSxHQUFHLE9BQUEsVUFBVSwwQ0FBRSxRQUFRLEtBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQTtnQkFDckUsWUFBWSxDQUFDLGNBQWMsR0FBRyxPQUFBLFVBQVUsMENBQUUsY0FBYyxLQUFJLFlBQVksQ0FBQyxjQUFjLENBQUE7YUFDMUY7WUFDRCxvRUFBb0U7WUFDcEU7O2dCQUVJO1FBQ1IsQ0FBQyxDQUFBO1FBRUQ7Ozs7Ozs7V0FPRztRQUNJLGdCQUFXLEdBQUcsVUFBQyxnQkFBOEIsRUFBRSxVQUEyQjtZQUM3RSxLQUFJLENBQUMsUUFBUSxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUF6QyxDQUF5QyxDQUFDLElBQUksS0FBSSxDQUFDLFFBQVEsQ0FBQTtZQUM5RyxVQUFVLElBQUksQ0FBQyxLQUFJLENBQUMsUUFBUSx5QkFBUSxLQUFJLENBQUMsUUFBUSxHQUFLLFVBQVUsQ0FBRSxDQUFDLENBQUE7WUFDbkUsT0FBTyxLQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUMsQ0FBQztRQTBCSyx3QkFBbUIsR0FBRyxVQUFBLGFBQWE7WUFDdEMsSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJO2dCQUMzQyxLQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRWhFLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQ2xELEtBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXRFLElBQUksYUFBYSxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsWUFBWTtnQkFDcEQsS0FBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUUxRSxPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDLENBQUE7UUFDRDs7O1dBR0c7UUFDSyxtQkFBYyxHQUFvQixFQUFFLENBQUE7UUFFNUM7OztXQUdHO1FBQ0ksc0JBQWlCLEdBQUcsVUFBQyxPQUF3QjtZQUNoRCxLQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUNsQyxDQUFDLENBQUE7UUFFTSxzQkFBaUIsR0FBRyxjQUF1QixPQUFBLEtBQUksQ0FBQyxjQUFjLEVBQW5CLENBQW1CLENBQUE7UUFFckU7OztXQUdHO1FBQ0ssaUJBQVksR0FBaUI7WUFDakMsY0FBYyxFQUFFLEVBQUU7WUFDbEIsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDO1NBQ2pFLENBQUE7UUFFTSxvQkFBZSxHQUFHLFVBQUMsWUFBMEI7WUFDaEQsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1lBQ25HLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNsRixDQUFDLENBQUE7UUFFTSxvQkFBZSxHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBekIsQ0FBeUIsQ0FBQTtRQUV4RDs7O1dBR0c7UUFDSyxjQUFTLEdBQWEsRUFBRSxDQUFBO1FBRWhDOzs7OztXQUtHO1FBQ0ksaUJBQVksR0FBRyxVQUFDLFNBQW1CLElBQUssT0FBQSxLQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBMUIsQ0FBMEIsQ0FBQztRQUVuRSxpQkFBWSxHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsU0FBUyxFQUFkLENBQWMsQ0FBQztRQUczQzs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUNLLG9DQUErQixHQUFvQztZQUN2RSxJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxPQUFPO1lBQ2Isa0JBQWtCLEVBQUUsS0FBSztZQUN6QixZQUFZLEVBQUUsSUFBSTtTQUNyQixDQUFBO1FBRUQsdUNBQWtDLEdBQUcsVUFBQyxLQUFzQztZQUN4RSxLQUFJLENBQUMsK0JBQStCLHlCQUM3QixLQUFJLENBQUMsK0JBQStCLEdBQ3BDLEtBQUssQ0FDWCxDQUFBO1FBQ0wsQ0FBQyxDQUFBO1FBRUQsdUNBQWtDLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQywrQkFBK0IsRUFBcEMsQ0FBb0MsQ0FBQTtRQUcvRTs7O1dBR0c7UUFDSyxnQkFBVyxHQUFhLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUVqRTs7Ozs7O1dBTUc7UUFDSCxtQkFBYyxHQUFHLFVBQUMsV0FBK0I7WUFBL0IsNEJBQUEsRUFBQSxlQUF5QixLQUFLLENBQUM7WUFBSyxPQUFBLEtBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVztRQUE5QixDQUE4QixDQUFDO1FBRXJGLG1CQUFjLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxXQUFXLEVBQWhCLENBQWdCLENBQUM7UUFFaEMsdUJBQWtCLEdBQTZEO1lBQ25GLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixFQUFFO1lBQ3pFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixFQUFFO1lBQ3pFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxRQUFRLEVBQUUsOEJBQThCLEVBQUU7WUFDekcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRTtZQUMvRixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixFQUFFO1lBQ2xGLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixFQUFFO1lBQ3pFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsOEJBQThCLEVBQUU7U0FDckYsQ0FBQztJQXJjb0csQ0FBQztJQWlNdkc7Ozs7Ozs7T0FPRztJQUNILCtCQUFXLEdBQVgsVUFBWSxPQUFlLEVBQUUsUUFBZ0I7UUFDekMsSUFBSSxNQUFNLEdBQVksSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSztnQkFDakMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFFLE1BQU0sR0FBRyxLQUFLLENBQUE7WUFDOUYsQ0FBQyxDQUFDLENBQUE7U0FDTDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFzR0Q7Ozs7Ozs7OztPQVNHO0lBQ0ksNkJBQVMsR0FBaEIsVUFDSSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQVcsRUFDWCxNQUFXLEVBQ1gsYUFBcUI7UUFGckIsdUJBQUEsRUFBQSxXQUFXO1FBQ1gsdUJBQUEsRUFBQSxXQUFXO1FBQ1gsOEJBQUEsRUFBQSxxQkFBcUI7UUFHckIsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBbEksQ0FBa0ksQ0FBQztZQUMzSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFwRSxDQUFvRSxDQUFDLENBQUE7SUFFcEcsQ0FBQztJQUFBLENBQUM7SUEwSEYsd0NBQW9CLEdBQXBCLFVBQXFCLFdBQW1CO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO0lBQ3BJLENBQUM7O2dCQXpjNkIsZ0JBQWdCO2dCQUFrQixNQUFNO2dEQUFHLE1BQU0sU0FBQyxLQUFLOzs7SUFGNUUsU0FBUztRQUhyQixVQUFVLENBQUM7WUFDUixVQUFVLEVBQUUsTUFBTTtTQUNyQixDQUFDO1FBRzJFLFdBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO09BRjdFLFNBQVMsQ0E0Y3JCO29CQTVkRDtDQTRkQyxBQTVjRCxJQTRjQztTQTVjWSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEN1cnJlbmN5Q29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2N1cnJlbmN5Q29uZmlnJztcbmltcG9ydCB7IERlZmF1bHRGaWx0ZXIsIEZpbHRlckNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXInO1xuaW1wb3J0IHsgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wYXJhbXNJbnRlcmZhY2VzL3BhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQnO1xudHlwZSBjdXJyZW5jeVR5cGUgPSAnRVVSJyB8ICdBUkcnIHwgJ1VTRCcgfCAnUFlHJyB8ICdQRU4nIHwgJ1NFSycgfCAnQ1VTVE9NJztcbnR5cGUgcG9zaXRpb25UeXBlID0gJ0wnIHwgJ1InO1xudHlwZSBjaGFubmVsVHlwZXMgPSAnYjJiJyB8ICdiMmIyYycgfCAnYjJjJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb25zdGFudHMge1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgQEluamVjdCgnZW52JykgcHJpdmF0ZSBlbnYpIHsgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IENIQU5ORUwgPSAnQ0hBTk5FTCc7XG4gICAgcHVibGljIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxhbnk+KCk7XG4gICAgcHVibGljIGNoYW5uZWxDb25maWckID0gdGhpcy5jaGFubmVsQ29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ0FQSSA9IChjaGFubmVsKSA9PiAnL3Nob3AtYXBpLycgKyBjaGFubmVsICsgJ2NoYW5uZWwnO1xuXG4gICAgcHJpdmF0ZSBicm93c2VyV2luZG93OiBvYmplY3QgPSB3aW5kb3cgfHwge307XG4gICAgcHJpdmF0ZSBicm93c2VyV2luZG93RW52OiBvYmplY3QgPSB0aGlzLmJyb3dzZXJXaW5kb3dbJ19fZW52J10gfHwge307XG5cbiAgICAvLyAgICAgcHJpdmF0ZSB1cmxCYXNlOiBzdHJpbmcgPSAnaHR0cDovL3Rlc3RpbmcuYmFja2VuZC5lYXN5Y29tbWVyY2V0ZWNoLmNvbS8nO1xuICAgIHByaXZhdGUgdXJsQmFzZTogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52WydhcGlVcmwnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYXBpVXJsJ10gOiAodGhpcy5lbnYuYXBpVXJsIHx8ICdodHRwOi8vYmFja2VuZC5lYXN5Y29tbWVyY2UuZGV2cC8nKTtcbiAgICBwcml2YXRlIHVybEFzc2V0czogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxBc3NldHMnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsQXNzZXRzJ10gOiAodGhpcy5lbnYudXJsQXNzZXRzIHx8IHRoaXMudXJsQmFzZSk7XG4gICAgcHJpdmF0ZSB1cmxGcm9udGVuZDogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxGcm9udGVuZCddID8gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxGcm9udGVuZCddIDogKHRoaXMuZW52LnVybEZyb250ZW5kIHx8ICdodHRwczovL2VsZGVuLmVhc3ljb21tZXJjZXRlY2guY29tLycpO1xuICAgIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSkgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSkgOiB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2xvY2FsZSddID8gdGhpcy5icm93c2VyV2luZG93RW52Wydsb2NhbGUnXSA6ICh0aGlzLmVudi5sb2NhbGUgfHwgJ2VzX0FSJyk7XG4gICAgcHJpdmF0ZSBjaGFubmVsOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUwpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSA6IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnY2hhbm5lbCddID8gdGhpcy5icm93c2VyV2luZG93RW52WydjaGFubmVsJ10gOiAodGhpcy5lbnYuY2hhbm5lbCB8fCAnbWlub3Jpc3RhJylcbiAgICBwcml2YXRlIGJsb2Nrc0NhY2hlVGltZTogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52WydibG9ja3NDYWNoZVRpbWUnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYmxvY2tzQ2FjaGVUaW1lJ10gOiAodGhpcy5lbnYuYmxvY2tzQ2FjaGVUaW1lIHx8IG51bGwpO1xuXG4gICAgcHJpdmF0ZSBtb2RhbENvbmZpZyA9IHsgdGl0bGU6ICdFeGFtcGxlJywgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC1kaWFsb2ctY2VudGVyZWQnLCBrZXlib2FyZDogZmFsc2UgfTtcbiAgICBzZXRNb2RhbENvbmZpZyA9IChjb25maWc6IGFueSkgPT4gdGhpcy5tb2RhbENvbmZpZyA9IGNvbmZpZztcbiAgICBnZXRNb2RhbENvbmZpZyA9ICgpID0+IHRoaXMubW9kYWxDb25maWc7XG5cbiAgICBwcml2YXRlIHZlcnNpb246IHN0cmluZyA9ICd2MSc7XG5cbiAgICBwcml2YXRlIHJvdXRlcyA9IFsvXmhvbWUkL2csIC9eKFxcLz8pY29sbGVjdGlvbihcXC8/KShbXFx3XFwuXFwvXFw/XSopJC9nLCAvXmNvbnRhY3QkL2ddO1xuXG4gICAgLyogR2V0IHJpZCBvZiB0aGlzIEFTQVAhICovXG4gICAgcHJpdmF0ZSBtYXN0ZXJDaGFubmVsID0gbnVsbFxuXG4gICAgcHVibGljIGdldE1hc3RlckNoYW5uZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tYXN0ZXJDaGFubmVsKSB0aGlzLm1hc3RlckNoYW5uZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTUFTVEVSX0NIQU5ORUwnKVxuICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJDaGFubmVsXG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hc3RlckNoYW5uZWwgPSBjaGFubmVsID0+IHtcbiAgICAgICAgdGhpcy5tYXN0ZXJDaGFubmVsID0gY2hhbm5lbFxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTUFTVEVSX0NIQU5ORUwnLCBjaGFubmVsKVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcm9kdWN0aW9uID0gKCkgPT4gdGhpcy5icm93c2VyV2luZG93RW52Wydwcm9kdWN0aW9uJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3Byb2R1Y3Rpb24nXSA6ICh0aGlzLmVudi5wcm9kdWN0aW9uIHx8IGZhbHNlKTtcblxuICAgIHNldFVybEJhc2UgPSAodXJsKSA9PiB0aGlzLnVybEJhc2UgPSB1cmw7XG4gICAgc2V0VXJsQXNzZXRzID0gKHVybCkgPT4gdGhpcy51cmxBc3NldHMgPSB1cmw7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbmV4dCBGdW5jdGlvbiB0byBleGVjdXRlXG4gICAgICogQHBhcmFtIHBhcmFtcyBUaGF0IGZ1bmN0aW9uIG5lZWRzXG4gICAgICpcbiAgICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiBwYXNzZWQgYXMgcGFyYW1zLCBpZiB0aGUgZnJvbnRlbmQgaXMgaW4gcHJvZHVjdGlvbiBtb2RlXG4gICAgICovXG4gICAgb25seUlmUHJvZHVjdGlvbiA9IChuZXh0LCBwYXJhbXMpID0+IHRoaXMuaXNQcm9kdWN0aW9uKCkgJiYgbmV4dChwYXJhbXMpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERldnVlbHZlIGxhIHVybCBiYXNlIGRvbmRlIHNlIGFsb2phbiBsb3MgYXJjaGl2b3MgbXVsdGltZWRpYVxuICAgICAqIEBwYXJhbSBwb3N0TWVkaWEgY2FycGV0YSBkb25kZSBzZSBndWFyZGFuIGxvcyBhcmNoaXZvc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgbWVkaWFVcmwgPSAocG9zdE1lZGlhPzogc3RyaW5nKSA9PiB0aGlzLnVybEFzc2V0cyArICh0aGlzLnVybEFzc2V0cyA9PSB0aGlzLnVybEJhc2UgPyAnbWVkaWEvJyA6ICcnKSArIChwb3N0TWVkaWEgPyBwb3N0TWVkaWEgOiBcImltYWdlL1wiKTtcbiAgICBtZWRpYUJhbm5lclVybCA9ICgpID0+IHRoaXMudXJsQXNzZXRzICsgKHRoaXMudXJsQXNzZXRzID09IHRoaXMudXJsQmFzZSA/ICdtZWRpYS8nIDogJycpICsgXCJiYW5uZXItaW1hZ2UvXCI7XG4gICAgbWVkaWFTdG9yZVVybCA9ICgpID0+IHRoaXMudXJsQXNzZXRzICsgKHRoaXMudXJsQXNzZXRzID09IHRoaXMudXJsQmFzZSA/ICdtZWRpYS8nIDogJycpICsgXCJzdG9yZS1pbWFnZS9cIjtcblxuICAgIGdldFByb2R1Y3RzTGlzdFJvdXRlID0gKCkgPT4gJ2NvbGxlY3Rpb24vJztcblxuICAgIGdldFNlY3Rpb25zUm91dGUgPSAoKSA9PiAnc2VjdGlvbi8nO1xuXG4gICAgZ2V0VXJsQmFzZSA9ICgpID0+IHRoaXMudXJsQmFzZTtcbiAgICBnZXRVcmxGcm9udGVuZCA9ICgpID0+IHRoaXMudXJsRnJvbnRlbmQ7XG5cbiAgICBnZXRCbG9ja3NDYWNoZVRpbWUgPSAoKTogbnVtYmVyID0+IHRoaXMuYmxvY2tzQ2FjaGVUaW1lICYmIHBhcnNlSW50KHRoaXMuYmxvY2tzQ2FjaGVUaW1lKTtcblxuICAgIC8vIGdldExvY2FsZSA9ICgpID0+IHRoaXMubG9jYWxlO1xuICAgIC8vIHNldExvY2FsZSA9IChsb2NhbGUpID0+IHRoaXMubG9jYWxlID0gbG9jYWxlO1xuXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4ge1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZVxuICAgIH1cblxuICAgIGdldExvY2FsZVRyYW5zbGF0ZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxlKCkuc3BsaXQoJ18nKVswXVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2NhbGUgPSBsb2NhbGUgPT4ge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPQ0FMRSwgbG9jYWxlKVxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobG9jYWxlLnNwbGl0KCdfJylbMF0pXG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlXG4gICAgfVxuXG4gICAgZ2V0Q2hhbm5lbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsXG4gICAgfVxuXG4gICAgcHVibGljIHNldENoYW5uZWwgPSBjaGFubmVsID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DSEFOTkVMLCBjaGFubmVsKVxuICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsXG4gICAgfVxuXG4gICAgZ2V0VmVyc2lvbiA9ICgpID0+IHRoaXMudmVyc2lvbjtcblxuICAgIGxvZ2luRXh0cmFEYXRhID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xpZW50X2lkOiAnZGVtb19jbGllbnQnLFxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogJ3NlY3JldF9kZW1vX2NsaWVudCcsXG4gICAgICAgICAgICBncmFudF90eXBlOiAncGFzc3dvcmQnXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0NvbGxlY3Rpb24gPSAocGF0aCkgPT4gKC9eKFxcLz8pY29sbGVjdGlvbihcXC8/KShbXFx3XFwuXFwvXFw/XSopJC9nKS50ZXN0KHBhdGgpO1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0aWVzXG4gICAgICovXG5cbiAgICBtb2JpbGUgPSAoKSA9PiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc1MDtcblxuICAgIHN0cmljdFR5cGVDaGFubmVsID0gKCkgPT4gdGhpcy5lbnYuc3RyaWN0VHlwZUNoYW5uZWwgfHwgJ2IyYjJjJztcblxuICAgIHRvRGVjaW1hbCA9ICh0b3RhbCkgPT4gKHRvdGFsIC0gTWF0aC5mbG9vcih0b3RhbCkgPT0gMCkgPyB0b3RhbCAvIDEwMCA6IHRvdGFsO1xuXG4gICAgLyoqXG4gICAgICogRWxlbWVudG9zIHBhcmEgbWFuZWpvIGRlIGxpc3RhIGRlIHJ1dGFzIHJldXRpbGl6YWJsZXNcbiAgICAgKi9cblxuICAgIGFkZFJvdXRlVG9SZXVzZSA9IChyb3V0ZTogUmVnRXhwKSA9PiByb3V0ZSAmJiB0aGlzLnJvdXRlcy5wdXNoKHJvdXRlKTtcblxuICAgIHJlbW92ZVJvdXRlVG9SZXVzZSA9IChyb3V0ZTogUmVnRXhwKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb3V0ZXMuaW5kZXhPZihyb3V0ZSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um91dGVzVG9SZXVzZSA9ICgpOiBSZWdFeHBbXSA9PiB0aGlzLnJvdXRlcztcblxuXG5cbiAgICAvKipcbiAgICAgKiAgQHB1YmxpYyBlamVtcGxvIGRlIHVzbyA8aW1nICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnN0cy5nZXRSYXRpbmdTdGFyKHByb2R1Y3QucmF0aW5nLCdhc3NldHMvaW1hZ2VzL3N0YXIucG5nJywnYXNzZXRzL2ltYWdlcy9ub3RTdGFyLnBuZycpXCIgW3NyY109XCJpdGVtXCI+XG4gICAgICogIEBkZXNjcmlwdGlvbiBmdW5jaW9uIHF1ZSBkYWRvIHVuIHZhbG9yIGVudHJlIDEgLi4gNSwgeSBzdGFyOiBub3RTdGFyOlxuICAgICAqICAgICAgKGRlYmVuIHNlciBlbCBwYXRoIGRlbCBhcmNoaXZvIGxvY2FsIGEgbGEgaW1wbGVtZW50YWNpb24pLlxuICAgICAqICAgICAgcmV0b3JuYSB1biBhcnJlZ2xvIGNvbiBjb24gbGEgdmFsb3JhY2lvbiBjb3JyZXNwb25kaWVudGUuXG4gICAgICovXG4gICAgZ2V0UmF0aW5nU3RhciA9IChyYXRpbmc6IGFueSwgc3RhcjogU3RyaW5nLCBub3RTdGFyOiBTdHJpbmcpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB1cmxTdGFyID0gW107XG4gICAgICAgICAgICBsZXQgY2FudFN0YXIgPSBOdW1iZXIocmF0aW5nKSB8fCAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDU7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICB1cmxTdGFyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGNhbnRTdGFyID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5vdFN0YXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNhbnRTdGFyLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsU3RhcjtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJnZXRSYXRpbmdTdGFyIHByb2R1am8gdW4gZXJyb3IgLT4gXCIsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBAcHVibGljIGVqZW1wbG8gZGUgdXNvIChrZXlwcmVzcyk9XCJpbnB1dFZhbGlkYXRpb25CeUV4cHJlc3Npb25zKCRldmVudCwnWzAtOV17MSw5fScpXCIgZW4gZWwgRE9NLlxuICAgICAqICBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgZGFkbyB1biBtYW5lamFuZG9yIGRlIGV2ZW50bywgeSB1bmEgZXhwcmVzaW9uIHJlZ3VsYXIgZXN0YSBlc1xuICAgICAqICAgICAgICAgIGV2YWx1YWRhIHNvYnJlIGxvcyB2YWxvcmVzIHF1ZSBlbCBtYW5lamFkb3IgZGUgZXZlbnRvcyBub3MgZW52aWEuXG4gICAgICogICAgICAgICAgRW4gZWwgY2FzbyBlbiBlbCBxdWUgc2UgZW52aWUgZWwgcGFyYW1ldHJvICdjb25kaXRpb24nIGVzdGUgcHVlZGUgc2VyIHBhcmFcbiAgICAgKiAgICAgICAgICBhbnVsYXIgZWwgZXZlbnRvIGNvbW8gY29uZGljaW9uIGFkaWNpb25hbCBhIGxhIGV2YWx1YWNpb24gZGUgbGEgZW50cmFkYS5cbiAgICAgKi9cbiAgICBpbnB1dFZhbGlkYXRpb25CeUV4cHJlc3Npb25zID0gKGUsIHBhdHJvbiwgY29uZGl0aW9uID0gbnVsbCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHRlY2xhID0gKGRvY3VtZW50KSA/IGUua2V5Q29kZSA6IGUud2hpY2g7XG4gICAgICAgICAgICBpZiAodGVjbGEgPT0gOCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBsZXQgcGF0cm9uUmVnID0gbmV3IFJlZ0V4cChwYXRyb24pXG4gICAgICAgICAgICBsZXQgdGVjbGFfZmluYWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRlY2xhKTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXRyb25SZWcudGVzdCh0ZWNsYV9maW5hbCkgJiYgY29uZGl0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhdHJvblJlZy50ZXN0KHRlY2xhX2ZpbmFsKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMgcHJvZHVqbyB1biBlcnJvciAtPiBcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZWVkbGVzIChhZ3VqYXMpIG9iamVjdCBjb24gY2xhdmVzIHZhbG9yIGEgZmlsdHJhclxuICAgICAqIEBwYXJhbSBoYXlzdGFjayAocGFqYXIpIG9iamVjdG8gZW4gZWwgcXVlIGJ1c2NhclxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIGZ1bmNpb24gcXVlIGJ1c2NhIGVuIGVsIGhheXN0YWNrIChwYWphcikgdG9kb3MgbG9zIG9iamV0b3MgcXVlIGNvbnRlbnRhblxuICAgICAqIHRvZGFzIGxhcyBjbGF2ZXMgZGUgbG9zIG5lZWRsZXMoYWd1amFzKSBxdWUgY29udGVuZ2FuIGVsIG1pc21vIHZhbG9yXG4gICAgICovXG4gICAgY29udGFpbnNBbGwobmVlZGxlczogb2JqZWN0LCBoYXlzdGFjazogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgICAgIGlmICghIW5lZWRsZXMgJiYgISFoYXlzdGFjaykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMobmVlZGxlcykuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoaGF5c3RhY2suaGFzT3duUHJvcGVydHkodmFsdWVbMF0pICYmIGhheXN0YWNrW3ZhbHVlWzBdXSA9PSB2YWx1ZVsxXSkpIHJlc3VsdCA9IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGllZGFkIHF1ZSBzZSB1dGlsaXphIHBhcmEgdG9tYXIgY29tbyBjb25maWd1cmFjacOzbiBwYXJhIGVsIHRpcG8gZGUgbW9uZWRhIHF1ZSBzZSB1dGlsaXphIGVuIGVsIHNpdGlvLlxuICAgICAqIEVzdG9zIHZhbG9yZXMgc29uIHV0aWxpemFkb3MgcGFyYSBlbCBwaXBlIGN1cnJlbmN5UHJpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVuY3k6IEN1cnJlbmN5Q29uZmlnID0ge1xuICAgICAgICBjb2RlOiAnQVJHJyxcbiAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFycmVnbG8gZGUgdmFsb3JlcyB1c2Fkb3MgcGFyYSBlbCBwaXBlIGN1cnJlbmN5UHJpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnRVVSJyxcbiAgICAgICAgICAgIHN5bWJvbDogJ+KCrCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1JpZ2h0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdBUkcnLFxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdBUlMnLFxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdVU0QnLFxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdQWUcnLFxuICAgICAgICAgICAgc3ltYm9sOiAnR3MuJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ1BFTicsXG4gICAgICAgICAgICBzeW1ib2w6ICdTLycsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdTRUsnLFxuICAgICAgICAgICAgc3ltYm9sOiAnU0VLJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnUmlnaHQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IHRydWVcbiAgICAgICAgfSxcbiAgICBdXG5cbiAgICBwdWJsaWMgc2V0Q3VycmVuY3lUeXBlQ29uZmlnID0gKGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbmN5VHlwZUNvbmZpZyA9IGN1cnJlbmN5VHlwZUNvbmZpZztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWVtcGxhemEgbG9zIHZhbG9yZXMgZGUgdW5hIG1vbmVkYS5cbiAgICAgKiBAcGFyYW0gY3VycmVuY3lUeXBlRmluZCBUaXBvIGRlIGN1cnJlbmN5IHF1ZSBzZSBkZXNlYSBtb2RpZmljYXJcbiAgICAgKiBAcGFyYW0gY3VzdG9tVHlwZSBMb3MgbnVldm9zIHZhbG9yZXMuIFRvZGFzIGxhcyBrZXkgc29uIG9wY2lvbmFsZXNcbiAgICAgKiBAZXhhbXBsZSBjdXN0b21UeXBlID0geyBjb2RlOiAnQVJHJywgc3ltYm9sOiAnJCcsIHBvc2l0aW9uOiAnTGVmdCcgLCB3aXRob3V0RGVjaW1hbDogZmFsc2UgfVxuICAgICAqL1xuICAgIHB1YmxpYyByZXBsYWNlQ3VycmVuY3lUeXBlQ29uZmlnID0gKGN1cnJlbmN5VHlwZUZpbmQ6IGN1cnJlbmN5VHlwZSwgY3VzdG9tVHlwZTogQ3VycmVuY3lDb25maWcpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbmN5VHlwZSA9IHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLmZpbmQodHlwZSA9PiB0eXBlLmNvZGUgPT0gY3VycmVuY3lUeXBlRmluZClcbiAgICAgICAgaWYgKGN1cnJlbmN5VHlwZSkge1xuICAgICAgICAgICAgY3VycmVuY3lUeXBlLnN5bWJvbCA9IGN1c3RvbVR5cGU/LnN5bWJvbCB8fCBjdXJyZW5jeVR5cGUuc3ltYm9sXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUuY29kZSA9IGN1c3RvbVR5cGU/LmNvZGUgfHwgY3VycmVuY3lUeXBlLmNvZGVcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS5wb3NpdGlvbiA9IGN1c3RvbVR5cGU/LnBvc2l0aW9uIHx8IGN1cnJlbmN5VHlwZS5wb3NpdGlvblxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLndpdGhvdXREZWNpbWFsID0gY3VzdG9tVHlwZT8ud2l0aG91dERlY2ltYWwgfHwgY3VycmVuY3lUeXBlLndpdGhvdXREZWNpbWFsXG4gICAgICAgIH1cbiAgICAgICAgLy9SZXZlZXIgZW4gZWwgZnV0dXJvIHNpIHNlIGVtcGllemFuIGEgYWdyZWdhciBvdHJvIHRpcG9zIGRlIG1vbmVkYXNcbiAgICAgICAgLyogZWxzZXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLnB1c2goey4uLmN1c3RvbVR5cGUgfSlcbiAgICAgICAgfSAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgRGVmaW5pciBlbCBjb2RlIGRlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgcXVpZXJhIHV0aWxpemFyLlxuICAgICAqIFNpIGVsIHRpcG8gZXMgQ1VTVE9NIHNlIHRvbWFuIGxvcyB2YWxvcmVzIGRlbCBzZWd1bmRvIHBhcmFtZXRybyBkb25kZSBzZSBwdWVkZSBkZWZpbmlyIGxhIHNpbWJvbG9nw61hIHkgcG9zZXNpw7NuIHF1ZSBzZSBxdWllcmEuXG4gICAgICogQHBhcmFtIGN1c3RvbVR5cGUgRm9ybWF0byBkZWwgcGFyw6FtZXRybyBlamVtcGxvIHsgY29kZTogJ0FSRycsIHN5bWJvbDogJyQnLCBwb3NpdGlvbjogJ0wnICwgd2l0aG91dERlY2ltYWxzOiBmYWxzZSB9ICxcbiAgICAgKiB0b2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzIHkgcG9yIGRlZmVjdG8gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIGVqZW1wbG8uXG4gICAgICogQHJldHVybnMgc2UgcmV0b3JuYSBsYSBjb25maWd1cmFjacOzbiBxdWUgc2Ugc2V0ZW8gYSBsYSBwcm9waWVkYWQgY3VycmVuY3kgZGVsIHNlcnZpY2lvLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDdXJyZW5jeSA9IChjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU/OiBDdXJyZW5jeUNvbmZpZykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeVR5cGVDb25maWcuZmluZChjdCA9PiBjdC5jb2RlID09IGN1cnJlbmN5VHlwZUZpbmQudG9VcHBlckNhc2UoKSkgfHwgdGhpcy5jdXJyZW5jeVxuICAgICAgICBjdXN0b21UeXBlICYmICh0aGlzLmN1cnJlbmN5ID0geyAuLi50aGlzLmN1cnJlbmN5LCAuLi5jdXN0b21UeXBlIH0pXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbmN5O1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIGRldnVlbHZlIHRydWUgc2kgZXhpc3RlIGVsIGVsZW1lbnRvIFwic2VhcmNoXCIgZW4gZWwgYXJyYXkgZGUgcGFyYW1ldHJvcyBcInBhcmFtc1wiXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFycmF5IGRlIHBhcmFtZXRyb3MgZW50cmUgbG9zIHF1ZSBidXNjYXJcbiAgICAgKiBAcGFyYW0gc2VhcmNoZWQgRWxlbWVudG8gcXVlIGJ1c2NhclxuICAgICAqIEBwYXJhbSBwcmVmaXggcHJlZmlqbyBkZWwgc3RyaW5nIGEgYnVzY2FyIChlamVtcGxvOiBcImxpbmtfXCIpXG4gICAgICogQHBhcmFtIHN1ZmZpeCBzdWZpam8gZGVsIHN0cmluZyBhIGJ1c2NhciAoZWplbXBsbzogXCJsaW5rX1wiKVxuICAgICAqIEBwYXJhbSBjYXNlc2Vuc2l0aXZlIGRldGVybWluYSBzaSBzZSBldmFsdWEgY29uIHNlbnNpYmlsaWRhZCBlbnRyZSBtYXl1c2N1bGEgeSBtaW51c2N1bGFcbiAgICAgKiBAcmV0dXJucyByZXRvcm5hIHRydWUgbyBmYWxzZSBzaSBzZSBlbmNvbnRybyBvIG5vIGVsIHBhcmFtZXRybyBlbiBlbCBhcnJheVxuICAgICAqL1xuICAgIHB1YmxpYyBoYXNQYXJhbXMoXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgc2VhcmNoZWQsXG4gICAgICAgIHByZWZpeCA9ICcnLFxuICAgICAgICBzdWZmaXggPSAnJyxcbiAgICAgICAgY2FzZXNlbnNpdGl2ZSA9IGZhbHNlKTogYm9vbGVhbiB7XG5cblxuICAgICAgICByZXR1cm4gY2FzZXNlbnNpdGl2ZSA/IHBhcmFtcy5maW5kKHBhcmFtID0+IChwYXJhbS5jb2RlKS50b0xvd2VyQ2FzZSgpID09IChwcmVmaXggKyBzZWFyY2hlZCArIHN1ZmZpeCkudG9Mb3dlckNhc2UoKSB8fCAocGFyYW0uY29kZSkudG9Mb3dlckNhc2UoKSA9PSAoc2VhcmNoZWQpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICA6IHBhcmFtcy5maW5kKHBhcmFtID0+IHBhcmFtLmNvZGUgPT0gKHByZWZpeCArIHNlYXJjaGVkICsgc3VmZml4KSB8fCBwYXJhbS5jb2RlID09IHNlYXJjaGVkKVxuXG4gICAgfTtcblxuICAgIHB1YmxpYyBtb2RpZnlDaGFubmVsQ29uZmlnID0gY2hhbm5lbENvbmZpZyA9PiB7XG4gICAgICAgIGlmIChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuICAgICAgICAgICAgdGhpcy5zZXRDaGFubmVsKGNoYW5uZWxDb25maWcuY2hhbm5lbCB8fCBjaGFubmVsQ29uZmlnLmNvZGUpXG5cbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGUoY2hhbm5lbENvbmZpZy5sb2NhbGUgfHwgY2hhbm5lbENvbmZpZy5sb2NhbGVzLmNvZGUpXG5cbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbmN5KGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG5cbiAgICAgICAgcmV0dXJuIGNoYW5uZWxDb25maWc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBsb3MgZmlsdHJvcyBwb3IgZGVmZWN0byBxdWUgc2UgYXBsaWNhcmFuIGVuIGxhIHNlY2Npb24gJ0NvbGxlY3Rpb24nXG4gICAgICogY3VhbmRvIHNlIGluZ3Jlc2EgYSBsYSBtaXNtYS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlZmF1bHRGaWx0ZXJzOiBEZWZhdWx0RmlsdGVyW10gPSBbXVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHRlYSBlbCB2YWxvciBkZSBsYSB2YXJpYWJsZSBkZWZhdWxGaWx0ZXJzLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAgICovXG4gICAgcHVibGljIHNldERlZmF1bHRGaWx0ZXJzID0gKGZpbHRlcnM6IERlZmF1bHRGaWx0ZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzID0gZmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdEZpbHRlcnMgPSAoKTogRGVmYXVsdEZpbHRlcltdID0+IHRoaXMuZGVmYXVsdEZpbHRlcnNcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciB0YW50byBsb3MgZmlsdHJvcyBwb3IgZGVmZWN0b3MgcXVlIHlhIHNlcmFuIGFwbGljYWRvcywgY29tbyB0YW1iaWVuXG4gICAgICogbG9zIGZpbHRyb3MgcXVlIHNlIG1vc3RyYXJhbiBlbiBsYSBzZWNjaW9uIGNvbGxlY3Rpb24sIHN1IG9yZGVuLCBldGMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZyA9IHtcbiAgICAgICAgZGVmYXVsdEZpbHRlcnM6IFtdLFxuICAgICAgICBmaWx0ZXJzOiBbJ2NhdGVnb3J5JywgJ2F0dHJpYnV0ZXMnLCAnZHluYW1pY3MnLCAncHJpY2VfcmFuZ2UnXVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGaWx0ZXJDb25maWcgPSAoZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWcpID0+IHtcbiAgICAgICAgZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzID8gdGhpcy5maWx0ZXJDb25maWcuZGVmYXVsdEZpbHRlcnMgPSBmaWx0ZXJDb25maWcuZGVmYXVsdEZpbHRlcnMgOiBudWxsXG4gICAgICAgIGZpbHRlckNvbmZpZy5maWx0ZXJzID8gdGhpcy5maWx0ZXJDb25maWcuZmlsdGVycyA9IGZpbHRlckNvbmZpZy5maWx0ZXJzIDogbnVsbFxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWx0ZXJDb25maWcgPSAoKSA9PiB0aGlzLmZpbHRlckNvbmZpZy5maWx0ZXJzXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gY29udGllbmUgdW4gYXJyZWdsbyBkZSBzdHJpbmcgY3V5byBjb250ZW5pZG8gc29uIGxvcyBjb2RpZ29zIGRlIGxvcyBwYWlzZXMuXG4gICAgICogQGV4YW1wbGUgWydBUicsJ0VTJywnR0InXVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnRyaWVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3VudHJpZXMgZGViZSBjb250ZW5lciBsb3MgY29kaWdvcyBkZSBsb3MgcGFpc2VzIHF1ZSBzZSBxdWllcmUgbW9zdHJhclxuICAgICAqIEBleGFtcGxlIFsnQVInLCdFUycsJ0dCJ11cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDb3VudHJpZXMgPSAoY291bnRyaWVzOiBzdHJpbmdbXSkgPT4gdGhpcy5jb3VudHJpZXMgPSBjb3VudHJpZXM7XG5cbiAgICBwdWJsaWMgZ2V0Q291bnRyaWVzID0gKCkgPT4gdGhpcy5jb3VudHJpZXM7XG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBlc3RhIHZhcmlhYmxlIHNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIGxvcyBwYXJhbWV0cm9zIGN1YW5kbyBzZSBkZXNlYSBtb3N0cmFyXG4gICAgICogdmFyaWFudGVzIGVsIGxpc3RhZG8gZGUgcHJvZHVjdG9zLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfXR5cGUgdGlwbyBkZSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9Y29kZSBjb2RpZ28gZGUgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn1kZWZhdWx0Rmlyc3RPcHRpb24gYHRydWVgIHRvbWEgZWwgcHJpbWVyIG9wdGlvbiBkZWwgcHJvZHVjdG8gZW4gZ2VuZXJhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn1jaGVja0lmU3RvY2sgYHRydWVgIHNlIHJlYWxpemEgdW4gY2hlcXVlbyBkZSBzaSBsYSB2YXJpYW50ZSB0aWVuZSBzdG9jayBwYXJhIG1vc3RyYXJsYVxuICAgICAqIEBleGFtcGxlICBgYGBqYXZhc2NyaXB0XG4gICAgICoge1xuICAgICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgICBjb2RlOiAnY29sb3InLFxuICAgICAgICBkZWZhdWx0Rmlyc3RPcHRpb246IGZhbHNlICxcbiAgICAgICAgY2hlY2tJZlN0b2NrOnRydWVcbiAgICAgICAgfSBgYGBcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQ6IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSB7XG4gICAgICAgIHR5cGU6ICdjb2xvcicsXG4gICAgICAgIGNvZGU6ICdjb2xvcicsXG4gICAgICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UsXG4gICAgICAgIGNoZWNrSWZTdG9jazogdHJ1ZVxuICAgIH1cblxuICAgIHNldFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSAodmFsdWU6IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQpID0+IHtcbiAgICAgICAgdGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50LFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSAoKSA9PiB0aGlzLnBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnRcblxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIHF1ZSBmaWx0cm9zIGRlbCB0aXBvIGBTb3J0RmlsdGVyYCBzZSBxdWllcmUgbW9zdHJhciBlbiBsYSB2aXN0YS5cbiAgICAgKiBTZSB1c2FuIGxvcyBjb2RpZ28gZGUgbG9zIGZpbHRyb3MgcGFyYSBpbmRpY2FyIGN1YWxlcyBzZSBkZWJlbiBtb3N0cmFyLlxuICAgICAqL1xuICAgIHByaXZhdGUgc29ydEZpbHRlcnM6IHN0cmluZ1tdID0gWydwcmljZScsICdvcmRlci1hbHBoJywgJ3JlY2VudCddXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWx0ZXJzQ29kZSBhcnJlZ2xvIGRlIHN0cmluZ3MgY29uIGxvcyBjb2RpZ29zIGRlIGxvcyBmaWx0cm9zLlxuICAgICAqIFNpIHNlIGxlIHBhc2EgZWwgcGFyYW1ldHJvICoqYWxsKiogZXN0ZSBtb3N0cmFyYSB0b2Rvcy5cbiAgICAgKiBAZXhhbXBsZSBwcmljZSB8IG9yZGVyLWFscGggfCByZWNlbnQgfCB1cGRhdGUgfCBhbGxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHNldFNvcnRGaWx0ZXJzID0gKGZpbHRlcnNDb2RlOiBzdHJpbmdbXSA9IFsnYWxsJ10pID0+IHRoaXMuc29ydEZpbHRlcnMgPSBmaWx0ZXJzQ29kZTtcblxuICAgIGdldFNvcnRGaWx0ZXJzID0gKCkgPT4gdGhpcy5zb3J0RmlsdGVycztcblxuICAgIHByaXZhdGUgcG9zdGFsQ29kZVBhdHRlcm5zOiB7IFtrZXk6IHN0cmluZ106IHsgcGF0dGVybjogUmVnRXhwLCBlcnJvcktleTogc3RyaW5nIH0gfSA9IHtcbiAgICAgICAgJ0FSJzogeyBwYXR0ZXJuOiAvXlswLTldezR9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuYXJcIiB9LFxuICAgICAgICAnVVknOiB7IHBhdHRlcm46IC9eWzAtOV17NX0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci51eVwiIH0sXG4gICAgICAgICdHQic6IHsgcGF0dGVybjogL15bQS1aXXsxLDJ9WzAtOV1bQS1aMC05XT9cXHM/WzAtOV1bQS1aXXsyfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmdiXCIgfSxcbiAgICAgICAgJ0VTJzogeyBwYXR0ZXJuOiAvXig/OjBbMS05XXxbMS00XVxcZHw1WzAtMl0pXFxkezN9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuZXNcIiB9LFxuICAgICAgICAnQlInOiB7IHBhdHRlcm46IC9eWzAtOV17NX0tWzAtOV17M30kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5iclwiIH0sXG4gICAgICAgICdGUic6IHsgcGF0dGVybjogL15bMC05XXs1fSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmZyXCIgfSxcbiAgICAgICAgJ1BUJzogeyBwYXR0ZXJuOiAvXlswLTldezR9LVswLTldezN9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IucHRcIiB9LFxuICAgIH07XG5cbiAgICBnZXRQb3N0YWxDb2RlUGF0dGVybihjb3VudHJ5Q29kZTogc3RyaW5nKTogeyBwYXR0ZXJuOiBSZWdFeHAsIGVycm9yS2V5OiBzdHJpbmcgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RhbENvZGVQYXR0ZXJuc1tjb3VudHJ5Q29kZV0gfHwgeyBwYXR0ZXJuOiAvXltBLVphLXowLTlcXHNcXC1dKyQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmRlZmF1bHRcIiB9O1xuICAgIH1cbn1cblxuIl19
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvY29yZS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFtQixhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBWXREO0lBRUksbUJBQW1CLFNBQTJCLEVBQVUsTUFBYyxFQUF5QixHQUFHO1FBQWxHLGlCQUF1RztRQUFwRixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBeUIsUUFBRyxHQUFILEdBQUcsQ0FBQTtRQUVqRixXQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxTQUFTLENBQUM7UUFDOUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFeEIseUJBQW9CLEdBQUcsSUFBSSxhQUFhLEVBQU8sQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxxQkFBZ0IsR0FBRyxVQUFDLE9BQU8sSUFBSyxPQUFBLFlBQVksR0FBRyxPQUFPLEdBQUcsU0FBUyxFQUFsQyxDQUFrQyxDQUFDO1FBRW5FLGtCQUFhLEdBQVcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxxQkFBZ0IsR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyRSxnRkFBZ0Y7UUFDeEUsWUFBTyxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFB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QyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQWxJLENBQWtJLENBQUM7WUFDM0ssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBcEUsQ0FBb0UsQ0FBQyxDQUFBO0lBRXBHLENBQUM7SUFBQSxDQUFDO0lBOEhGLHdDQUFvQixHQUFwQixVQUFxQixXQUFtQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQztJQUNwSSxDQUFDOztnQkE3YzZCLGdCQUFnQjtnQkFBa0IsTUFBTTtnREFBRyxNQUFNLFNBQUMsS0FBSzs7O0lBRjVFLFNBQVM7UUFIckIsVUFBVSxDQUFDO1lBQ1IsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQztRQUcyRSxXQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtPQUY3RSxTQUFTLENBZ2RyQjtvQkFoZUQ7Q0FnZUMsQUFoZEQsSUFnZEM7U0FoZFksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDdXJyZW5jeUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9jdXJyZW5jeUNvbmZpZyc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsdGVyLCBGaWx0ZXJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyJztcbmltcG9ydCB7IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcGFyYW1zSW50ZXJmYWNlcy9wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50JztcbnR5cGUgY3VycmVuY3lUeXBlID0gJ0VVUicgfCAnQVJHJyB8ICdVU0QnIHwgJ1BZRycgfCAnUEVOJyB8ICdTRUsnIHwgJ0NVU1RPTSc7XG50eXBlIHBvc2l0aW9uVHlwZSA9ICdMJyB8ICdSJztcbnR5cGUgY2hhbm5lbFR5cGVzID0gJ2IyYicgfCAnYjJiMmMnIHwgJ2IyYyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52KSB7IH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMID0gJ0NIQU5ORUwnO1xuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpO1xuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnJCA9IHRoaXMuY2hhbm5lbENvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwcml2YXRlIGNoYW5uZWxDb25maWdBUEkgPSAoY2hhbm5lbCkgPT4gJy9zaG9wLWFwaS8nICsgY2hhbm5lbCArICdjaGFubmVsJztcblxuICAgIHByaXZhdGUgYnJvd3NlcldpbmRvdzogb2JqZWN0ID0gd2luZG93IHx8IHt9O1xuICAgIHByaXZhdGUgYnJvd3NlcldpbmRvd0Vudjogb2JqZWN0ID0gdGhpcy5icm93c2VyV2luZG93WydfX2VudiddIHx8IHt9O1xuXG4gICAgLy8gICAgIHByaXZhdGUgdXJsQmFzZTogc3RyaW5nID0gJ2h0dHA6Ly90ZXN0aW5nLmJhY2tlbmQuZWFzeWNvbW1lcmNldGVjaC5jb20vJztcbiAgICBwcml2YXRlIHVybEJhc2U6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYXBpVXJsJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2FwaVVybCddIDogKHRoaXMuZW52LmFwaVVybCB8fCAnaHR0cDovL2JhY2tlbmQuZWFzeWNvbW1lcmNlLmRldnAvJyk7XG4gICAgcHJpdmF0ZSB1cmxBc3NldHM6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsQXNzZXRzJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3VybEFzc2V0cyddIDogKHRoaXMuZW52LnVybEFzc2V0cyB8fCB0aGlzLnVybEJhc2UpO1xuICAgIHByaXZhdGUgdXJsRnJvbnRlbmQ6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsRnJvbnRlbmQnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsRnJvbnRlbmQnXSA6ICh0aGlzLmVudi51cmxGcm9udGVuZCB8fCAnaHR0cHM6Ly9lbGRlbi5lYXN5Y29tbWVyY2V0ZWNoLmNvbS8nKTtcbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpIDogdGhpcy5icm93c2VyV2luZG93RW52Wydsb2NhbGUnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnbG9jYWxlJ10gOiAodGhpcy5lbnYubG9jYWxlIHx8ICdlc19BUicpO1xuICAgIHByaXZhdGUgY2hhbm5lbDogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSA/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTCkgOiB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2NoYW5uZWwnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnY2hhbm5lbCddIDogKHRoaXMuZW52LmNoYW5uZWwgfHwgJ21pbm9yaXN0YScpXG4gICAgcHJpdmF0ZSBibG9ja3NDYWNoZVRpbWU6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYmxvY2tzQ2FjaGVUaW1lJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2Jsb2Nrc0NhY2hlVGltZSddIDogKHRoaXMuZW52LmJsb2Nrc0NhY2hlVGltZSB8fCBudWxsKTtcblxuICAgIHByaXZhdGUgbW9kYWxDb25maWcgPSB7IHRpdGxlOiAnRXhhbXBsZScsIGNsYXNzOiAnbW9kYWwteGwgbW9kYWwtZGlhbG9nLWNlbnRlcmVkJywga2V5Ym9hcmQ6IGZhbHNlIH07XG4gICAgc2V0TW9kYWxDb25maWcgPSAoY29uZmlnOiBhbnkpID0+IHRoaXMubW9kYWxDb25maWcgPSBjb25maWc7XG4gICAgZ2V0TW9kYWxDb25maWcgPSAoKSA9PiB0aGlzLm1vZGFsQ29uZmlnO1xuXG4gICAgcHJpdmF0ZSB2ZXJzaW9uOiBzdHJpbmcgPSAndjEnO1xuXG4gICAgcHJpdmF0ZSByb3V0ZXMgPSBbL15ob21lJC9nLCAvXihcXC8/KWNvbGxlY3Rpb24oXFwvPykoW1xcd1xcLlxcL1xcP10qKSQvZywgL15jb250YWN0JC9nXTtcblxuICAgIC8qIEdldCByaWQgb2YgdGhpcyBBU0FQISAqL1xuICAgIHByaXZhdGUgbWFzdGVyQ2hhbm5lbCA9IG51bGxcblxuICAgIHB1YmxpYyBnZXRNYXN0ZXJDaGFubmVsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMubWFzdGVyQ2hhbm5lbCkgdGhpcy5tYXN0ZXJDaGFubmVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ01BU1RFUl9DSEFOTkVMJylcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyQ2hhbm5lbFxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNYXN0ZXJDaGFubmVsID0gY2hhbm5lbCA9PiB7XG4gICAgICAgIHRoaXMubWFzdGVyQ2hhbm5lbCA9IGNoYW5uZWxcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ01BU1RFUl9DSEFOTkVMJywgY2hhbm5lbClcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUHJvZHVjdGlvbiA9ICgpID0+IHRoaXMuYnJvd3NlcldpbmRvd0VudlsncHJvZHVjdGlvbiddID8gdGhpcy5icm93c2VyV2luZG93RW52Wydwcm9kdWN0aW9uJ10gOiAodGhpcy5lbnYucHJvZHVjdGlvbiB8fCBmYWxzZSk7XG5cbiAgICBzZXRVcmxCYXNlID0gKHVybCkgPT4gdGhpcy51cmxCYXNlID0gdXJsO1xuICAgIHNldFVybEFzc2V0cyA9ICh1cmwpID0+IHRoaXMudXJsQXNzZXRzID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5leHQgRnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgICAqIEBwYXJhbSBwYXJhbXMgVGhhdCBmdW5jdGlvbiBuZWVkc1xuICAgICAqXG4gICAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb24gcGFzc2VkIGFzIHBhcmFtcywgaWYgdGhlIGZyb250ZW5kIGlzIGluIHByb2R1Y3Rpb24gbW9kZVxuICAgICAqL1xuICAgIG9ubHlJZlByb2R1Y3Rpb24gPSAobmV4dCwgcGFyYW1zKSA9PiB0aGlzLmlzUHJvZHVjdGlvbigpICYmIG5leHQocGFyYW1zKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZ1ZWx2ZSBsYSB1cmwgYmFzZSBkb25kZSBzZSBhbG9qYW4gbG9zIGFyY2hpdm9zIG11bHRpbWVkaWFcbiAgICAgKiBAcGFyYW0gcG9zdE1lZGlhIGNhcnBldGEgZG9uZGUgc2UgZ3VhcmRhbiBsb3MgYXJjaGl2b3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG1lZGlhVXJsID0gKHBvc3RNZWRpYT86IHN0cmluZykgPT4gdGhpcy51cmxBc3NldHMgKyAodGhpcy51cmxBc3NldHMgPT0gdGhpcy51cmxCYXNlID8gJ21lZGlhLycgOiAnJykgKyAocG9zdE1lZGlhID8gcG9zdE1lZGlhIDogXCJpbWFnZS9cIik7XG4gICAgbWVkaWFCYW5uZXJVcmwgPSAoKSA9PiB0aGlzLnVybEFzc2V0cyArICh0aGlzLnVybEFzc2V0cyA9PSB0aGlzLnVybEJhc2UgPyAnbWVkaWEvJyA6ICcnKSArIFwiYmFubmVyLWltYWdlL1wiO1xuICAgIG1lZGlhU3RvcmVVcmwgPSAoKSA9PiB0aGlzLnVybEFzc2V0cyArICh0aGlzLnVybEFzc2V0cyA9PSB0aGlzLnVybEJhc2UgPyAnbWVkaWEvJyA6ICcnKSArIFwic3RvcmUtaW1hZ2UvXCI7XG5cbiAgICBnZXRQcm9kdWN0c0xpc3RSb3V0ZSA9ICgpID0+ICdjb2xsZWN0aW9uLyc7XG5cbiAgICBnZXRTZWN0aW9uc1JvdXRlID0gKCkgPT4gJ3NlY3Rpb24vJztcblxuICAgIGdldFVybEJhc2UgPSAoKSA9PiB0aGlzLnVybEJhc2U7XG4gICAgZ2V0VXJsRnJvbnRlbmQgPSAoKSA9PiB0aGlzLnVybEZyb250ZW5kO1xuXG4gICAgZ2V0QmxvY2tzQ2FjaGVUaW1lID0gKCk6IG51bWJlciA9PiB0aGlzLmJsb2Nrc0NhY2hlVGltZSAmJiBwYXJzZUludCh0aGlzLmJsb2Nrc0NhY2hlVGltZSk7XG5cbiAgICAvLyBnZXRMb2NhbGUgPSAoKSA9PiB0aGlzLmxvY2FsZTtcbiAgICAvLyBzZXRMb2NhbGUgPSAobG9jYWxlKSA9PiB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcblxuICAgIGdldExvY2FsZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKSkge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVcbiAgICB9XG5cbiAgICBnZXRMb2NhbGVUcmFuc2xhdGUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsZSgpLnNwbGl0KCdfJylbMF1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxlID0gbG9jYWxlID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5MT0NBTEUsIGxvY2FsZSlcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxvY2FsZS5zcGxpdCgnXycpWzBdKVxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZVxuICAgIH1cblxuICAgIGdldENoYW5uZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUwpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUwpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbFxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDaGFubmVsID0gY2hhbm5lbCA9PiB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0hBTk5FTCwgY2hhbm5lbClcbiAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbFxuICAgIH1cblxuICAgIGdldFZlcnNpb24gPSAoKSA9PiB0aGlzLnZlcnNpb247XG5cbiAgICBsb2dpbkV4dHJhRGF0YSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsaWVudF9pZDogJ2RlbW9fY2xpZW50JyxcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6ICdzZWNyZXRfZGVtb19jbGllbnQnLFxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNDb2xsZWN0aW9uID0gKHBhdGgpID0+ICgvXihcXC8/KWNvbGxlY3Rpb24oXFwvPykoW1xcd1xcLlxcL1xcP10qKSQvZykudGVzdChwYXRoKTtcblxuICAgIC8qKlxuICAgICAqIFV0aWxpdGllc1xuICAgICAqL1xuXG4gICAgbW9iaWxlID0gKCkgPT4gd2luZG93LmlubmVyV2lkdGggPCA3NTA7XG5cbiAgICBzdHJpY3RUeXBlQ2hhbm5lbCA9ICgpID0+IHRoaXMuZW52LnN0cmljdFR5cGVDaGFubmVsIHx8ICdiMmIyYyc7XG5cbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbDtcblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnRvcyBwYXJhIG1hbmVqbyBkZSBsaXN0YSBkZSBydXRhcyByZXV0aWxpemFibGVzXG4gICAgICovXG5cbiAgICBhZGRSb3V0ZVRvUmV1c2UgPSAocm91dGU6IFJlZ0V4cCkgPT4gcm91dGUgJiYgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSk7XG5cbiAgICByZW1vdmVSb3V0ZVRvUmV1c2UgPSAocm91dGU6IFJlZ0V4cCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm91dGVzLmluZGV4T2Yocm91dGUpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvdXRlc1RvUmV1c2UgPSAoKTogUmVnRXhwW10gPT4gdGhpcy5yb3V0ZXM7XG5cblxuXG4gICAgLyoqXG4gICAgICogIEBwdWJsaWMgZWplbXBsbyBkZSB1c28gPGltZyAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb25zdHMuZ2V0UmF0aW5nU3Rhcihwcm9kdWN0LnJhdGluZywnYXNzZXRzL2ltYWdlcy9zdGFyLnBuZycsJ2Fzc2V0cy9pbWFnZXMvbm90U3Rhci5wbmcnKVwiIFtzcmNdPVwiaXRlbVwiPlxuICAgICAqICBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgZGFkbyB1biB2YWxvciBlbnRyZSAxIC4uIDUsIHkgc3Rhcjogbm90U3RhcjpcbiAgICAgKiAgICAgIChkZWJlbiBzZXIgZWwgcGF0aCBkZWwgYXJjaGl2byBsb2NhbCBhIGxhIGltcGxlbWVudGFjaW9uKS5cbiAgICAgKiAgICAgIHJldG9ybmEgdW4gYXJyZWdsbyBjb24gY29uIGxhIHZhbG9yYWNpb24gY29ycmVzcG9uZGllbnRlLlxuICAgICAqL1xuICAgIGdldFJhdGluZ1N0YXIgPSAocmF0aW5nOiBhbnksIHN0YXI6IFN0cmluZywgbm90U3RhcjogU3RyaW5nKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgdXJsU3RhciA9IFtdO1xuICAgICAgICAgICAgbGV0IGNhbnRTdGFyID0gTnVtYmVyKHJhdGluZykgfHwgMDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCA1OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgdXJsU3Rhci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBjYW50U3RhciA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBub3RTdGFyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjYW50U3Rhci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVybFN0YXI7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZ2V0UmF0aW5nU3RhciBwcm9kdWpvIHVuIGVycm9yIC0+IFwiLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgQHB1YmxpYyBlamVtcGxvIGRlIHVzbyAoa2V5cHJlc3MpPVwiaW5wdXRWYWxpZGF0aW9uQnlFeHByZXNzaW9ucygkZXZlbnQsJ1swLTldezEsOX0nKVwiIGVuIGVsIERPTS5cbiAgICAgKiAgQGRlc2NyaXB0aW9uIGZ1bmNpb24gcXVlIGRhZG8gdW4gbWFuZWphbmRvciBkZSBldmVudG8sIHkgdW5hIGV4cHJlc2lvbiByZWd1bGFyIGVzdGEgZXNcbiAgICAgKiAgICAgICAgICBldmFsdWFkYSBzb2JyZSBsb3MgdmFsb3JlcyBxdWUgZWwgbWFuZWphZG9yIGRlIGV2ZW50b3Mgbm9zIGVudmlhLlxuICAgICAqICAgICAgICAgIEVuIGVsIGNhc28gZW4gZWwgcXVlIHNlIGVudmllIGVsIHBhcmFtZXRybyAnY29uZGl0aW9uJyBlc3RlIHB1ZWRlIHNlciBwYXJhXG4gICAgICogICAgICAgICAgYW51bGFyIGVsIGV2ZW50byBjb21vIGNvbmRpY2lvbiBhZGljaW9uYWwgYSBsYSBldmFsdWFjaW9uIGRlIGxhIGVudHJhZGEuXG4gICAgICovXG4gICAgaW5wdXRWYWxpZGF0aW9uQnlFeHByZXNzaW9ucyA9IChlLCBwYXRyb24sIGNvbmRpdGlvbiA9IG51bGwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB0ZWNsYSA9IChkb2N1bWVudCkgPyBlLmtleUNvZGUgOiBlLndoaWNoO1xuICAgICAgICAgICAgaWYgKHRlY2xhID09IDgpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgbGV0IHBhdHJvblJlZyA9IG5ldyBSZWdFeHAocGF0cm9uKVxuICAgICAgICAgICAgbGV0IHRlY2xhX2ZpbmFsID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0ZWNsYSk7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0cm9uUmVnLnRlc3QodGVjbGFfZmluYWwpICYmIGNvbmRpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXRyb25SZWcudGVzdCh0ZWNsYV9maW5hbClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJpbnB1dFZhbGlkYXRpb25CeUV4cHJlc3Npb25zIHByb2R1am8gdW4gZXJyb3IgLT4gXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmVlZGxlcyAoYWd1amFzKSBvYmplY3QgY29uIGNsYXZlcyB2YWxvciBhIGZpbHRyYXJcbiAgICAgKiBAcGFyYW0gaGF5c3RhY2sgKHBhamFyKSBvYmplY3RvIGVuIGVsIHF1ZSBidXNjYXJcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvbiBmdW5jaW9uIHF1ZSBidXNjYSBlbiBlbCBoYXlzdGFjayAocGFqYXIpIHRvZG9zIGxvcyBvYmpldG9zIHF1ZSBjb250ZW50YW5cbiAgICAgKiB0b2RhcyBsYXMgY2xhdmVzIGRlIGxvcyBuZWVkbGVzKGFndWphcykgcXVlIGNvbnRlbmdhbiBlbCBtaXNtbyB2YWxvclxuICAgICAqL1xuICAgIGNvbnRhaW5zQWxsKG5lZWRsZXM6IG9iamVjdCwgaGF5c3RhY2s6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgICAgICBpZiAoISFuZWVkbGVzICYmICEhaGF5c3RhY2spIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG5lZWRsZXMpLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKGhheXN0YWNrLmhhc093blByb3BlcnR5KHZhbHVlWzBdKSAmJiBoYXlzdGFja1t2YWx1ZVswXV0gPT0gdmFsdWVbMV0pKSByZXN1bHQgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BpZWRhZCBxdWUgc2UgdXRpbGl6YSBwYXJhIHRvbWFyIGNvbW8gY29uZmlndXJhY2nDs24gcGFyYSBlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgdXRpbGl6YSBlbiBlbCBzaXRpby5cbiAgICAgKiBFc3RvcyB2YWxvcmVzIHNvbiB1dGlsaXphZG9zIHBhcmEgZWwgcGlwZSBjdXJyZW5jeVByaWNlXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbmN5OiBDdXJyZW5jeUNvbmZpZyA9IHtcbiAgICAgICAgY29kZTogJ0FSRycsXG4gICAgICAgIHN5bWJvbDogJyQnLFxuICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcnJlZ2xvIGRlIHZhbG9yZXMgdXNhZG9zIHBhcmEgZWwgcGlwZSBjdXJyZW5jeVByaWNlXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ0VVUicsXG4gICAgICAgICAgICBzeW1ib2w6ICfigqwnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdSaWdodCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnQVJHJyxcbiAgICAgICAgICAgIHN5bWJvbDogJyQnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnQVJTJyxcbiAgICAgICAgICAgIHN5bWJvbDogJyQnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnVVNEJyxcbiAgICAgICAgICAgIHN5bWJvbDogJyQnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnUFlHJyxcbiAgICAgICAgICAgIHN5bWJvbDogJ0dzLicsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdQRU4nLFxuICAgICAgICAgICAgc3ltYm9sOiAnUy8nLFxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnU0VLJyxcbiAgICAgICAgICAgIHN5bWJvbDogJ1NFSycsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1JpZ2h0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgXVxuXG4gICAgcHVibGljIHNldEN1cnJlbmN5VHlwZUNvbmZpZyA9IChjdXJyZW5jeVR5cGVDb25maWc6IEN1cnJlbmN5Q29uZmlnW10pID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW5jeVR5cGVDb25maWcgPSBjdXJyZW5jeVR5cGVDb25maWc7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVlbXBsYXphIGxvcyB2YWxvcmVzIGRlIHVuYSBtb25lZGEuXG4gICAgICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgVGlwbyBkZSBjdXJyZW5jeSBxdWUgc2UgZGVzZWEgbW9kaWZpY2FyXG4gICAgICogQHBhcmFtIGN1c3RvbVR5cGUgTG9zIG51ZXZvcyB2YWxvcmVzLiBUb2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzXG4gICAgICogQGV4YW1wbGUgY3VzdG9tVHlwZSA9IHsgY29kZTogJ0FSRycsIHN5bWJvbDogJyQnLCBwb3NpdGlvbjogJ0xlZnQnICwgd2l0aG91dERlY2ltYWw6IGZhbHNlIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwbGFjZUN1cnJlbmN5VHlwZUNvbmZpZyA9IChjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU6IEN1cnJlbmN5Q29uZmlnKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW5jeVR5cGUgPSB0aGlzLmN1cnJlbmN5VHlwZUNvbmZpZy5maW5kKHR5cGUgPT4gdHlwZS5jb2RlID09IGN1cnJlbmN5VHlwZUZpbmQpXG4gICAgICAgIGlmIChjdXJyZW5jeVR5cGUpIHtcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS5zeW1ib2wgPSBjdXN0b21UeXBlPy5zeW1ib2wgfHwgY3VycmVuY3lUeXBlLnN5bWJvbFxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLmNvZGUgPSBjdXN0b21UeXBlPy5jb2RlIHx8IGN1cnJlbmN5VHlwZS5jb2RlXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUucG9zaXRpb24gPSBjdXN0b21UeXBlPy5wb3NpdGlvbiB8fCBjdXJyZW5jeVR5cGUucG9zaXRpb25cbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS53aXRob3V0RGVjaW1hbCA9IGN1c3RvbVR5cGU/LndpdGhvdXREZWNpbWFsIHx8IGN1cnJlbmN5VHlwZS53aXRob3V0RGVjaW1hbFxuICAgICAgICB9XG4gICAgICAgIC8vUmV2ZWVyIGVuIGVsIGZ1dHVybyBzaSBzZSBlbXBpZXphbiBhIGFncmVnYXIgb3RybyB0aXBvcyBkZSBtb25lZGFzXG4gICAgICAgIC8qIGVsc2V7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5VHlwZUNvbmZpZy5wdXNoKHsuLi5jdXN0b21UeXBlIH0pXG4gICAgICAgIH0gKi9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdXJyZW5jeVR5cGVGaW5kIERlZmluaXIgZWwgY29kZSBkZWwgdGlwbyBkZSBtb25lZGEgcXVlIHNlIHF1aWVyYSB1dGlsaXphci5cbiAgICAgKiBTaSBlbCB0aXBvIGVzIENVU1RPTSBzZSB0b21hbiBsb3MgdmFsb3JlcyBkZWwgc2VndW5kbyBwYXJhbWV0cm8gZG9uZGUgc2UgcHVlZGUgZGVmaW5pciBsYSBzaW1ib2xvZ8OtYSB5IHBvc2VzacOzbiBxdWUgc2UgcXVpZXJhLlxuICAgICAqIEBwYXJhbSBjdXN0b21UeXBlIEZvcm1hdG8gZGVsIHBhcsOhbWV0cm8gZWplbXBsbyB7IGNvZGU6ICdBUkcnLCBzeW1ib2w6ICckJywgcG9zaXRpb246ICdMJyAsIHdpdGhvdXREZWNpbWFsczogZmFsc2UgfSAsXG4gICAgICogdG9kYXMgbGFzIGtleSBzb24gb3BjaW9uYWxlcyB5IHBvciBkZWZlY3RvIHNlIHRvbWFuIGxvcyB2YWxvcmVzIGRlbCBlamVtcGxvLlxuICAgICAqIEByZXR1cm5zIHNlIHJldG9ybmEgbGEgY29uZmlndXJhY2nDs24gcXVlIHNlIHNldGVvIGEgbGEgcHJvcGllZGFkIGN1cnJlbmN5IGRlbCBzZXJ2aWNpby5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q3VycmVuY3kgPSAoY3VycmVuY3lUeXBlRmluZDogY3VycmVuY3lUeXBlLCBjdXN0b21UeXBlPzogQ3VycmVuY3lDb25maWcpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW5jeSA9IHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLmZpbmQoY3QgPT4gY3QuY29kZSA9PSBjdXJyZW5jeVR5cGVGaW5kLnRvVXBwZXJDYXNlKCkpIHx8IHRoaXMuY3VycmVuY3lcbiAgICAgICAgY3VzdG9tVHlwZSAmJiAodGhpcy5jdXJyZW5jeSA9IHsgLi4udGhpcy5jdXJyZW5jeSwgLi4uY3VzdG9tVHlwZSB9KVxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW5jeTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBkZXZ1ZWx2ZSB0cnVlIHNpIGV4aXN0ZSBlbCBlbGVtZW50byBcInNlYXJjaFwiIGVuIGVsIGFycmF5IGRlIHBhcmFtZXRyb3MgXCJwYXJhbXNcIlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtcyBBcnJheSBkZSBwYXJhbWV0cm9zIGVudHJlIGxvcyBxdWUgYnVzY2FyXG4gICAgICogQHBhcmFtIHNlYXJjaGVkIEVsZW1lbnRvIHF1ZSBidXNjYXJcbiAgICAgKiBAcGFyYW0gcHJlZml4IHByZWZpam8gZGVsIHN0cmluZyBhIGJ1c2NhciAoZWplbXBsbzogXCJsaW5rX1wiKVxuICAgICAqIEBwYXJhbSBzdWZmaXggc3VmaWpvIGRlbCBzdHJpbmcgYSBidXNjYXIgKGVqZW1wbG86IFwibGlua19cIilcbiAgICAgKiBAcGFyYW0gY2FzZXNlbnNpdGl2ZSBkZXRlcm1pbmEgc2kgc2UgZXZhbHVhIGNvbiBzZW5zaWJpbGlkYWQgZW50cmUgbWF5dXNjdWxhIHkgbWludXNjdWxhXG4gICAgICogQHJldHVybnMgcmV0b3JuYSB0cnVlIG8gZmFsc2Ugc2kgc2UgZW5jb250cm8gbyBubyBlbCBwYXJhbWV0cm8gZW4gZWwgYXJyYXlcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzUGFyYW1zKFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHNlYXJjaGVkLFxuICAgICAgICBwcmVmaXggPSAnJyxcbiAgICAgICAgc3VmZml4ID0gJycsXG4gICAgICAgIGNhc2VzZW5zaXRpdmUgPSBmYWxzZSk6IGJvb2xlYW4ge1xuXG5cbiAgICAgICAgcmV0dXJuIGNhc2VzZW5zaXRpdmUgPyBwYXJhbXMuZmluZChwYXJhbSA9PiAocGFyYW0uY29kZSkudG9Mb3dlckNhc2UoKSA9PSAocHJlZml4ICsgc2VhcmNoZWQgKyBzdWZmaXgpLnRvTG93ZXJDYXNlKCkgfHwgKHBhcmFtLmNvZGUpLnRvTG93ZXJDYXNlKCkgPT0gKHNlYXJjaGVkKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgOiBwYXJhbXMuZmluZChwYXJhbSA9PiBwYXJhbS5jb2RlID09IChwcmVmaXggKyBzZWFyY2hlZCArIHN1ZmZpeCkgfHwgcGFyYW0uY29kZSA9PSBzZWFyY2hlZClcblxuICAgIH07XG5cbiAgICBwdWJsaWMgbW9kaWZ5Q2hhbm5lbENvbmZpZyA9IGNoYW5uZWxDb25maWcgPT4ge1xuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5jaGFubmVsIHx8IGNoYW5uZWxDb25maWcuY29kZSlcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hhbm5lbChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuXG4gICAgICAgIGlmIChjaGFubmVsQ29uZmlnLmxvY2FsZSB8fCBjaGFubmVsQ29uZmlnLmxvY2FsZXMuY29kZSlcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxuXG4gICAgICAgIGlmIChjaGFubmVsQ29uZmlnLmN1cnJlbmN5IHx8IGNoYW5uZWxDb25maWcuYmFzZUN1cnJlbmN5KVxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW5jeShjaGFubmVsQ29uZmlnLmN1cnJlbmN5IHx8IGNoYW5uZWxDb25maWcuYmFzZUN1cnJlbmN5KVxuXG4gICAgICAgIHJldHVybiBjaGFubmVsQ29uZmlnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIGZpbHRyb3MgcG9yIGRlZmVjdG8gcXVlIHNlIGFwbGljYXJhbiBlbiBsYSBzZWNjaW9uICdDb2xsZWN0aW9uJ1xuICAgICAqIGN1YW5kbyBzZSBpbmdyZXNhIGEgbGEgbWlzbWEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyczogRGVmYXVsdEZpbHRlcltdID0gW11cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXR0ZWEgZWwgdmFsb3IgZGUgbGEgdmFyaWFibGUgZGVmYXVsRmlsdGVycy5cbiAgICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgICAqL1xuICAgIHB1YmxpYyBzZXREZWZhdWx0RmlsdGVycyA9IChmaWx0ZXJzOiBEZWZhdWx0RmlsdGVyW10pID0+IHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlZmF1bHRGaWx0ZXJzID0gKCk6IERlZmF1bHRGaWx0ZXJbXSA9PiB0aGlzLmRlZmF1bHRGaWx0ZXJzXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgdGFudG8gbG9zIGZpbHRyb3MgcG9yIGRlZmVjdG9zIHF1ZSB5YSBzZXJhbiBhcGxpY2Fkb3MsIGNvbW8gdGFtYmllblxuICAgICAqIGxvcyBmaWx0cm9zIHF1ZSBzZSBtb3N0cmFyYW4gZW4gbGEgc2VjY2lvbiBjb2xsZWN0aW9uLCBzdSBvcmRlbiwgZXRjLlxuICAgICAqL1xuICAgIHByaXZhdGUgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XG4gICAgICAgIGRlZmF1bHRGaWx0ZXJzOiBbXSxcbiAgICAgICAgZmlsdGVyczogWydjYXRlZ29yeScsICdhdHRyaWJ1dGVzJywgJ2R5bmFtaWNzJywgJ3ByaWNlX3JhbmdlJ11cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RmlsdGVyQ29uZmlnID0gKGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlnKSA9PiB7XG4gICAgICAgIGZpbHRlckNvbmZpZy5kZWZhdWx0RmlsdGVycyA/IHRoaXMuZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzID0gZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzIDogbnVsbFxuICAgICAgICBmaWx0ZXJDb25maWcuZmlsdGVycyA/IHRoaXMuZmlsdGVyQ29uZmlnLmZpbHRlcnMgPSBmaWx0ZXJDb25maWcuZmlsdGVycyA6IG51bGxcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyQ29uZmlnID0gKCkgPT4gdGhpcy5maWx0ZXJDb25maWcuZmlsdGVyc1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbnRpZW5lIHVuIGFycmVnbG8gZGUgc3RyaW5nIGN1eW8gY29udGVuaWRvIHNvbiBsb3MgY29kaWdvcyBkZSBsb3MgcGFpc2VzLlxuICAgICAqIEBleGFtcGxlIFsnQVInLCdFUycsJ0dCJ11cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50cmllczogc3RyaW5nW10gPSBbXVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBjb250aWVuZSB1biBhcnJlZ2xvIGRlIHN0cmluZyBjdXlvIGNvbnRlbmlkbyBzb24gbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcyBhIGV4Y2x1aXIuXG4gICAgICogQGV4YW1wbGUgWydHQiddXG4gICAgICovXG4gICAgcHVibGljIGV4Y2x1ZGVkQ291bnRyaWVzOiBzdHJpbmdbXSA9IFtdXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY291bnRyaWVzIGRlYmUgY29udGVuZXIgbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcyBxdWUgc2UgcXVpZXJlIG1vc3RyYXJcbiAgICAgKiBAZXhhbXBsZSBbJ0FSJywnRVMnLCdHQiddXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q291bnRyaWVzID0gKGNvdW50cmllczogc3RyaW5nW10pID0+IHRoaXMuY291bnRyaWVzID0gY291bnRyaWVzO1xuXG4gICAgcHVibGljIGdldENvdW50cmllcyA9ICgpID0+IHRoaXMuY291bnRyaWVzO1xuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gZXN0YSB2YXJpYWJsZSBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBsb3MgcGFyYW1ldHJvcyBjdWFuZG8gc2UgZGVzZWEgbW9zdHJhclxuICAgICAqIHZhcmlhbnRlcyBlbCBsaXN0YWRvIGRlIHByb2R1Y3Rvcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ310eXBlIHRpcG8gZGUgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfWNvZGUgY29kaWdvIGRlIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59ZGVmYXVsdEZpcnN0T3B0aW9uIGB0cnVlYCB0b21hIGVsIHByaW1lciBvcHRpb24gZGVsIHByb2R1Y3RvIGVuIGdlbmVyYWxcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59Y2hlY2tJZlN0b2NrIGB0cnVlYCBzZSByZWFsaXphIHVuIGNoZXF1ZW8gZGUgc2kgbGEgdmFyaWFudGUgdGllbmUgc3RvY2sgcGFyYSBtb3N0cmFybGFcbiAgICAgKiBAZXhhbXBsZSAgYGBgamF2YXNjcmlwdFxuICAgICAqIHtcbiAgICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgICAgY29kZTogJ2NvbG9yJyxcbiAgICAgICAgZGVmYXVsdEZpcnN0T3B0aW9uOiBmYWxzZSAsXG4gICAgICAgIGNoZWNrSWZTdG9jazp0cnVlXG4gICAgICAgIH0gYGBgXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50OiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0ge1xuICAgICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgICBjb2RlOiAnY29sb3InLFxuICAgICAgICBkZWZhdWx0Rmlyc3RPcHRpb246IGZhbHNlLFxuICAgICAgICBjaGVja0lmU3RvY2s6IHRydWVcbiAgICB9XG5cbiAgICBzZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKHZhbHVlOiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KSA9PiB7XG4gICAgICAgIHRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCxcbiAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKCkgPT4gdGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50XG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBxdWUgZmlsdHJvcyBkZWwgdGlwbyBgU29ydEZpbHRlcmAgc2UgcXVpZXJlIG1vc3RyYXIgZW4gbGEgdmlzdGEuXG4gICAgICogU2UgdXNhbiBsb3MgY29kaWdvIGRlIGxvcyBmaWx0cm9zIHBhcmEgaW5kaWNhciBjdWFsZXMgc2UgZGViZW4gbW9zdHJhci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNvcnRGaWx0ZXJzOiBzdHJpbmdbXSA9IFsncHJpY2UnLCAnb3JkZXItYWxwaCcsICdyZWNlbnQnXVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyc0NvZGUgYXJyZWdsbyBkZSBzdHJpbmdzIGNvbiBsb3MgY29kaWdvcyBkZSBsb3MgZmlsdHJvcy5cbiAgICAgKiBTaSBzZSBsZSBwYXNhIGVsIHBhcmFtZXRybyAqKmFsbCoqIGVzdGUgbW9zdHJhcmEgdG9kb3MuXG4gICAgICogQGV4YW1wbGUgcHJpY2UgfCBvcmRlci1hbHBoIHwgcmVjZW50IHwgdXBkYXRlIHwgYWxsXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzZXRTb3J0RmlsdGVycyA9IChmaWx0ZXJzQ29kZTogc3RyaW5nW10gPSBbJ2FsbCddKSA9PiB0aGlzLnNvcnRGaWx0ZXJzID0gZmlsdGVyc0NvZGU7XG5cbiAgICBnZXRTb3J0RmlsdGVycyA9ICgpID0+IHRoaXMuc29ydEZpbHRlcnM7XG5cbiAgICBwcml2YXRlIHBvc3RhbENvZGVQYXR0ZXJuczogeyBba2V5OiBzdHJpbmddOiB7IHBhdHRlcm46IFJlZ0V4cCwgZXJyb3JLZXk6IHN0cmluZyB9IH0gPSB7XG4gICAgICAgICdBUic6IHsgcGF0dGVybjogL15bMC05XXs0fSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmFyXCIgfSxcbiAgICAgICAgJ1VZJzogeyBwYXR0ZXJuOiAvXlswLTldezV9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IudXlcIiB9LFxuICAgICAgICAnR0InOiB7IHBhdHRlcm46IC9eW0EtWl17MSwyfVswLTldW0EtWjAtOV0/XFxzP1swLTldW0EtWl17Mn0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5nYlwiIH0sXG4gICAgICAgICdFUyc6IHsgcGF0dGVybjogL14oPzowWzEtOV18WzEtNF1cXGR8NVswLTJdKVxcZHszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmVzXCIgfSxcbiAgICAgICAgJ0JSJzogeyBwYXR0ZXJuOiAvXlswLTldezV9LVswLTldezN9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuYnJcIiB9LFxuICAgICAgICAnRlInOiB7IHBhdHRlcm46IC9eWzAtOV17NX0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5mclwiIH0sXG4gICAgICAgICdQVCc6IHsgcGF0dGVybjogL15bMC05XXs0fS1bMC05XXszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLnB0XCIgfSxcbiAgICB9O1xuXG4gICAgZ2V0UG9zdGFsQ29kZVBhdHRlcm4oY291bnRyeUNvZGU6IHN0cmluZyk6IHsgcGF0dGVybjogUmVnRXhwLCBlcnJvcktleTogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0YWxDb2RlUGF0dGVybnNbY291bnRyeUNvZGVdIHx8IHsgcGF0dGVybjogL15bQS1aYS16MC05XFxzXFwtXSskLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5kZWZhdWx0XCIgfTtcbiAgICB9XG59XG5cbiJdfQ==
@@ -187,7 +187,7 @@ var CartEcComponent = /** @class */ (function (_super) {
187
187
  };
188
188
  CartEcComponent.prototype.actualizarCantidad = function (item, cantidad, stock, id) {
189
189
  var _this = this;
190
- var _a;
190
+ var _a, _b, _c;
191
191
  if (this.cartLoading) {
192
192
  return;
193
193
  }
@@ -207,10 +207,11 @@ var CartEcComponent = /** @class */ (function (_super) {
207
207
  newQuantity = Math.round(newQuantity / step) * step;
208
208
  }
209
209
  }
210
+ var keepSameComment = (_c = (_b = item) === null || _b === void 0 ? void 0 : _b.comments, (_c !== null && _c !== void 0 ? _c : undefined));
210
211
  if (id) {
211
212
  this.isDisabled = true; // Actualiza la propiedad vinculada a `[disabled]`
212
213
  if (newQuantity > 0 && newQuantity <= stock) {
213
- this.cartService.updateItemQuantity(item, newQuantity);
214
+ this.cartService.updateItemQuantity(item, newQuantity, keepSameComment);
214
215
  }
215
216
  else {
216
217
  this.toastrService.show('out-of-stock-actually');
@@ -221,7 +222,7 @@ var CartEcComponent = /** @class */ (function (_super) {
221
222
  }
222
223
  else {
223
224
  if (newQuantity > 0 && newQuantity <= stock) {
224
- this.cartService.updateItemQuantity(item, newQuantity);
225
+ this.cartService.updateItemQuantity(item, newQuantity, keepSameComment);
225
226
  }
226
227
  else {
227
228
  this.toastrService.show('out-of-stock-actually');
@@ -513,4 +514,4 @@ var CartEcComponent = /** @class */ (function (_super) {
513
514
  return CartEcComponent;
514
515
  }(ComponentHelper));
515
516
  export { CartEcComponent };
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RTtJQUFxQyxtQ0FBZTtJQXNCaEQseUJBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFUckQsWUFVSSxpQkFBTyxTQUtWO1FBZFUsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVcsR0FB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SUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRXpFLElBQUksZUFBZSxHQUFNLGtCQUFrQixVQUFPLENBQUM7UUFDbkQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQzs7Z0JBNVp1QixXQUFXO2dCQUNYLFdBQVc7Z0JBQ2IsU0FBUztnQkFDSCxlQUFlO2dCQUN4QixNQUFNO2dCQUNBLGNBQWM7Z0JBQ1YsWUFBWTtnQkFDWCxpQkFBaUI7Z0JBQ2Qsb0JBQW9COztJQS9CNUMsZUFBZTtRQUwzQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUF1Qzs7U0FFMUMsQ0FBQztPQUNXLGVBQWUsQ0E0YjNCO0lBQUQsc0JBQUM7Q0FBQSxBQTViRCxDQUFxQyxlQUFlLEdBNGJuRDtTQTViWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhcnQtZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJ0LWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FydEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuXG4gICAgcHVibGljIHZhcmlhbnRzVG9TaG93OiBzdHJpbmdbXSA9IFsnVEFMTEUnLCAnQ09MT1InXTtcbiAgICBwdWJsaWMgaXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBtZWRpYVVybCA9ICcnO1xuICAgIHB1YmxpYyBtb2RhbFJlZjogQnNNb2RhbFJlZiB8IG51bGw7XG4gICAgcHVibGljIHByb21vdGlvbnMgPSBbXTtcbiAgICBwdWJsaWMgaXRlbXM6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIGNhcmdhbmRvOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNoYW5uZWw6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBleGl0VXBkYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlRGlzY291bnRzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNhcnRMb2FkaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwdWJsaWMgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhZGRyZXNzaW5nU2VydmljZTogQWRkcmVzc2luZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICAgICAgdGhpcy5tZWRpYVVybCA9IHRoaXMuY29uc3RzLm1lZGlhVXJsKCk7XG5cbiAgICB9XG5cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xuICAgIH1cblxuICAgIHVwZGF0ZUxvZ2dlZEluKCkge1xuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnByb21vdGlvbnMuc3Vic2NyaWJlKHByb21vdGlvbnMgPT4gdGhpcy5wcm9tb3Rpb25zID0gcHJvbW90aW9ucyk7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gY2hhbm5lbD8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gY2hhbm5lbD8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FydExvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcblxuICAgIH1cblxuICAgIHRvRGVjaW1hbCA9IChhbW91bnQpID0+IHRoaXMuY29uc3RzLnRvRGVjaW1hbChhbW91bnQpO1xuXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XG5cbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7IC8vIEFjdHVhbGl6YSBsYSBwcm9waWVkYWQgdmluY3VsYWRhIGEgYFtkaXNhYmxlZF1gXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgcmVkaXJlY3RDaGVja291dCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY2FydFNlcnZpY2UuaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwoKSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWRpcmVjdFJlZ2lzdGVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2F1dGgvbG9naW5gKVxuXG4gICAgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7IGNsYXNzOiAnbW9kYWwteGwnLCBrZXlib2FyZDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcmVkaXJlY3REZXRhaWxQcm9kdWN0KHByb2R1Y3QpIHtcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXG4gICAgICAgIGxldCBwYXRoID0gJy9wcm9kdWN0LydcbiAgICAgICAgcGF0aCArPSB2YXJpYW50LmNvZGVcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocGF0aClcbiAgICB9XG5cbiAgICBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlKSxcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXG4gICAgICAgICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgeWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBpZiAobW9udGgubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIG1vbnRoID0gJzAnICsgbW9udGg7XG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIGRheSA9ICcwJyArIGRheTtcblxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcblxuICAgICAgICAvLyBPYnRpZW5lIGxhcyBzZWRlcyBkZWwgY2xpZW50ZVxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcblxuICAgICAgICAvLyBDcmVvIHVuYSBzZXJpZSBkZSB2YXJpYWJsZXMgcXVlIHZveSBhIG5lY2VzaXRhciwgaWQgcGFyYSBjb250cm9sYXIgbGFzIHZ1ZWx0YXMgcXVlIGRhIHkgY3VhbnRhcyBsaW5lYXMgaGF5IHkgYWxsSUQgcGFyYSBhbG1hY2VuYXIgbG9zIElEIGRlIGxvcyBsb3Rlcy5cbiAgICAgICAgdmFyIGlkID0gMTtcbiAgICAgICAgdmFyIHRoaXNfID0gdGhpcztcbiAgICAgICAgdmFyIGFsbElEID0gW107XG5cbiAgICAgICAgLy8gQcOxYWRlIGxvcyBkYXRvcyBhbCBlbmNhYmV6YWRvIGRlbCBNb2RhbFxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jYWJlemFkb01vZGFsJykuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwidGl0bGUgdGV4dC1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lIGg1IGQtYmxvY2sgbS0wIHAtMCBtLTAgcC0wXCI+PHAgY2xhc3M9XCJub21icmUgbWItMFwiIGlkPVwicHJvZHVjdE5hbWVcIj4nICsgaXRlbVsncHJvZHVjdCddWyduYW1lJ10gKyAnPC9wPjxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IHBzLTIgbXMtMVwiIGlkPVwicHJvZHVjdFJlZlwiPlJlZjonICsgaXRlbVsndmFyaWFudF9pZCddICsgJzwvc21hbGw+PC9hPic7XG5cbiAgICAgICAgLy8gQm9ycmFtb3MgdG9kb3MgbG9zIGRhdG9zIGRlIGxvcyBsb3RlcyBhbnRlcmlvcmVzXG4gICAgICAgIHZhciBib2R5VGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvdF9ib2R5X3RhYmxlXCIpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICAvLyBSZWNvcnJlIHRvZG9zIGxvcyBhcnRpY3Vsb3MgeSBlbmN1ZW50cmEgc2kgdGllbmVuIGxvdGVzIG8gbm8sIHNpIHRpZW5lIGNyZWEgbGFzIGxpbmVhc1xuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChpWydpdGVtX2lkJ10gPT0gaXRlbS5pdGVtX2lkICYmIGlbJ2xvdCddICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIGlbJ2xvdCddLmZvckVhY2gobG90ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDMgPSByb3cuaW5zZXJ0Q2VsbCgyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDYgPSByb3cuaW5zZXJ0Q2VsbCg1KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcbiAgICAgICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgZGlzYWJsZWQ+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScgKyBpZCArICdcIiB2YWx1ZT0gXCInICsgbG90LnF1YW50aXR5ICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyBsb3QucXVhbnRpdHkgKyAnXCI+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxuICAgICAgICAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiIHNlbGVjdGVkPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xuICAgICAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdmFsdWU9XCInICsgbG90Lm5vdGVzICsgJ1wiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBpZCArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgYWxsSUQucHVzaChsb3RbJ2lkJ10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgLy8gLy8gU2UgY2FsY3VsYSBsYSBjYW50aWRhZCB5IGVsIGNvbnRhZG9yIHBhcmEgcXVlIG5vIGV4Y2VkYSBsYSBjYW50aWRhZCBkZSBsYSBsaW5lYSBhbCBjcmVhciB1biBudWV2byBsb3RlLlxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlIGHDsWFkZSBsYSBsaW5lYSBzaWVtcHJlIHkgY3VhbmRvIGxhIGNhbnRpZGFkIHJlc3RhbnRlIG5vIHNlYSBjZXJvLlxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkQWN0dWFsIDwgaXRlbVsncXVhbnRpdHknXSkge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XG4gICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIlBlbmR0LlwiIGRpc2FibGVkPic7XG4gICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScgKyBpZCArICdcIiB2YWx1ZT0gXCInICsgKGl0ZW1bJ3F1YW50aXR5J10gLSBjYW50aWRhZEFjdHVhbCkgKyAnXCJjbGFzcz1cImZvcm0tY29udHJvbCB3LTUwXCIgbWF4PVwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiPic7XG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xuICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcbiAgICAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4geyBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7IH0pO1xuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XG4gICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHQ+PC9kaXY+JztcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcbiAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XG5cblxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1tYXgtcXVhbnRpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uR3VhcmRhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZpbmcnKTtcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBsb3RJRCA9ICcnO1xuICAgICAgICAgICAgdmFyIGNhbnRpZGFkTG90ZXMgPSAwO1xuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLnF1YW50aXR5ID49IGNhbnRpZGFkTG90ZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYW50aWRhZExvdGVzKTtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpdHkgPSBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsaXZlcnlEYXRlID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsaXZlcnlEYXRlXCIgKyBpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ZXMgPSAkKFwiI25vdGVzXCIgKyBpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpcHBpbmdBZGRyZXNzTmFtZSA9ICQoJyNzaGlwcGluZ0FkZHJlc3MnICsgaW5kZXggKyAnIG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvdElEID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbElELnNwbGljZShteUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ251ZXZvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgMCwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ25ldycsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICduZXdsb3QnKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvdElEICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb3RJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFsbElELmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2JvcnJhcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJ0U2VydmljZS5sb2FkQ2FydEJ5VG9rZW4odGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkpOyB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZlZCcpOyB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjYm90b25Cb3JyYXInLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmUoKTtcblxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGNsb3NlTW9kYWwoaWQpIHtcbiAgICAgICAgJCgnIycgKyBpZCkubW9kYWwoJ2hpZGUnKTtcbiAgICB9XG5cbiAgICBjaGVja1N0b2NrKGl0ZW0pIHtcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQuc3RvY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gU29sbyBzZSBlamVjdXRhIHNpIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuXG4gICAgfVxuXG4gICAgdXBkYXRlQWxsU3RvY2soKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIC8vIERlZmluZSBsYSBzdXNjcmlwY2nDs24gYW50ZXMgZGUgdXNhcmxhXG5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jYXJ0SXRlbXMuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHZhcmlhbnQuc3RvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRBbGxUb0NhcnQoaXRlbXMpOyAgLy8gQWN0dWFsaXphIGVsIGNhcnJpdG9cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnVwZGF0ZUFsbFN0b2NrKCk7ICAvLyBWdWVsdmUgYSB2ZXJpZmljYXIgZWwgc3RvY2tcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIGdldFZhcmlhbnRzID0gcHJvZHVjdCA9PiB7XG5cbiAgICAgICAgbGV0IGl0ZW0gPSBwcm9kdWN0LnByb2R1Y3RcblxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnNcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gdGhpcy52YXJpYW50c1RvU2hvdy5maW5kKG5hbWUgPT4gb3B0aW9uLmhhc093blByb3BlcnR5KG5hbWUpKSlcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cbiAgICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcblxuICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMuZm9yRWFjaChvcHRpb24yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjIudmFsdWVzLmZvckVhY2goY29sb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3IuY29kZSA9PSBvcHRpb25bZW50cnldICYmICFvcHRpb25BZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTsgLy8gTWFyY2FyIG9wY2nDs24gYWdyZWdhZGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbkFkZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMuZm9yRWFjaChvcHRpb24yID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgIT09ICdDT0xPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbltlbnRyeV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGNyZWF0ZURpc2NvdW50TWVzc2FnZShzYWxlcHJpY2U6IG51bWJlciwgcHJpY2U6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpc2NvdW50UGVyY2VudGFnZSA9IE1hdGgucm91bmQoKChwcmljZSAtIHNhbGVwcmljZSkgLyBwcmljZSkgKiAxMDApO1xuXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xuICAgICAgICByZXR1cm4gZGlzY291bnRNZXNzYWdlO1xuICAgIH1cbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwudHlwZSA9PSAnYjJiJyA/IHRoaXMuY2hhbm5lbC53aG9sZXNhbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDogdGhpcy5jaGFubmVsLnJldGFpbGVyTWluaW11bVB1cmNoYXNlQW1vdW50XG5cbiAgICB9XG5cbiAgICBleGNlZWRzTWluaW11bUFtb3VudCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB2YWx1ZSA+PSB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpID8gdGhpcy5yZWRpcmVjdENoZWNrb3V0KCkgOiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkJywgeyBhbW91bnQ6IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgfSlcblxuXG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuIl19
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RTtJQUFxQyxtQ0FBZTtJQXNCaEQseUJBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFUckQsWUFVSSxpQkFBTyxTQUtWO1FBZFUsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVcsR0FB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Q0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDeEYsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRXpFLElBQUksZUFBZSxHQUFNLGtCQUFrQixVQUFPLENBQUM7UUFDbkQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQzs7Z0JBOVp1QixXQUFXO2dCQUNYLFdBQVc7Z0JBQ2IsU0FBUztnQkFDSCxlQUFlO2dCQUN4QixNQUFNO2dCQUNBLGNBQWM7Z0JBQ1YsWUFBWTtnQkFDWCxpQkFBaUI7Z0JBQ2Qsb0JBQW9COztJQS9CNUMsZUFBZTtRQUwzQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUF1Qzs7U0FFMUMsQ0FBQztPQUNXLGVBQWUsQ0E4YjNCO0lBQUQsc0JBQUM7Q0FBQSxBQTliRCxDQUFxQyxlQUFlLEdBOGJuRDtTQTliWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhcnQtZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJ0LWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FydEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuXG4gICAgcHVibGljIHZhcmlhbnRzVG9TaG93OiBzdHJpbmdbXSA9IFsnVEFMTEUnLCAnQ09MT1InXTtcbiAgICBwdWJsaWMgaXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBtZWRpYVVybCA9ICcnO1xuICAgIHB1YmxpYyBtb2RhbFJlZjogQnNNb2RhbFJlZiB8IG51bGw7XG4gICAgcHVibGljIHByb21vdGlvbnMgPSBbXTtcbiAgICBwdWJsaWMgaXRlbXM6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIGNhcmdhbmRvOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNoYW5uZWw6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBleGl0VXBkYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlRGlzY291bnRzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNhcnRMb2FkaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwdWJsaWMgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhZGRyZXNzaW5nU2VydmljZTogQWRkcmVzc2luZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICAgICAgdGhpcy5tZWRpYVVybCA9IHRoaXMuY29uc3RzLm1lZGlhVXJsKCk7XG5cbiAgICB9XG5cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xuICAgIH1cblxuICAgIHVwZGF0ZUxvZ2dlZEluKCkge1xuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnByb21vdGlvbnMuc3Vic2NyaWJlKHByb21vdGlvbnMgPT4gdGhpcy5wcm9tb3Rpb25zID0gcHJvbW90aW9ucyk7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gY2hhbm5lbD8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gY2hhbm5lbD8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FydExvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcblxuICAgIH1cblxuICAgIHRvRGVjaW1hbCA9IChhbW91bnQpID0+IHRoaXMuY29uc3RzLnRvRGVjaW1hbChhbW91bnQpO1xuXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XG5cbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZWVwU2FtZUNvbW1lbnQgPSBpdGVtPy5jb21tZW50cyA/PyB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICByZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jYXJ0U2VydmljZS5oYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvY2hlY2tvdXRgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm8gc2UgcHVlZGUgcmVkaXJpZ2lyIGFsIGNoZWNrb3V0IGRlYmlkbyBhIHVuYSB2YWxpZGFjacOzbiBmYWxsaWRhLlwiKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZGlyZWN0UmVnaXN0ZXIgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvYXV0aC9sb2dpbmApXG5cbiAgICBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHsgY2xhc3M6ICdtb2RhbC14bCcsIGtleWJvYXJkOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICByZWRpcmVjdERldGFpbFByb2R1Y3QocHJvZHVjdCkge1xuICAgICAgICBsZXQgdmFyaWFudCA9IHByb2R1Y3QudmFyaWFudHNbMF1cbiAgICAgICAgbGV0IHBhdGggPSAnL3Byb2R1Y3QvJ1xuICAgICAgICBwYXRoICs9IHZhcmlhbnQuY29kZVxuICAgICAgICBwYXRoICs9IHZhcmlhbnQub3B0aW9ucy5sZW5ndGggPyBcIj92YXJpYW50PXRydWVcIiA6IFwiXCJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKVxuICAgIH1cblxuICAgIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGRhdGUpLFxuICAgICAgICAgICAgbW9udGggPSAnJyArIChkLmdldE1vbnRoKCkgKyAxKSxcbiAgICAgICAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXG4gICAgICAgICAgICB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xuXG4gICAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKVxuICAgICAgICAgICAgbW9udGggPSAnMCcgKyBtb250aDtcbiAgICAgICAgaWYgKGRheS5sZW5ndGggPCAyKVxuICAgICAgICAgICAgZGF5ID0gJzAnICsgZGF5O1xuXG4gICAgICAgIHJldHVybiBbeWVhciwgbW9udGgsIGRheV0uam9pbignLScpO1xuICAgIH1cblxuICAgIGFzeW5jIGNhcmdhTW9kYWwoaXRlbSkge1xuXG4gICAgICAgIC8vIE9idGllbmUgbGFzIHNlZGVzIGRlbCBjbGllbnRlXG4gICAgICAgIGNvbnN0IHNlZGVzID0gYXdhaXQgdGhpcy5jYXJ0U2VydmljZS5nZXRBZGRyZXNzQm9vaygpO1xuXG4gICAgICAgIC8vIENyZW8gdW5hIHNlcmllIGRlIHZhcmlhYmxlcyBxdWUgdm95IGEgbmVjZXNpdGFyLCBpZCBwYXJhIGNvbnRyb2xhciBsYXMgdnVlbHRhcyBxdWUgZGEgeSBjdWFudGFzIGxpbmVhcyBoYXkgeSBhbGxJRCBwYXJhIGFsbWFjZW5hciBsb3MgSUQgZGUgbG9zIGxvdGVzLlxuICAgICAgICB2YXIgaWQgPSAxO1xuICAgICAgICB2YXIgdGhpc18gPSB0aGlzO1xuICAgICAgICB2YXIgYWxsSUQgPSBbXTtcblxuICAgICAgICAvLyBBw7FhZGUgbG9zIGRhdG9zIGFsIGVuY2FiZXphZG8gZGVsIE1vZGFsXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmNhYmV6YWRvTW9kYWwnKS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJ0aXRsZSB0ZXh0LWRhcmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgaDUgZC1ibG9jayBtLTAgcC0wIG0tMCBwLTBcIj48cCBjbGFzcz1cIm5vbWJyZSBtYi0wXCIgaWQ9XCJwcm9kdWN0TmFtZVwiPicgKyBpdGVtWydwcm9kdWN0J11bJ25hbWUnXSArICc8L3A+PHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgcHMtMiBtcy0xXCIgaWQ9XCJwcm9kdWN0UmVmXCI+UmVmOicgKyBpdGVtWyd2YXJpYW50X2lkJ10gKyAnPC9zbWFsbD48L2E+JztcblxuICAgICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcbiAgICAgICAgdmFyIGJvZHlUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG90X2JvZHlfdGFibGVcIikgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgIC8vIFJlY29ycmUgdG9kb3MgbG9zIGFydGljdWxvcyB5IGVuY3VlbnRyYSBzaSB0aWVuZW4gbG90ZXMgbyBubywgc2kgdGllbmUgY3JlYSBsYXMgbGluZWFzXG4gICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnQyKCkuZm9yRWFjaChpID0+IHtcblxuICAgICAgICAgICAgaWYgKGlbJ2l0ZW1faWQnXSA9PSBpdGVtLml0ZW1faWQgJiYgaVsnbG90J10gIT0gJycpIHtcbiAgICAgICAgICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgaVsnbG90J10uZm9yRWFjaChsb3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UobG90WydkYXRlX3JlcXVlc3QnXSkpO1xuICAgICAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBkaXNhYmxlZD4nO1xuICAgICAgICAgICAgICAgICAgICBjZWxsMi5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInF1YW50aXR5JyArIGlkICsgJ1wiIHZhbHVlPSBcIicgKyBsb3QucXVhbnRpdHkgKyAnXCJjbGFzcz1cImZvcm0tY29udHJvbCB3LTUwXCIgbWF4PVwiJyArIGxvdC5xdWFudGl0eSArICdcIj4nO1xuICAgICAgICAgICAgICAgICAgICBjZWxsMy5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJkYXRlXCIgdmFsdWU9XCInICsgdGhpcy5mb3JtYXREYXRlKGRhdGUpICsgJ1wiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VkZS5pZCA9PSBsb3Quc2hpcHBpbmdfYWRkcmVzc19pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCIgc2VsZWN0ZWQ+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGw2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sLTEgZmxleC1ncm93LTAgdGV4dC1yaWdodCBidG5Cb3JyYXIgZC1ub25lIGQtbWQtYmxvY2sgZC1ub25lIGQtbWQtYmxvY2tcIj48YnV0dG9uIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHRvbj48L2Rpdj4nO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXG4gICAgICAgICAgICAgICAgICAgIGZpbGEyLmNvbFNwYW4gPSA2O1xuICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIicgKyBsb3Qubm90ZXMgKyAnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xuICAgICAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcblxuICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RvbkFncmVnYXInKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAvLyAvLyBTZSBjYWxjdWxhIGxhIGNhbnRpZGFkIHkgZWwgY29udGFkb3IgcGFyYSBxdWUgbm8gZXhjZWRhIGxhIGNhbnRpZGFkIGRlIGxhIGxpbmVhIGFsIGNyZWFyIHVuIG51ZXZvIGxvdGUuXG4gICAgICAgICAgICB2YXIgY2FudGlkYWRBY3R1YWwgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZEFjdHVhbCA9IGNhbnRpZGFkQWN0dWFsICsgcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2UgYcOxYWRlIGxhIGxpbmVhIHNpZW1wcmUgeSBjdWFuZG8gbGEgY2FudGlkYWQgcmVzdGFudGUgbm8gc2VhIGNlcm8uXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRBY3R1YWwgPCBpdGVtWydxdWFudGl0eSddKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDMgPSByb3cuaW5zZXJ0Q2VsbCgyKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDYgPSByb3cuaW5zZXJ0Q2VsbCg1KTtcbiAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiUGVuZHQuXCIgZGlzYWJsZWQ+JztcbiAgICAgICAgICAgICAgICBjZWxsMi5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInF1YW50aXR5JyArIGlkICsgJ1wiIHZhbHVlPSBcIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgKGl0ZW1bJ3F1YW50aXR5J10gLSBjYW50aWRhZEFjdHVhbCkgKyAnXCI+JztcbiAgICAgICAgICAgICAgICBjZWxsMy5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJkYXRlXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XG4gICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxuICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7IG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JzsgfSk7XG4gICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nICsgb3BjaW9uZXMgKyAnPC9zZWxlY3Q+JztcbiAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xuICAgICAgICAgICAgICAgIGNlbGw2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sLTEgZmxleC1ncm93LTAgdGV4dC1yaWdodCBidG5Cb3JyYXIgZC1ub25lIGQtbWQtYmxvY2sgZC1ub25lIGQtbWQtYmxvY2tcIj48YnV0dG9uIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dD48L2Rpdj4nO1xuICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxuICAgICAgICAgICAgICAgIGZpbGEyLmNvbFNwYW4gPSA2O1xuICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIj48aW5wdXQgaWQ9XCJub3RlcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcblxuXG4gICAgICAgICAgICAgICAgaWQgPSBpZCArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LW1heC1xdWFudGl0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIHB1bHNhIGVsIGJvdG9uIHBhcmEgZ3VhcmRhciBlbCBsb3RlIHJlY29ycmUgbGEgZnVuY2lvbiB5IGVsIGZvciAsIHJlY29ycmUgbGluZWEgYSBsaW5lYSB5IGxhbnphIGVsIGVuZHBvaW50IGNvbiB1bmEgcGF1c2EgcGFyYSBxdWUgbm8gc2UgcGllcmRhIG5pbmd1bm8geSBubyBzZSBxdWVkZSBwaWxsYWRvLlxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmluZycpO1xuICAgICAgICAgICAgdGhpc18uY2FyZ2FuZG8gPSB0cnVlO1xuICAgICAgICAgICAgdmFyIGxvdElEID0gJyc7XG4gICAgICAgICAgICB2YXIgY2FudGlkYWRMb3RlcyA9IDA7XG4gICAgICAgICAgICAvL0NvbnRyb2xhIHF1ZSBsYXMgY2FudGlkYWRlcyBkZSBsb3MgbG90ZXMgbm8gc2VhIHN1cGVyaW9yIGEgbGEgZGVsIHByb2R1Y3RvIGVuIGVsIGNhcnJpdG8uXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkTG90ZXMgPSBjYW50aWRhZExvdGVzICsgcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNhbnRpZGFkTG90ZXMpO1xuICAgICAgICAgICAgICAgIHZhciB5ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxpdmVyeURhdGUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxpdmVyeURhdGVcIiArIGluZGV4KSkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpcHBpbmdBZGRyZXNzID0gJChcIiNzaGlwcGluZ0FkZHJlc3NcIiArIGluZGV4KS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIiArIGluZGV4KS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3NOYW1lID0gJCgnI3NoaXBwaW5nQWRkcmVzcycgKyBpbmRleCArICcgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG90SUQgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBteUluZGV4ID0gYWxsSUQuaW5kZXhPZihwYXJzZUludChsb3RJRCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSUQuc3BsaWNlKG15SW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvdElEID09ICdQZW5kdC4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCAwLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnbmV3JywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ25ld2xvdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvdElEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCBwYXJzZUludChsb3RJRCksIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICdlZGl0ZWQnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnZWRpdGxvdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnYm9ycmFyJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCBlbGVtZW50LCAwLCAwLCAwLCAwLCAwLCAwLCAnZGVsZXRlJywgMCwgJycsIDAsICdkZWxldGUnLCAnZGVsZXRlbG90Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLmNhcnRTZXJ2aWNlLmxvYWRDYXJ0QnlUb2tlbih0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSk7IH0sIDMwMCAqIHkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmVkJyk7IH0sIDMwMCAqIHkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLmNhcmdhbmRvID0gZmFsc2UgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdMYSBjYW50aWRhZCBkZSBsb3MgbG90ZXMgZXMgc3VwZXJpb3IgYSBsYSBjYW50aWRhZCBkZWwgcHJvZHVjdG8uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMpO1xuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgY2xvc2VNb2RhbChpZCkge1xuICAgICAgICAkKCcjJyArIGlkKS5tb2RhbCgnaGlkZScpO1xuICAgIH1cblxuICAgIGNoZWNrU3RvY2soaXRlbSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTb2xvIHNlIGVqZWN1dGEgc2kgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs25cbiAgICB9XG5cbiAgICB1cGRhdGVBbGxTdG9jaygpIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IGFueVtdID0gW107XG5cbiAgICAgICAgLy8gRGVmaW5lIGxhIHN1c2NyaXBjacOzbiBhbnRlcyBkZSB1c2FybGFcblxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5kZWxldGVDYXJ0SXRlbShpdGVtLCBmYWxzZSk7IC8vIEJvcnJhIGVsIGFydMOtY3Vsb1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7ICAvLyBEZXN1c2Nyw61iZXRlIGFudGVzIGRlIGFjdHVhbGl6YXJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXRVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQWxsU3RvY2soKTsgIC8vIFZ1ZWx2ZSBhIHZlcmlmaWNhciBlbCBzdG9ja1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgZ2V0VmFyaWFudHMgPSBwcm9kdWN0ID0+IHtcblxuICAgICAgICBsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxuXG4gICAgICAgIGlmIChpdGVtLnZhcmlhbnRzICYmIGl0ZW0udmFyaWFudHMubGVuZ3RoICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucyAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB0aGlzLnZhcmlhbnRzVG9TaG93LmZpbmQobmFtZSA9PiBvcHRpb24uaGFzT3duUHJvcGVydHkobmFtZSkpKVxuICAgICAgICAgICAgbGV0IG9wdGlvbnNNYXAgPSBbXVxuICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25BZGRlZCA9IGZhbHNlOyAgLy8gVmFyaWFibGUgcGFyYSBldml0YXIgbcO6bHRpcGxlcyBpbnNlcmNpb25lc1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSA9PSAnQ09MT1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5jb2RlID09IG9wdGlvbltlbnRyeV0gJiYgIW9wdGlvbkFkZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goeyBuYW1lOiBlbnRyeSwgdmFsdWU6IG9wdGlvbltlbnRyeV0sIGltYWdlOiBjb2xvci5pbWFnZSwgbW9iaWxlSW1hZ2U6IGNvbG9yLm1vYmlsZUltYWdlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBTaSBubyBzZSBhw7FhZGnDsyBsYSBvcGNpw7NuIGRlIENPTE9SLCBtYW5lamFyIG90cmFzIG9wY2lvbmVzXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uc01hcDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uc01hcDtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgY3JlYXRlRGlzY291bnRNZXNzYWdlKHNhbGVwcmljZTogbnVtYmVyLCBwcmljZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGlzTmFOKHNhbGVwcmljZSkgfHwgaXNOYU4ocHJpY2UpIHx8IHNhbGVwcmljZSA+PSBwcmljZSB8fCBzYWxlcHJpY2UgPD0gMCB8fCBwcmljZSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGlzY291bnRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoKHByaWNlIC0gc2FsZXByaWNlKSAvIHByaWNlKSAqIDEwMCk7XG5cbiAgICAgICAgbGV0IGRpc2NvdW50TWVzc2FnZSA9IGAke2Rpc2NvdW50UGVyY2VudGFnZX0lIE9GRmA7XG4gICAgICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XG4gICAgfVxuICAgIGdldE1pbmltdW1QdXJjaGFzZUFtb3VudCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcblxuICAgIH1cblxuICAgIGV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgPyB0aGlzLnJlZGlyZWN0Q2hlY2tvdXQoKSA6IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQnLCB7IGFtb3VudDogdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSB9KVxuXG5cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG4iXX0=