@vendure/admin-ui 2.0.3 → 2.0.4

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 (46) hide show
  1. package/core/common/version.d.ts +1 -1
  2. package/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.d.ts +1 -0
  3. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +2 -1
  4. package/esm2022/catalog/components/stock-location-detail/stock-location-detail.component.mjs +32 -33
  5. package/esm2022/core/common/version.mjs +2 -2
  6. package/esm2022/core/components/app-shell/app-shell.component.mjs +3 -3
  7. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +6 -1
  8. package/esm2022/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.mjs +7 -6
  9. package/esm2022/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +40 -1
  10. package/esm2022/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +3 -3
  11. package/esm2022/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +2 -2
  12. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +6 -20
  13. package/esm2022/login/components/login/login.component.mjs +3 -3
  14. package/esm2022/order/components/select-customer-dialog/select-customer-dialog.component.mjs +3 -3
  15. package/fesm2022/vendure-admin-ui-catalog.mjs +31 -32
  16. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  17. package/fesm2022/vendure-admin-ui-core.mjs +57 -12
  18. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  19. package/fesm2022/vendure-admin-ui-customer.mjs +5 -19
  20. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  21. package/fesm2022/vendure-admin-ui-login.mjs +2 -2
  22. package/fesm2022/vendure-admin-ui-login.mjs.map +1 -1
  23. package/fesm2022/vendure-admin-ui-order.mjs +2 -2
  24. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  25. package/package.json +13 -13
  26. package/static/assets/logo-login.webp +0 -0
  27. package/static/assets/logo-top.webp +0 -0
  28. package/static/i18n-messages/cs.json +1 -0
  29. package/static/i18n-messages/de.json +2 -1
  30. package/static/i18n-messages/en.json +1 -0
  31. package/static/i18n-messages/es.json +2 -1
  32. package/static/i18n-messages/fr.json +2 -1
  33. package/static/i18n-messages/it.json +2 -1
  34. package/static/i18n-messages/pl.json +2 -1
  35. package/static/i18n-messages/pt_BR.json +2 -1
  36. package/static/i18n-messages/pt_PT.json +2 -1
  37. package/static/i18n-messages/ru.json +2 -1
  38. package/static/i18n-messages/uk.json +2 -1
  39. package/static/i18n-messages/zh_Hans.json +2 -1
  40. package/static/i18n-messages/zh_Hant.json +2 -1
  41. package/static/styles/global/_overrides.scss +0 -6
  42. package/static/theme.min.css +1 -1
  43. package/static/assets/logo-300px.png +0 -0
  44. package/static/assets/logo-75px.png +0 -0
  45. package/static/assets/logo.svg +0 -11
  46. package/static/assets/logo.webp +0 -0
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';
2
+ import { UntypedFormArray, Validators } from '@angular/forms';
3
3
  import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
4
4
  import { CUSTOMER_FRAGMENT, CustomerDetailQueryDocument, EditNoteDialogComponent, SortOrder, TypedBaseDetailComponent, } from '@vendure/admin-ui/core';
5
5
  import { notNullOrUndefined } from '@vendure/common/lib/shared-utils';
@@ -130,13 +130,6 @@ export class CustomerDetailComponent extends TypedBaseDetailComponent {
130
130
  defaultBillingAddress: false,
131
131
  customFields: this.formBuilder.group(this.addressCustomFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {})),
132
132
  });
133
- // if (this.addressCustomFields.length) {
134
- // const customFieldsGroup = this.formBuilder.group({});
135
- // for (const fieldDef of this.addressCustomFields) {
136
- // customFieldsGroup.addControl(fieldDef.name, new UntypedFormControl(''));
137
- // }
138
- // newAddress.addControl('customFields', customFieldsGroup);
139
- // }
140
133
  addressFormArray.push(newAddress);
141
134
  }
