ng-easycommerce 0.0.688 → 0.0.689

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 (55) hide show
  1. package/README.md +13 -0
  2. package/assets/docs/SEO.md +174 -0
  3. package/bundles/ng-easycommerce.umd.js +859 -558
  4. package/bundles/ng-easycommerce.umd.js.map +1 -1
  5. package/bundles/ng-easycommerce.umd.min.js +1 -1
  6. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  7. package/esm2015/lib/ec-component/auth-ec/auth-ec.component.js +31 -3
  8. package/esm2015/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +14 -3
  9. package/esm2015/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +14 -3
  10. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +17 -3
  11. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +17 -3
  12. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +3 -3
  13. package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +36 -3
  14. package/esm2015/lib/ec-component/home-ec/home-ec.component.js +14 -3
  15. package/esm2015/lib/ec-component/password-reset-ec/password-reset-ec.component.js +14 -3
  16. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +17 -12
  17. package/esm2015/lib/ec-component/section-container-ec/section-container-ec.component.js +45 -4
  18. package/esm2015/lib/ec-directive/add-action-redirect.directive.js +35 -13
  19. package/esm2015/lib/ec-directive/product-off.directive.js +2 -2
  20. package/esm2015/lib/services/seo.service.js +112 -0
  21. package/esm2015/public-api.js +2 -1
  22. package/esm5/lib/ec-component/auth-ec/auth-ec.component.js +31 -3
  23. package/esm5/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +14 -3
  24. package/esm5/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +14 -3
  25. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +17 -3
  26. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +17 -3
  27. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +3 -3
  28. package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +36 -3
  29. package/esm5/lib/ec-component/home-ec/home-ec.component.js +14 -3
  30. package/esm5/lib/ec-component/password-reset-ec/password-reset-ec.component.js +14 -3
  31. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +17 -12
  32. package/esm5/lib/ec-component/section-container-ec/section-container-ec.component.js +45 -4
  33. package/esm5/lib/ec-directive/add-action-redirect.directive.js +35 -13
  34. package/esm5/lib/ec-directive/product-off.directive.js +2 -2
  35. package/esm5/lib/services/seo.service.js +116 -0
  36. package/esm5/public-api.js +2 -1
  37. package/fesm2015/ng-easycommerce.js +855 -559
  38. package/fesm2015/ng-easycommerce.js.map +1 -1
  39. package/fesm5/ng-easycommerce.js +860 -560
  40. package/fesm5/ng-easycommerce.js.map +1 -1
  41. package/lib/ec-component/auth-ec/auth-ec.component.d.ts +4 -1
  42. package/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +3 -1
  43. package/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +3 -1
  44. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +4 -1
  45. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +4 -1
  46. package/lib/ec-component/collection-ec/collection-ec.component.d.ts +5 -1
  47. package/lib/ec-component/home-ec/home-ec.component.d.ts +3 -1
  48. package/lib/ec-component/password-reset-ec/password-reset-ec.component.d.ts +3 -1
  49. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +3 -3
  50. package/lib/ec-component/section-container-ec/section-container-ec.component.d.ts +7 -1
  51. package/lib/ec-directive/add-action-redirect.directive.d.ts +1 -0
  52. package/lib/services/seo.service.d.ts +16 -0
  53. package/ng-easycommerce.metadata.json +1 -1
  54. package/package.json +1 -1
  55. package/public-api.d.ts +1 -0
@@ -20,8 +20,9 @@ import { DataFormEcComponent } from './dataform-ec/dataform-ec.component';
20
20
  import { PaymentEcComponent } from './payment-ec/payment-ec.component';
21
21
  import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
22
22
  import { ShippingPriceDisplayService } from '../../utils/shipping-price-display.service';
23
+ import { SeoService } from '../../services/seo.service';
23
24
  let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