142
135
  setOrderItemsPerPage(itemsPerPage) {
@@ -396,7 +389,10 @@ export class CustomerDetailComponent extends TypedBaseDetailComponent {
396
389
  const addressGroup = this.formBuilder.group({
397
390
  ...rest,
398
391
  countryCode: address.country.code,
399
- customFields: this.formBuilder.group(this.addressCustomFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {})),
392
+ customFields: this.formBuilder.group(this.addressCustomFields.reduce((hash, field) => ({
393
+ ...hash,
394
+ [field.name]: address['customFields'][field.name],
395
+ }), {})),
400
396
  });
401
397
  addressesArray.push(addressGroup);
402
398
  if (address.defaultShippingAddress) {
@@ -405,16 +401,6 @@ export class CustomerDetailComponent extends TypedBaseDetailComponent {
405
401
  if (address.defaultBillingAddress) {
406
402
  this.defaultBillingAddressId = address.id;
407
403
  }
408
- if (this.addressCustomFields.length) {
409
- const customFieldsGroup = this.formBuilder.group({});
410
- for (const fieldDef of this.addressCustomFields) {
411
- const key = fieldDef.name;
412
- const value = address.customFields?.[key];
413
- const control = new UntypedFormControl(value);
414
- customFieldsGroup.addControl(key, control);
415
- }
416
- addressGroup.addControl('customFields', customFieldsGroup);
417
- }
418
404
  }
419
405
  this.detailForm.setControl('addresses', addressesArray);
420
406
  }
@@ -452,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
452
438
  type: Component,
453
439
  args: [{ selector: 'vdr-customer-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"'UpdateCustomer'\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!(addressDefaultsUpdated || (detailForm.valid && detailForm.dirty))\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar>\r\n <vdr-card *ngIf=\"entity$ | async as customer\">\r\n <vdr-customer-status-label [customer]=\"customer\"></vdr-customer-status-label>\r\n <vdr-labeled-data\r\n class=\"last-login\"\r\n *ngIf=\"customer.user?.lastLogin as lastLogin\"\r\n [label]=\"'customer.last-login' | translate\"\r\n >\r\n <time [dateTime]=\"lastLogin\">{{ lastLogin | timeAgo }}</time>\r\n </vdr-labeled-data>\r\n </vdr-card>\r\n <vdr-card\r\n [title]=\"'customer.customer-groups' | translate\"\r\n *ngIf=\"(entity$ | async)?.groups as groups\"\r\n >\r\n <div *ngIf=\"groups.length; else noGroups\">\r\n <vdr-chip\r\n *ngFor=\"let group of groups\"\r\n [colorFrom]=\"group.id\"\r\n icon=\"times\"\r\n (iconClick)=\"removeFromGroup(group)\"\r\n >{{ group.name }}</vdr-chip\r\n >\r\n </div>\r\n <ng-template #noGroups>\r\n <span class=\"color-weight-400\">\r\n {{ 'customer.not-a-member-of-any-groups' | translate }}\r\n </span>\r\n </ng-template>\r\n <div>\r\n <button\r\n class=\"button-small mt-1\"\r\n (click)=\"addToGroup()\"\r\n *vdrIfPermissions=\"'UpdateCustomerGroup'\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.add-customer-to-group' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm.get('customer')\">\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n [label]=\"'customer.title' | translate\"\r\n for=\"title\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"title\" type=\"text\" formControlName=\"title\" />\r\n </vdr-form-field>\r\n <div><!-- spacer --></div>\r\n <vdr-form-field\r\n [label]=\"'customer.first-name' | translate\"\r\n for=\"firstName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.last-name' | translate\"\r\n for=\"lastName\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.email-address' | translate\"\r\n for=\"emailAddress\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.phone-number' | translate\"\r\n for=\"phoneNumber\"\r\n [readOnlyToggle]=\"!(isNew$ | async)\"\r\n >\r\n <input id=\"phoneNumber\" type=\"text\" formControlName=\"phoneNumber\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'customer.password' | translate\"\r\n for=\"password\"\r\n *ngIf=\"isNew$ | async\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card\r\n formGroupName=\"customFields\"\r\n *ngIf=\"customFields.length\"\r\n [title]=\"'common.custom-fields' | translate\"\r\n >\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Customer\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customer.customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </vdr-card>\r\n </form>\r\n <vdr-custom-detail-component-host\r\n locationId=\"customer-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <ng-container *ngIf=\"!(isNew$ | async)\">\r\n <vdr-card [title]=\"'customer.addresses' | translate\">\r\n <vdr-address-card\r\n *ngFor=\"let addressForm of getAddressFormControls()\"\r\n [class.to-delete]=\"addressesToDeleteIds.has(addressForm.value.id)\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [isDefaultBilling]=\"defaultBillingAddressId === addressForm.value.id\"\r\n [isDefaultShipping]=\"defaultShippingAddressId === addressForm.value.id\"\r\n [addressForm]=\"addressForm\"\r\n [customFields]=\"addressCustomFields\"\r\n [editable]=\"\r\n (['UpdateCustomer'] | hasPermission) &&\r\n !addressesToDeleteIds.has(addressForm.value.id)\r\n \"\r\n (setAsDefaultBilling)=\"setDefaultBillingAddressId($event)\"\r\n (setAsDefaultShipping)=\"setDefaultShippingAddressId($event)\"\r\n (deleteAddress)=\"toggleDeleteAddress($event)\"\r\n ></vdr-address-card>\r\n <button class=\"btn btn-secondary mt-2\" (click)=\"addAddress()\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-address' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'customer.orders' | translate\" [paddingX]=\"false\">\r\n <vdr-data-table-2\r\n id=\"customer-order-list\"\r\n [items]=\"orders$ | async\"\r\n [itemsPerPage]=\"ordersPerPage\"\r\n [totalItems]=\"ordersCount$ | async\"\r\n [currentPage]=\"currentOrdersPage\"\r\n [emptyStateLabel]=\"'customer.no-orders-placed' | translate\"\r\n (itemsPerPageChange)=\"setOrderItemsPerPage($event)\"\r\n (pageChange)=\"setOrderCurrentPage($event)\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-order=\"item\">\r\n {{ order.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-order=\"item\">\r\n {{ order.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-order=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/orders', order.id]\"\r\n ><span>{{ order.code }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.order-type' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-order=\"item\">\r\n <vdr-chip>{{ order.type }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.state' | translate\">\r\n <ng-template let-order=\"item\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.total' | translate\">\r\n <ng-template let-order=\"item\">\r\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\">\r\n <ng-template let-order=\"item\">\r\n {{ order.updatedAt | timeAgo }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\">\r\n <ng-template let-order=\"item\">\r\n {{ order.orderPlacedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n />\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n <vdr-card [title]=\"'customer.customer-history' | translate\">\r\n <vdr-customer-history\r\n [customer]=\"entity$ | async\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNoteToCustomer($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-customer-history>\r\n </vdr-card>\r\n </ng-container>\r\n </vdr-page-block>\r\n</vdr-page-detail-layout>\r\n", styles: [".last-login{margin-left:6px;color:var(--color-grey-500)}.to-delete{opacity:.5}\n"] }]
454
440
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.DataService }, { type: i2.ModalService }, { type: i2.NotificationService }]; } });
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY3VzdG9tZXIvc3JjL2NvbXBvbmVudHMvY3VzdG9tZXItZGV0YWlsL2N1c3RvbWVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWRldGFpbC9jdXN0b21lci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFLSCxpQkFBaUIsRUFDakIsMkJBQTJCLEVBSTNCLHVCQUF1QixFQUt2QixTQUFTLEVBRVQsd0JBQXdCLEdBSTNCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sR0FBRyxFQUNILEtBQUssRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxHQUNQLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7O0FB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R0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUMxQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDN0I7YUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGVBQWU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRTtZQUN2RCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7U0FDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNmLENBQUM7OEdBL2RRLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGtGQzlFcEMsbTJYQXlPQTs7MkZEM0phLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcbmltcG9ydCB7XG4gICAgQ3JlYXRlQWRkcmVzc0lucHV0LFxuICAgIENyZWF0ZUN1c3RvbWVyQWRkcmVzc011dGF0aW9uLFxuICAgIENyZWF0ZUN1c3RvbWVySW5wdXQsXG4gICAgQ3VzdG9tZXIsXG4gICAgQ1VTVE9NRVJfRlJBR01FTlQsXG4gICAgQ3VzdG9tZXJEZXRhaWxRdWVyeURvY3VtZW50LFxuICAgIEN1c3RvbWVyRGV0YWlsUXVlcnlRdWVyeSxcbiAgICBEYXRhU2VydmljZSxcbiAgICBEZWxldGVDdXN0b21lckFkZHJlc3NNdXRhdGlvbixcbiAgICBFZGl0Tm90ZURpYWxvZ0NvbXBvbmVudCxcbiAgICBHZXRBdmFpbGFibGVDb3VudHJpZXNRdWVyeSxcbiAgICBHZXRDdXN0b21lckhpc3RvcnlRdWVyeSxcbiAgICBNb2RhbFNlcnZpY2UsXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBTb3J0T3JkZXIsXG4gICAgVGltZWxpbmVIaXN0b3J5RW50cnksXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxuICAgIFVwZGF0ZUN1c3RvbWVyQWRkcmVzc011dGF0aW9uLFxuICAgIFVwZGF0ZUN1c3RvbWVySW5wdXQsXG4gICAgVXBkYXRlQ3VzdG9tZXJNdXRhdGlvbixcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGZpbHRlcixcbiAgICBtYXAsXG4gICAgbWVyZ2UsXG4gICAgbWVyZ2VNYXAsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNlbGVjdEN1c3RvbWVyR3JvdXBEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3QtY3VzdG9tZXItZ3JvdXAtZGlhbG9nL3NlbGVjdC1jdXN0b21lci1ncm91cC1kaWFsb2cuY29tcG9uZW50JztcblxudHlwZSBDdXN0b21lcldpdGhPcmRlcnMgPSBOb25OdWxsYWJsZTxDdXN0b21lckRldGFpbFF1ZXJ5UXVlcnlbJ2N1c3RvbWVyJ10+O1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NRVJfREVUQUlMX1FVRVJZID0gZ3FsYFxuICAgIHF1ZXJ5IEN1c3RvbWVyRGV0YWlsUXVlcnkoJGlkOiBJRCEsICRvcmRlckxpc3RPcHRpb25zOiBPcmRlckxpc3RPcHRpb25zKSB7XG4gICAgICAgIGN1c3RvbWVyKGlkOiAkaWQpIHtcbiAgICAgICAgICAgIC4uLkN1c3RvbWVyXG4gICAgICAgICAgICBncm91cHMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3JkZXJzKG9wdGlvbnM6ICRvcmRlckxpc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMge1xuICAgICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgICAgICBjb2RlXG4gICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgdG90YWxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxXaXRoVGF4XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyUGxhY2VkQXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG90YWxJdGVtc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICR7Q1VTVE9NRVJfRlJBR01FTlR9XG5gO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1jdXN0b21lci1kZXRhaWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b21lci1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2N1c3RvbWVyLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21lckRldGFpbENvbXBvbmVudFxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBDdXN0b21lckRldGFpbFF1ZXJ5RG9jdW1lbnQsICdjdXN0b21lcic+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0N1c3RvbWVyJyk7XG4gICAgYWRkcmVzc0N1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0FkZHJlc3MnKTtcbiAgICBkZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGN1c3RvbWVyOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGZpcnN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGxhc3ROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcGhvbmVOdW1iZXI6ICcnLFxuICAgICAgICAgICAgZW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXG4gICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIGFkZHJlc3NlczogbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pLFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZUNvdW50cmllcyQ6IE9ic2VydmFibGU8R2V0QXZhaWxhYmxlQ291bnRyaWVzUXVlcnlbJ2NvdW50cmllcyddWydpdGVtcyddPjtcbiAgICBvcmRlcnMkOiBPYnNlcnZhYmxlPEN1c3RvbWVyV2l0aE9yZGVyc1snb3JkZXJzJ11bJ2l0ZW1zJ10+O1xuICAgIG9yZGVyc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGhpc3RvcnkkOiBPYnNlcnZhYmxlPE5vbk51bGxhYmxlPEdldEN1c3RvbWVySGlzdG9yeVF1ZXJ5WydjdXN0b21lciddPlsnaGlzdG9yeSddWydpdGVtcyddIHwgdW5kZWZpbmVkPjtcbiAgICBmZXRjaEhpc3RvcnkgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGRlZmF1bHRTaGlwcGluZ0FkZHJlc3NJZDogc3RyaW5nO1xuICAgIGRlZmF1bHRCaWxsaW5nQWRkcmVzc0lkOiBzdHJpbmc7XG4gICAgYWRkcmVzc2VzVG9EZWxldGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBhZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gZmFsc2U7XG4gICAgb3JkZXJzUGVyUGFnZSA9IDEwO1xuICAgIGN1cnJlbnRPcmRlcnNQYWdlID0gMTtcbiAgICBwcml2YXRlIG9yZGVyTGlzdFVwZGF0ZXMkID0gbmV3IFN1YmplY3Q8Q3VzdG9tZXJXaXRoT3JkZXJzPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDb3VudHJpZXMkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xuICAgICAgICAgICAgLmdldEF2YWlsYWJsZUNvdW50cmllcygpXG4gICAgICAgICAgICAubWFwU2luZ2xlKHJlc3VsdCA9PiByZXN1bHQuY291bnRyaWVzLml0ZW1zKVxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuXG4gICAgICAgIGNvbnN0IGN1c3RvbWVyV2l0aFVwZGF0ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWVyZ2UodGhpcy5vcmRlckxpc3RVcGRhdGVzJCkpO1xuICAgICAgICB0aGlzLm9yZGVycyQgPSBjdXN0b21lcldpdGhVcGRhdGVzJC5waXBlKG1hcChjdXN0b21lciA9PiBjdXN0b21lci5vcmRlcnMuaXRlbXMpKTtcbiAgICAgICAgdGhpcy5vcmRlcnNDb3VudCQgPSB0aGlzLmVudGl0eSQucGlwZShtYXAoY3VzdG9tZXIgPT4gY3VzdG9tZXIub3JkZXJzLnRvdGFsSXRlbXMpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5JCA9IHRoaXMuZmV0Y2hIaXN0b3J5LnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRDdXN0b21lckhpc3RvcnkodGhpcy5pZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogU29ydE9yZGVyLkRFU0MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5jdXN0b21lcj8uaGlzdG9yeS5pdGVtcyksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5vcmRlckxpc3RVcGRhdGVzJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGdldEFkZHJlc3NGb3JtQ29udHJvbHMoKTogVW50eXBlZEZvcm1Db250cm9sW10ge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnYWRkcmVzc2VzJ10pIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgIHJldHVybiBmb3JtQXJyYXkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Db250cm9sW107XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdEJpbGxpbmdBZGRyZXNzSWQoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRlZmF1bHRCaWxsaW5nQWRkcmVzc0lkID0gaWQ7XG4gICAgICAgIHRoaXMuYWRkcmVzc0RlZmF1bHRzVXBkYXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2hpcHBpbmdBZGRyZXNzSWQgPSBpZDtcbiAgICAgICAgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0b2dnbGVEZWxldGVBZGRyZXNzKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkcmVzc2VzVG9EZWxldGVJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzZXNUb0RlbGV0ZUlkcy5kZWxldGUoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzZXNUb0RlbGV0ZUlkcy5hZGQoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQWRkcmVzcygpIHtcbiAgICAgICAgY29uc3QgYWRkcmVzc0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2FkZHJlc3NlcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGZ1bGxOYW1lOiAnJyxcbiAgICAgICAgICAgIGNvbXBhbnk6ICcnLFxuICAgICAgICAgICAgc3RyZWV0TGluZTE6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBzdHJlZXRMaW5lMjogJycsXG4gICAgICAgICAgICBjaXR5OiAnJyxcbiAgICAgICAgICAgIHByb3ZpbmNlOiAnJyxcbiAgICAgICAgICAgIHBvc3RhbENvZGU6ICcnLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwaG9uZU51bWJlcjogJycsXG4gICAgICAgICAgICBkZWZhdWx0U2hpcHBpbmdBZGRyZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHRCaWxsaW5nQWRkcmVzczogZmFsc2UsXG4gICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiAodGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAvLyAgICAgY29uc3QgY3VzdG9tRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHt9KTtcbiAgICAgICAgLy8gICAgIGZvciAoY29uc3QgZmllbGREZWYgb2YgdGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzKSB7XG4gICAgICAgIC8vICAgICAgICAgY3VzdG9tRmllbGRzR3JvdXAuYWRkQ29udHJvbChmaWVsZERlZi5uYW1lLCBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICBuZXdBZGRyZXNzLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbUZpZWxkc0dyb3VwKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBhZGRyZXNzRm9ybUFycmF5LnB1c2gobmV3QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgc2V0T3JkZXJJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5vcmRlcnNQZXJQYWdlID0gK2l0ZW1zUGVyUGFnZTtcbiAgICAgICAgdGhpcy5mZXRjaE9yZGVyc0xpc3QoKTtcbiAgICB9XG5cbiAgICBzZXRPcmRlckN1cnJlbnRQYWdlKHBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcmRlcnNQYWdlID0gK3BhZ2U7XG4gICAgICAgIHRoaXMuZmV0Y2hPcmRlcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgY3JlYXRlKCkge1xuICAgICAgICBjb25zdCBjdXN0b21lckZvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdjdXN0b21lcicpO1xuICAgICAgICBpZiAoIWN1c3RvbWVyRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGl0bGUsIGVtYWlsQWRkcmVzcywgZmlyc3ROYW1lLCBsYXN0TmFtZSwgcGhvbmVOdW1iZXIsIHBhc3N3b3JkIH0gPSBjdXN0b21lckZvcm0udmFsdWU7XG4gICAgICAgIGNvbnN0IGN1c3RvbUZpZWxkcyA9IGN1c3RvbWVyRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpPy52YWx1ZTtcbiAgICAgICAgaWYgKCFlbWFpbEFkZHJlc3MgfHwgIWZpcnN0TmFtZSB8fCAhbGFzdE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXN0b21lcjogQ3JlYXRlQ3VzdG9tZXJJbnB1dCA9IHtcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZW1haWxBZGRyZXNzLFxuICAgICAgICAgICAgZmlyc3ROYW1lLFxuICAgICAgICAgICAgbGFzdE5hbWUsXG4gICAgICAgICAgICBwaG9uZU51bWJlcixcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkcyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5jcmVhdGVDdXN0b21lcihjdXN0b21lciwgcGFzc3dvcmQpLnN1YnNjcmliZSgoeyBjcmVhdGVDdXN0b21lciB9KSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNyZWF0ZUN1c3RvbWVyLl9fdHlwZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdDdXN0b21lcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ3VzdG9tZXInLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZUN1c3RvbWVyLmVtYWlsQWRkcmVzcyAmJiAhcGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IF8oJ2N1c3RvbWVyLmVtYWlsLXZlcmlmaWNhdGlvbi1zZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25WYXJzOiB7IGVtYWlsQWRkcmVzcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgY3JlYXRlQ3VzdG9tZXIuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0VtYWlsQWRkcmVzc0NvbmZsaWN0RXJyb3InOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoY3JlYXRlQ3VzdG9tZXIubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICAgIHRoaXMuZW50aXR5JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoeyBpZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVPcGVyYXRpb25zOiBBcnJheTxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9ic2VydmFibGU8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVcGRhdGVDdXN0b21lck11dGF0aW9uWyd1cGRhdGVDdXN0b21lciddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGVDdXN0b21lckFkZHJlc3NNdXRhdGlvblsnY3JlYXRlQ3VzdG9tZXJBZGRyZXNzJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVwZGF0ZUN1c3RvbWVyQWRkcmVzc011dGF0aW9uWyd1cGRhdGVDdXN0b21lckFkZHJlc3MnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVsZXRlQ3VzdG9tZXJBZGRyZXNzTXV0YXRpb25bJ2RlbGV0ZUN1c3RvbWVyQWRkcmVzcyddXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgID4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tZXJGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnY3VzdG9tZXInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbWVyRm9ybSAmJiBjdXN0b21lckZvcm0uZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGN1c3RvbWVyRm9ybS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUZpZWxkcyA9IGN1c3RvbWVyRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpPy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbWVyOiBVcGRhdGVDdXN0b21lcklucHV0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb3JtVmFsdWUudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxBZGRyZXNzOiBmb3JtVmFsdWUuZW1haWxBZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogZm9ybVZhbHVlLmZpcnN0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogZm9ybVZhbHVlLmxhc3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyOiBmb3JtVmFsdWUucGhvbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVPcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jdXN0b21lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlQ3VzdG9tZXIoY3VzdG9tZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLnVwZGF0ZUN1c3RvbWVyKSksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NGb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdhZGRyZXNzZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGFkZHJlc3NGb3JtQXJyYXkgJiYgYWRkcmVzc0Zvcm1BcnJheS5kaXJ0eSkgfHwgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFkZHJlc3NDb250cm9sIG9mIGFkZHJlc3NGb3JtQXJyYXkuY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wuZGlydHkgfHwgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQ6IENyZWF0ZUFkZHJlc3NJbnB1dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBhZGRyZXNzLmZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFueTogYWRkcmVzcy5jb21wYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTE6IGFkZHJlc3Muc3RyZWV0TGluZTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMjogYWRkcmVzcy5zdHJlZXRMaW5lMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBhZGRyZXNzLnByb3ZpbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGFsQ29kZTogYWRkcmVzcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFkZHJlc3MuY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogYWRkcmVzcy5waG9uZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaGlwcGluZ0FkZHJlc3M6IHRoaXMuZGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkID09PSBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEJpbGxpbmdBZGRyZXNzOiB0aGlzLmRlZmF1bHRCaWxsaW5nQWRkcmVzc0lkID09PSBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiBhZGRyZXNzLmN1c3RvbUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlT3BlcmF0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUN1c3RvbWVyQWRkcmVzcyhpZCwgaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLmNyZWF0ZUN1c3RvbWVyQWRkcmVzcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3Nlc1RvRGVsZXRlSWRzLmhhcyhhZGRyZXNzLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVPcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kZWxldGVDdXN0b21lckFkZHJlc3MoYWRkcmVzcy5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLmRlbGV0ZUN1c3RvbWVyQWRkcmVzcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVPcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVDdXN0b21lckFkZHJlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLnVwZGF0ZUN1c3RvbWVyQWRkcmVzcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHNhdmVPcGVyYXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub3RpZmllZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3VzdG9tZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FkZHJlc3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N1Y2Nlc3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ3VzdG9tZXIoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFbWFpbEFkZHJlc3NDb25mbGljdEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lcicsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFRvR3JvdXAoKSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChTZWxlY3RDdXN0b21lckdyb3VwRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZ3JvdXBJZHMgPT4gKGdyb3VwSWRzID8gZnJvbShncm91cElkcykgOiBFTVBUWSkpLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcChncm91cElkID0+IHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIuYWRkQ3VzdG9tZXJzVG9Hcm91cChncm91cElkLCBbdGhpcy5pZF0pKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oYGN1c3RvbWVyLmFkZC1jdXN0b21lcnMtdG8tZ3JvdXAtc3VjY2Vzc2ApLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lckNvdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiByZXMuYWRkQ3VzdG9tZXJzVG9Hcm91cC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEN1c3RvbWVyKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRnJvbUdyb3VwKGdyb3VwOiBDdXN0b21lcldpdGhPcmRlcnNbJ2dyb3VwcyddW251bWJlcl0pIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5kaWFsb2coe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjdXN0b21lci5jb25maXJtLXJlbW92ZS1jdXN0b21lci1mcm9tLWdyb3VwJyksXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5yZW1vdmVDdXN0b21lcnNGcm9tR3JvdXAoZ3JvdXAuaWQsIFt0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogRU1QVFksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5yZWZyZXNoQ3VzdG9tZXIoKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXyhgY3VzdG9tZXIucmVtb3ZlLWN1c3RvbWVycy1mcm9tLWdyb3VwLXN1Y2Nlc3NgKSwge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21lckNvdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICBncm91cE5hbWU6IGdyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkTm90ZVRvQ3VzdG9tZXIoeyBub3RlIH06IHsgbm90ZTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5hZGROb3RlVG9DdXN0b21lcih0aGlzLmlkLCBub3RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtc3VjY2VzcycpLCB7XG4gICAgICAgICAgICAgICAgZW50aXR5OiAnTm90ZScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTm90ZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEVkaXROb3RlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlQcml2YWN5Q29udHJvbHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBub3RlOiBlbnRyeS5kYXRhLm5vdGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIudXBkYXRlQ3VzdG9tZXJOb3RlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlSWQ6IGVudHJ5LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IHJlc3VsdC5ub3RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoSGlzdG9yeS5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ05vdGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlTm90ZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXG4gICAgICAgICAgICAuZGlhbG9nKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXygnY29tbW9uLmNvbmZpcm0tZGVsZXRlLW5vdGUnKSxcbiAgICAgICAgICAgICAgICBib2R5OiBlbnRyeS5kYXRhLm5vdGUsXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAocmVzID0+IChyZXMgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLmRlbGV0ZUN1c3RvbWVyTm90ZShlbnRyeS5pZCkgOiBFTVBUWSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLXN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdOb3RlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogQ3VzdG9tZXJXaXRoT3JkZXJzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbWVyR3JvdXAgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdjdXN0b21lcicpO1xuICAgICAgICBpZiAoY3VzdG9tZXJHcm91cCkge1xuICAgICAgICAgICAgY3VzdG9tZXJHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogZW50aXR5LnRpdGxlID8/IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBlbnRpdHkuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICAgIGxhc3ROYW1lOiBlbnRpdHkubGFzdE5hbWUsXG4gICAgICAgICAgICAgICAgcGhvbmVOdW1iZXI6IGVudGl0eS5waG9uZU51bWJlciA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGVtYWlsQWRkcmVzczogZW50aXR5LmVtYWlsQWRkcmVzcyxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB7fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3Nlc0FycmF5ID0gbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGVudGl0eS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGN1c3RvbUZpZWxkcywgLi4ucmVzdCB9ID0gYWRkcmVzcyBhcyB0eXBlb2YgYWRkcmVzcyAmIHsgY3VzdG9tRmllbGRzOiBhbnkgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFkZHJlc3MuY291bnRyeS5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFkZHJlc3Nlc0FycmF5LnB1c2goYWRkcmVzc0dyb3VwKTtcbiAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy5kZWZhdWx0U2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkID0gYWRkcmVzcy5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MuZGVmYXVsdEJpbGxpbmdBZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJpbGxpbmdBZGRyZXNzSWQgPSBhZGRyZXNzLmlkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUZpZWxkc0dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7fSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGREZWYgb2YgdGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBmaWVsZERlZi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoYWRkcmVzcyBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHNHcm91cC5hZGRDb250cm9sKGtleSwgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0dyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbUZpZWxkc0dyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uc2V0Q29udHJvbCgnYWRkcmVzc2VzJywgYWRkcmVzc2VzQXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2N1c3RvbWVyJywgJ2N1c3RvbUZpZWxkcyddKSxcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmZXRjaCB0aGUgY3VzdG9tZXIgd2l0aCB0aGUgY3VycmVudCBvcmRlciBsaXN0IHNldHRpbmdzLlxuICAgICAqL1xuICAgIHByaXZhdGUgZmV0Y2hPcmRlcnNMaXN0KCkge1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgICAgICAucXVlcnkoQ3VzdG9tZXJEZXRhaWxRdWVyeURvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgb3JkZXJMaXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICB0YWtlOiB0aGlzLm9yZGVyc1BlclBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6ICh0aGlzLmN1cnJlbnRPcmRlcnNQYWdlIC0gMSkgKiB0aGlzLm9yZGVyc1BlclBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHNvcnQ6IHsgb3JkZXJQbGFjZWRBdDogU29ydE9yZGVyLkRFU0MgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaW5nbGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKGRhdGEgPT4gZGF0YS5jdXN0b21lciksXG4gICAgICAgICAgICAgICAgZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB0aGlzLm9yZGVyTGlzdFVwZGF0ZXMkLm5leHQocmVzdWx0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoQ3VzdG9tZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnF1ZXJ5KEN1c3RvbWVyRGV0YWlsUXVlcnlEb2N1bWVudCwge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBvcmRlckxpc3RPcHRpb25zOiB7IHRha2U6IDAgfSxcbiAgICAgICAgfSkuc2luZ2xlJDtcbiAgICB9XG59XG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PiA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cImN1c3RvbWVyLWRldGFpbFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNOZXckIHwgYXN5bmM7IGVsc2UgdXBkYXRlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIShhZGRyZXNzRGVmYXVsdHNVcGRhdGVkIHx8IChkZXRhaWxGb3JtLnZhbGlkICYmIGRldGFpbEZvcm0uZGlydHkpKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1cGRhdGVCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCInVXBkYXRlQ3VzdG9tZXInXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoYWRkcmVzc0RlZmF1bHRzVXBkYXRlZCB8fCAoZGV0YWlsRm9ybS52YWxpZCAmJiBkZXRhaWxGb3JtLmRpcnR5KSlcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG48dmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuICAgICAgICA8dmRyLWNhcmQgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgY3VzdG9tZXJcIj5cclxuICAgICAgICAgICAgPHZkci1jdXN0b21lci1zdGF0dXMtbGFiZWwgW2N1c3RvbWVyXT1cImN1c3RvbWVyXCI+PC92ZHItY3VzdG9tZXItc3RhdHVzLWxhYmVsPlxyXG4gICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsYXN0LWxvZ2luXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VzdG9tZXIudXNlcj8ubGFzdExvZ2luIGFzIGxhc3RMb2dpblwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2N1c3RvbWVyLmxhc3QtbG9naW4nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHRpbWUgW2RhdGVUaW1lXT1cImxhc3RMb2dpblwiPnt7IGxhc3RMb2dpbiB8IHRpbWVBZ28gfX08L3RpbWU+XHJcbiAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2N1c3RvbWVyLmN1c3RvbWVyLWdyb3VwcycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIihlbnRpdHkkIHwgYXN5bmMpPy5ncm91cHMgYXMgZ3JvdXBzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cHMubGVuZ3RoOyBlbHNlIG5vR3JvdXBzXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sb3JGcm9tXT1cImdyb3VwLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwidGltZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpY29uQ2xpY2spPVwicmVtb3ZlRnJvbUdyb3VwKGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPnt7IGdyb3VwLm5hbWUgfX08L3Zkci1jaGlwXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vR3JvdXBzPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci13ZWlnaHQtNDAwXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnY3VzdG9tZXIubm90LWEtbWVtYmVyLW9mLWFueS1ncm91cHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tc21hbGwgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRvR3JvdXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCInVXBkYXRlQ3VzdG9tZXJHcm91cCdcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjdXN0b21lci5hZGQtY3VzdG9tZXItdG8tZ3JvdXAnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIiBbZW50aXR5XT1cImVudGl0eVwiIC8+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tZXInKVwiPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY3VzdG9tZXIudGl0bGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwidGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHlUb2dnbGVdPVwiIShpc05ldyQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidGl0bGVcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+PCEtLSBzcGFjZXIgLS0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY3VzdG9tZXIuZmlyc3QtbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJmaXJzdE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHlUb2dnbGVdPVwiIShpc05ldyQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlyc3ROYW1lXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY3VzdG9tZXIubGFzdC1uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImxhc3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5VG9nZ2xlXT1cIiEoaXNOZXckIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImxhc3ROYW1lXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjdXN0b21lci5lbWFpbC1hZGRyZXNzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImVtYWlsQWRkcmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seVRvZ2dsZV09XCIhKGlzTmV3JCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJlbWFpbEFkZHJlc3NcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsQWRkcmVzc1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjdXN0b21lci5waG9uZS1udW1iZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwicGhvbmVOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHlUb2dnbGVdPVwiIShpc05ldyQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwicGhvbmVOdW1iZXJcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInBob25lTnVtYmVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2N1c3RvbWVyLnBhc3N3b3JkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJwYXNzd29yZFwiIHR5cGU9XCJwYXNzd29yZFwiIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwTmFtZT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1c3RvbUZpZWxkcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIkN1c3RvbWVyXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnY3VzdG9tZXIuY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8dmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3RcclxuICAgICAgICAgICAgbG9jYXRpb25JZD1cImN1c3RvbWVyLWRldGFpbFwiXHJcbiAgICAgICAgICAgIFtlbnRpdHkkXT1cImVudGl0eSRcIlxyXG4gICAgICAgICAgICBbZGV0YWlsRm9ybV09XCJkZXRhaWxGb3JtXCJcclxuICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpc05ldyQgfCBhc3luYylcIj5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY3VzdG9tZXIuYWRkcmVzc2VzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1hZGRyZXNzLWNhcmRcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWRkcmVzc0Zvcm0gb2YgZ2V0QWRkcmVzc0Zvcm1Db250cm9scygpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudG8tZGVsZXRlXT1cImFkZHJlc3Nlc1RvRGVsZXRlSWRzLmhhcyhhZGRyZXNzRm9ybS52YWx1ZS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVDb3VudHJpZXNdPVwiYXZhaWxhYmxlQ291bnRyaWVzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNEZWZhdWx0QmlsbGluZ109XCJkZWZhdWx0QmlsbGluZ0FkZHJlc3NJZCA9PT0gYWRkcmVzc0Zvcm0udmFsdWUuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0RlZmF1bHRTaGlwcGluZ109XCJkZWZhdWx0U2hpcHBpbmdBZGRyZXNzSWQgPT09IGFkZHJlc3NGb3JtLnZhbHVlLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbYWRkcmVzc0Zvcm1dPVwiYWRkcmVzc0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiYWRkcmVzc0N1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoWydVcGRhdGVDdXN0b21lciddIHwgaGFzUGVybWlzc2lvbikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWFkZHJlc3Nlc1RvRGVsZXRlSWRzLmhhcyhhZGRyZXNzRm9ybS52YWx1ZS5pZClcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZXRBc0RlZmF1bHRCaWxsaW5nKT1cInNldERlZmF1bHRCaWxsaW5nQWRkcmVzc0lkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZXRBc0RlZmF1bHRTaGlwcGluZyk9XCJzZXREZWZhdWx0U2hpcHBpbmdBZGRyZXNzSWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUFkZHJlc3MpPVwidG9nZ2xlRGVsZXRlQWRkcmVzcygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1hZGRyZXNzLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgbXQtMlwiIChjbGljayk9XCJhZGRBZGRyZXNzKClcIiAqdmRySWZQZXJtaXNzaW9ucz1cIidVcGRhdGVDdXN0b21lcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY3VzdG9tZXIuY3JlYXRlLW5ldy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2N1c3RvbWVyLm9yZGVycycgfCB0cmFuc2xhdGVcIiBbcGFkZGluZ1hdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZGF0YS10YWJsZS0yXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJjdXN0b21lci1vcmRlci1saXN0XCJcclxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwib3JkZXJzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIm9yZGVyc1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cIm9yZGVyc0NvdW50JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudE9yZGVyc1BhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlbXB0eVN0YXRlTGFiZWxdPVwiJ2N1c3RvbWVyLm5vLW9yZGVycy1wbGFjZWQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldE9yZGVySXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldE9yZGVyQ3VycmVudFBhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlci5pZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9yZGVyLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b24tZ2hvc3RcIiBbcm91dGVyTGlua109XCJbJy9vcmRlcnMnLCBvcmRlci5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48c3Bhbj57eyBvcmRlci5jb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIub3JkZXItdHlwZScgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcD57eyBvcmRlci50eXBlIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIuc3RhdGUnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLW9yZGVyLXN0YXRlLWxhYmVsIFtzdGF0ZV09XCJvcmRlci5zdGF0ZVwiPjwvdmRyLW9yZGVyLXN0YXRlLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidvcmRlci50b3RhbCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9yZGVyLnRvdGFsV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5IDogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXIudXBkYXRlZEF0IHwgdGltZUFnbyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidvcmRlci5wbGFjZWQtYXQnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlci5vcmRlclBsYWNlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWN1c3RvbS1maWVsZC1jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIGN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWRhdGEtdGFibGUtMj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY3VzdG9tZXIuY3VzdG9tZXItaGlzdG9yeScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY3VzdG9tZXItaGlzdG9yeVxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21lcl09XCJlbnRpdHkkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaXN0b3J5XT1cImhpc3RvcnkkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChhZGROb3RlKT1cImFkZE5vdGVUb0N1c3RvbWVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1cGRhdGVOb3RlKT1cInVwZGF0ZU5vdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZU5vdGUpPVwiZGVsZXRlTm90ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1jdXN0b21lci1oaXN0b3J5PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC92ZHItcGFnZS1ibG9jaz5cclxuPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4iXX0=
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY3VzdG9tZXIvc3JjL2NvbXBvbmVudHMvY3VzdG9tZXItZGV0YWlsL2N1c3RvbWVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWRldGFpbC9jdXN0b21lci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBZSxnQkFBZ0IsRUFBc0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBS0gsaUJBQWlCLEVBQ2pCLDJCQUEyQixFQUkzQix1QkFBdUIsRUFLdkIsU0FBUyxFQUVULHdCQUF3QixHQUkzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEdBQUcsRUFDSCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksR0FDUCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHdFQUF3RSxDQUFDOzs7Ozs7Ozs7OztBQUk1SCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF5QmxDLGlCQUFpQjtDQUN0QixDQUFDO0FBUUYsTUFBTSxPQUFPLHVCQUNULFNBQVEsd0JBQXdFO0lBZ0NoRixZQUNZLGNBQWlDLEVBQ2pDLFdBQXdCLEVBQ3RCLFdBQXdCLEVBQzFCLFlBQTBCLEVBQzFCLG1CQUF3QztRQUVoRCxLQUFLLEVBQUUsQ0FBQztRQU5BLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBbENwRCxpQkFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRCx3QkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsZUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDN0IsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxXQUFXLEVBQUUsRUFBRTtnQkFDZixZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0QsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNqRjthQUNKLENBQUM7WUFDRixTQUFTLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7U0FDdEMsQ0FBQyxDQUFDO1FBS0gsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR25DLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDekMsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUNkLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFzQixDQUFDO0lBVTlELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTthQUMvQyxxQkFBcUIsRUFBRTthQUN2QixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsT0FBTyxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNmLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDWCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7YUFDcEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLEVBQUU7Z0JBQ0YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQzVCO1NBQ0osQ0FBQzthQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUN2RCxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQXFCLENBQUM7UUFDekUsT0FBTyxTQUFTLENBQUMsUUFBZ0MsQ0FBQztJQUN0RCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsRUFBVTtRQUNqQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELDJCQUEyQixDQUFDLEVBQVU7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxFQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3hDO2FBQU07WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDTixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBcUIsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN0QyxRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxFQUFFO1lBQ1gsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdEMsV0FBVyxFQUFFLEVBQUU7WUFDZixJQUFJLEVBQUUsRUFBRTtZQUNSLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN0QyxXQUFXLEVBQUUsRUFBRTtZQUNmLHNCQUFzQixFQUFFLEtBQUs7WUFDN0IscUJBQXFCLEVBQUUsS0FBSztZQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDeEY7U0FDSixDQUFDLENBQUM7UUFDSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG9CQUFvQixDQUFDLFlBQW9CO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFZO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU07UUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUMvRixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzFDLE9BQU87U0FDVjtRQUNELE1BQU0sUUFBUSxHQUF3QjtZQUNsQyxLQUFLO1lBQ0wsWUFBWTtZQUNaLFNBQVM7WUFDVCxRQUFRO1lBQ1IsV0FBVztZQUNYLFlBQVk7U0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDMUYsUUFBUSxjQUFjLENBQUMsVUFBVSxFQUFFO2dCQUMvQixLQUFLLFVBQVU7b0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsRUFBRTt3QkFDaEUsTUFBTSxFQUFFLFVBQVU7cUJBQ3JCLENBQUMsQ0FBQztvQkFDSCxJQUFJLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUU7d0JBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7NEJBQzVCLE9BQU8sRUFBRSxDQUFDLENBQUMsa0NBQWtDLENBQUM7NEJBQzlDLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRTs0QkFDakMsSUFBSSxFQUFFLE1BQU07NEJBQ1osUUFBUSxFQUFFLEtBQUs7eUJBQ2xCLENBQUMsQ0FBQztxQkFDTjtvQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO29CQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQzdFLE1BQU07Z0JBQ1YsS0FBSywyQkFBMkI7b0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxPQUFPO2FBQ1AsSUFBSSxDQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxjQUFjLEdBT2hCLEVBQUUsQ0FBQztZQUNQLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDO2dCQUM3RCxNQUFNLFFBQVEsR0FBd0I7b0JBQ2xDLEVBQUU7b0JBQ0YsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLO29CQUN0QixZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVk7b0JBQ3BDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztvQkFDOUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO29CQUM1QixXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7b0JBQ2xDLFlBQVk7aUJBQ2YsQ0FBQztnQkFDRixjQUFjLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtxQkFDcEIsY0FBYyxDQUFDLFFBQVEsQ0FBQztxQkFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUM1QyxDQUFDO2FBQ0w7WUFDRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBcUIsQ0FBQztZQUM5RSxJQUFJLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUM3RSxLQUFLLE1BQU0sY0FBYyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtvQkFDcEQsSUFBSSxjQUFjLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTt3QkFDckQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQzt3QkFDckMsTUFBTSxLQUFLLEdBQXVCOzRCQUM5QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7NEJBQzFCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTzs0QkFDeEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXOzRCQUNoQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7NEJBQ2hDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFROzRCQUMxQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7NEJBQzlCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzs0QkFDaEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXOzRCQUNoQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEtBQUssT0FBTyxDQUFDLEVBQUU7NEJBQ3BFLHFCQUFxQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxPQUFPLENBQUMsRUFBRTs0QkFDbEUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO3lCQUNyQyxDQUFDO3dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUNiLGNBQWMsQ0FBQyxJQUFJLENBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2lDQUNwQixxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO2lDQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FDbkQsQ0FBQzt5QkFDTDs2QkFBTTs0QkFDSCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dDQUMzQyxjQUFjLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtxQ0FDcEIscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztxQ0FDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQ25ELENBQUM7NkJBQ0w7aUNBQU07Z0NBQ0gsY0FBYyxDQUFDLElBQUksQ0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7cUNBQ3BCLHFCQUFxQixDQUFDO29DQUNuQixHQUFHLEtBQUs7b0NBQ1IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2lDQUNqQixDQUFDO3FDQUNELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUNuRCxDQUFDOzZCQUNMO3lCQUNKO3FCQUNKO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FDTixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNyQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDdkIsUUFBUSxNQUFNLENBQUMsVUFBVSxFQUFFO29CQUN2QixLQUFLLFVBQVUsQ0FBQztvQkFDaEIsS0FBSyxTQUFTLENBQUM7b0JBQ2YsS0FBSyxTQUFTO3dCQUNWLElBQUksQ0FBQyxRQUFRLEVBQUU7NEJBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsRUFBRTtnQ0FDaEUsTUFBTSxFQUFFLFVBQVU7NkJBQ3JCLENBQUMsQ0FBQzs0QkFDSCxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUNqQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDOzRCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7eUJBQ3RDO3dCQUNELE1BQU07b0JBQ1YsS0FBSywyQkFBMkI7d0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUMvQyxNQUFNO2lCQUNiO2FBQ0o7UUFDTCxDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO2dCQUM1RCxNQUFNLEVBQUUsVUFBVTthQUNyQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLFlBQVk7YUFDWixhQUFhLENBQUMsa0NBQWtDLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDO2FBQ0QsSUFBSSxDQUNELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzFELFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzFGO2FBQ0EsU0FBUyxDQUFDO1lBQ1AsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLEVBQUU7b0JBQzNFLGFBQWEsRUFBRSxDQUFDO29CQUNoQixTQUFTLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUk7aUJBQzFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNYLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUEyQztRQUN2RCxJQUFJLENBQUMsWUFBWTthQUNaLE1BQU0sQ0FBQztZQUNKLEtBQUssRUFBRSxDQUFDLENBQUMsNkNBQTZDLENBQUM7WUFDdkQsT0FBTyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUNoRCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2FBQ25FO1NBQ0osQ0FBQzthQUNELElBQUksQ0FDRCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDakIsUUFBUTtZQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxLQUFLLENBQ2QsRUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQzFDO2FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDhDQUE4QyxDQUFDLEVBQUU7Z0JBQ2hGLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUk7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBb0I7UUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsRUFBRTtnQkFDaEUsTUFBTSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQTJCO1FBQ2xDLElBQUksQ0FBQyxZQUFZO2FBQ1osYUFBYSxDQUFDLHVCQUF1QixFQUFFO1lBQ3BDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFO2dCQUNKLHNCQUFzQixFQUFFLEtBQUs7Z0JBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7YUFDeEI7U0FDSixDQUFDO2FBQ0QsSUFBSSxDQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLElBQUksTUFBTSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7b0JBQ2hELE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2lCQUNwQixDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDSCxPQUFPLEtBQUssQ0FBQzthQUNoQjtRQUNMLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsRUFBRTtnQkFDaEUsTUFBTSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQTJCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDbkIsTUFBTSxDQUFDO1lBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQztZQUN0QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQ3JCLE9BQU8sRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDaEQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTthQUNuRTtTQUNKLENBQUM7YUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM5RixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFUyxhQUFhLENBQUMsTUFBMEI7UUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxhQUFhLEVBQUU7WUFDZixhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJO2dCQUMzQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSTtnQkFDdkMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxRQUFRLEVBQUUsRUFBRTtnQkFDWixZQUFZLEVBQUUsRUFBRTthQUNuQixDQUFDLENBQUM7U0FDTjtRQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELEtBQUssTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDcEMsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE9BQWlELENBQUM7Z0JBQ3BGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO29CQUN4QyxHQUFHLElBQUk7b0JBQ1AsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtvQkFDakMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUMzQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ2QsR0FBRyxJQUFJO3dCQUNQLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3FCQUNwRCxDQUFDLEVBQ0YsRUFBRSxDQUNMLENBQ0o7aUJBQ0osQ0FBQyxDQUFDO2dCQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksT0FBTyxDQUFDLHNCQUFzQixFQUFFO29CQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztpQkFDOUM7Z0JBQ0QsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7b0JBQy9CLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUM3QzthQUNKO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQ2pELE1BQU0sQ0FDVCxDQUFDO1NBQ0w7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDbkIsSUFBSSxDQUFDLFdBQVc7YUFDWCxLQUFLLENBQUMsMkJBQTJCLEVBQUU7WUFDaEMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsZ0JBQWdCLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUN4QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWE7Z0JBQ3ZELElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFO2FBQzFDO1NBQ0osQ0FBQzthQUNELE9BQU8sQ0FBQyxJQUFJLENBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUMxQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDN0I7YUFDQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGVBQWU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRTtZQUN2RCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7U0FDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNmLENBQUM7OEdBbmRRLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGtGQzlFcEMsbTJYQXlPQTs7MkZEM0phLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcbmltcG9ydCB7XG4gICAgQ3JlYXRlQWRkcmVzc0lucHV0LFxuICAgIENyZWF0ZUN1c3RvbWVyQWRkcmVzc011dGF0aW9uLFxuICAgIENyZWF0ZUN1c3RvbWVySW5wdXQsXG4gICAgQ3VzdG9tZXIsXG4gICAgQ1VTVE9NRVJfRlJBR01FTlQsXG4gICAgQ3VzdG9tZXJEZXRhaWxRdWVyeURvY3VtZW50LFxuICAgIEN1c3RvbWVyRGV0YWlsUXVlcnlRdWVyeSxcbiAgICBEYXRhU2VydmljZSxcbiAgICBEZWxldGVDdXN0b21lckFkZHJlc3NNdXRhdGlvbixcbiAgICBFZGl0Tm90ZURpYWxvZ0NvbXBvbmVudCxcbiAgICBHZXRBdmFpbGFibGVDb3VudHJpZXNRdWVyeSxcbiAgICBHZXRDdXN0b21lckhpc3RvcnlRdWVyeSxcbiAgICBNb2RhbFNlcnZpY2UsXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBTb3J0T3JkZXIsXG4gICAgVGltZWxpbmVIaXN0b3J5RW50cnksXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxuICAgIFVwZGF0ZUN1c3RvbWVyQWRkcmVzc011dGF0aW9uLFxuICAgIFVwZGF0ZUN1c3RvbWVySW5wdXQsXG4gICAgVXBkYXRlQ3VzdG9tZXJNdXRhdGlvbixcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGZpbHRlcixcbiAgICBtYXAsXG4gICAgbWVyZ2UsXG4gICAgbWVyZ2VNYXAsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNlbGVjdEN1c3RvbWVyR3JvdXBEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3QtY3VzdG9tZXItZ3JvdXAtZGlhbG9nL3NlbGVjdC1jdXN0b21lci1ncm91cC1kaWFsb2cuY29tcG9uZW50JztcblxudHlwZSBDdXN0b21lcldpdGhPcmRlcnMgPSBOb25OdWxsYWJsZTxDdXN0b21lckRldGFpbFF1ZXJ5UXVlcnlbJ2N1c3RvbWVyJ10+O1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NRVJfREVUQUlMX1FVRVJZID0gZ3FsYFxuICAgIHF1ZXJ5IEN1c3RvbWVyRGV0YWlsUXVlcnkoJGlkOiBJRCEsICRvcmRlckxpc3RPcHRpb25zOiBPcmRlckxpc3RPcHRpb25zKSB7XG4gICAgICAgIGN1c3RvbWVyKGlkOiAkaWQpIHtcbiAgICAgICAgICAgIC4uLkN1c3RvbWVyXG4gICAgICAgICAgICBncm91cHMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3JkZXJzKG9wdGlvbnM6ICRvcmRlckxpc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMge1xuICAgICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgICAgICBjb2RlXG4gICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgdG90YWxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxXaXRoVGF4XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyUGxhY2VkQXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG90YWxJdGVtc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICR7Q1VTVE9NRVJfRlJBR01FTlR9XG5gO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1jdXN0b21lci1kZXRhaWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b21lci1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2N1c3RvbWVyLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21lckRldGFpbENvbXBvbmVudFxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBDdXN0b21lckRldGFpbFF1ZXJ5RG9jdW1lbnQsICdjdXN0b21lcic+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0N1c3RvbWVyJyk7XG4gICAgYWRkcmVzc0N1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0FkZHJlc3MnKTtcbiAgICBkZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGN1c3RvbWVyOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGZpcnN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGxhc3ROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcGhvbmVOdW1iZXI6ICcnLFxuICAgICAgICAgICAgZW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXG4gICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIGFkZHJlc3NlczogbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pLFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZUNvdW50cmllcyQ6IE9ic2VydmFibGU8R2V0QXZhaWxhYmxlQ291bnRyaWVzUXVlcnlbJ2NvdW50cmllcyddWydpdGVtcyddPjtcbiAgICBvcmRlcnMkOiBPYnNlcnZhYmxlPEN1c3RvbWVyV2l0aE9yZGVyc1snb3JkZXJzJ11bJ2l0ZW1zJ10+O1xuICAgIG9yZGVyc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGhpc3RvcnkkOiBPYnNlcnZhYmxlPE5vbk51bGxhYmxlPEdldEN1c3RvbWVySGlzdG9yeVF1ZXJ5WydjdXN0b21lciddPlsnaGlzdG9yeSddWydpdGVtcyddIHwgdW5kZWZpbmVkPjtcbiAgICBmZXRjaEhpc3RvcnkgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGRlZmF1bHRTaGlwcGluZ0FkZHJlc3NJZDogc3RyaW5nO1xuICAgIGRlZmF1bHRCaWxsaW5nQWRkcmVzc0lkOiBzdHJpbmc7XG4gICAgYWRkcmVzc2VzVG9EZWxldGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBhZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gZmFsc2U7XG4gICAgb3JkZXJzUGVyUGFnZSA9IDEwO1xuICAgIGN1cnJlbnRPcmRlcnNQYWdlID0gMTtcbiAgICBwcml2YXRlIG9yZGVyTGlzdFVwZGF0ZXMkID0gbmV3IFN1YmplY3Q8Q3VzdG9tZXJXaXRoT3JkZXJzPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDb3VudHJpZXMkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xuICAgICAgICAgICAgLmdldEF2YWlsYWJsZUNvdW50cmllcygpXG4gICAgICAgICAgICAubWFwU2luZ2xlKHJlc3VsdCA9PiByZXN1bHQuY291bnRyaWVzLml0ZW1zKVxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuXG4gICAgICAgIGNvbnN0IGN1c3RvbWVyV2l0aFVwZGF0ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWVyZ2UodGhpcy5vcmRlckxpc3RVcGRhdGVzJCkpO1xuICAgICAgICB0aGlzLm9yZGVycyQgPSBjdXN0b21lcldpdGhVcGRhdGVzJC5waXBlKG1hcChjdXN0b21lciA9PiBjdXN0b21lci5vcmRlcnMuaXRlbXMpKTtcbiAgICAgICAgdGhpcy5vcmRlcnNDb3VudCQgPSB0aGlzLmVudGl0eSQucGlwZShtYXAoY3VzdG9tZXIgPT4gY3VzdG9tZXIub3JkZXJzLnRvdGFsSXRlbXMpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5JCA9IHRoaXMuZmV0Y2hIaXN0b3J5LnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRDdXN0b21lckhpc3RvcnkodGhpcy5pZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogU29ydE9yZGVyLkRFU0MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5jdXN0b21lcj8uaGlzdG9yeS5pdGVtcyksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5vcmRlckxpc3RVcGRhdGVzJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGdldEFkZHJlc3NGb3JtQ29udHJvbHMoKTogVW50eXBlZEZvcm1Db250cm9sW10ge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnYWRkcmVzc2VzJ10pIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgIHJldHVybiBmb3JtQXJyYXkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Db250cm9sW107XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdEJpbGxpbmdBZGRyZXNzSWQoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRlZmF1bHRCaWxsaW5nQWRkcmVzc0lkID0gaWQ7XG4gICAgICAgIHRoaXMuYWRkcmVzc0RlZmF1bHRzVXBkYXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2hpcHBpbmdBZGRyZXNzSWQgPSBpZDtcbiAgICAgICAgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0b2dnbGVEZWxldGVBZGRyZXNzKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkcmVzc2VzVG9EZWxldGVJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzZXNUb0RlbGV0ZUlkcy5kZWxldGUoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzZXNUb0RlbGV0ZUlkcy5hZGQoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQWRkcmVzcygpIHtcbiAgICAgICAgY29uc3QgYWRkcmVzc0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2FkZHJlc3NlcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGZ1bGxOYW1lOiAnJyxcbiAgICAgICAgICAgIGNvbXBhbnk6ICcnLFxuICAgICAgICAgICAgc3RyZWV0TGluZTE6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBzdHJlZXRMaW5lMjogJycsXG4gICAgICAgICAgICBjaXR5OiAnJyxcbiAgICAgICAgICAgIHByb3ZpbmNlOiAnJyxcbiAgICAgICAgICAgIHBvc3RhbENvZGU6ICcnLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwaG9uZU51bWJlcjogJycsXG4gICAgICAgICAgICBkZWZhdWx0U2hpcHBpbmdBZGRyZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHRCaWxsaW5nQWRkcmVzczogZmFsc2UsXG4gICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzQ3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgICBhZGRyZXNzRm9ybUFycmF5LnB1c2gobmV3QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgc2V0T3JkZXJJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5vcmRlcnNQZXJQYWdlID0gK2l0ZW1zUGVyUGFnZTtcbiAgICAgICAgdGhpcy5mZXRjaE9yZGVyc0xpc3QoKTtcbiAgICB9XG5cbiAgICBzZXRPcmRlckN1cnJlbnRQYWdlKHBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcmRlcnNQYWdlID0gK3BhZ2U7XG4gICAgICAgIHRoaXMuZmV0Y2hPcmRlcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgY3JlYXRlKCkge1xuICAgICAgICBjb25zdCBjdXN0b21lckZvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdjdXN0b21lcicpO1xuICAgICAgICBpZiAoIWN1c3RvbWVyRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGl0bGUsIGVtYWlsQWRkcmVzcywgZmlyc3ROYW1lLCBsYXN0TmFtZSwgcGhvbmVOdW1iZXIsIHBhc3N3b3JkIH0gPSBjdXN0b21lckZvcm0udmFsdWU7XG4gICAgICAgIGNvbnN0IGN1c3RvbUZpZWxkcyA9IGN1c3RvbWVyRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpPy52YWx1ZTtcbiAgICAgICAgaWYgKCFlbWFpbEFkZHJlc3MgfHwgIWZpcnN0TmFtZSB8fCAhbGFzdE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXN0b21lcjogQ3JlYXRlQ3VzdG9tZXJJbnB1dCA9IHtcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZW1haWxBZGRyZXNzLFxuICAgICAgICAgICAgZmlyc3ROYW1lLFxuICAgICAgICAgICAgbGFzdE5hbWUsXG4gICAgICAgICAgICBwaG9uZU51bWJlcixcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkcyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5jcmVhdGVDdXN0b21lcihjdXN0b21lciwgcGFzc3dvcmQpLnN1YnNjcmliZSgoeyBjcmVhdGVDdXN0b21lciB9KSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNyZWF0ZUN1c3RvbWVyLl9fdHlwZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdDdXN0b21lcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ3VzdG9tZXInLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZUN1c3RvbWVyLmVtYWlsQWRkcmVzcyAmJiAhcGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IF8oJ2N1c3RvbWVyLmVtYWlsLXZlcmlmaWNhdGlvbi1zZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25WYXJzOiB7IGVtYWlsQWRkcmVzcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgY3JlYXRlQ3VzdG9tZXIuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0VtYWlsQWRkcmVzc0NvbmZsaWN0RXJyb3InOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoY3JlYXRlQ3VzdG9tZXIubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICAgIHRoaXMuZW50aXR5JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoeyBpZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVPcGVyYXRpb25zOiBBcnJheTxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9ic2VydmFibGU8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVcGRhdGVDdXN0b21lck11dGF0aW9uWyd1cGRhdGVDdXN0b21lciddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGVDdXN0b21lckFkZHJlc3NNdXRhdGlvblsnY3JlYXRlQ3VzdG9tZXJBZGRyZXNzJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVwZGF0ZUN1c3RvbWVyQWRkcmVzc011dGF0aW9uWyd1cGRhdGVDdXN0b21lckFkZHJlc3MnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVsZXRlQ3VzdG9tZXJBZGRyZXNzTXV0YXRpb25bJ2RlbGV0ZUN1c3RvbWVyQWRkcmVzcyddXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgID4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tZXJGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnY3VzdG9tZXInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbWVyRm9ybSAmJiBjdXN0b21lckZvcm0uZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGN1c3RvbWVyRm9ybS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUZpZWxkcyA9IGN1c3RvbWVyRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpPy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbWVyOiBVcGRhdGVDdXN0b21lcklucHV0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb3JtVmFsdWUudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxBZGRyZXNzOiBmb3JtVmFsdWUuZW1haWxBZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogZm9ybVZhbHVlLmZpcnN0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogZm9ybVZhbHVlLmxhc3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyOiBmb3JtVmFsdWUucGhvbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVPcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jdXN0b21lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlQ3VzdG9tZXIoY3VzdG9tZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLnVwZGF0ZUN1c3RvbWVyKSksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NGb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdhZGRyZXNzZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGFkZHJlc3NGb3JtQXJyYXkgJiYgYWRkcmVzc0Zvcm1BcnJheS5kaXJ0eSkgfHwgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFkZHJlc3NDb250cm9sIG9mIGFkZHJlc3NGb3JtQXJyYXkuY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbnRyb2wuZGlydHkgfHwgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQ6IENyZWF0ZUFkZHJlc3NJbnB1dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBhZGRyZXNzLmZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFueTogYWRkcmVzcy5jb21wYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTE6IGFkZHJlc3Muc3RyZWV0TGluZTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMjogYWRkcmVzcy5zdHJlZXRMaW5lMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpbmNlOiBhZGRyZXNzLnByb3ZpbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGFsQ29kZTogYWRkcmVzcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFkZHJlc3MuY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogYWRkcmVzcy5waG9uZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaGlwcGluZ0FkZHJlc3M6IHRoaXMuZGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkID09PSBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEJpbGxpbmdBZGRyZXNzOiB0aGlzLmRlZmF1bHRCaWxsaW5nQWRkcmVzc0lkID09PSBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiBhZGRyZXNzLmN1c3RvbUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlT3BlcmF0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUN1c3RvbWVyQWRkcmVzcyhpZCwgaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLmNyZWF0ZUN1c3RvbWVyQWRkcmVzcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3Nlc1RvRGVsZXRlSWRzLmhhcyhhZGRyZXNzLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVPcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kZWxldGVDdXN0b21lckFkZHJlc3MoYWRkcmVzcy5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLmRlbGV0ZUN1c3RvbWVyQWRkcmVzcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVPcGVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVDdXN0b21lckFkZHJlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhZGRyZXNzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLnVwZGF0ZUN1c3RvbWVyQWRkcmVzcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHNhdmVPcGVyYXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub3RpZmllZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3VzdG9tZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FkZHJlc3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N1Y2Nlc3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzRGVmYXVsdHNVcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ3VzdG9tZXIoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFbWFpbEFkZHJlc3NDb25mbGljdEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lcicsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFRvR3JvdXAoKSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChTZWxlY3RDdXN0b21lckdyb3VwRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZ3JvdXBJZHMgPT4gKGdyb3VwSWRzID8gZnJvbShncm91cElkcykgOiBFTVBUWSkpLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcChncm91cElkID0+IHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIuYWRkQ3VzdG9tZXJzVG9Hcm91cChncm91cElkLCBbdGhpcy5pZF0pKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oYGN1c3RvbWVyLmFkZC1jdXN0b21lcnMtdG8tZ3JvdXAtc3VjY2Vzc2ApLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lckNvdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiByZXMuYWRkQ3VzdG9tZXJzVG9Hcm91cC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEN1c3RvbWVyKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRnJvbUdyb3VwKGdyb3VwOiBDdXN0b21lcldpdGhPcmRlcnNbJ2dyb3VwcyddW251bWJlcl0pIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5kaWFsb2coe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjdXN0b21lci5jb25maXJtLXJlbW92ZS1jdXN0b21lci1mcm9tLWdyb3VwJyksXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5yZW1vdmVDdXN0b21lcnNGcm9tR3JvdXAoZ3JvdXAuaWQsIFt0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogRU1QVFksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5yZWZyZXNoQ3VzdG9tZXIoKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXyhgY3VzdG9tZXIucmVtb3ZlLWN1c3RvbWVycy1mcm9tLWdyb3VwLXN1Y2Nlc3NgKSwge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21lckNvdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICBncm91cE5hbWU6IGdyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkTm90ZVRvQ3VzdG9tZXIoeyBub3RlIH06IHsgbm90ZTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5hZGROb3RlVG9DdXN0b21lcih0aGlzLmlkLCBub3RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtc3VjY2VzcycpLCB7XG4gICAgICAgICAgICAgICAgZW50aXR5OiAnTm90ZScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTm90ZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEVkaXROb3RlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlQcml2YWN5Q29udHJvbHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBub3RlOiBlbnRyeS5kYXRhLm5vdGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIudXBkYXRlQ3VzdG9tZXJOb3RlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlSWQ6IGVudHJ5LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IHJlc3VsdC5ub3RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoSGlzdG9yeS5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ05vdGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlTm90ZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXG4gICAgICAgICAgICAuZGlhbG9nKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXygnY29tbW9uLmNvbmZpcm0tZGVsZXRlLW5vdGUnKSxcbiAgICAgICAgICAgICAgICBib2R5OiBlbnRyeS5kYXRhLm5vdGUsXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAocmVzID0+IChyZXMgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLmRlbGV0ZUN1c3RvbWVyTm90ZShlbnRyeS5pZCkgOiBFTVBUWSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLXN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdOb3RlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogQ3VzdG9tZXJXaXRoT3JkZXJzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbWVyR3JvdXAgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdjdXN0b21lcicpO1xuICAgICAgICBpZiAoY3VzdG9tZXJHcm91cCkge1xuICAgICAgICAgICAgY3VzdG9tZXJHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogZW50aXR5LnRpdGxlID8/IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBlbnRpdHkuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICAgIGxhc3ROYW1lOiBlbnRpdHkubGFzdE5hbWUsXG4gICAgICAgICAgICAgICAgcGhvbmVOdW1iZXI6IGVudGl0eS5waG9uZU51bWJlciA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGVtYWlsQWRkcmVzczogZW50aXR5LmVtYWlsQWRkcmVzcyxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB7fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3Nlc0FycmF5ID0gbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGVudGl0eS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGN1c3RvbUZpZWxkcywgLi4ucmVzdCB9ID0gYWRkcmVzcyBhcyB0eXBlb2YgYWRkcmVzcyAmIHsgY3VzdG9tRmllbGRzOiBhbnkgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFkZHJlc3MuY291bnRyeS5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYXNoLCBmaWVsZCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkLm5hbWVdOiBhZGRyZXNzWydjdXN0b21GaWVsZHMnXVtmaWVsZC5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWRkcmVzc2VzQXJyYXkucHVzaChhZGRyZXNzR3JvdXApO1xuICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLmRlZmF1bHRTaGlwcGluZ0FkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2hpcHBpbmdBZGRyZXNzSWQgPSBhZGRyZXNzLmlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy5kZWZhdWx0QmlsbGluZ0FkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0QmlsbGluZ0FkZHJlc3NJZCA9IGFkZHJlc3MuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnNldENvbnRyb2woJ2FkZHJlc3NlcycsIGFkZHJlc3Nlc0FycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKFxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoWydjdXN0b21lcicsICdjdXN0b21GaWVsZHMnXSksXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZmV0Y2ggdGhlIGN1c3RvbWVyIHdpdGggdGhlIGN1cnJlbnQgb3JkZXIgbGlzdCBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZldGNoT3JkZXJzTGlzdCgpIHtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgICAgICAgLnF1ZXJ5KEN1c3RvbWVyRGV0YWlsUXVlcnlEb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIG9yZGVyTGlzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGFrZTogdGhpcy5vcmRlcnNQZXJQYWdlLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiAodGhpcy5jdXJyZW50T3JkZXJzUGFnZSAtIDEpICogdGhpcy5vcmRlcnNQZXJQYWdlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiB7IG9yZGVyUGxhY2VkQXQ6IFNvcnRPcmRlci5ERVNDIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2luZ2xlJC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuY3VzdG9tZXIpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gdGhpcy5vcmRlckxpc3RVcGRhdGVzJC5uZXh0KHJlc3VsdCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaEN1c3RvbWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5xdWVyeShDdXN0b21lckRldGFpbFF1ZXJ5RG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgb3JkZXJMaXN0T3B0aW9uczogeyB0YWtlOiAwIH0sXG4gICAgICAgIH0pLnNpbmdsZSQ7XG4gICAgfVxufVxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD4gPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJjdXN0b21lci1kZXRhaWxcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzTmV3JCB8IGFzeW5jOyBlbHNlIHVwZGF0ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoYWRkcmVzc0RlZmF1bHRzVXBkYXRlZCB8fCAoZGV0YWlsRm9ybS52YWxpZCAmJiBkZXRhaWxGb3JtLmRpcnR5KSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmNyZWF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiJ1VwZGF0ZUN1c3RvbWVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKGFkZHJlc3NEZWZhdWx0c1VwZGF0ZWQgfHwgKGRldGFpbEZvcm0udmFsaWQgJiYgZGV0YWlsRm9ybS5kaXJ0eSkpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLnVwZGF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiAgICA8dmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgPHZkci1jYXJkICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGN1c3RvbWVyXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tZXItc3RhdHVzLWxhYmVsIFtjdXN0b21lcl09XCJjdXN0b21lclwiPjwvdmRyLWN1c3RvbWVyLXN0YXR1cy1sYWJlbD5cclxuICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGFzdC1sb2dpblwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1c3RvbWVyLnVzZXI/Lmxhc3RMb2dpbiBhcyBsYXN0TG9naW5cIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjdXN0b21lci5sYXN0LWxvZ2luJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx0aW1lIFtkYXRlVGltZV09XCJsYXN0TG9naW5cIj57eyBsYXN0TG9naW4gfCB0aW1lQWdvIH19PC90aW1lPlxyXG4gICAgICAgICAgICA8L3Zkci1sYWJlbGVkLWRhdGE+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmRcclxuICAgICAgICAgICAgW3RpdGxlXT1cIidjdXN0b21lci5jdXN0b21lci1ncm91cHMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIoZW50aXR5JCB8IGFzeW5jKT8uZ3JvdXBzIGFzIGdyb3Vwc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aDsgZWxzZSBub0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yRnJvbV09XCJncm91cC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInRpbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAoaWNvbkNsaWNrKT1cInJlbW92ZUZyb21Hcm91cChncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgID57eyBncm91cC5uYW1lIH19PC92ZHItY2hpcFxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0dyb3Vwcz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3Itd2VpZ2h0LTQwMFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLm5vdC1hLW1lbWJlci1vZi1hbnktZ3JvdXBzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUb0dyb3VwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiJ1VwZGF0ZUN1c3RvbWVyR3JvdXAnXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY3VzdG9tZXIuYWRkLWN1c3RvbWVyLXRvLWdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLXBhZ2UtZW50aXR5LWluZm8gKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCIgW2VudGl0eV09XCJlbnRpdHlcIiAvPlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICA8L3Zkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbWVyJylcIj5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2N1c3RvbWVyLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5VG9nZ2xlXT1cIiEoaXNOZXckIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInRpdGxlXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PjwhLS0gc3BhY2VyIC0tPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2N1c3RvbWVyLmZpcnN0LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZmlyc3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5VG9nZ2xlXT1cIiEoaXNOZXckIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpcnN0TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2N1c3RvbWVyLmxhc3QtbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJsYXN0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seVRvZ2dsZV09XCIhKGlzTmV3JCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJsYXN0TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY3VzdG9tZXIuZW1haWwtYWRkcmVzcycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJlbWFpbEFkZHJlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHlUb2dnbGVdPVwiIShpc05ldyQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZW1haWxBZGRyZXNzXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbEFkZHJlc3NcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY3VzdG9tZXIucGhvbmUtbnVtYmVyJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBob25lTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5VG9nZ2xlXT1cIiEoaXNOZXckIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInBob25lTnVtYmVyXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZU51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjdXN0b21lci5wYXNzd29yZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwicGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmRcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJDdXN0b21lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbWVyLmN1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJjdXN0b21lci1kZXRhaWxcIlxyXG4gICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgW2RldGFpbEZvcm1dPVwiZGV0YWlsRm9ybVwiXHJcbiAgICAgICAgPjwvdmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3Q+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXNOZXckIHwgYXN5bmMpXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2N1c3RvbWVyLmFkZHJlc3NlcycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItYWRkcmVzcy1jYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFkZHJlc3NGb3JtIG9mIGdldEFkZHJlc3NGb3JtQ29udHJvbHMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRvLWRlbGV0ZV09XCJhZGRyZXNzZXNUb0RlbGV0ZUlkcy5oYXMoYWRkcmVzc0Zvcm0udmFsdWUuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlQ291bnRyaWVzXT1cImF2YWlsYWJsZUNvdW50cmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzRGVmYXVsdEJpbGxpbmddPVwiZGVmYXVsdEJpbGxpbmdBZGRyZXNzSWQgPT09IGFkZHJlc3NGb3JtLnZhbHVlLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNEZWZhdWx0U2hpcHBpbmddPVwiZGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkID09PSBhZGRyZXNzRm9ybS52YWx1ZS5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FkZHJlc3NGb3JtXT1cImFkZHJlc3NGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImFkZHJlc3NDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKFsnVXBkYXRlQ3VzdG9tZXInXSB8IGhhc1Blcm1pc3Npb24pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFhZGRyZXNzZXNUb0RlbGV0ZUlkcy5oYXMoYWRkcmVzc0Zvcm0udmFsdWUuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2V0QXNEZWZhdWx0QmlsbGluZyk9XCJzZXREZWZhdWx0QmlsbGluZ0FkZHJlc3NJZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2V0QXNEZWZhdWx0U2hpcHBpbmcpPVwic2V0RGVmYXVsdFNoaXBwaW5nQWRkcmVzc0lkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVBZGRyZXNzKT1cInRvZ2dsZURlbGV0ZUFkZHJlc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItYWRkcmVzcy1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IG10LTJcIiAoY2xpY2spPVwiYWRkQWRkcmVzcygpXCIgKnZkcklmUGVybWlzc2lvbnM9XCInVXBkYXRlQ3VzdG9tZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLmNyZWF0ZS1uZXctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjdXN0b21lci5vcmRlcnMnIHwgdHJhbnNsYXRlXCIgW3BhZGRpbmdYXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWRhdGEtdGFibGUtMlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY3VzdG9tZXItb3JkZXItbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9yZGVycyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJvcmRlcnNQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJvcmRlcnNDb3VudCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRPcmRlcnNQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZW1wdHlTdGF0ZUxhYmVsXT1cIidjdXN0b21lci5uby1vcmRlcnMtcGxhY2VkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJzZXRPcmRlckl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJzZXRPcmRlckN1cnJlbnRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmlkJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXIuaWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlci5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnV0dG9uLWdob3N0XCIgW3JvdXRlckxpbmtdPVwiWycvb3JkZXJzJywgb3JkZXIuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4+e3sgb3JkZXIuY29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhcnJvdyByaWdodFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ29yZGVyLm9yZGVyLXR5cGUnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXA+e3sgb3JkZXIudHlwZSB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ29yZGVyLnN0YXRlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj48L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIudG90YWwnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlci50b3RhbFdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9yZGVyLnVwZGF0ZWRBdCB8IHRpbWVBZ28gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIucGxhY2VkLWF0JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXIub3JkZXJQbGFjZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jdXN0b20tZmllbGQtY29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21GaWVsZCBvZiBjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRdPVwiY3VzdG9tRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1kYXRhLXRhYmxlLTI+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2N1c3RvbWVyLmN1c3RvbWVyLWhpc3RvcnknIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWN1c3RvbWVyLWhpc3RvcnlcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tZXJdPVwiZW50aXR5JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlzdG9yeV09XCJoaXN0b3J5JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAoYWRkTm90ZSk9XCJhZGROb3RlVG9DdXN0b21lcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAodXBkYXRlTm90ZSk9XCJ1cGRhdGVOb3RlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVOb3RlKT1cImRlbGV0ZU5vdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItY3VzdG9tZXItaGlzdG9yeT5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuIl19
@@ -84,10 +84,10 @@ export class LoginComponent {
84
84
  return redirectTo;
85
85
  }
86
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: LoginComponent, deps: [{ token: i1.AuthService }, { token: i2.Router }, { token: i3.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
87
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: LoginComponent, selector: "vdr-login", ngImport: i0, template: "<div class=\"login-wrapper\">\r\n <div class=\"login-wrapper-inner\">\r\n <div class=\"login-wrapper-image\">\r\n <div class=\"login-wrapper-image-content\">\r\n <div class=\"login-wrapper-image-title\">\r\n {{ 'common.login-image-title' | translate }}\r\n </div>\r\n <div class=\"login-wrapper-image-copyright\">\r\n <p *ngIf=\"imageCreator\" class=\"creator\">\r\n Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on\r\n <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a>\r\n </p>\r\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\r\n </div>\r\n </div>\r\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\" />\r\n </div>\r\n <div class=\"login-wrapper-form\">\r\n <p class=\"login-title\">\r\n {{ 'common.login-title' | translate : { brand: hideVendureBranding ? brand : 'Vendure' } }}\r\n </p>\r\n <form class=\"login-form\">\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n [class.visible]=\"errorMessage\"\r\n class=\"login-error\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <div>\r\n <button\r\n type=\"submit\"\r\n class=\"button primary login-button\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\"\r\n >{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span\r\n >\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n </div>\r\n <img class=\"login-wrapper-logo\" src=\"assets/logo-300px.png\" *ngIf=\"!hideVendureBranding\" />\r\n </div>\r\n</div>\r\n", styles: [".login-wrapper{background:var(--color-login-page-bg);background-image:none;height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-wrapper .login-wrapper-inner{background:#fff;width:1120px;height:590px;display:flex;justify-content:flex-start;align-items:stretch;position:relative;border-radius:var(--border-radius);border:1px solid var(--color-weight-150);overflow:hidden}@media (max-width: 992px){.login-wrapper .login-wrapper-inner{flex-direction:column;height:auto;width:100%}}.login-wrapper .login-wrapper-inner .login-wrapper-image{height:100%;flex-grow:1;position:relative}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image{height:300px}}.login-wrapper .login-wrapper-inner .login-wrapper-image img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;position:relative;z-index:1}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content{width:100%;height:100%;position:absolute;left:0;bottom:0;z-index:10;background:rgb(2,0,36);background:linear-gradient(180deg,rgba(2,0,36,0) 0%,rgba(0,0,0,.75) 100%);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:30px}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.6rem;font-weight:700;color:#fff;margin-bottom:20px}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.2rem}}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright{opacity:.8}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright p{font-size:.6rem;color:#fff;margin:0!important}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright a{color:#fff;text-decoration:underline}.login-wrapper .login-wrapper-inner .login-wrapper-form{height:100%;width:400px;padding:40px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;box-shadow:0 20px 25px #0000001a;overflow:hidden;border-radius:5px;flex-shrink:0}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-form{height:auto;width:100%;padding:20px}}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-title{font-weight:700;font-size:1.2rem;margin-bottom:20px;color:var(--color-weight-600)}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.username,.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.password{display:block;width:100%;margin-bottom:15px;padding:12px 16px!important;background:#fff;font-size:14px;line-height:22px;color:#52667a;outline:none;-webkit-appearance:none}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group .btn{width:100%!important;margin-top:20px!important}.login-wrapper .login-wrapper-inner .login-wrapper-logo{width:60px;height:auto;position:absolute;right:20px;top:20px}.login-button{width:100%;margin-top:var(--space-unit);justify-content:center}.version{flex:1;flex-grow:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}\n"], dependencies: [{ kind: "component", type: i4.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { kind: "component", type: i4.ClrAlertItem, selector: "clr-alert-item" }, { kind: "directive", type: i4.ClrAlertText, selector: ".alert-text" }, { kind: "directive", type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: LoginComponent, selector: "vdr-login", ngImport: i0, template: "<div class=\"login-wrapper\">\r\n <div class=\"login-wrapper-inner\">\r\n <div class=\"login-wrapper-image\">\r\n <div class=\"login-wrapper-image-content\">\r\n <div class=\"login-wrapper-image-title\">\r\n {{ 'common.login-image-title' | translate }}\r\n </div>\r\n <div class=\"login-wrapper-image-copyright\">\r\n <p *ngIf=\"imageCreator\" class=\"creator\">\r\n Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on\r\n <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a>\r\n </p>\r\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\r\n </div>\r\n </div>\r\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\" />\r\n </div>\r\n <div class=\"login-wrapper-form\">\r\n <p class=\"login-title\">\r\n {{ 'common.login-title' | translate : { brand: hideVendureBranding ? brand : 'Vendure' } }}\r\n </p>\r\n <form class=\"login-form\">\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n [class.visible]=\"errorMessage\"\r\n class=\"login-error\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <div>\r\n <button\r\n type=\"submit\"\r\n class=\"button primary login-button\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\"\r\n >{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span\r\n >\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n </div>\r\n <img class=\"login-wrapper-logo\" src=\"assets/logo-login.webp\" *ngIf=\"!hideVendureBranding\" />\r\n </div>\r\n</div>\r\n", styles: [".login-wrapper{background:var(--color-login-page-bg);background-image:none;height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-wrapper .login-wrapper-inner{background:#fff;width:1120px;height:590px;display:flex;justify-content:flex-start;align-items:stretch;position:relative;border-radius:var(--border-radius);border:1px solid var(--color-weight-150);overflow:hidden}@media (max-width: 992px){.login-wrapper .login-wrapper-inner{flex-direction:column;height:auto;width:100%}}.login-wrapper .login-wrapper-inner .login-wrapper-image{height:100%;flex-grow:1;position:relative}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image{height:300px}}.login-wrapper .login-wrapper-inner .login-wrapper-image img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;position:relative;z-index:1}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content{width:100%;height:100%;position:absolute;left:0;bottom:0;z-index:10;background:rgb(2,0,36);background:linear-gradient(180deg,rgba(2,0,36,0) 0%,rgba(0,0,0,.75) 100%);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:30px}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.6rem;font-weight:700;color:#fff;margin-bottom:20px}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.2rem}}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright{opacity:.8}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright p{font-size:.6rem;color:#fff;margin:0!important}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright a{color:#fff;text-decoration:underline}.login-wrapper .login-wrapper-inner .login-wrapper-form{height:100%;width:400px;padding:40px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;box-shadow:0 20px 25px #0000001a;overflow:hidden;border-radius:5px;flex-shrink:0}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-form{height:auto;width:100%;padding:20px}}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-title{font-weight:700;font-size:1.2rem;margin-bottom:20px;color:var(--color-weight-600)}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.username,.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.password{display:block;width:100%;margin-bottom:15px;padding:12px 16px!important;background:#fff;font-size:14px;line-height:22px;color:#52667a;outline:none;-webkit-appearance:none}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group .btn{width:100%!important;margin-top:20px!important}.login-wrapper .login-wrapper-inner .login-wrapper-logo{width:60px;height:auto;position:absolute;right:20px;top:20px}.login-button{width:100%;margin-top:var(--space-unit);justify-content:center}.version{flex:1;flex-grow:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}\n"], dependencies: [{ kind: "component", type: i4.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { kind: "component", type: i4.ClrAlertItem, selector: "clr-alert-item" }, { kind: "directive", type: i4.ClrAlertText, selector: ".alert-text" }, { kind: "directive", type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
88
88
  }
89
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: LoginComponent, decorators: [{
90
90
  type: Component,
91
- args: [{ selector: 'vdr-login', template: "<div class=\"login-wrapper\">\r\n <div class=\"login-wrapper-inner\">\r\n <div class=\"login-wrapper-image\">\r\n <div class=\"login-wrapper-image-content\">\r\n <div class=\"login-wrapper-image-title\">\r\n {{ 'common.login-image-title' | translate }}\r\n </div>\r\n <div class=\"login-wrapper-image-copyright\">\r\n <p *ngIf=\"imageCreator\" class=\"creator\">\r\n Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on\r\n <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a>\r\n </p>\r\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\r\n </div>\r\n </div>\r\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\" />\r\n </div>\r\n <div class=\"login-wrapper-form\">\r\n <p class=\"login-title\">\r\n {{ 'common.login-title' | translate : { brand: hideVendureBranding ? brand : 'Vendure' } }}\r\n </p>\r\n <form class=\"login-form\">\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n [class.visible]=\"errorMessage\"\r\n class=\"login-error\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <div>\r\n <button\r\n type=\"submit\"\r\n class=\"button primary login-button\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\"\r\n >{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span\r\n >\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n </div>\r\n <img class=\"login-wrapper-logo\" src=\"assets/logo-300px.png\" *ngIf=\"!hideVendureBranding\" />\r\n </div>\r\n</div>\r\n", styles: [".login-wrapper{background:var(--color-login-page-bg);background-image:none;height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-wrapper .login-wrapper-inner{background:#fff;width:1120px;height:590px;display:flex;justify-content:flex-start;align-items:stretch;position:relative;border-radius:var(--border-radius);border:1px solid var(--color-weight-150);overflow:hidden}@media (max-width: 992px){.login-wrapper .login-wrapper-inner{flex-direction:column;height:auto;width:100%}}.login-wrapper .login-wrapper-inner .login-wrapper-image{height:100%;flex-grow:1;position:relative}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image{height:300px}}.login-wrapper .login-wrapper-inner .login-wrapper-image img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;position:relative;z-index:1}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content{width:100%;height:100%;position:absolute;left:0;bottom:0;z-index:10;background:rgb(2,0,36);background:linear-gradient(180deg,rgba(2,0,36,0) 0%,rgba(0,0,0,.75) 100%);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:30px}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.6rem;font-weight:700;color:#fff;margin-bottom:20px}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.2rem}}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright{opacity:.8}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright p{font-size:.6rem;color:#fff;margin:0!important}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright a{color:#fff;text-decoration:underline}.login-wrapper .login-wrapper-inner .login-wrapper-form{height:100%;width:400px;padding:40px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;box-shadow:0 20px 25px #0000001a;overflow:hidden;border-radius:5px;flex-shrink:0}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-form{height:auto;width:100%;padding:20px}}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-title{font-weight:700;font-size:1.2rem;margin-bottom:20px;color:var(--color-weight-600)}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.username,.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.password{display:block;width:100%;margin-bottom:15px;padding:12px 16px!important;background:#fff;font-size:14px;line-height:22px;color:#52667a;outline:none;-webkit-appearance:none}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group .btn{width:100%!important;margin-top:20px!important}.login-wrapper .login-wrapper-inner .login-wrapper-logo{width:60px;height:auto;position:absolute;right:20px;top:20px}.login-button{width:100%;margin-top:var(--space-unit);justify-content:center}.version{flex:1;flex-grow:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}\n"] }]
91
+ args: [{ selector: 'vdr-login', template: "<div class=\"login-wrapper\">\r\n <div class=\"login-wrapper-inner\">\r\n <div class=\"login-wrapper-image\">\r\n <div class=\"login-wrapper-image-content\">\r\n <div class=\"login-wrapper-image-title\">\r\n {{ 'common.login-image-title' | translate }}\r\n </div>\r\n <div class=\"login-wrapper-image-copyright\">\r\n <p *ngIf=\"imageCreator\" class=\"creator\">\r\n Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on\r\n <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a>\r\n </p>\r\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\r\n </div>\r\n </div>\r\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\" />\r\n </div>\r\n <div class=\"login-wrapper-form\">\r\n <p class=\"login-title\">\r\n {{ 'common.login-title' | translate : { brand: hideVendureBranding ? brand : 'Vendure' } }}\r\n </p>\r\n <form class=\"login-form\">\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n [class.visible]=\"errorMessage\"\r\n class=\"login-error\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <div>\r\n <button\r\n type=\"submit\"\r\n class=\"button primary login-button\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\"\r\n >{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span\r\n >\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n </div>\r\n <img class=\"login-wrapper-logo\" src=\"assets/logo-login.webp\" *ngIf=\"!hideVendureBranding\" />\r\n </div>\r\n</div>\r\n", styles: [".login-wrapper{background:var(--color-login-page-bg);background-image:none;height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-wrapper .login-wrapper-inner{background:#fff;width:1120px;height:590px;display:flex;justify-content:flex-start;align-items:stretch;position:relative;border-radius:var(--border-radius);border:1px solid var(--color-weight-150);overflow:hidden}@media (max-width: 992px){.login-wrapper .login-wrapper-inner{flex-direction:column;height:auto;width:100%}}.login-wrapper .login-wrapper-inner .login-wrapper-image{height:100%;flex-grow:1;position:relative}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image{height:300px}}.login-wrapper .login-wrapper-inner .login-wrapper-image img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;position:relative;z-index:1}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content{width:100%;height:100%;position:absolute;left:0;bottom:0;z-index:10;background:rgb(2,0,36);background:linear-gradient(180deg,rgba(2,0,36,0) 0%,rgba(0,0,0,.75) 100%);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:30px}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.6rem;font-weight:700;color:#fff;margin-bottom:20px}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.2rem}}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright{opacity:.8}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright p{font-size:.6rem;color:#fff;margin:0!important}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright a{color:#fff;text-decoration:underline}.login-wrapper .login-wrapper-inner .login-wrapper-form{height:100%;width:400px;padding:40px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;box-shadow:0 20px 25px #0000001a;overflow:hidden;border-radius:5px;flex-shrink:0}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-form{height:auto;width:100%;padding:20px}}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-title{font-weight:700;font-size:1.2rem;margin-bottom:20px;color:var(--color-weight-600)}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.username,.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.password{display:block;width:100%;margin-bottom:15px;padding:12px 16px!important;background:#fff;font-size:14px;line-height:22px;color:#52667a;outline:none;-webkit-appearance:none}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group .btn{width:100%!important;margin-top:20px!important}.login-wrapper .login-wrapper-inner .login-wrapper-logo{width:60px;height:auto;position:absolute;right:20px;top:20px}.login-button{width:100%;margin-top:var(--space-unit);justify-content:center}.version{flex:1;flex-grow:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}\n"] }]
92
92
  }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.Router }, { type: i3.HttpClient }]; } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9sb2dpbi9zcmMvY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2xvZ2luL3NyYy9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFlLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFPMUcsTUFBTSxPQUFPLGNBQWM7SUFnQnZCLFlBQW9CLFdBQXdCLEVBQVUsTUFBYyxFQUFVLFVBQXNCO1FBQWhGLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFmcEcsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxnQkFBZ0IsQ0FBQztRQUUzQixVQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzdCLHdCQUFtQixHQUFHLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pELGdCQUFXLEdBQUcsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQzlDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFHakIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUN2QzthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRixRQUFRLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLEtBQUssYUFBYTtvQkFDZCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxNQUFNO2dCQUNWLEtBQUsseUJBQXlCLENBQUM7Z0JBQy9CLEtBQUsseUJBQXlCO29CQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ25DLE1BQU07YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsVUFBVTthQUNWLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQzthQUNyQyxTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2hCLE1BQU0sSUFBSSxHQUFTLEdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQVMsR0FBVyxDQUFDLFFBQVEsQ0FBQztRQUU1QyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLHFEQUFxRCxDQUFDO1FBQ3pGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxxREFBcUQsQ0FBQztRQUMvRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdCQUFnQjtRQUNwQixJQUFJLFVBQThCLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsT0FBTyxDQUFDLENBQUM7UUFDckQsSUFBSTtZQUNBLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLGVBQWUsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDL0MsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1NBQ0o7UUFBQyxPQUFPLENBQU0sRUFBRTtZQUNiLFNBQVM7U0FDWjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7OEdBNUVRLGNBQWM7a0dBQWQsY0FBYyxpRENWM0IsOCtIQW9GQTs7MkZEMUVhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBRE1JTl9VSV9WRVJTSU9OLCBBdXRoU2VydmljZSwgQVVUSF9SRURJUkVDVF9QQVJBTSwgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWxvZ2luJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xyXG4gICAgdXNlcm5hbWUgPSAnJztcclxuICAgIHBhc3N3b3JkID0gJyc7XHJcbiAgICByZW1lbWJlck1lID0gZmFsc2U7XHJcbiAgICB2ZXJzaW9uID0gQURNSU5fVUlfVkVSU0lPTjtcclxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgYnJhbmQgPSBnZXRBcHBDb25maWcoKS5icmFuZDtcclxuICAgIGhpZGVWZW5kdXJlQnJhbmRpbmcgPSBnZXRBcHBDb25maWcoKS5oaWRlVmVuZHVyZUJyYW5kaW5nO1xyXG4gICAgaGlkZVZlcnNpb24gPSBnZXRBcHBDb25maWcoKS5oaWRlVmVyc2lvbjtcclxuICAgIGN1c3RvbUltYWdlVXJsID0gZ2V0QXBwQ29uZmlnKCkubG9naW5JbWFnZVVybDtcclxuICAgIGltYWdlVXJsID0gJyc7XHJcbiAgICBpbWFnZVVuc3BsYXNoVXJsID0gJyc7XHJcbiAgICBpbWFnZUxvY2F0aW9uID0gJyc7XHJcbiAgICBpbWFnZUNyZWF0b3IgPSAnJztcclxuICAgIGltYWdlQ3JlYXRvclVybCA9ICcnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21JbWFnZVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlVXJsID0gdGhpcy5jdXN0b21JbWFnZVVybDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRJbWFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2dJbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ0luKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQsIHRoaXMucmVtZW1iZXJNZSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0Ll9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0N1cnJlbnRVc2VyJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdCA9IHRoaXMuZ2V0UmVkaXJlY3RSb3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocmVkaXJlY3QgPyByZWRpcmVjdCA6ICcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdOYXRpdmVBdXRoU3RyYXRlZ3lFcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRJbWFnZSgpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgLmdldCgnaHR0cHM6Ly9sb2dpbi1pbWFnZS52ZW5kdXJlLmlvJylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUltYWdlKHJlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUltYWdlKHJlczogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdXNlcjogYW55ID0gKHJlcyBhcyBhbnkpLnVzZXI7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb246IGFueSA9IChyZXMgYXMgYW55KS5sb2NhdGlvbjtcclxuXHJcbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IHJlcy51cmxzLnJlZ3VsYXIgKyAnP3V0bV9zb3VyY2U9VmVuZHVyZStMb2dpbitJbWFnZSZ1dG1fbWVkaXVtPXJlZmVycmFsJztcclxuICAgICAgICB0aGlzLmltYWdlQ3JlYXRvciA9IHVzZXIubmFtZTtcclxuICAgICAgICB0aGlzLmltYWdlTG9jYXRpb24gPSBsb2NhdGlvbi5uYW1lO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VDcmVhdG9yVXJsID0gdXNlci5saW5rcy5odG1sICsgJz91dG1fc291cmNlPVZlbmR1cmUrTG9naW4rSW1hZ2UmdXRtX21lZGl1bT1yZWZlcnJhbCc7XHJcbiAgICAgICAgdGhpcy5pbWFnZVVuc3BsYXNoVXJsID0gcmVzLmxpbmtzLmh0bWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0cyB0byByZWFkIGEgcmVkaXJlY3QgcGFyYW0gZnJvbSB0aGUgY3VycmVudCB1cmwgYW5kIHBhcnNlIGl0IGludG8gYVxyXG4gICAgICogcm91dGUgZnJvbSB3aGljaCB0aGUgdXNlciB3YXMgcmVkaXJlY3RlZCBhZnRlciBhIDQwMSBlcnJvci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRSZWRpcmVjdFJvdXRlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgbGV0IHJlZGlyZWN0VG86IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYCR7QVVUSF9SRURJUkVDVF9QQVJBTX09KC4qKWApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VG9QYXJhbSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gubWF0Y2gocmUpO1xyXG4gICAgICAgICAgICBpZiAocmVkaXJlY3RUb1BhcmFtICYmIDEgPCByZWRpcmVjdFRvUGFyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvID0gYXRvYihkZWNvZGVVUklDb21wb25lbnQocmVkaXJlY3RUb1BhcmFtWzFdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWRpcmVjdFRvO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9naW4td3JhcHBlci1pbm5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWltYWdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWltYWdlLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWltYWdlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5sb2dpbi1pbWFnZS10aXRsZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXdyYXBwZXItaW1hZ2UtY29weXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpbWFnZUNyZWF0b3JcIiBjbGFzcz1cImNyZWF0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGhvdG8gYnkgPGEgW2hyZWZdPVwiaW1hZ2VDcmVhdG9yVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3sgaW1hZ2VDcmVhdG9yIH19PC9hPiBvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJpbWFnZVVuc3BsYXNoVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+VW5zcGxhc2g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaW1hZ2VMb2NhdGlvblwiIGNsYXNzPVwibG9jYXRpb25cIj57eyBpbWFnZUxvY2F0aW9uIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiaW1hZ2VVcmxcIiBbc3JjXT1cImltYWdlVXJsXCIgW2FsdF09XCJpbWFnZVVybFwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXdyYXBwZXItZm9ybVwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImxvZ2luLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmxvZ2luLXRpdGxlJyB8IHRyYW5zbGF0ZSA6IHsgYnJhbmQ6IGhpZGVWZW5kdXJlQnJhbmRpbmcgPyBicmFuZCA6ICdWZW5kdXJlJyB9IH19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJsb2dpbi1mb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZXJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJsb2dpbl91c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NvbW1vbi51c2VybmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImxvZ2luX3Bhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInY29tbW9uLnBhc3N3b3JkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFsZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbHJBbGVydFR5cGVdPVwiJ2RhbmdlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52aXNpYmxlXT1cImVycm9yTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9naW4tZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1hbGVydC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGVydC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJyZW1lbWJlcm1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZW1lbWJlcm1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVtZW1iZXJNZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLnJlbWVtYmVyLW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnkgbG9naW4tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2dJbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXNlcm5hbWUgfHwgIXBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5sb2dpbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJicmFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBicmFuZCB9fSA8c3BhbiAqbmdJZj1cIiFoaWRlVmVuZHVyZUJyYW5kaW5nIHx8ICFoaWRlVmVyc2lvblwiPi08L3NwYW4+PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVWZW5kdXJlQnJhbmRpbmdcIj52ZW5kdXJlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVWZXJzaW9uXCI+dnt7IHZlcnNpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWxvZ29cIiBzcmM9XCJhc3NldHMvbG9nby0zMDBweC5wbmdcIiAqbmdJZj1cIiFoaWRlVmVuZHVyZUJyYW5kaW5nXCIgLz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9sb2dpbi9zcmMvY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2xvZ2luL3NyYy9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFlLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFPMUcsTUFBTSxPQUFPLGNBQWM7SUFnQnZCLFlBQW9CLFdBQXdCLEVBQVUsTUFBYyxFQUFVLFVBQXNCO1FBQWhGLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFmcEcsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxnQkFBZ0IsQ0FBQztRQUUzQixVQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzdCLHdCQUFtQixHQUFHLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pELGdCQUFXLEdBQUcsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQzlDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFHakIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUN2QzthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRixRQUFRLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLEtBQUssYUFBYTtvQkFDZCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxNQUFNO2dCQUNWLEtBQUsseUJBQXlCLENBQUM7Z0JBQy9CLEtBQUsseUJBQXlCO29CQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ25DLE1BQU07YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsVUFBVTthQUNWLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQzthQUNyQyxTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2hCLE1BQU0sSUFBSSxHQUFTLEdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQVMsR0FBVyxDQUFDLFFBQVEsQ0FBQztRQUU1QyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLHFEQUFxRCxDQUFDO1FBQ3pGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxxREFBcUQsQ0FBQztRQUMvRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdCQUFnQjtRQUNwQixJQUFJLFVBQThCLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsT0FBTyxDQUFDLENBQUM7UUFDckQsSUFBSTtZQUNBLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLGVBQWUsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDL0MsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1NBQ0o7UUFBQyxPQUFPLENBQU0sRUFBRTtZQUNiLFNBQVM7U0FDWjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7OEdBNUVRLGNBQWM7a0dBQWQsY0FBYyxpRENWM0IsKytIQW9GQTs7MkZEMUVhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBRE1JTl9VSV9WRVJTSU9OLCBBdXRoU2VydmljZSwgQVVUSF9SRURJUkVDVF9QQVJBTSwgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWxvZ2luJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xyXG4gICAgdXNlcm5hbWUgPSAnJztcclxuICAgIHBhc3N3b3JkID0gJyc7XHJcbiAgICByZW1lbWJlck1lID0gZmFsc2U7XHJcbiAgICB2ZXJzaW9uID0gQURNSU5fVUlfVkVSU0lPTjtcclxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgYnJhbmQgPSBnZXRBcHBDb25maWcoKS5icmFuZDtcclxuICAgIGhpZGVWZW5kdXJlQnJhbmRpbmcgPSBnZXRBcHBDb25maWcoKS5oaWRlVmVuZHVyZUJyYW5kaW5nO1xyXG4gICAgaGlkZVZlcnNpb24gPSBnZXRBcHBDb25maWcoKS5oaWRlVmVyc2lvbjtcclxuICAgIGN1c3RvbUltYWdlVXJsID0gZ2V0QXBwQ29uZmlnKCkubG9naW5JbWFnZVVybDtcclxuICAgIGltYWdlVXJsID0gJyc7XHJcbiAgICBpbWFnZVVuc3BsYXNoVXJsID0gJyc7XHJcbiAgICBpbWFnZUxvY2F0aW9uID0gJyc7XHJcbiAgICBpbWFnZUNyZWF0b3IgPSAnJztcclxuICAgIGltYWdlQ3JlYXRvclVybCA9ICcnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21JbWFnZVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlVXJsID0gdGhpcy5jdXN0b21JbWFnZVVybDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRJbWFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2dJbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ0luKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQsIHRoaXMucmVtZW1iZXJNZSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0Ll9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0N1cnJlbnRVc2VyJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdCA9IHRoaXMuZ2V0UmVkaXJlY3RSb3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocmVkaXJlY3QgPyByZWRpcmVjdCA6ICcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdOYXRpdmVBdXRoU3RyYXRlZ3lFcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRJbWFnZSgpIHtcclxuICAgICAgICB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgICAgICAgLmdldCgnaHR0cHM6Ly9sb2dpbi1pbWFnZS52ZW5kdXJlLmlvJylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUltYWdlKHJlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUltYWdlKHJlczogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdXNlcjogYW55ID0gKHJlcyBhcyBhbnkpLnVzZXI7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb246IGFueSA9IChyZXMgYXMgYW55KS5sb2NhdGlvbjtcclxuXHJcbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IHJlcy51cmxzLnJlZ3VsYXIgKyAnP3V0bV9zb3VyY2U9VmVuZHVyZStMb2dpbitJbWFnZSZ1dG1fbWVkaXVtPXJlZmVycmFsJztcclxuICAgICAgICB0aGlzLmltYWdlQ3JlYXRvciA9IHVzZXIubmFtZTtcclxuICAgICAgICB0aGlzLmltYWdlTG9jYXRpb24gPSBsb2NhdGlvbi5uYW1lO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VDcmVhdG9yVXJsID0gdXNlci5saW5rcy5odG1sICsgJz91dG1fc291cmNlPVZlbmR1cmUrTG9naW4rSW1hZ2UmdXRtX21lZGl1bT1yZWZlcnJhbCc7XHJcbiAgICAgICAgdGhpcy5pbWFnZVVuc3BsYXNoVXJsID0gcmVzLmxpbmtzLmh0bWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0cyB0byByZWFkIGEgcmVkaXJlY3QgcGFyYW0gZnJvbSB0aGUgY3VycmVudCB1cmwgYW5kIHBhcnNlIGl0IGludG8gYVxyXG4gICAgICogcm91dGUgZnJvbSB3aGljaCB0aGUgdXNlciB3YXMgcmVkaXJlY3RlZCBhZnRlciBhIDQwMSBlcnJvci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRSZWRpcmVjdFJvdXRlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgbGV0IHJlZGlyZWN0VG86IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYCR7QVVUSF9SRURJUkVDVF9QQVJBTX09KC4qKWApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VG9QYXJhbSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gubWF0Y2gocmUpO1xyXG4gICAgICAgICAgICBpZiAocmVkaXJlY3RUb1BhcmFtICYmIDEgPCByZWRpcmVjdFRvUGFyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvID0gYXRvYihkZWNvZGVVUklDb21wb25lbnQocmVkaXJlY3RUb1BhcmFtWzFdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWRpcmVjdFRvO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9naW4td3JhcHBlci1pbm5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWltYWdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWltYWdlLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWltYWdlLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5sb2dpbi1pbWFnZS10aXRsZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXdyYXBwZXItaW1hZ2UtY29weXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpbWFnZUNyZWF0b3JcIiBjbGFzcz1cImNyZWF0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGhvdG8gYnkgPGEgW2hyZWZdPVwiaW1hZ2VDcmVhdG9yVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3sgaW1hZ2VDcmVhdG9yIH19PC9hPiBvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJpbWFnZVVuc3BsYXNoVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+VW5zcGxhc2g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaW1hZ2VMb2NhdGlvblwiIGNsYXNzPVwibG9jYXRpb25cIj57eyBpbWFnZUxvY2F0aW9uIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiaW1hZ2VVcmxcIiBbc3JjXT1cImltYWdlVXJsXCIgW2FsdF09XCJpbWFnZVVybFwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXdyYXBwZXItZm9ybVwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImxvZ2luLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmxvZ2luLXRpdGxlJyB8IHRyYW5zbGF0ZSA6IHsgYnJhbmQ6IGhpZGVWZW5kdXJlQnJhbmRpbmcgPyBicmFuZCA6ICdWZW5kdXJlJyB9IH19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJsb2dpbi1mb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZXJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJsb2dpbl91c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NvbW1vbi51c2VybmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImxvZ2luX3Bhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInY29tbW9uLnBhc3N3b3JkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWFsZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbHJBbGVydFR5cGVdPVwiJ2RhbmdlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52aXNpYmxlXT1cImVycm9yTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9naW4tZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1hbGVydC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGVydC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJyZW1lbWJlcm1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZW1lbWJlcm1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVtZW1iZXJNZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLnJlbWVtYmVyLW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnkgbG9naW4tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2dJbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXNlcm5hbWUgfHwgIXBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5sb2dpbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJicmFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBicmFuZCB9fSA8c3BhbiAqbmdJZj1cIiFoaWRlVmVuZHVyZUJyYW5kaW5nIHx8ICFoaWRlVmVyc2lvblwiPi08L3NwYW4+PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVWZW5kdXJlQnJhbmRpbmdcIj52ZW5kdXJlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVWZXJzaW9uXCI+dnt7IHZlcnNpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJsb2dpbi13cmFwcGVyLWxvZ29cIiBzcmM9XCJhc3NldHMvbG9nby1sb2dpbi53ZWJwXCIgKm5nSWY9XCIhaGlkZVZlbmR1cmVCcmFuZGluZ1wiIC8+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==