24
- constructor(checkoutService, toastrService, router, cartService, productsService, channelService, consts, elementRef, modalService, shippingPriceDisplay) {
25
+ constructor(checkoutService, toastrService, router, cartService, productsService, channelService, consts, elementRef, modalService, shippingPriceDisplay, seo) {
25
26
  super();
26
27
  this.checkoutService = checkoutService;
27
28
  this.toastrService = toastrService;
@@ -33,6 +34,7 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
33
34
  this.elementRef = elementRef;
34
35
  this.modalService = modalService;
35
36
  this.shippingPriceDisplay = shippingPriceDisplay;
37
+ this.seo = seo;
36
38
  this.loadingSubject = new BehaviorSubject(true);
37
39
  this.canCheckout = false;
38
40
  this.require_login = false;
@@ -59,6 +61,16 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
59
61
  this.channelReady = false;
60
62
  this.pendingCheckoutInit = false;
61
63
  this.loading$ = this.loadingSubject.asObservable();
64
+ this.updateCheckoutSeo = () => {
65
+ const siteName = this.seo.getSiteName();
66
+ this.seo.setTitle(`Checkout | ${siteName}`);
67
+ this.seo.setDescription(`Finalizá tu compra en ${siteName}.`);
68
+ this.seo.setOgType('website');
69
+ this.seo.setNoIndex(true);
70
+ if (typeof window !== 'undefined') {
71
+ this.seo.setCanonical(window.location.href);
72
+ }
73
+ };
62
74
  this.initializeCheckout = () => {
63
75
  var _a, _b, _c, _d;
64
76
  this.canCheckout = true;
@@ -455,6 +467,7 @@ let CheckoutEcComponent = class CheckoutEcComponent extends ComponentHelper {
455
467
  }
456
468
  this.paymentAutoOpened = true;
457
469
  });
470
+ this.updateCheckoutSeo();
458
471
  this.ecOnInit();
459
472
  this.cartService.showPrice$.subscribe(showPrice => {
460
473
  this.creditAccountShowPrices = showPrice;
@@ -605,7 +618,8 @@ CheckoutEcComponent.ctorParameters = () => [
605
618
  { type: Constants },
606
619
  { type: ElementRef },
607
620
  { type: BsModalService },
608
- { type: ShippingPriceDisplayService }
621
+ { type: ShippingPriceDisplayService },
622
+ { type: SeoService }
609
623
  ];
610
624
  __decorate([
611
625
  ViewChildren(DataFormEcComponent)
@@ -628,4 +642,4 @@ CheckoutEcComponent = __decorate([
628
642
  })
629
643
  ], CheckoutEcComponent);
630
644
  export { CheckoutEcComponent };
631
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9jaGVja291dC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxPQUFPLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMs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b3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgU3RlcHBlciBmcm9tICdicy1zdGVwcGVyJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvY2hlY2tvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBJIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXRWaWV3VHlwZSwgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgRGF0YUZvcm1FY0NvbXBvbmVudCB9IGZyb20gJy4vZGF0YWZvcm0tZWMvZGF0YWZvcm0tZWMuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRFY0NvbXBvbmVudCB9IGZyb20gJy4vcGF5bWVudC1lYy9wYXltZW50LWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hpcHBpbmctcHJpY2UtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2hlY2tvdXQtZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGVja291dC1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hlY2tvdXQtZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja291dEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0ZXBwZXI6IFN0ZXBwZXI7XG4gICAgcHVibGljIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICBwdWJsaWMgY2FuQ2hlY2tvdXQgPSBmYWxzZTtcbiAgICBwdWJsaWMgcmVxdWlyZV9sb2dpbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzdWJDYW46IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgc3ViUmVhZHk6IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgY2hhbm5lbDogYW55O1xuICAgIHB1YmxpYyBzdGVwczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlRGlzY291bnRzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNoZWNrb3V0VmlldzogQ2hlY2tvdXRWaWV3VHlwZSA9ICdsZWdhY3knO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbGFzdEFzc29jaWF0ZWREYXRhOiBDaGVja291dERhdGFbXSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBvcGVuU2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBsYXN0UGF5bWVudEFkZHJlc3NLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcGF5bWVudEF1dG9PcGVuZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGF1dG9DbG9zZWRTdGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgbWFudWFsbHlPcGVuZWRTdGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaGlwbWVudFN1bW1hcnk6IHsgbGFiZWw/OiBzdHJpbmc7IGRldGFpbD86IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdW1tYXJ5T2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBmaW5pc2hCdXR0b25FbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHN0ZXBEaXJ0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIHB1YmxpYyBtb2RhbFJlZjogQnNNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcGVuZGluZ0Nsb3NlU3RlcE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbmF2U3ViOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBjaGFubmVsUmVhZHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIHBlbmRpbmdDaGVja291dEluaXQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKERhdGFGb3JtRWNDb21wb25lbnQpIHByaXZhdGUgZGF0YWZvcm1Db21wb25lbnRzOiBRdWVyeUxpc3Q8RGF0YUZvcm1FY0NvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZHJlbihQYXltZW50RWNDb21wb25lbnQpIHByaXZhdGUgcGF5bWVudENvbXBvbmVudHM6IFF1ZXJ5TGlzdDxQYXltZW50RWNDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ3Vuc2F2ZWRDaGFuZ2VzTW9kYWwnKSBwcml2YXRlIHVuc2F2ZWRDaGFuZ2VzTW9kYWw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UsIHB1YmxpYyB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHVibGljIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSwgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLCBwdWJsaWMgY29uc3RzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNoaXBwaW5nUHJpY2VEaXNwbGF5OiBTaGlwcGluZ1ByaWNlRGlzcGxheVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jaGVja291dFZpZXcgPSB0aGlzLmNvbnN0cy5nZXRDaGVja291dFZpZXcoKTtcbiAgICAgICAgdGhpcy5jb25zdHMuY2hlY2tvdXRWaWV3JC5zdWJzY3JpYmUodmlldyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0VmlldyA9IHZpZXcgfHwgJ2xlZ2FjeSc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsID0gcmVzXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVTdGVwcygpXG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSByZXM/LmhpZGVQcmljZXMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSByZXM/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IHJlcz8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gcmVzPy5zaG93VGF4TGVnZW5kID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsUmVhZHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oaWRlUHJpY2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NoZWNrb3V0SW5pdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NoZWNrb3V0SW5pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrb3V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcEVuYWJsZWQoMykpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubmF2U3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcvY2hlY2tvdXQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3BPbkVudGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YkNhbiA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNhbkNoZWNrb3V0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjb250YWluX2l0ZW1zID0+IHtcbiAgICAgICAgICAgIGlmICghY29udGFpbl9pdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuQ2hlY2tvdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hhbm5lbFJlYWR5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hlY2tvdXRJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaGFzUGF5bWVudFN0ZXAgPSB0aGlzLnN0ZXBzLnNvbWUoc3RlcCA9PiBzdGVwLm5hbWUgPT09ICdwYXltZW50Jyk7XG4gICAgICAgICAgICBpZiAoIWhhc1BheW1lbnRTdGVwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdhZGRyZXNzJyk7XG4gICAgICAgICAgICBpZiAoIWFkZHJlc3NEYXRhKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSk7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0UGF5bWVudEFkZHJlc3NLZXkgPT09IGtleSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5sYXN0UGF5bWVudEFkZHJlc3NLZXkgPSBrZXk7XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoc3RlcHMgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpIHx8ICFzdGVwcykgcmV0dXJuO1xuICAgICAgICAgICAgc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXN0ZXA/Lm5hbWUpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIXN0ZXAuaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmRlbGV0ZShzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3RlcERpcnR5KHN0ZXAubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmhhcyhzdGVwLm5hbWUpICYmIHRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKHN0ZXAubmFtZSkgJiYgIXRoaXMubWFudWFsbHlPcGVuZWRTdGVwcy5oYXMoc3RlcC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmFkZChzdGVwLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UucGF5bWVudE1ldGhvZHMkLnN1YnNjcmliZShtZXRob2RzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMucGF5bWVudEF1dG9PcGVuZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghbWV0aG9kcyB8fCAhbWV0aG9kcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NoaXBtZW50U3RlcCA9IHRoaXMuc3RlcHMuc29tZShzdGVwID0+IHN0ZXAubmFtZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgICAgICBpZiAoaGFzU2hpcG1lbnRTdGVwICYmICF0aGlzLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWhhc1NoaXBtZW50U3RlcCAmJiAhdGhpcy5pc1N0ZXBFbmFibGVkKCdwYXltZW50JykpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoJ3BheW1lbnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblNlY3Rpb25zLnB1c2goJ3BheW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGF5bWVudEF1dG9PcGVuZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoc2hvd1ByaWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5hc29jaWF0ZWREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBc3NvY2lhdGVkRGF0YSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcbiAgICAgICAgdGhpcy5zZXR1cFN1bW1hcnlPYnNlcnZlcigpO1xuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVNb2JpbGVCYXJWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN1YkNhbj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLnN1YlJlYWR5Py51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dCA9IHRydWU7XG4gICAgICAgIGxldCBzdGVwczogU3RlcElbXSA9IFtdO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdjaGFubmVsJywgdGhpcy5jaGFubmVsKVxuICAgICAgICBzdGVwcy5wdXNoKHsgbmFtZTogJ2FkZHJlc3MnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiAnc2hpcG1lbnQnIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogc3RlcHMucHVzaCh7IG5hbWU6ICdwYXltZW50JyB9KTtcbiAgICAgICAgLyogc3RlcHMucHVzaCh7IG5hbWU6ICdzaGlwbWVudCcgfSk7XG4gICAgICAgIHN0ZXBzLnB1c2goeyBuYW1lOiAncGF5bWVudCcgfSk7ICovXG4gICAgICAgIC8vY29uc29sZS5sb2coc3RlcHMpXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnNldFN0ZXBzKHN0ZXBzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0ZXBwZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgJiYgKHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1NoaXBwaW5nU3RlcEFsbG93ZWQgIT0gdHJ1ZSB8fCB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgIT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVhZHkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5vblJlYWR5JC5waXBlKGZpbHRlcihyZWFkeSA9PiByZWFkeSkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICByZXMgPT4geyByZXMgJiYgdGhpcy5lbmRDaGVja291dCgpIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnb0JhY2sgPSAoKSA9PiB0aGlzLnN0ZXBwZXIucHJldmlvdXMoKTtcblxuICAgIGlzU3RlcFJlYWR5ID0gKHN0ZXBfbmFtZSkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoc3RlcF9uYW1lKTtcblxuICAgIGlzU3RlcERpcnR5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+ICEhdGhpcy5zdGVwRGlydHlNYXAuZ2V0KHN0ZXBOYW1lKTtcblxuICAgIGlzU3RlcENvbXBsZXRlID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmICF0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKTtcblxuICAgIG9uU3RlcERpcnR5Q2hhbmdlID0gKHN0ZXBOYW1lOiBzdHJpbmcsIGlzRGlydHk6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBpc0RpcnR5KTtcbiAgICB9XG5cbiAgICBlbmRDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuY29tcGxldGUoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHJlcy5vayAmJiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSksXG4gICAgICAgICAgICBlcnIgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXRTdGVwcGVyID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIgPSBuZXcgU3RlcHBlcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RlcHBlcicpLCB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGVwcGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgIH1cblxuICAgIG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB0aGlzLnN0ZXBwZXIubmV4dCgpXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcGVyKVxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICBlcnJvciA9IChlcnJvcl92YWx1ZSkgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coZXJyb3JfdmFsdWUpO1xuXG4gICAgZ2V0SWNvbiA9IChkYXRhX2l0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFfaXRlbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvY291cG9uLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9kaXNjb3VudC5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWVudmlvLnBuZyc7XG4gICAgICAgICAgICBjYXNlICdzdWJ0b3RhbCc6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9wcm9kdWN0cy5wbmcnO1xuICAgICAgICAgICAgY2FzZSAndG90YWwnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWNhcnJpdG8ucG5nJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnYXNzZXRzL2ltYWdlcy9pY28tY2Fycml0by5wbmcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVN0ZXBzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgZGlyZWNjacOzbiBzaWVtcHJlIGVzdGFcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdiaWxsaW5nLWRldGFpbHMnLCBuYW1lOiAnYWRkcmVzcycgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgZW52aW9cbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiB0aGlzLnN0ZXBzLnB1c2goeyBsYWJlbDogJ3NoaXBtZW50LW1ldGhvZCcsIG5hbWU6ICdzaGlwbWVudCcgfSlcbiAgICAgICAgLy9FbCBwYXNvIGRlIGVsZWdpciBtZXRvZG8gZGUgcGFnb1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdQYXltZW50U3RlcEFsbG93ZWQgPyBudWxsIDogdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdwYXltZW50JywgbmFtZTogJ3BheW1lbnQnIH0pXG4gICAgICAgIHRoaXMuc3RlcHMgPSB0aGlzLnN0ZXBzLm1hcCgoc3RlcCwgaW5kZXgpID0+ICh7IC4uLnN0ZXAsIHN0ZXA6IGluZGV4ICsgMSB9KSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwcylcbiAgICAgICAgaWYgKHRoaXMuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IFt0aGlzLnN0ZXBzWzBdLm5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlcEVuYWJsZWQgPSAoc3RlcE51bWJlcjogbnVtYmVyKSA9PiB0aGlzLnN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLnN0ZXAgPT0gc3RlcE51bWJlcikgPyB0cnVlIDogZmFsc2VcblxuICAgIGdldENsYXNzVG9TdGVwcGVyID0gKGluZGV4OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdsaW5lYSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXBzW2luZGV4ICsgMV0gPyAndGV4dC1jZW50ZXInIDogJ3RleHQtZW5kJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNMZWdhY3lDaGVja291dCA9ICgpID0+IHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJztcblxuICAgIGdldFNpbmdsZVN0ZXBUaXRsZSA9IChzdGVwOiBTdGVwSSAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnID8gJ2FkZHJlc3Mtc2VsZWN0aW9uJyA6IHN0ZXA/LmxhYmVsO1xuXG4gICAgZ2V0U2luZ2xlU3VtbWFyeUxhYmVsID0gKHN0ZXA6IFN0ZXBJICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnYWRkcmVzcycpIHJldHVybiB0aGlzLmdldEFkZHJlc3NTdW1tYXJ5TGFiZWwoKTtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8ubGFiZWwgfHwgJyc7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVTdW1tYXJ5VmFsdWUgPSAoc3RlcDogU3RlcEkgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8uZGV0YWlsIHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGVwU3VtbWFyeShzdGVwPy5uYW1lKTtcbiAgICB9XG5cbiAgICBpc1N0ZXBFbmFibGVkID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAubmFtZSA9PT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPD0gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyA9PT0gJ3NpbmdsZScgJiYgc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkoJ2FkZHJlc3MnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHRoaXMuc3RlcHNbaW5kZXggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkocHJldlN0ZXAubmFtZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0ZXBFbmFibGVkKHN0ZXBOYW1lKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlblNlY3Rpb25zLmluZGV4T2Yoc3RlcE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpICYmIHRoaXMuaXNTdGVwRGlydHkoc3RlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IHN0ZXBOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblVuc2F2ZWRDaGFuZ2VzTW9kYWwodGhpcy51bnNhdmVkQ2hhbmdlc01vZGFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0ZXBSZWFkeShzdGVwTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuYWRkKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdvVG9OZXh0U2VjdGlvbiA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSB8fCAhdGhpcy5zdGVwc1tpbmRleCArIDFdKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHROYW1lID0gdGhpcy5zdGVwc1tpbmRleCArIDFdLm5hbWU7XG4gICAgICAgIHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcE5hbWUpO1xuICAgICAgICBpZiAoIXRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKG5leHROYW1lKSkgdGhpcy5vcGVuU2VjdGlvbnMucHVzaChuZXh0TmFtZSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKG5leHROYW1lKTtcbiAgICB9XG5cbiAgICBnb1RvTmV4dEZyb21BZGRyZXNzID0gKCkgPT4gdGhpcy5nb1RvTmV4dFNlY3Rpb24oJ2FkZHJlc3MnKTtcblxuICAgIGlzU2VjdGlvbk9wZW4gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4gdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoc3RlcE5hbWUpO1xuXG4gICAgZ2V0U3VtbWFyeUxhYmVsID0gKHR5cGU6IENoZWNrb3V0RGF0YVsndHlwZSddKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ3N1YnRvdGFsJztcbiAgICAgICAgICAgIGNhc2UgJ2Rpc2NvdW50JzogcmV0dXJuICdkaXNjb3VudCc7XG4gICAgICAgICAgICBjYXNlICdjb3Vwb24nOiByZXR1cm4gJ2NvdXBvbic7XG4gICAgICAgICAgICBjYXNlICdzaGlwbWVudCc6IHJldHVybiAnc2hpcG1lbnQnO1xuICAgICAgICAgICAgY2FzZSAndGF4ZXMnOiByZXR1cm4gdGhpcy5zaG93VGF4TGVnZW5kID8gJ25hdGlvbmFsLXRheGVzJyA6ICd0YXhlcyc7XG4gICAgICAgICAgICBjYXNlICdjbGllbnRUYXhlcyc6IHJldHVybiAnY2xpZW50VGF4ZXMnO1xuICAgICAgICAgICAgY2FzZSAndG90YWwnOiByZXR1cm4gJ3RvdGFsJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U3VtbWFyeURhdGEgPSAoZGF0YTogQ2hlY2tvdXREYXRhW10pID0+IHtcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm4gW107XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybiBkYXRhO1xuICAgICAgICBsZXQgc3VtbWFyeURhdGEgPSBkYXRhO1xuICAgICAgICBjb25zdCBoYXNTaGlwbWVudCA9IHN1bW1hcnlEYXRhLnNvbWUoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzaGlwbWVudCcpO1xuICAgICAgICBpZiAoIWhhc1NoaXBtZW50ICYmIHRoaXMuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JykpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yZGVyVG90YWxzID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0T3JkZXIoKT8udG90YWxzO1xuICAgICAgICAgICAgY29uc3Qgc2hpcG1lbnRBbW91bnQgPSB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUob3JkZXJUb3RhbHM/LnNoaXBwaW5nKTtcbiAgICAgICAgICAgIGlmIChzaGlwbWVudEFtb3VudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hpcG1lbnRJdGVtOiBDaGVja291dERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogc2hpcG1lbnRBbW91bnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSW5kZXggPSBzdW1tYXJ5RGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RGF0YSA9IFsuLi5zdW1tYXJ5RGF0YSwgc2hpcG1lbnRJdGVtXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEl0ZW0gPSBzdW1tYXJ5RGF0YVt0b3RhbEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRUb3RhbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvdGFsSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogKHRvdGFsSXRlbT8uYW1vdW50IHx8IDApICsgKHNoaXBtZW50QW1vdW50IHx8IDApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlEYXRhID0gWy4uLnN1bW1hcnlEYXRhLnNsaWNlKDAsIHRvdGFsSW5kZXgpLCBzaGlwbWVudEl0ZW0sIGFkanVzdGVkVG90YWwsIC4uLnN1bW1hcnlEYXRhLnNsaWNlKHRvdGFsSW5kZXggKyAxKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFnZ3JlZ2F0ZURpc2NvdW50cyhzdW1tYXJ5RGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0U3VtbWFyeUFtb3VudFZpZXcgPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hpcG1lbnRBbW91bnQgPSBpdGVtPy50eXBlID09PSAnc2hpcG1lbnQnID8gdGhpcy5nZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5idWlsZFZpZXdNb2RlbChpdGVtPy5hbW91bnQsIG9yaWdpbmFsU2hpcG1lbnRBbW91bnQpO1xuICAgIH1cblxuICAgIGdldFRvdGFsQW1vdW50ID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcbiAgICAgICAgaWYgKCFzdW1tYXJ5RGF0YSB8fCAhc3VtbWFyeURhdGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGEuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIHJldHVybiB0b3RhbEl0ZW0gPyB0b3RhbEl0ZW0uYW1vdW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBzaG91bGRTaG93U3VtbWFyeUl0ZW0gPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoKGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKSAmJiBpdGVtLmFtb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICgoaXRlbS50eXBlID09PSAnZGlzY291bnQnIHx8IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpICYmIHRoaXMuaGlkZURpc2NvdW50cykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAndGF4ZXMnICYmICh0aGlzLmhpZGVUYXhlcyB8fCBpdGVtLmFtb3VudCA9PSAwKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnY2xpZW50VGF4ZXMnICYmIGl0ZW0uYW1vdW50ID09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRBZGRyZXNzU3VtbWFyeUxhYmVsID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnIGFzIGFueSk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YT8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzO1xuICAgICAgICBjb25zdCBjb250YWN0ID0gYWRkcmVzcz8uYWRkcmVzc0NvbnRhY3QgfHwgYWRkcmVzcz8uY29udGFjdCB8fCBhZGRyZXNzIHx8IHt9O1xuICAgICAgICByZXR1cm4gW2NvbnRhY3QuZmlyc3ROYW1lLCBjb250YWN0Lmxhc3ROYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIH1cblxuICAgIGdldFN0ZXBTdW1tYXJ5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKHN0ZXBOYW1lIGFzIGFueSk7XG4gICAgICAgIGlmICghc3RlcERhdGEpIHJldHVybiAnJztcbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YS5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNlbGVjdGVkPy5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcztcbiAgICAgICAgICAgIGlmICghYWRkcmVzcykgcmV0dXJuICcnO1xuICAgICAgICAgICAgY29uc3QgbWFpbiA9IFthZGRyZXNzLnN0cmVldCwgYWRkcmVzcy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uID0gW2FkZHJlc3MucHJvdmluY2VDb2RlIHx8IGFkZHJlc3MucHJvdmluY2UsIGFkZHJlc3MuY291bnRyeUNvZGUgfHwgYWRkcmVzcy5jb3VudHJ5XVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIHJldHVybiBbbWFpbiwgcmVnaW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbignIOKAlCAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE5hbWUgPT09ICdzaGlwbWVudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZExhYmVsID0gc3RlcERhdGEubWV0aG9kPy5uYW1lIHx8IHN0ZXBEYXRhLm1ldGhvZF9uYW1lIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgY29udHJhY3RMYWJlbCA9IHN0ZXBEYXRhLmNvbnRyYWN0Py5uYW1lIHx8IHN0ZXBEYXRhLmNvbnRyYWN0X25hbWUgfHwgc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdCB8fCAnJztcbiAgICAgICAgICAgIHJldHVybiBbbWV0aG9kTGFiZWwsIGNvbnRyYWN0TGFiZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAncGF5bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwRGF0YS5uYW1lIHx8IHN0ZXBEYXRhLmNvZGUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHNldFNoaXBtZW50U3VtbWFyeSA9IChzdW1tYXJ5OiB7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNMYWJlbCA9IEJvb2xlYW4oc3VtbWFyeT8ubGFiZWwpO1xuICAgICAgICBjb25zdCBoYXNEZXRhaWwgPSBCb29sZWFuKHN1bW1hcnk/LmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2hpcG1lbnRTdW1tYXJ5ID0gaGFzTGFiZWwgfHwgaGFzRGV0YWlsID8gc3VtbWFyeSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaGlwbWVudE9yaWdpbmFsQW1vdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBzaGlwbWVudFN0ZXBEYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnc2hpcG1lbnQnIGFzIGFueSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUoXG4gICAgICAgICAgICBzaGlwbWVudFN0ZXBEYXRhPy5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBzaGlwbWVudFN0ZXBEYXRhPy5jb250cmFjdD8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8uc2VsZWN0ZWQ/LmNvbnRyYWN0Py5vcmlnaW5hbFByaWNlID8/XG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVEaXNjb3VudHMoZGF0YTogQ2hlY2tvdXREYXRhW10pIHtcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCBkaXNjb3VudFRvdGFsID0gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgY291cG9uVG90YWwgPSBkYXRhXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY291cG9uJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKTtcblxuICAgICAgICBpZiAodGhpcy5oaWRlRGlzY291bnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHRyYXM6IENoZWNrb3V0RGF0YVtdID0gW107XG4gICAgICAgIGlmIChkaXNjb3VudFRvdGFsICE9PSAwKSB7XG4gICAgICAgICAgICBleHRyYXMucHVzaCh7IHR5cGU6ICdkaXNjb3VudCcsIG5hbWU6ICdkaXNjb3VudCcsIGFtb3VudDogZGlzY291bnRUb3RhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291cG9uVG90YWwgIT09IDApIHtcbiAgICAgICAgICAgIGV4dHJhcy5wdXNoKHsgdHlwZTogJ2NvdXBvbicsIG5hbWU6ICdjb3Vwb24nLCBhbW91bnQ6IGNvdXBvblRvdGFsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXh0cmFzLmxlbmd0aCkgcmV0dXJuIGZpbHRlcmVkO1xuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsSW5kZXggPSBmaWx0ZXJlZC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzdWJ0b3RhbCcpO1xuICAgICAgICBpZiAoc3VidG90YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG4gICAgICAgICAgICByZXN1bHQuc3BsaWNlKHN1YnRvdGFsSW5kZXggKyAxLCAwLCAuLi5leHRyYXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBkYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKTtcbiAgICAgICAgaWYgKGZpcnN0SW5kZXggPT09IC0xKSByZXR1cm4gWy4uLmZpbHRlcmVkLCAuLi5leHRyYXNdO1xuICAgICAgICBjb25zdCBpbnNlcnRBdCA9IGRhdGFcbiAgICAgICAgICAgIC5zbGljZSgwLCBmaXJzdEluZGV4KVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoaW5zZXJ0QXQsIDAsIC4uLmV4dHJhcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRIaWRlU3VtbWFyeVN1YnRvdGFsKGl0ZW06IENoZWNrb3V0RGF0YSkge1xuICAgICAgICBpZiAoaXRlbT8udHlwZSAhPT0gJ3N1YnRvdGFsJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5sYXN0QXNzb2NpYXRlZERhdGE7XG4gICAgICAgIGlmICghZGF0YT8ubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGEuZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbS50eXBlID09PSAndG90YWwnKTtcbiAgICAgICAgcmV0dXJuICEhdG90YWxJdGVtICYmIGl0ZW0uYW1vdW50ID09PSB0b3RhbEl0ZW0uYW1vdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXJvb3QpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSByb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXN0ZXA9XFxcIiR7c3RlcE5hbWV9XFxcIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghc2VjdGlvbikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gc2VjdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogTWF0aC5tYXgoMCwgdG9wIC0gb2Zmc2V0KSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1RvcE9uRW50ZXIoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBsZWZ0OiAwLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwU3VtbWFyeU9ic2VydmVyKCkge1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFyb290KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGZpbmlzaEJ0biA9IHJvb3QucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgIGlmICghZmluaXNoQnRuKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU1vYmlsZVN1bW1hcnlCYXIgPSAhIWVudHJ5ICYmIGVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICB9LCB7IHJvb3RNYXJnaW46ICcwcHggMHB4IC0xMjBweCAwcHgnLCB0aHJlc2hvbGQ6IDAgfSk7XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5T2JzZXJ2ZXIub2JzZXJ2ZShmaW5pc2hCdG4pO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIGV2YWx1YXRlTW9iaWxlQmFyVmlzaWJpbGl0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuZmluaXNoQnV0dG9uRWwpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQnV0dG9uRWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2hlY2tvdXRGaW5pc2hCdG4nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5maW5pc2hCdXR0b25FbCkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmZpbmlzaEJ1dHRvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCAwO1xuICAgICAgICB0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gcmVjdC50b3AgPCAodmlld3BvcnRIZWlnaHQgLSA4MCk7XG4gICAgfVxuXG4gICAgYXJlQWxsU3RlcHNSZWFkeSA9IChzdGVwczogeyBpc1JlYWR5OiAoKSA9PiBib29sZWFuOyBuYW1lPzogc3RyaW5nIH1bXSkgPT4ge1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0ZXBzLmV2ZXJ5KHN0ZXAgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdGVwLmlzUmVhZHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzdGVwLm5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzU3RlcERpcnR5KHN0ZXAubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3VsZEhpZGVGaW5pc2hCdXR0b24gPSAoc3RlcHM6IHsgaXNSZWFkeTogKCkgPT4gYm9vbGVhbiB9W10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuYXJlQWxsU3RlcHNSZWFkeShzdGVwcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGF5bWVudERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdwYXltZW50JyBhcyBhbnkpO1xuICAgICAgICByZXR1cm4gISFwYXltZW50RGF0YT8uYXV0b0NvbXBsZXRlO1xuICAgIH1cblxuICAgIG9wZW5VbnNhdmVkQ2hhbmdlc01vZGFsID0gKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwge1xuICAgICAgICAgICAgY2xhc3M6ICdtb2RhbC1kaWFsb2ctY2VudGVyZWQgY2hlY2tvdXQtdW5zYXZlZC1tb2RhbCcsXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FuY2VsVW5zYXZlZENsb3NlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgIH1cblxuICAgIGNvbmZpcm1VbnNhdmVkRGlzY2FyZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsUmVmPy5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lO1xuICAgICAgICB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaXNjYXJkU3RlcENoYW5nZXMoc3RlcE5hbWUpO1xuICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXBOYW1lKTtcbiAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFmb3JtID0gdGhpcy5kYXRhZm9ybUNvbXBvbmVudHM/LmZpcnN0O1xuICAgICAgICAgICAgaWYgKGRhdGFmb3JtKSB7XG4gICAgICAgICAgICAgICAgZGF0YWZvcm0uZGlzY2FyZENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXltZW50ID0gdGhpcy5wYXltZW50Q29tcG9uZW50cz8uZmlyc3Q7XG4gICAgICAgICAgICBpZiAocGF5bWVudCkge1xuICAgICAgICAgICAgICAgIHBheW1lbnQuZGlzY2FyZENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuICAgIH1cbn1cbiJdfQ==
645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9jaGVja291dC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxPQUFPLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMs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QUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNKLENBQUE7O1lBNWlCdUMsZUFBZTtZQUF3QixZQUFZO1lBQ3BFLE1BQU07WUFBc0IsV0FBVztZQUEwQixlQUFlO1lBQ3hFLG9CQUFvQjtZQUFpQixTQUFTO1lBQ2pELFVBQVU7WUFBd0IsY0FBYztZQUN0QywyQkFBMkI7WUFDMUMsVUFBVTs7QUFUTTtJQUFsQyxZQUFZLENBQUMsbUJBQW1CLENBQUM7K0RBQTREO0FBQzVEO0lBQWpDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQzs4REFBMEQ7QUFDekQ7SUFBakMsU0FBUyxDQUFDLHFCQUFxQixDQUFDO2dFQUErQztBQXNlaEY7SUFGQyxZQUFZLENBQUMsZUFBZSxDQUFDO0lBQzdCLFlBQVksQ0FBQyxlQUFlLENBQUM7c0VBVTdCO0FBcGhCUSxtQkFBbUI7SUFML0IsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixra2VBQTJDOztLQUU5QyxDQUFDO0dBQ1csbUJBQW1CLENBbWxCL0I7U0FubEJZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IFN0ZXBwZXIgZnJvbSAnYnMtc3RlcHBlcic7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoZWNrb3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2NoZWNrb3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBTdGVwSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XG5pbXBvcnQgeyBDaGVja291dERhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENoZWNrb3V0Vmlld1R5cGUsIENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvcmUuY29uc3RzJztcbmltcG9ydCB7IERhdGFGb3JtRWNDb21wb25lbnQgfSBmcm9tICcuL2RhdGFmb3JtLWVjL2RhdGFmb3JtLWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXltZW50RWNDb21wb25lbnQgfSBmcm9tICcuL3BheW1lbnQtZWMvcGF5bWVudC1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL3NoaXBwaW5nLXByaWNlLWRpc3BsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBTZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VvLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jaGVja291dC1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrb3V0LWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jaGVja291dC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RlcHBlcjogU3RlcHBlcjtcbiAgICBwdWJsaWMgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHB1YmxpYyBjYW5DaGVja291dCA9IGZhbHNlO1xuICAgIHB1YmxpYyByZXF1aXJlX2xvZ2luID0gZmFsc2U7XG4gICAgcHVibGljIHN1YkNhbjogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBzdWJSZWFkeTogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBjaGFubmVsOiBhbnk7XG4gICAgcHVibGljIHN0ZXBzOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY2hlY2tvdXRWaWV3OiBDaGVja291dFZpZXdUeXBlID0gJ2xlZ2FjeSc7XG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0QXNzb2NpYXRlZERhdGE6IENoZWNrb3V0RGF0YVtdIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIG9wZW5TZWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIGxhc3RQYXltZW50QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwYXltZW50QXV0b09wZW5lZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXV0b0Nsb3NlZFN0ZXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBtYW51YWxseU9wZW5lZFN0ZXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNoaXBtZW50U3VtbWFyeTogeyBsYWJlbD86IHN0cmluZzsgZGV0YWlsPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgaGlkZU1vYmlsZVN1bW1hcnlCYXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIHN1bW1hcnlPYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGZpbmlzaEJ1dHRvbkVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgc3RlcERpcnR5TWFwID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2xvc2VTdGVwTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBuYXZTdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGNoYW5uZWxSZWFkeSA9IGZhbHNlO1xuICAgIHByaXZhdGUgcGVuZGluZ0NoZWNrb3V0SW5pdCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oRGF0YUZvcm1FY0NvbXBvbmVudCkgcHJpdmF0ZSBkYXRhZm9ybUNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxEYXRhRm9ybUVjQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkcmVuKFBheW1lbnRFY0NvbXBvbmVudCkgcHJpdmF0ZSBwYXltZW50Q29tcG9uZW50czogUXVlcnlMaXN0PFBheW1lbnRFY0NvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgndW5zYXZlZENoYW5nZXNNb2RhbCcpIHByaXZhdGUgdW5zYXZlZENoYW5nZXNNb2RhbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjaGVja291dFNlcnZpY2U6IENoZWNrb3V0U2VydmljZSwgcHVibGljIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwdWJsaWMgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjaGFubmVsU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UsIHB1YmxpYyBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2hpcHBpbmdQcmljZURpc3BsYXk6IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHNlbzogU2VvU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0VmlldyA9IHRoaXMuY29uc3RzLmdldENoZWNrb3V0VmlldygpO1xuICAgICAgICB0aGlzLmNvbnN0cy5jaGVja291dFZpZXckLnN1YnNjcmliZSh2aWV3ID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRWaWV3ID0gdmlldyB8fCAnbGVnYWN5JztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwgPSByZXNcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZXBzKClcbiAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IHJlcz8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IHJlcz8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gcmVzPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgPSByZXM/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2hlY2tvdXRJbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hlY2tvdXRJbml0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdGVwRW5hYmxlZCgzKSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoZWNrb3V0U2VvID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXRlTmFtZSA9IHRoaXMuc2VvLmdldFNpdGVOYW1lKCk7XG4gICAgICAgIHRoaXMuc2VvLnNldFRpdGxlKGBDaGVja291dCB8ICR7c2l0ZU5hbWV9YCk7XG4gICAgICAgIHRoaXMuc2VvLnNldERlc2NyaXB0aW9uKGBGaW5hbGl6w6EgdHUgY29tcHJhIGVuICR7c2l0ZU5hbWV9LmApO1xuICAgICAgICB0aGlzLnNlby5zZXRPZ1R5cGUoJ3dlYnNpdGUnKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0Tm9JbmRleCh0cnVlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VvLnNldENhbm9uaWNhbCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5uYXZTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJy9jaGVja291dCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ViQ2FuID0gdGhpcy5jaGVja291dFNlcnZpY2UuY2FuQ2hlY2tvdXQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGNvbnRhaW5faXRlbXMgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250YWluX2l0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5jaGFubmVsUmVhZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGVja291dEluaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrb3V0KCk7XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoYXNQYXltZW50U3RlcCA9IHRoaXMuc3RlcHMuc29tZShzdGVwID0+IHN0ZXAubmFtZSA9PT0gJ3BheW1lbnQnKTtcbiAgICAgICAgICAgIGlmICghaGFzUGF5bWVudFN0ZXApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NEYXRhID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnKTtcbiAgICAgICAgICAgIGlmICghYWRkcmVzc0RhdGEpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RQYXltZW50QWRkcmVzc0tleSA9PT0ga2V5KSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmxhc3RQYXltZW50QWRkcmVzc0tleSA9IGtleTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZShzdGVwcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgfHwgIXN0ZXBzKSByZXR1cm47XG4gICAgICAgICAgICBzdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc3RlcD8ubmFtZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICghc3RlcC5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ2xvc2VkU3RlcHMuZGVsZXRlKHN0ZXAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwRGlydHkoc3RlcC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hdXRvQ2xvc2VkU3RlcHMuaGFzKHN0ZXAubmFtZSkgJiYgdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoc3RlcC5uYW1lKSAmJiAhdGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmhhcyhzdGVwLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ2xvc2VkU3RlcHMuYWRkKHN0ZXAubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5wYXltZW50TWV0aG9kcyQuc3Vic2NyaWJlKG1ldGhvZHMgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy5wYXltZW50QXV0b09wZW5lZCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFtZXRob2RzIHx8ICFtZXRob2RzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaGFzU2hpcG1lbnRTdGVwID0gdGhpcy5zdGVwcy5zb21lKHN0ZXAgPT4gc3RlcC5uYW1lID09PSAnc2hpcG1lbnQnKTtcbiAgICAgICAgICAgIGlmIChoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JykpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghaGFzU2hpcG1lbnRTdGVwICYmICF0aGlzLmlzU3RlcEVuYWJsZWQoJ3BheW1lbnQnKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcygncGF5bWVudCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMucHVzaCgncGF5bWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXltZW50QXV0b09wZW5lZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrb3V0U2VvKCk7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKHNob3dQcmljZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuYXNvY2lhdGVkRGF0YSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0QXNzb2NpYXRlZERhdGEgPSBkYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3BPbkVudGVyKCk7XG4gICAgICAgIHRoaXMuc2V0dXBTdW1tYXJ5T2JzZXJ2ZXIoKTtcbiAgICAgICAgdGhpcy5maW5pc2hCdXR0b25FbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjaGVja291dEZpbmlzaEJ0bicpO1xuICAgICAgICB0aGlzLmV2YWx1YXRlTW9iaWxlQmFyVmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdWJDYW4/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgdGhpcy5zdWJSZWFkeT8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLm5hdlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuQ2hlY2tvdXQgPSB0cnVlO1xuICAgICAgICBsZXQgc3RlcHM6IFN0ZXBJW10gPSBbXTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnY2hhbm5lbCcsIHRoaXMuY2hhbm5lbClcbiAgICAgICAgc3RlcHMucHVzaCh7IG5hbWU6ICdhZGRyZXNzJyB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiBzdGVwcy5wdXNoKHsgbmFtZTogJ3NoaXBtZW50JyB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiAncGF5bWVudCcgfSk7XG4gICAgICAgIC8qIHN0ZXBzLnB1c2goeyBuYW1lOiAnc2hpcG1lbnQnIH0pO1xuICAgICAgICBzdGVwcy5wdXNoKHsgbmFtZTogJ3BheW1lbnQnIH0pOyAqL1xuICAgICAgICAvL2NvbnNvbGUubG9nKHN0ZXBzKVxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5zZXRTdGVwcyhzdGVwcyk7XG4gICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q2hlY2tvdXQoKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGVwcGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDaGVja291dCgpICYmICh0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkICE9IHRydWUgfHwgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkICE9IHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLnN1YlJlYWR5ID0gdGhpcy5jaGVja291dFNlcnZpY2Uub25SZWFkeSQucGlwZShmaWx0ZXIocmVhZHkgPT4gcmVhZHkpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgcmVzID0+IHsgcmVzICYmIHRoaXMuZW5kQ2hlY2tvdXQoKSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ29CYWNrID0gKCkgPT4gdGhpcy5zdGVwcGVyLnByZXZpb3VzKCk7XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KHN0ZXBfbmFtZSk7XG5cbiAgICBpc1N0ZXBEaXJ0eSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiAhIXRoaXMuc3RlcERpcnR5TWFwLmdldChzdGVwTmFtZSk7XG5cbiAgICBpc1N0ZXBDb21wbGV0ZSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB0aGlzLmlzU3RlcFJlYWR5KHN0ZXBOYW1lKSAmJiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwTmFtZSk7XG5cbiAgICBvblN0ZXBEaXJ0eUNoYW5nZSA9IChzdGVwTmFtZTogc3RyaW5nLCBpc0RpcnR5OiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgaXNEaXJ0eSk7XG4gICAgfVxuXG4gICAgZW5kQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNvbXBsZXRlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiByZXMub2sgJiYgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjaGVja291dC9vcmRlcl9zdWNjZXNzJ10pLFxuICAgICAgICAgICAgZXJyID0+IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3InKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgc2V0U3RlcHBlciA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N0ZXBwZXInKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyID0gbmV3IFN0ZXBwZXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N0ZXBwZXInKSwge1xuICAgICAgICAgICAgICAgICAgICBsaW5lYXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RlcHBlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHBlcilcbiAgICB9XG5cbiAgICBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHBlcilcbiAgICAgICAgdGhpcy5zdGVwcGVyLm5leHQoKVxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHBlcilcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSlcbiAgICB9O1xuXG4gICAgZXJyb3IgPSAoZXJyb3JfdmFsdWUpID0+IHRoaXMudG9hc3RyU2VydmljZS5zaG93KGVycm9yX3ZhbHVlKTtcblxuICAgIGdldEljb24gPSAoZGF0YV9pdGVtOiBDaGVja291dERhdGEpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhX2l0ZW0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY291cG9uJzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2NvdXBvbi5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnZGlzY291bnQnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvZGlzY291bnQucG5nJztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBtZW50JzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljby1lbnZpby5wbmcnO1xuICAgICAgICAgICAgY2FzZSAnc3VidG90YWwnOiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvcHJvZHVjdHMucG5nJztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICdhc3NldHMvaW1hZ2VzL2ljby1jYXJyaXRvLnBuZyc7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJ2Fzc2V0cy9pbWFnZXMvaWNvLWNhcnJpdG8ucG5nJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemVTdGVwcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xuICAgICAgICAvL0VsIHBhc28gZGUgZWxlZ2lyIGRpcmVjY2nDs24gc2llbXByZSBlc3RhXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaCh7IGxhYmVsOiAnYmlsbGluZy1kZXRhaWxzJywgbmFtZTogJ2FkZHJlc3MnIH0pXG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgbWV0b2RvIGRlIGVudmlvXG4gICAgICAgIHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1NoaXBwaW5nU3RlcEFsbG93ZWQgPyBudWxsIDogdGhpcy5zdGVwcy5wdXNoKHsgbGFiZWw6ICdzaGlwbWVudC1tZXRob2QnLCBuYW1lOiAnc2hpcG1lbnQnIH0pXG4gICAgICAgIC8vRWwgcGFzbyBkZSBlbGVnaXIgbWV0b2RvIGRlIHBhZ29cbiAgICAgICAgdGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkID8gbnVsbCA6IHRoaXMuc3RlcHMucHVzaCh7IGxhYmVsOiAncGF5bWVudCcsIG5hbWU6ICdwYXltZW50JyB9KVxuICAgICAgICB0aGlzLnN0ZXBzID0gdGhpcy5zdGVwcy5tYXAoKHN0ZXAsIGluZGV4KSA9PiAoeyAuLi5zdGVwLCBzdGVwOiBpbmRleCArIDEgfSkpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3RlcHMpXG4gICAgICAgIGlmICh0aGlzLnN0ZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSBbdGhpcy5zdGVwc1swXS5uYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0ZXBFbmFibGVkID0gKHN0ZXBOdW1iZXI6IG51bWJlcikgPT4gdGhpcy5zdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5zdGVwID09IHN0ZXBOdW1iZXIpID8gdHJ1ZSA6IGZhbHNlXG5cbiAgICBnZXRDbGFzc1RvU3RlcHBlciA9IChpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnbGluZWEnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwc1tpbmRleCArIDFdID8gJ3RleHQtY2VudGVyJyA6ICd0ZXh0LWVuZCdcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTGVnYWN5Q2hlY2tvdXQgPSAoKSA9PiB0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZSc7XG5cbiAgICBnZXRTaW5nbGVTdGVwVGl0bGUgPSAoc3RlcDogU3RlcEkgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+XG4gICAgICAgIHN0ZXA/Lm5hbWUgPT09ICdhZGRyZXNzJyA/ICdhZGRyZXNzLXNlbGVjdGlvbicgOiBzdGVwPy5sYWJlbDtcblxuICAgIGdldFNpbmdsZVN1bW1hcnlMYWJlbCA9IChzdGVwOiBTdGVwSSAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAoc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnKSByZXR1cm4gdGhpcy5nZXRBZGRyZXNzU3VtbWFyeUxhYmVsKCk7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnc2hpcG1lbnQnKSByZXR1cm4gdGhpcy5zaGlwbWVudFN1bW1hcnk/LmxhYmVsIHx8ICcnO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0U2luZ2xlU3VtbWFyeVZhbHVlID0gKHN0ZXA6IFN0ZXBJICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChzdGVwPy5uYW1lID09PSAnc2hpcG1lbnQnKSByZXR1cm4gdGhpcy5zaGlwbWVudFN1bW1hcnk/LmRldGFpbCB8fCAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcFN1bW1hcnkoc3RlcD8ubmFtZSk7XG4gICAgfVxuXG4gICAgaXNTdGVwRW5hYmxlZCA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4IDw9IDApIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgPT09ICdzaW5nbGUnICYmIHN0ZXBOYW1lID09PSAncGF5bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3RlcFJlYWR5KCdhZGRyZXNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldlN0ZXAgPSB0aGlzLnN0ZXBzW2luZGV4IC0gMV07XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3RlcFJlYWR5KHByZXZTdGVwLm5hbWUpO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlY3Rpb24gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdGVwRW5hYmxlZChzdGVwTmFtZSkpIHJldHVybjtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5TZWN0aW9ucy5pbmRleE9mKHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RlcFJlYWR5KHN0ZXBOYW1lKSAmJiB0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUgPSBzdGVwTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5VbnNhdmVkQ2hhbmdlc01vZGFsKHRoaXMudW5zYXZlZENoYW5nZXNNb2RhbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlblNlY3Rpb25zLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmFkZChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VjdGlvbihzdGVwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnb1RvTmV4dFNlY3Rpb24gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KHN0ZXAgPT4gc3RlcC5uYW1lID09PSBzdGVwTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEgfHwgIXRoaXMuc3RlcHNbaW5kZXggKyAxXSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0TmFtZSA9IHRoaXMuc3RlcHNbaW5kZXggKyAxXS5uYW1lO1xuICAgICAgICB0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXBOYW1lKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhuZXh0TmFtZSkpIHRoaXMub3BlblNlY3Rpb25zLnB1c2gobmV4dE5hbWUpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvU2VjdGlvbihuZXh0TmFtZSk7XG4gICAgfVxuXG4gICAgZ29Ub05leHRGcm9tQWRkcmVzcyA9ICgpID0+IHRoaXMuZ29Ub05leHRTZWN0aW9uKCdhZGRyZXNzJyk7XG5cbiAgICBpc1NlY3Rpb25PcGVuID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKHN0ZXBOYW1lKTtcblxuICAgIGdldFN1bW1hcnlMYWJlbCA9ICh0eXBlOiBDaGVja291dERhdGFbJ3R5cGUnXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1YnRvdGFsJzogcmV0dXJuICdzdWJ0b3RhbCc7XG4gICAgICAgICAgICBjYXNlICdkaXNjb3VudCc6IHJldHVybiAnZGlzY291bnQnO1xuICAgICAgICAgICAgY2FzZSAnY291cG9uJzogcmV0dXJuICdjb3Vwb24nO1xuICAgICAgICAgICAgY2FzZSAnc2hpcG1lbnQnOiByZXR1cm4gJ3NoaXBtZW50JztcbiAgICAgICAgICAgIGNhc2UgJ3RheGVzJzogcmV0dXJuIHRoaXMuc2hvd1RheExlZ2VuZCA/ICduYXRpb25hbC10YXhlcycgOiAndGF4ZXMnO1xuICAgICAgICAgICAgY2FzZSAnY2xpZW50VGF4ZXMnOiByZXR1cm4gJ2NsaWVudFRheGVzJztcbiAgICAgICAgICAgIGNhc2UgJ3RvdGFsJzogcmV0dXJuICd0b3RhbCc7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFN1bW1hcnlEYXRhID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdKSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm4gZGF0YTtcbiAgICAgICAgbGV0IHN1bW1hcnlEYXRhID0gZGF0YTtcbiAgICAgICAgY29uc3QgaGFzU2hpcG1lbnQgPSBzdW1tYXJ5RGF0YS5zb21lKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc2hpcG1lbnQnKTtcbiAgICAgICAgaWYgKCFoYXNTaGlwbWVudCAmJiB0aGlzLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSB7XG4gICAgICAgICAgICBjb25zdCBvcmRlclRvdGFscyA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldE9yZGVyKCk/LnRvdGFscztcbiAgICAgICAgICAgIGNvbnN0IHNoaXBtZW50QW1vdW50ID0gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKG9yZGVyVG90YWxzPy5zaGlwcGluZyk7XG4gICAgICAgICAgICBpZiAoc2hpcG1lbnRBbW91bnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBtZW50SXRlbTogQ2hlY2tvdXREYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IHNoaXBtZW50QW1vdW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gc3VtbWFyeURhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcbiAgICAgICAgICAgICAgICBpZiAodG90YWxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeURhdGEgPSBbLi4uc3VtbWFyeURhdGEsIHNoaXBtZW50SXRlbV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGFbdG90YWxJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkVG90YWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50b3RhbEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQ6ICh0b3RhbEl0ZW0/LmFtb3VudCB8fCAwKSArIChzaGlwbWVudEFtb3VudCB8fCAwKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RGF0YSA9IFsuLi5zdW1tYXJ5RGF0YS5zbGljZSgwLCB0b3RhbEluZGV4KSwgc2hpcG1lbnRJdGVtLCBhZGp1c3RlZFRvdGFsLCAuLi5zdW1tYXJ5RGF0YS5zbGljZSh0b3RhbEluZGV4ICsgMSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGVEaXNjb3VudHMoc3VtbWFyeURhdGEpO1xuICAgIH1cblxuICAgIGdldFN1bW1hcnlBbW91bnRWaWV3ID0gKGl0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFNoaXBtZW50QW1vdW50ID0gaXRlbT8udHlwZSA9PT0gJ3NoaXBtZW50JyA/IHRoaXMuZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hpcHBpbmdQcmljZURpc3BsYXkuYnVpbGRWaWV3TW9kZWwoaXRlbT8uYW1vdW50LCBvcmlnaW5hbFNoaXBtZW50QW1vdW50KTtcbiAgICB9XG5cbiAgICBnZXRUb3RhbEFtb3VudCA9IChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG4gICAgICAgIGlmICghc3VtbWFyeURhdGEgfHwgIXN1bW1hcnlEYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuICAgICAgICByZXR1cm4gdG90YWxJdGVtID8gdG90YWxJdGVtLmFtb3VudCA6IG51bGw7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd1N1bW1hcnlJdGVtID0gKGl0ZW06IENoZWNrb3V0RGF0YSkgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgaXRlbS5hbW91bnQgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoKGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKSAmJiB0aGlzLmhpZGVEaXNjb3VudHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RheGVzJyAmJiAodGhpcy5oaWRlVGF4ZXMgfHwgaXRlbS5hbW91bnQgPT0gMCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsaWVudFRheGVzJyAmJiBpdGVtLmFtb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEhpZGVTdW1tYXJ5U3VidG90YWwoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0QWRkcmVzc1N1bW1hcnlMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGE6IGFueSA9IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdhZGRyZXNzJyBhcyBhbnkpO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcyB8fCBzdGVwRGF0YT8uc2VsZWN0ZWQ/LnNoaXBwaW5nQWRkcmVzcztcbiAgICAgICAgY29uc3QgY29udGFjdCA9IGFkZHJlc3M/LmFkZHJlc3NDb250YWN0IHx8IGFkZHJlc3M/LmNvbnRhY3QgfHwgYWRkcmVzcyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIFtjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBnZXRTdGVwU3VtbWFyeSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBEYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YShzdGVwTmFtZSBhcyBhbnkpO1xuICAgICAgICBpZiAoIXN0ZXBEYXRhKSByZXR1cm4gJyc7XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gc3RlcERhdGEuc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zaGlwcGluZ0FkZHJlc3M7XG4gICAgICAgICAgICBpZiAoIWFkZHJlc3MpIHJldHVybiAnJztcbiAgICAgICAgICAgIGNvbnN0IG1haW4gPSBbYWRkcmVzcy5zdHJlZXQsIGFkZHJlc3MuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IFthZGRyZXNzLnByb3ZpbmNlQ29kZSB8fCBhZGRyZXNzLnByb3ZpbmNlLCBhZGRyZXNzLmNvdW50cnlDb2RlIHx8IGFkZHJlc3MuY291bnRyeV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICByZXR1cm4gW21haW4sIHJlZ2lvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDigJQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBOYW1lID09PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2RMYWJlbCA9IHN0ZXBEYXRhLm1ldGhvZD8ubmFtZSB8fCBzdGVwRGF0YS5tZXRob2RfbmFtZSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0TGFiZWwgPSBzdGVwRGF0YS5jb250cmFjdD8ubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdF9uYW1lIHx8IHN0ZXBEYXRhLm5hbWUgfHwgc3RlcERhdGEuY29udHJhY3QgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gW21ldGhvZExhYmVsLCBjb250cmFjdExhYmVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb2RlIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBzZXRTaGlwbWVudFN1bW1hcnkgPSAoc3VtbWFyeTogeyBsYWJlbD86IHN0cmluZzsgZGV0YWlsPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgaGFzTGFiZWwgPSBCb29sZWFuKHN1bW1hcnk/LmxhYmVsKTtcbiAgICAgICAgY29uc3QgaGFzRGV0YWlsID0gQm9vbGVhbihzdW1tYXJ5Py5kZXRhaWwpO1xuICAgICAgICB0aGlzLnNoaXBtZW50U3VtbWFyeSA9IGhhc0xhYmVsIHx8IGhhc0RldGFpbCA/IHN1bW1hcnkgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hpcG1lbnRPcmlnaW5hbEFtb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3Qgc2hpcG1lbnRTdGVwRGF0YTogYW55ID0gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3NoaXBtZW50JyBhcyBhbnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKFxuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgc2hpcG1lbnRTdGVwRGF0YT8uY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2UgPz9cbiAgICAgICAgICAgIHNoaXBtZW50U3RlcERhdGE/LnNlbGVjdGVkPy5jb250cmFjdD8ub3JpZ2luYWxQcmljZSA/P1xuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWdncmVnYXRlRGlzY291bnRzKGRhdGE6IENoZWNrb3V0RGF0YVtdKSB7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybiBbXTtcbiAgICAgICAgY29uc3QgZGlzY291bnRUb3RhbCA9IGRhdGFcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IGNvdXBvblRvdGFsID0gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlkZURpc2NvdW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXh0cmFzOiBDaGVja291dERhdGFbXSA9IFtdO1xuICAgICAgICBpZiAoZGlzY291bnRUb3RhbCAhPT0gMCkge1xuICAgICAgICAgICAgZXh0cmFzLnB1c2goeyB0eXBlOiAnZGlzY291bnQnLCBuYW1lOiAnZGlzY291bnQnLCBhbW91bnQ6IGRpc2NvdW50VG90YWwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdXBvblRvdGFsICE9PSAwKSB7XG4gICAgICAgICAgICBleHRyYXMucHVzaCh7IHR5cGU6ICdjb3Vwb24nLCBuYW1lOiAnY291cG9uJywgYW1vdW50OiBjb3Vwb25Ub3RhbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dHJhcy5sZW5ndGgpIHJldHVybiBmaWx0ZXJlZDtcblxuICAgICAgICBjb25zdCBzdWJ0b3RhbEluZGV4ID0gZmlsdGVyZWQuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc3VidG90YWwnKTtcbiAgICAgICAgaWYgKHN1YnRvdGFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuICAgICAgICAgICAgcmVzdWx0LnNwbGljZShzdWJ0b3RhbEluZGV4ICsgMSwgMCwgLi4uZXh0cmFzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJyk7XG4gICAgICAgIGlmIChmaXJzdEluZGV4ID09PSAtMSkgcmV0dXJuIFsuLi5maWx0ZXJlZCwgLi4uZXh0cmFzXTtcbiAgICAgICAgY29uc3QgaW5zZXJ0QXQgPSBkYXRhXG4gICAgICAgICAgICAuc2xpY2UoMCwgZmlyc3RJbmRleClcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJykubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluc2VydEF0LCAwLCAuLi5leHRyYXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtOiBDaGVja291dERhdGEpIHtcbiAgICAgICAgaWYgKGl0ZW0/LnR5cGUgIT09ICdzdWJ0b3RhbCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMubGFzdEFzc29jaWF0ZWREYXRhO1xuICAgICAgICBpZiAoIWRhdGE/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgIHJldHVybiAhIXRvdGFsSXRlbSAmJiBpdGVtLmFtb3VudCA9PT0gdG90YWxJdGVtLmFtb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbFRvU2VjdGlvbihzdGVwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCFyb290KSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zdGVwPVxcXCIke3N0ZXBOYW1lfVxcXCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IHNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IE1hdGgubWF4KDAsIHRvcCAtIG9mZnNldCksIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9Ub3BPbkVudGVyKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFN1bW1hcnlPYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghcm9vdCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaW5pc2hCdG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNjaGVja291dEZpbmlzaEJ0bicpO1xuICAgICAgICBpZiAoIWZpbmlzaEJ0bikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgICAgICB0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gISFlbnRyeSAmJiBlbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgfSwgeyByb290TWFyZ2luOiAnMHB4IDBweCAtMTIwcHggMHB4JywgdGhyZXNob2xkOiAwIH0pO1xuXG4gICAgICAgIHRoaXMuc3VtbWFyeU9ic2VydmVyLm9ic2VydmUoZmluaXNoQnRuKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmZpbmlzaEJ1dHRvbkVsKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmluaXNoQnV0dG9uRWwpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5maW5pc2hCdXR0b25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMDtcbiAgICAgICAgdGhpcy5oaWRlTW9iaWxlU3VtbWFyeUJhciA9IHJlY3QudG9wIDwgKHZpZXdwb3J0SGVpZ2h0IC0gODApO1xuICAgIH1cblxuICAgIGFyZUFsbFN0ZXBzUmVhZHkgPSAoc3RlcHM6IHsgaXNSZWFkeTogKCkgPT4gYm9vbGVhbjsgbmFtZT86IHN0cmluZyB9W10pID0+IHtcbiAgICAgICAgaWYgKCFzdGVwcyB8fCAhc3RlcHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGVwcy5ldmVyeShzdGVwID0+IHtcbiAgICAgICAgICAgIGlmICghc3RlcC5pc1JlYWR5KCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc3RlcC5uYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG91bGRIaWRlRmluaXNoQnV0dG9uID0gKHN0ZXBzOiB7IGlzUmVhZHk6ICgpID0+IGJvb2xlYW4gfVtdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmFyZUFsbFN0ZXBzUmVhZHkoc3RlcHMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHBheW1lbnREYXRhOiBhbnkgPSB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgncGF5bWVudCcgYXMgYW55KTtcbiAgICAgICAgcmV0dXJuICEhcGF5bWVudERhdGE/LmF1dG9Db21wbGV0ZTtcbiAgICB9XG5cbiAgICBvcGVuVW5zYXZlZENoYW5nZXNNb2RhbCA9ICh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHtcbiAgICAgICAgICAgIGNsYXNzOiAnbW9kYWwtZGlhbG9nLWNlbnRlcmVkIGNoZWNrb3V0LXVuc2F2ZWQtbW9kYWwnLFxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbFVuc2F2ZWRDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMubW9kYWxSZWY/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBjb25maXJtVW5zYXZlZERpc2NhcmQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lKTtcbiAgICAgICAgdGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwTmFtZSk7XG4gICAgICAgIHRoaXMubW9kYWxSZWY/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2NhcmRTdGVwQ2hhbmdlcyhzdGVwTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhZm9ybSA9IHRoaXMuZGF0YWZvcm1Db21wb25lbnRzPy5maXJzdDtcbiAgICAgICAgICAgIGlmIChkYXRhZm9ybSkge1xuICAgICAgICAgICAgICAgIGRhdGFmb3JtLmRpc2NhcmRDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgICAgY29uc3QgcGF5bWVudCA9IHRoaXMucGF5bWVudENvbXBvbmVudHM/LmZpcnN0O1xuICAgICAgICAgICAgaWYgKHBheW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXltZW50LmRpc2NhcmRDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcbiAgICB9XG59XG4iXX0=