tango-app-ui-store-builder 1.2.6 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -79,10 +79,10 @@ export class CadFilesComponent {
79
79
  this.destroy$.complete();
80
80
  }
81
81
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadFilesComponent, deps: [{ token: i1.StoreBuilderService }], target: i0.ɵɵFactoryTarget.Component });
82
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CadFilesComponent, selector: "lib-cad-files", ngImport: i0, template: "<section class=\"cad-files p-3\">\n <div class=\"card p-4\">\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\n <p class=\"text-muted small mb-3\">\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\n </p>\n\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\n <label class=\"form-label\">Store Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"Enter store name\"\n [(ngModel)]=\"storeName\"\n (keyup.enter)=\"onFetch()\"\n [disabled]=\"isLoading\" />\n </div>\n\n <button\n class=\"btn btn-primary\"\n (click)=\"onFetch()\"\n [disabled]=\"isLoading || !storeName.trim()\">\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\n </button>\n </div>\n\n @if (message) {\n <div\n class=\"alert\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\">\n {{ message }}\n </div>\n }\n\n @if (isLoading) {\n <div class=\"text-muted\">Loading files...</div>\n } @else if (hasSearched && files.length === 0) {\n <div class=\"text-muted\">No files found for this store.</div>\n } @else if (files.length > 0) {\n <div class=\"table-responsive\">\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Key</th>\n <th>Uploaded At</th>\n <th>Size</th>\n <th class=\"text-end\">Action</th>\n </tr>\n </thead>\n <tbody>\n @for (file of files; track file.key) {\n <tr>\n <td>{{ file.name }}</td>\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\n <td>{{ formatSize(file.size) }}</td>\n <td class=\"text-end\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"onDownload(file)\"\n [disabled]=\"downloadingKey === file.key\">\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n</section>\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CadFilesComponent, selector: "lib-cad-files", ngImport: i0, template: "<section class=\"cad-files p-3\">\r\n <div class=\"card p-4\">\r\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\r\n <p class=\"text-muted small mb-3\">\r\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\r\n </p>\r\n\r\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\r\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\r\n <label class=\"form-label\">Store Name</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter store name\"\r\n [(ngModel)]=\"storeName\"\r\n (keyup.enter)=\"onFetch()\"\r\n [disabled]=\"isLoading\" />\r\n </div>\r\n\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"onFetch()\"\r\n [disabled]=\"isLoading || !storeName.trim()\">\r\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\r\n </button>\r\n </div>\r\n\r\n @if (message) {\r\n <div\r\n class=\"alert\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading files...</div>\r\n } @else if (hasSearched && files.length === 0) {\r\n <div class=\"text-muted\">No files found for this store.</div>\r\n } @else if (files.length > 0) {\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-sm align-middle\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Key</th>\r\n <th>Uploaded At</th>\r\n <th>Size</th>\r\n <th class=\"text-end\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (file of files; track file.key) {\r\n <tr>\r\n <td>{{ file.name }}</td>\r\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\r\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\r\n <td>{{ formatSize(file.size) }}</td>\r\n <td class=\"text-end\">\r\n <button\r\n class=\"btn btn-sm btn-outline-primary\"\r\n (click)=\"onDownload(file)\"\r\n [disabled]=\"downloadingKey === file.key\">\r\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
83
83
  }
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadFilesComponent, decorators: [{
85
85
  type: Component,
86
- args: [{ selector: 'lib-cad-files', template: "<section class=\"cad-files p-3\">\n <div class=\"card p-4\">\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\n <p class=\"text-muted small mb-3\">\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\n </p>\n\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\n <label class=\"form-label\">Store Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"Enter store name\"\n [(ngModel)]=\"storeName\"\n (keyup.enter)=\"onFetch()\"\n [disabled]=\"isLoading\" />\n </div>\n\n <button\n class=\"btn btn-primary\"\n (click)=\"onFetch()\"\n [disabled]=\"isLoading || !storeName.trim()\">\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\n </button>\n </div>\n\n @if (message) {\n <div\n class=\"alert\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\">\n {{ message }}\n </div>\n }\n\n @if (isLoading) {\n <div class=\"text-muted\">Loading files...</div>\n } @else if (hasSearched && files.length === 0) {\n <div class=\"text-muted\">No files found for this store.</div>\n } @else if (files.length > 0) {\n <div class=\"table-responsive\">\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Key</th>\n <th>Uploaded At</th>\n <th>Size</th>\n <th class=\"text-end\">Action</th>\n </tr>\n </thead>\n <tbody>\n @for (file of files; track file.key) {\n <tr>\n <td>{{ file.name }}</td>\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\n <td>{{ formatSize(file.size) }}</td>\n <td class=\"text-end\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"onDownload(file)\"\n [disabled]=\"downloadingKey === file.key\">\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n</section>\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"] }]
86
+ args: [{ selector: 'lib-cad-files', template: "<section class=\"cad-files p-3\">\r\n <div class=\"card p-4\">\r\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\r\n <p class=\"text-muted small mb-3\">\r\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\r\n </p>\r\n\r\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\r\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\r\n <label class=\"form-label\">Store Name</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter store name\"\r\n [(ngModel)]=\"storeName\"\r\n (keyup.enter)=\"onFetch()\"\r\n [disabled]=\"isLoading\" />\r\n </div>\r\n\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"onFetch()\"\r\n [disabled]=\"isLoading || !storeName.trim()\">\r\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\r\n </button>\r\n </div>\r\n\r\n @if (message) {\r\n <div\r\n class=\"alert\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading files...</div>\r\n } @else if (hasSearched && files.length === 0) {\r\n <div class=\"text-muted\">No files found for this store.</div>\r\n } @else if (files.length > 0) {\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-sm align-middle\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Key</th>\r\n <th>Uploaded At</th>\r\n <th>Size</th>\r\n <th class=\"text-end\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (file of files; track file.key) {\r\n <tr>\r\n <td>{{ file.name }}</td>\r\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\r\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\r\n <td>{{ formatSize(file.size) }}</td>\r\n <td class=\"text-end\">\r\n <button\r\n class=\"btn btn-sm btn-outline-primary\"\r\n (click)=\"onDownload(file)\"\r\n [disabled]=\"downloadingKey === file.key\">\r\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"] }]
87
87
  }], ctorParameters: () => [{ type: i1.StoreBuilderService }] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2NhZC1maWxlcy9jYWQtZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLWZpbGVzL2NhZC1maWxlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7OztBQWdCeEMsTUFBTSxPQUFPLGlCQUFpQjtJQWNSO0lBYnBCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFFdkIsS0FBSyxHQUFjLEVBQUUsQ0FBQztJQUN0QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBRTdCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFFckMsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJQUU1QixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVoRCxZQUFvQixHQUF3QjtRQUF4QixRQUFHLEdBQUgsR0FBRyxDQUFxQjtJQUFHLENBQUM7SUFFaEQsT0FBTztRQUNMLElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FB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RlUsaUJBQWlCOzRGQUFqQixpQkFBaUIscURDbEI5Qix3Z0ZBMkVBOzs0RkR6RGEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQ2FkRmlsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG4gIHVwbG9hZGVkQXQ6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB1cmw6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNhZC1maWxlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWQtZmlsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY2FkLWZpbGVzLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2FkRmlsZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzdG9yZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIGZpbGVzOiBDYWRGaWxlW10gPSBbXTtcbiAgaGFzU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZG93bmxvYWRpbmdLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBtZXNzYWdlVHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNiczogU3RvcmVCdWlsZGVyU2VydmljZSkge31cblxuICBvbkZldGNoKCkge1xuICAgIGxldCBzdG9yZU5hbWUgPSAodGhpcy5zdG9yZU5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnUGxlYXNlIGVudGVyIGEgc3RvcmUgbmFtZS4nLCAnZXJyb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICAgIHRoaXMubWVzc2FnZSA9ICcnO1xuXG4gICAgdGhpcy5zYnNcbiAgICAgIC5nZXRDYWRGaWxlcyhzdG9yZU5hbWUpXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZXMgPSByZXM/LmRhdGE/LmZpbGVzIHx8IFtdO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICAgIGVycj8uZXJyb3I/LmVycm9yPy5lcnJNc2cgfHxcbiAgICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHxcbiAgICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZldGNoIGZpbGVzLicsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRG93bmxvYWQoZmlsZTogQ2FkRmlsZSkge1xuICAgIGlmICghZmlsZS51cmwpIHtcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoJ0Rvd25sb2FkIFVSTCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZpbGUuJywgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kb3dubG9hZGluZ0tleSA9IGZpbGUua2V5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUudXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZS5uYW1lKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoYEZhaWxlZCB0byBkb3dubG9hZCAke2ZpbGUubmFtZX0uYCwgJ2Vycm9yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmdLZXkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09IG51bGwgfHwgaXNOYU4oYnl0ZXMpKSByZXR1cm4gJy0nO1xuICAgIHJldHVybiAoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgJyBNQic7XG4gIH1cblxuICBzaG93TWVzc2FnZShtc2c6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJykge1xuICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm1lc3NhZ2UgPSAnJyksIDUwMDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImNhZC1maWxlcyBwLTNcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQgcC00XCI+XG4gICAgPGg1IGNsYXNzPVwibWItMVwiPkNBRCAmYW1wOyBLaXNzZmxvdyBGaWxlczwvaDU+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTNcIj5cbiAgICAgIEVudGVyIGEgc3RvcmUgbmFtZSB0byBsaXN0IHRoZSB1cGxvYWRlZCBDQUQgYW5kIEtpc3NmbG93IGZpbGVzIChzb3J0ZWQpLlxuICAgIDwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtZW5kIG1iLTMgZmxleC13cmFwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHg7IG1heC13aWR0aDogNDIwcHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHN0b3JlIG5hbWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic3RvcmVOYW1lXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25GZXRjaCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRmV0Y2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgIXN0b3JlTmFtZS50cmltKClcIj5cbiAgICAgICAge3sgaXNMb2FkaW5nID8gJ0ZldGNoaW5nLi4uJyA6ICdGZXRjaCBGaWxlcycgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChtZXNzYWdlKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWxlcnRcIlxuICAgICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgW2NsYXNzLmFsZXJ0LWRhbmdlcl09XCJtZXNzYWdlVHlwZSA9PT0gJ2Vycm9yJ1wiPlxuICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGlzTG9hZGluZykge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5Mb2FkaW5nIGZpbGVzLi4uPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoaGFzU2VhcmNoZWQgJiYgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIGZpbGVzIGZvdW5kIGZvciB0aGlzIHN0b3JlLjwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICA8dGg+S2V5PC90aD5cbiAgICAgICAgICAgICAgPHRoPlVwbG9hZGVkIEF0PC90aD5cbiAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiPkFjdGlvbjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZS5rZXkpIHtcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBmaWxlLm5hbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgdGV4dC1icmVha1wiPnt7IGZpbGUua2V5IH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e3sgZmlsZS51cGxvYWRlZEF0IHwgZGF0ZTogJ21lZGl1bScgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBmb3JtYXRTaXplKGZpbGUuc2l6ZSkgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRvd25sb2FkaW5nS2V5ID09PSBmaWxlLmtleSA/ICdEb3dubG9hZGluZy4uLicgOiAnRG93bmxvYWQnIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2NhZC1maWxlcy9jYWQtZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLWZpbGVzL2NhZC1maWxlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7OztBQWdCeEMsTUFBTSxPQUFPLGlCQUFpQjtJQWNSO0lBYnBCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFFdkIsS0FBSyxHQUFjLEVBQUUsQ0FBQztJQUN0QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBRTdCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFFckMsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJQUU1QixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVoRCxZQUFvQixHQUF3QjtRQUF4QixRQUFHLEdBQUgsR0FBRyxDQUFxQjtJQUFHLENBQUM7SUFFaEQsT0FBTztRQUNMLElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FB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RlUsaUJBQWlCOzRGQUFqQixpQkFBaUIscURDbEI5Qiw4cEZBMkVBOzs0RkR6RGEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIENhZEZpbGUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBrZXk6IHN0cmluZztcclxuICB1cGxvYWRlZEF0OiBzdHJpbmc7XHJcbiAgc2l6ZTogbnVtYmVyO1xyXG4gIHVybDogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWQtZmlsZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWQtZmlsZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jYWQtZmlsZXMuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FkRmlsZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHN0b3JlTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGZpbGVzOiBDYWRGaWxlW10gPSBbXTtcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkb3dubG9hZGluZ0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIG1lc3NhZ2VUeXBlOiAnc3VjY2VzcycgfCAnZXJyb3InID0gJ3N1Y2Nlc3MnO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYnM6IFN0b3JlQnVpbGRlclNlcnZpY2UpIHt9XHJcblxyXG4gIG9uRmV0Y2goKSB7XHJcbiAgICBsZXQgc3RvcmVOYW1lID0gKHRoaXMuc3RvcmVOYW1lIHx8ICcnKS50cmltKCk7XHJcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKCdQbGVhc2UgZW50ZXIgYSBzdG9yZSBuYW1lLicsICdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVzID0gW107XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICB0aGlzLnNic1xyXG4gICAgICAuZ2V0Q2FkRmlsZXMoc3RvcmVOYW1lKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsZXMgPSByZXM/LmRhdGE/LmZpbGVzIHx8IFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3I/LmVyck1zZyB8fFxyXG4gICAgICAgICAgICAgIGVycj8uZXJyb3I/LmVycm9yIHx8XHJcbiAgICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICdGYWlsZWQgdG8gZmV0Y2ggZmlsZXMuJyxcclxuICAgICAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkRvd25sb2FkKGZpbGU6IENhZEZpbGUpIHtcclxuICAgIGlmICghZmlsZS51cmwpIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnRG93bmxvYWQgVVJMIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZmlsZS4nLCAnZXJyb3InKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG93bmxvYWRpbmdLZXkgPSBmaWxlLmtleTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZS51cmwpO1xyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XHJcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZS5uYW1lKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKGBGYWlsZWQgdG8gZG93bmxvYWQgJHtmaWxlLm5hbWV9LmAsICdlcnJvcicpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5kb3dubG9hZGluZ0tleSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID09IG51bGwgfHwgaXNOYU4oYnl0ZXMpKSByZXR1cm4gJy0nO1xyXG4gICAgcmV0dXJuIChieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyAnIE1CJztcclxuICB9XHJcblxyXG4gIHNob3dNZXNzYWdlKG1zZzogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubWVzc2FnZSA9ICcnKSwgNTAwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImNhZC1maWxlcyBwLTNcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1iLTFcIj5DQUQgJmFtcDsgS2lzc2Zsb3cgRmlsZXM8L2g1PlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTNcIj5cclxuICAgICAgRW50ZXIgYSBzdG9yZSBuYW1lIHRvIGxpc3QgdGhlIHVwbG9hZGVkIENBRCBhbmQgS2lzc2Zsb3cgZmlsZXMgKHNvcnRlZCkuXHJcbiAgICA8L3A+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1lbmQgbWItMyBmbGV4LXdyYXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4OyBtYXgtd2lkdGg6IDQyMHB4O1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgc3RvcmUgbmFtZVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0b3JlTmFtZVwiXHJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25GZXRjaCgpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uRmV0Y2goKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCAhc3RvcmVOYW1lLnRyaW0oKVwiPlxyXG4gICAgICAgIHt7IGlzTG9hZGluZyA/ICdGZXRjaGluZy4uLicgOiAnRmV0Y2ggRmlsZXMnIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmIChtZXNzYWdlKSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImFsZXJ0XCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtZGFuZ2VyXT1cIm1lc3NhZ2VUeXBlID09PSAnZXJyb3InXCI+XHJcbiAgICAgICAge3sgbWVzc2FnZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKGlzTG9hZGluZykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPkxvYWRpbmcgZmlsZXMuLi48L2Rpdj5cclxuICAgIH0gQGVsc2UgaWYgKGhhc1NlYXJjaGVkICYmIGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIGZpbGVzIGZvdW5kIGZvciB0aGlzIHN0b3JlLjwvZGl2PlxyXG4gICAgfSBAZWxzZSBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5LZXk8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5VcGxvYWRlZCBBdDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIEBmb3IgKGZpbGUgb2YgZmlsZXM7IHRyYWNrIGZpbGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGZpbGUubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIHRleHQtYnJlYWtcIj57eyBmaWxlLmtleSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3sgZmlsZS51cGxvYWRlZEF0IHwgZGF0ZTogJ21lZGl1bScgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGZvcm1hdFNpemUoZmlsZS5zaXplKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRvd25sb2FkKGZpbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5ID8gJ0Rvd25sb2FkaW5nLi4uJyA6ICdEb3dubG9hZCcgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
@@ -230,10 +230,10 @@ export class MoveBucketComponent {
230
230
  this.destroy$.complete();
231
231
  }
232
232
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MoveBucketComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }, { token: i3.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
233
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MoveBucketComponent, selector: "lib-move-bucket", ngImport: i0, template: "<section class=\"move-bucket p-3\">\n <div class=\"card p-4\" style=\"max-width: 640px;\">\n <h5 class=\"mb-1\">Move Store Bucket</h5>\n <p class=\"text-muted small mb-3\">\n Move a floor between Onboarding (Draft / Allocation Pending) and ManagePlano (Completed) without losing store data.\n </p>\n\n <!-- Store -->\n <div class=\"mb-3\">\n <lib-reactive-select\n label=\"Store\"\n [idField]=\"'id'\"\n [nameField]=\"'label'\"\n [data]=\"storeOptions\"\n [search]=\"true\"\n [ngModel]=\"selectedStoreId\"\n (ngModelChange)=\"onStoreSelected($event)\">\n </lib-reactive-select>\n </div>\n\n <!-- Floor -->\n <div class=\"mb-3\" *ngIf=\"selectedStoreId\">\n <ng-container *ngIf=\"isLoadingFloors; else floorPicker\">\n <div class=\"text-muted small\">Loading floors...</div>\n </ng-container>\n <ng-template #floorPicker>\n <ng-container *ngIf=\"floors.length > 0; else noFloors\">\n <lib-reactive-select\n label=\"Floor\"\n [idField]=\"'_id'\"\n [nameField]=\"'displayName'\"\n [data]=\"floors\"\n [search]=\"true\"\n [ngModel]=\"selectedFloorId\"\n (ngModelChange)=\"onFloorSelected($event)\">\n </lib-reactive-select>\n </ng-container>\n <ng-template #noFloors>\n <div class=\"text-muted small\">No floors found for this store.</div>\n </ng-template>\n </ng-template>\n </div>\n\n <!-- Current bucket info + target status -->\n <ng-container *ngIf=\"selectedFloorId && currentStatus\">\n <div class=\"mb-3 p-3 rounded current-info\">\n <div class=\"d-flex justify-content-between small\">\n <span class=\"text-muted\">Current bucket</span>\n <span class=\"fw-semibold\">{{ getBucketLabel(currentStatus) }}</span>\n </div>\n <div class=\"d-flex justify-content-between small mt-1\">\n <span class=\"text-muted\">Current status</span>\n <span class=\"fw-semibold\">{{ getStatusLabel(currentStatus) }}</span>\n </div>\n </div>\n\n <div class=\"mb-3\">\n <lib-reactive-select\n label=\"Move to status\"\n [idField]=\"'value'\"\n [nameField]=\"'label'\"\n [subTextField]=\"'bucket'\"\n [data]=\"statusOptions\"\n [ngModel]=\"targetStatus\"\n (ngModelChange)=\"onTargetStatusSelected($event)\">\n </lib-reactive-select>\n <div class=\"form-text text-warning\" *ngIf=\"statusChanged\">\n isPlanoApproved will be set to\n <strong>{{ targetStatus === 'draft' ? 'false' : 'true' }}</strong>,\n planoProgress will be set to\n <strong>{{ targetStatus === 'completed' ? 25 : 0 }}</strong>.\n </div>\n </div>\n\n <!-- Task cleanup checkboxes -->\n <div class=\"mb-3\">\n <label class=\"form-label\">Clear tasks &amp; compliance rows (optional)</label>\n <div class=\"d-flex flex-column gap-2\">\n <div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrLayout\"\n [(ngModel)]=\"clearLayoutTasks\">\n <label class=\"form-check-label\" for=\"clrLayout\">\n Layout tasks\n <span class=\"text-muted small\">(planoType: layout, layoutFixture)</span>\n </label>\n </div>\n <div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrFixture\"\n [(ngModel)]=\"clearFixtureTasks\">\n <label class=\"form-check-label\" for=\"clrFixture\">\n Fixture tasks\n <span class=\"text-muted small\">(planoType: fixture, vm)</span>\n </label>\n </div>\n <div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrZone\"\n [(ngModel)]=\"clearZoneTasks\">\n <label class=\"form-check-label\" for=\"clrZone\">\n Zone tasks\n <span class=\"text-muted small\">(planoType: zoneVerification)</span>\n </label>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Submit -->\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">\n {{ isSubmitting ? 'Updating...' : 'Update' }}\n </button>\n\n <div class=\"mt-3 alert\" *ngIf=\"message\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\"\n style=\"white-space: pre-line;\">\n {{ message }}\n </div>\n </div>\n</section>\n", styles: [".move-bucket .current-info{background-color:#f9fafb;border:1px solid #e4e7ec}\n"], dependencies: [{ kind: "component", type: i4.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
233
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MoveBucketComponent, selector: "lib-move-bucket", ngImport: i0, template: "<section class=\"move-bucket p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 640px;\">\r\n <h5 class=\"mb-1\">Move Store Bucket</h5>\r\n <p class=\"text-muted small mb-3\">\r\n Move a floor between Onboarding (Draft / Allocation Pending) and ManagePlano (Completed) without losing store data.\r\n </p>\r\n\r\n <!-- Store -->\r\n <div class=\"mb-3\">\r\n <lib-reactive-select\r\n label=\"Store\"\r\n [idField]=\"'id'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"storeOptions\"\r\n [search]=\"true\"\r\n [ngModel]=\"selectedStoreId\"\r\n (ngModelChange)=\"onStoreSelected($event)\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <!-- Floor -->\r\n <div class=\"mb-3\" *ngIf=\"selectedStoreId\">\r\n <ng-container *ngIf=\"isLoadingFloors; else floorPicker\">\r\n <div class=\"text-muted small\">Loading floors...</div>\r\n </ng-container>\r\n <ng-template #floorPicker>\r\n <ng-container *ngIf=\"floors.length > 0; else noFloors\">\r\n <lib-reactive-select\r\n label=\"Floor\"\r\n [idField]=\"'_id'\"\r\n [nameField]=\"'displayName'\"\r\n [data]=\"floors\"\r\n [search]=\"true\"\r\n [ngModel]=\"selectedFloorId\"\r\n (ngModelChange)=\"onFloorSelected($event)\">\r\n </lib-reactive-select>\r\n </ng-container>\r\n <ng-template #noFloors>\r\n <div class=\"text-muted small\">No floors found for this store.</div>\r\n </ng-template>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Current bucket info + target status -->\r\n <ng-container *ngIf=\"selectedFloorId && currentStatus\">\r\n <div class=\"mb-3 p-3 rounded current-info\">\r\n <div class=\"d-flex justify-content-between small\">\r\n <span class=\"text-muted\">Current bucket</span>\r\n <span class=\"fw-semibold\">{{ getBucketLabel(currentStatus) }}</span>\r\n </div>\r\n <div class=\"d-flex justify-content-between small mt-1\">\r\n <span class=\"text-muted\">Current status</span>\r\n <span class=\"fw-semibold\">{{ getStatusLabel(currentStatus) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <lib-reactive-select\r\n label=\"Move to status\"\r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [subTextField]=\"'bucket'\"\r\n [data]=\"statusOptions\"\r\n [ngModel]=\"targetStatus\"\r\n (ngModelChange)=\"onTargetStatusSelected($event)\">\r\n </lib-reactive-select>\r\n <div class=\"form-text text-warning\" *ngIf=\"statusChanged\">\r\n isPlanoApproved will be set to\r\n <strong>{{ targetStatus === 'draft' ? 'false' : 'true' }}</strong>,\r\n planoProgress will be set to\r\n <strong>{{ targetStatus === 'completed' ? 25 : 0 }}</strong>.\r\n </div>\r\n </div>\r\n\r\n <!-- Task cleanup checkboxes -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Clear tasks &amp; compliance rows (optional)</label>\r\n <div class=\"d-flex flex-column gap-2\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrLayout\"\r\n [(ngModel)]=\"clearLayoutTasks\">\r\n <label class=\"form-check-label\" for=\"clrLayout\">\r\n Layout tasks\r\n <span class=\"text-muted small\">(planoType: layout, layoutFixture)</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrFixture\"\r\n [(ngModel)]=\"clearFixtureTasks\">\r\n <label class=\"form-check-label\" for=\"clrFixture\">\r\n Fixture tasks\r\n <span class=\"text-muted small\">(planoType: fixture, vm)</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrZone\"\r\n [(ngModel)]=\"clearZoneTasks\">\r\n <label class=\"form-check-label\" for=\"clrZone\">\r\n Zone tasks\r\n <span class=\"text-muted small\">(planoType: zoneVerification)</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">\r\n {{ isSubmitting ? 'Updating...' : 'Update' }}\r\n </button>\r\n\r\n <div class=\"mt-3 alert\" *ngIf=\"message\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\"\r\n style=\"white-space: pre-line;\">\r\n {{ message }}\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".move-bucket .current-info{background-color:#f9fafb;border:1px solid #e4e7ec}\n"], dependencies: [{ kind: "component", type: i4.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
234
234
  }
235
235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MoveBucketComponent, decorators: [{
236
236
  type: Component,
237
- args: [{ selector: "lib-move-bucket", template: "<section class=\"move-bucket p-3\">\n <div class=\"card p-4\" style=\"max-width: 640px;\">\n <h5 class=\"mb-1\">Move Store Bucket</h5>\n <p class=\"text-muted small mb-3\">\n Move a floor between Onboarding (Draft / Allocation Pending) and ManagePlano (Completed) without losing store data.\n </p>\n\n <!-- Store -->\n <div class=\"mb-3\">\n <lib-reactive-select\n label=\"Store\"\n [idField]=\"'id'\"\n [nameField]=\"'label'\"\n [data]=\"storeOptions\"\n [search]=\"true\"\n [ngModel]=\"selectedStoreId\"\n (ngModelChange)=\"onStoreSelected($event)\">\n </lib-reactive-select>\n </div>\n\n <!-- Floor -->\n <div class=\"mb-3\" *ngIf=\"selectedStoreId\">\n <ng-container *ngIf=\"isLoadingFloors; else floorPicker\">\n <div class=\"text-muted small\">Loading floors...</div>\n </ng-container>\n <ng-template #floorPicker>\n <ng-container *ngIf=\"floors.length > 0; else noFloors\">\n <lib-reactive-select\n label=\"Floor\"\n [idField]=\"'_id'\"\n [nameField]=\"'displayName'\"\n [data]=\"floors\"\n [search]=\"true\"\n [ngModel]=\"selectedFloorId\"\n (ngModelChange)=\"onFloorSelected($event)\">\n </lib-reactive-select>\n </ng-container>\n <ng-template #noFloors>\n <div class=\"text-muted small\">No floors found for this store.</div>\n </ng-template>\n </ng-template>\n </div>\n\n <!-- Current bucket info + target status -->\n <ng-container *ngIf=\"selectedFloorId && currentStatus\">\n <div class=\"mb-3 p-3 rounded current-info\">\n <div class=\"d-flex justify-content-between small\">\n <span class=\"text-muted\">Current bucket</span>\n <span class=\"fw-semibold\">{{ getBucketLabel(currentStatus) }}</span>\n </div>\n <div class=\"d-flex justify-content-between small mt-1\">\n <span class=\"text-muted\">Current status</span>\n <span class=\"fw-semibold\">{{ getStatusLabel(currentStatus) }}</span>\n </div>\n </div>\n\n <div class=\"mb-3\">\n <lib-reactive-select\n label=\"Move to status\"\n [idField]=\"'value'\"\n [nameField]=\"'label'\"\n [subTextField]=\"'bucket'\"\n [data]=\"statusOptions\"\n [ngModel]=\"targetStatus\"\n (ngModelChange)=\"onTargetStatusSelected($event)\">\n </lib-reactive-select>\n <div class=\"form-text text-warning\" *ngIf=\"statusChanged\">\n isPlanoApproved will be set to\n <strong>{{ targetStatus === 'draft' ? 'false' : 'true' }}</strong>,\n planoProgress will be set to\n <strong>{{ targetStatus === 'completed' ? 25 : 0 }}</strong>.\n </div>\n </div>\n\n <!-- Task cleanup checkboxes -->\n <div class=\"mb-3\">\n <label class=\"form-label\">Clear tasks &amp; compliance rows (optional)</label>\n <div class=\"d-flex flex-column gap-2\">\n <div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrLayout\"\n [(ngModel)]=\"clearLayoutTasks\">\n <label class=\"form-check-label\" for=\"clrLayout\">\n Layout tasks\n <span class=\"text-muted small\">(planoType: layout, layoutFixture)</span>\n </label>\n </div>\n <div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrFixture\"\n [(ngModel)]=\"clearFixtureTasks\">\n <label class=\"form-check-label\" for=\"clrFixture\">\n Fixture tasks\n <span class=\"text-muted small\">(planoType: fixture, vm)</span>\n </label>\n </div>\n <div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrZone\"\n [(ngModel)]=\"clearZoneTasks\">\n <label class=\"form-check-label\" for=\"clrZone\">\n Zone tasks\n <span class=\"text-muted small\">(planoType: zoneVerification)</span>\n </label>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Submit -->\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">\n {{ isSubmitting ? 'Updating...' : 'Update' }}\n </button>\n\n <div class=\"mt-3 alert\" *ngIf=\"message\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\"\n style=\"white-space: pre-line;\">\n {{ message }}\n </div>\n </div>\n</section>\n", styles: [".move-bucket .current-info{background-color:#f9fafb;border:1px solid #e4e7ec}\n"] }]
237
+ args: [{ selector: "lib-move-bucket", template: "<section class=\"move-bucket p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 640px;\">\r\n <h5 class=\"mb-1\">Move Store Bucket</h5>\r\n <p class=\"text-muted small mb-3\">\r\n Move a floor between Onboarding (Draft / Allocation Pending) and ManagePlano (Completed) without losing store data.\r\n </p>\r\n\r\n <!-- Store -->\r\n <div class=\"mb-3\">\r\n <lib-reactive-select\r\n label=\"Store\"\r\n [idField]=\"'id'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"storeOptions\"\r\n [search]=\"true\"\r\n [ngModel]=\"selectedStoreId\"\r\n (ngModelChange)=\"onStoreSelected($event)\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <!-- Floor -->\r\n <div class=\"mb-3\" *ngIf=\"selectedStoreId\">\r\n <ng-container *ngIf=\"isLoadingFloors; else floorPicker\">\r\n <div class=\"text-muted small\">Loading floors...</div>\r\n </ng-container>\r\n <ng-template #floorPicker>\r\n <ng-container *ngIf=\"floors.length > 0; else noFloors\">\r\n <lib-reactive-select\r\n label=\"Floor\"\r\n [idField]=\"'_id'\"\r\n [nameField]=\"'displayName'\"\r\n [data]=\"floors\"\r\n [search]=\"true\"\r\n [ngModel]=\"selectedFloorId\"\r\n (ngModelChange)=\"onFloorSelected($event)\">\r\n </lib-reactive-select>\r\n </ng-container>\r\n <ng-template #noFloors>\r\n <div class=\"text-muted small\">No floors found for this store.</div>\r\n </ng-template>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Current bucket info + target status -->\r\n <ng-container *ngIf=\"selectedFloorId && currentStatus\">\r\n <div class=\"mb-3 p-3 rounded current-info\">\r\n <div class=\"d-flex justify-content-between small\">\r\n <span class=\"text-muted\">Current bucket</span>\r\n <span class=\"fw-semibold\">{{ getBucketLabel(currentStatus) }}</span>\r\n </div>\r\n <div class=\"d-flex justify-content-between small mt-1\">\r\n <span class=\"text-muted\">Current status</span>\r\n <span class=\"fw-semibold\">{{ getStatusLabel(currentStatus) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <lib-reactive-select\r\n label=\"Move to status\"\r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [subTextField]=\"'bucket'\"\r\n [data]=\"statusOptions\"\r\n [ngModel]=\"targetStatus\"\r\n (ngModelChange)=\"onTargetStatusSelected($event)\">\r\n </lib-reactive-select>\r\n <div class=\"form-text text-warning\" *ngIf=\"statusChanged\">\r\n isPlanoApproved will be set to\r\n <strong>{{ targetStatus === 'draft' ? 'false' : 'true' }}</strong>,\r\n planoProgress will be set to\r\n <strong>{{ targetStatus === 'completed' ? 25 : 0 }}</strong>.\r\n </div>\r\n </div>\r\n\r\n <!-- Task cleanup checkboxes -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Clear tasks &amp; compliance rows (optional)</label>\r\n <div class=\"d-flex flex-column gap-2\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrLayout\"\r\n [(ngModel)]=\"clearLayoutTasks\">\r\n <label class=\"form-check-label\" for=\"clrLayout\">\r\n Layout tasks\r\n <span class=\"text-muted small\">(planoType: layout, layoutFixture)</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrFixture\"\r\n [(ngModel)]=\"clearFixtureTasks\">\r\n <label class=\"form-check-label\" for=\"clrFixture\">\r\n Fixture tasks\r\n <span class=\"text-muted small\">(planoType: fixture, vm)</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"clrZone\"\r\n [(ngModel)]=\"clearZoneTasks\">\r\n <label class=\"form-check-label\" for=\"clrZone\">\r\n Zone tasks\r\n <span class=\"text-muted small\">(planoType: zoneVerification)</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">\r\n {{ isSubmitting ? 'Updating...' : 'Update' }}\r\n </button>\r\n\r\n <div class=\"mt-3 alert\" *ngIf=\"message\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\"\r\n style=\"white-space: pre-line;\">\r\n {{ message }}\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".move-bucket .current-info{background-color:#f9fafb;border:1px solid #e4e7ec}\n"] }]
238
238
  }], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }, { type: i3.NgbModal }] });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1idWNrZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvbW92ZS1idWNrZXQvbW92ZS1idWNrZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvbW92ZS1idWNrZXQvbW92ZS1idWNrZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7QUF3QjdHLE1BQU0sY0FBYyxHQUFtQjtJQUNyQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO0lBQ3hEO1FBQ0UsS0FBSyxFQUFFLG1CQUFtQjtRQUMxQixLQUFLLEVBQUUsb0JBQW9CO1FBQzNCLE1BQU0sRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtDQUNsRSxDQUFDO0FBT0YsTUFBTSxPQUFPLG1CQUFtQjtJQTBCcEI7SUFDQTtJQUNBO0lBM0JWLFFBQVEsQ0FBUztJQUVqQixZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxlQUFlLEdBQWtCLElBQUksQ0FBQztJQUN0QyxrQkFBa0IsR0FBa0IsSUFB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QUUsQ0FBQztJQUMzQixDQUFDO3dHQXRQVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix1RENsRGhDLDJuSkF1SEE7OzRGRHJFYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG59IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9wb3B1cHMvZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xuXG5pbnRlcmZhY2UgU3RvcmVPcHRpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRmxvb3JPcHRpb24ge1xuICBfaWQ6IHN0cmluZztcbiAgZmxvb3JOdW1iZXI6IG51bWJlcjtcbiAgZmxvb3JOYW1lOiBzdHJpbmc7XG4gIHN0YXR1czogQnVja2V0U3RhdHVzO1xuICBpc1BsYW5vQXBwcm92ZWQ/OiBib29sZWFuO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xufVxuXG50eXBlIEJ1Y2tldFN0YXR1cyA9IFwiZHJhZnRcIiB8IFwiYWxsb2NhdGlvblBlbmRpbmdcIiB8IFwiY29tcGxldGVkXCI7XG5cbmludGVyZmFjZSBTdGF0dXNPcHRpb24ge1xuICB2YWx1ZTogQnVja2V0U3RhdHVzO1xuICBsYWJlbDogc3RyaW5nO1xuICBidWNrZXQ6IHN0cmluZztcbn1cblxuY29uc3QgU1RBVFVTX09QVElPTlM6IFN0YXR1c09wdGlvbltdID0gW1xuICB7IHZhbHVlOiBcImRyYWZ0XCIsIGxhYmVsOiBcIkRyYWZ0XCIsIGJ1Y2tldDogXCJPbmJvYXJkaW5nXCIgfSxcbiAge1xuICAgIHZhbHVlOiBcImFsbG9jYXRpb25QZW5kaW5nXCIsXG4gICAgbGFiZWw6IFwiQWxsb2NhdGlvbiBQZW5kaW5nXCIsXG4gICAgYnVja2V0OiBcIk9uYm9hcmRpbmdcIixcbiAgfSxcbiAgeyB2YWx1ZTogXCJjb21wbGV0ZWRcIiwgbGFiZWw6IFwiQ29tcGxldGVkXCIsIGJ1Y2tldDogXCJNYW5hZ2VQbGFub1wiIH0sXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibGliLW1vdmUtYnVja2V0XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbW92ZS1idWNrZXQuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9tb3ZlLWJ1Y2tldC5jb21wb25lbnQuc2Nzc1wiLFxufSlcbmV4cG9ydCBjbGFzcyBNb3ZlQnVja2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjbGllbnRJZDogc3RyaW5nO1xuXG4gIHN0b3JlT3B0aW9uczogU3RvcmVPcHRpb25bXSA9IFtdO1xuICBzZWxlY3RlZFN0b3JlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFN0b3JlTGFiZWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGZsb29yczogRmxvb3JPcHRpb25bXSA9IFtdO1xuICBzZWxlY3RlZEZsb29ySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpc0xvYWRpbmdGbG9vcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzdGF0dXNPcHRpb25zID0gU1RBVFVTX09QVElPTlM7XG4gIHRhcmdldFN0YXR1czogQnVja2V0U3RhdHVzIHwgbnVsbCA9IG51bGw7XG4gIGN1cnJlbnRTdGF0dXM6IEJ1Y2tldFN0YXR1cyB8IG51bGwgPSBudWxsO1xuXG4gIGNsZWFyTGF5b3V0VGFza3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2xlYXJGaXh0dXJlVGFza3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2xlYXJab25lVGFza3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcbiAgbWVzc2FnZVR5cGU6IFwic3VjY2Vzc1wiIHwgXCJlcnJvclwiID0gXCJzdWNjZXNzXCI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYnM6IFN0b3JlQnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICBmaWx0ZXIoKGRhdGEpID0+ICEhZGF0YSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhLmNsaWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRTdG9yZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbG9hZFN0b3JlcygpIHtcbiAgICB0aGlzLnNic1xuICAgICAgLmdldFN0b3JlT3JDbHVzdGVyTGlzdCh7IHNlYXJjaE1vZGU6IFwic3RvcmVcIiB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSByZXM/LmRhdGEgfHwgW107XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3RvcmVTZWxlY3RlZChzdG9yZUlkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlSWQgPSBzdG9yZUlkO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5zdG9yZU9wdGlvbnMuZmluZCgocykgPT4gcy5pZCA9PT0gc3RvcmVJZCk7XG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlTGFiZWwgPSBzdG9yZT8ubGFiZWwgPz8gbnVsbDtcbiAgICB0aGlzLnJlc2V0Rmxvb3JTdGF0ZSgpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVMYWJlbCkge1xuICAgICAgdGhpcy5sb2FkRmxvb3JzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZsb29yU3RhdGUoKSB7XG4gICAgdGhpcy5mbG9vcnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JJZCA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0aGlzLnRhcmdldFN0YXR1cyA9IG51bGw7XG4gICAgdGhpcy5jbGVhckxheW91dFRhc2tzID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckZpeHR1cmVUYXNrcyA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJab25lVGFza3MgPSBmYWxzZTtcbiAgfVxuXG4gIGxvYWRGbG9vcnMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RvcmVMYWJlbCkgcmV0dXJuO1xuICAgIHRoaXMuaXNMb2FkaW5nRmxvb3JzID0gdHJ1ZTtcbiAgICB0aGlzLnNic1xuICAgICAgLmdldEZsb29yc1dpdGhTdGF0dXModGhpcy5zZWxlY3RlZFN0b3JlTGFiZWwsIHRoaXMuY2xpZW50SWQpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3OiBhbnlbXSA9IHJlcz8uZGF0YT8uZmxvb3JzIHx8IFtdO1xuICAgICAgICAgIHRoaXMuZmxvb3JzID0gcmF3XG4gICAgICAgICAgICAubWFwKChmKSA9PiAoe1xuICAgICAgICAgICAgICBfaWQ6IGYuX2lkLFxuICAgICAgICAgICAgICBmbG9vck51bWJlcjogZi5mbG9vck51bWJlcixcbiAgICAgICAgICAgICAgZmxvb3JOYW1lOiBmLmZsb29yTmFtZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBmLnN0YXR1cyxcbiAgICAgICAgICAgICAgaXNQbGFub0FwcHJvdmVkOiBmLmlzUGxhbm9BcHByb3ZlZCxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGBGbG9vciAke2YuZmxvb3JOdW1iZXJ9IOKAlCAke2YuZmxvb3JOYW1lfSBbJHt0aGlzLmdldFN0YXR1c0xhYmVsKGYuc3RhdHVzKX1dYCxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZmxvb3JOdW1iZXIgLSBiLmZsb29yTnVtYmVyKTtcbiAgICAgICAgICBpZiAodGhpcy5mbG9vcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm9uRmxvb3JTZWxlY3RlZCh0aGlzLmZsb29yc1swXS5faWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ0Zsb29ycyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgXCJGYWlsZWQgdG8gbG9hZCBmbG9vcnMuXCIsXG4gICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ0Zsb29ycyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBvbkZsb29yU2VsZWN0ZWQoZmxvb3JJZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkID0gZmxvb3JJZDtcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuZmxvb3JzLmZpbmQoKGYpID0+IGYuX2lkID09PSBmbG9vcklkKTtcbiAgICBpZiAoZmxvb3IpIHtcbiAgICAgIHRoaXMuY3VycmVudFN0YXR1cyA9IGZsb29yLnN0YXR1cztcbiAgICAgIHRoaXMudGFyZ2V0U3RhdHVzID0gZmxvb3Iuc3RhdHVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGF0dXMgPSBudWxsO1xuICAgICAgdGhpcy50YXJnZXRTdGF0dXMgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFyZ2V0U3RhdHVzU2VsZWN0ZWQodmFsdWU6IEJ1Y2tldFN0YXR1cyB8IG51bGwpIHtcbiAgICB0aGlzLnRhcmdldFN0YXR1cyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0YXR1c0NoYW5nZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50YXJnZXRTdGF0dXMgJiYgdGhpcy50YXJnZXRTdGF0dXMgIT09IHRoaXMuY3VycmVudFN0YXR1cztcbiAgfVxuXG4gIGdldCBjYW5TdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRmxvb3JJZCB8fCAhdGhpcy50YXJnZXRTdGF0dXMpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBhbnlDbGVhciA9XG4gICAgICB0aGlzLmNsZWFyTGF5b3V0VGFza3MgfHwgdGhpcy5jbGVhckZpeHR1cmVUYXNrcyB8fCB0aGlzLmNsZWFyWm9uZVRhc2tzO1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0NoYW5nZWQgfHwgYW55Q2xlYXI7XG4gIH1cblxuICBnZXRTdGF0dXNMYWJlbChzdGF0dXM6IEJ1Y2tldFN0YXR1cyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghc3RhdHVzKSByZXR1cm4gXCItLVwiO1xuICAgIHJldHVybiBTVEFUVVNfT1BUSU9OUy5maW5kKChzKSA9PiBzLnZhbHVlID09PSBzdGF0dXMpPy5sYWJlbCB8fCBzdGF0dXM7XG4gIH1cblxuICBnZXRCdWNrZXRMYWJlbChzdGF0dXM6IEJ1Y2tldFN0YXR1cyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghc3RhdHVzKSByZXR1cm4gXCItLVwiO1xuICAgIHJldHVybiBTVEFUVVNfT1BUSU9OUy5maW5kKChzKSA9PiBzLnZhbHVlID09PSBzdGF0dXMpPy5idWNrZXQgfHwgXCItLVwiO1xuICB9XG5cbiAgYXN5bmMgb25TdWJtaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLmZsb29ycy5maW5kKChmKSA9PiBmLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZsb29ySWQpO1xuICAgIGNvbnN0IGZsb29yTGFiZWwgPSBmbG9vclxuICAgICAgPyBgRmxvb3IgJHtmbG9vci5mbG9vck51bWJlcn0gKCR7Zmxvb3IuZmxvb3JOYW1lfSlgXG4gICAgICA6IFwic2VsZWN0ZWQgZmxvb3JcIjtcblxuICAgIGNvbnN0IGNsZWFyU3VtbWFyeTogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5jbGVhckxheW91dFRhc2tzKSBjbGVhclN1bW1hcnkucHVzaChcIkxheW91dFwiKTtcbiAgICBpZiAodGhpcy5jbGVhckZpeHR1cmVUYXNrcykgY2xlYXJTdW1tYXJ5LnB1c2goXCJGaXh0dXJlXCIpO1xuICAgIGlmICh0aGlzLmNsZWFyWm9uZVRhc2tzKSBjbGVhclN1bW1hcnkucHVzaChcIlpvbmVcIik7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBsaW5lcy5wdXNoKGBTdG9yZTogJHt0aGlzLnNlbGVjdGVkU3RvcmVMYWJlbCA/PyBcIi0tXCJ9YCk7XG4gICAgbGluZXMucHVzaChmbG9vckxhYmVsKTtcbiAgICBpZiAodGhpcy5zdGF0dXNDaGFuZ2VkKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgU3RhdHVzOiAke3RoaXMuZ2V0U3RhdHVzTGFiZWwodGhpcy5jdXJyZW50U3RhdHVzKX0g4oaSICR7dGhpcy5nZXRTdGF0dXNMYWJlbCh0aGlzLnRhcmdldFN0YXR1cyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjbGVhclN1bW1hcnkubGVuZ3RoKSB7XG4gICAgICBsaW5lcy5wdXNoKGBDbGVhciB0YXNrczogJHtjbGVhclN1bW1hcnkuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKFwiVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4gQ29udGludWU/XCIpO1xuXG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5jb25maXJtKFxuICAgICAgXCJDb25maXJtIGJ1Y2tldCB1cGRhdGVcIixcbiAgICAgIGxpbmVzLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcklkISxcbiAgICAgIHRhcmdldFN0YXR1czogdGhpcy50YXJnZXRTdGF0dXMhLFxuICAgICAgY2xlYXJMYXlvdXRUYXNrczogdGhpcy5jbGVhckxheW91dFRhc2tzLFxuICAgICAgY2xlYXJGaXh0dXJlVGFza3M6IHRoaXMuY2xlYXJGaXh0dXJlVGFza3MsXG4gICAgICBjbGVhclpvbmVUYXNrczogdGhpcy5jbGVhclpvbmVUYXNrcyxcbiAgICB9O1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2JzLm1vdmVTdG9yZUJ1Y2tldChwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXM/LmRhdGEgfHwge307XG4gICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBkYXRhPy5kZWxldGVkQ291bnRzIHx8IHt9O1xuICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKGRhdGE/LnByZXZTdGF0dXMgJiYgZGF0YT8ubmV4dFN0YXR1cykge1xuICAgICAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICAgICBgTW92ZWQgJHt0aGlzLmdldFN0YXR1c0xhYmVsKGRhdGEucHJldlN0YXR1cyl9IOKGkiAke3RoaXMuZ2V0U3RhdHVzTGFiZWwoZGF0YS5uZXh0U3RhdHVzKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbGV0ZWQucHJvY2Vzc2VkVGFza3MgfHwgZGVsZXRlZC5wbGFub1Rhc2tDb21wbGlhbmNlcykge1xuICAgICAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICAgICBgQ2xlYXJlZCAke2RlbGV0ZWQucHJvY2Vzc2VkVGFza3MgfHwgMH0gdGFzayhzKSwgJHtkZWxldGVkLnBsYW5vVGFza0NvbXBsaWFuY2VzIHx8IDB9IGNvbXBsaWFuY2Ugcm93KHMpYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXG4gICAgICAgICAgcGFydHMuam9pbihcIi4gXCIpIHx8IFwiVXBkYXRlZCBzdWNjZXNzZnVsbHlcIixcbiAgICAgICAgICBcInN1Y2Nlc3NcIixcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkRmxvb3JzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNob3dNZXNzYWdlKGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgXCJGYWlsZWQgdG8gdXBkYXRlLlwiLCBcImVycm9yXCIpO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29uZmlybSh0aXRsZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSB0aXRsZTtcbiAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgcmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1MYWJlbCA9IFwiVXBkYXRlXCI7XG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUNsYXNzID0gXCJidG4tcHJpbWFyeVwiO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVmLnJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IFwib2tcIjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzaG93TWVzc2FnZShtc2c6IHN0cmluZywgdHlwZTogXCJzdWNjZXNzXCIgfCBcImVycm9yXCIpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IHR5cGU7XG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5tZXNzYWdlID0gXCJcIiksIDYwMDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIm1vdmUtYnVja2V0IHAtM1wiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTRcIiBzdHlsZT1cIm1heC13aWR0aDogNjQwcHg7XCI+XG4gICAgPGg1IGNsYXNzPVwibWItMVwiPk1vdmUgU3RvcmUgQnVja2V0PC9oNT5cbiAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItM1wiPlxuICAgICAgTW92ZSBhIGZsb29yIGJldHdlZW4gT25ib2FyZGluZyAoRHJhZnQgLyBBbGxvY2F0aW9uIFBlbmRpbmcpIGFuZCBNYW5hZ2VQbGFubyAoQ29tcGxldGVkKSB3aXRob3V0IGxvc2luZyBzdG9yZSBkYXRhLlxuICAgIDwvcD5cblxuICAgIDwhLS0gU3RvcmUgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XG4gICAgICAgIGxhYmVsPVwiU3RvcmVcIlxuICAgICAgICBbaWRGaWVsZF09XCInaWQnXCJcbiAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcbiAgICAgICAgW2RhdGFdPVwic3RvcmVPcHRpb25zXCJcbiAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRTdG9yZUlkXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TdG9yZVNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRmxvb3IgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cInNlbGVjdGVkU3RvcmVJZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ0Zsb29yczsgZWxzZSBmbG9vclBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPkxvYWRpbmcgZmxvb3JzLi4uPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZmxvb3JQaWNrZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmbG9vcnMubGVuZ3RoID4gMDsgZWxzZSBub0Zsb29yc1wiPlxuICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIkZsb29yXCJcbiAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCJcbiAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2Rpc3BsYXlOYW1lJ1wiXG4gICAgICAgICAgICBbZGF0YV09XCJmbG9vcnNcIlxuICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRmxvb3JJZFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZsb29yU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9GbG9vcnM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5ObyBmbG9vcnMgZm91bmQgZm9yIHRoaXMgc3RvcmUuPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDdXJyZW50IGJ1Y2tldCBpbmZvICsgdGFyZ2V0IHN0YXR1cyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGbG9vcklkICYmIGN1cnJlbnRTdGF0dXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHAtMyByb3VuZGVkIGN1cnJlbnQtaW5mb1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHNtYWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+Q3VycmVudCBidWNrZXQ8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGdldEJ1Y2tldExhYmVsKGN1cnJlbnRTdGF0dXMpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBzbWFsbCBtdC0xXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+Q3VycmVudCBzdGF0dXM8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGdldFN0YXR1c0xhYmVsKGN1cnJlbnRTdGF0dXMpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxuICAgICAgICAgIGxhYmVsPVwiTW92ZSB0byBzdGF0dXNcIlxuICAgICAgICAgIFtpZEZpZWxkXT1cIid2YWx1ZSdcIlxuICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXG4gICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInYnVja2V0J1wiXG4gICAgICAgICAgW2RhdGFdPVwic3RhdHVzT3B0aW9uc1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwidGFyZ2V0U3RhdHVzXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRhcmdldFN0YXR1c1NlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtd2FybmluZ1wiICpuZ0lmPVwic3RhdHVzQ2hhbmdlZFwiPlxuICAgICAgICAgIGlzUGxhbm9BcHByb3ZlZCB3aWxsIGJlIHNldCB0b1xuICAgICAgICAgIDxzdHJvbmc+e3sgdGFyZ2V0U3RhdHVzID09PSAnZHJhZnQnID8gJ2ZhbHNlJyA6ICd0cnVlJyB9fTwvc3Ryb25nPixcbiAgICAgICAgICBwbGFub1Byb2dyZXNzIHdpbGwgYmUgc2V0IHRvXG4gICAgICAgICAgPHN0cm9uZz57eyB0YXJnZXRTdGF0dXMgPT09ICdjb21wbGV0ZWQnID8gMjUgOiAwIH19PC9zdHJvbmc+LlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFRhc2sgY2xlYW51cCBjaGVja2JveGVzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNsZWFyIHRhc2tzICZhbXA7IGNvbXBsaWFuY2Ugcm93cyAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjbHJMYXlvdXRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNsZWFyTGF5b3V0VGFza3NcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJjbHJMYXlvdXRcIj5cbiAgICAgICAgICAgICAgTGF5b3V0IHRhc2tzXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPihwbGFub1R5cGU6IGxheW91dCwgbGF5b3V0Rml4dHVyZSk8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjbHJGaXh0dXJlXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjbGVhckZpeHR1cmVUYXNrc1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImNsckZpeHR1cmVcIj5cbiAgICAgICAgICAgICAgRml4dHVyZSB0YXNrc1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj4ocGxhbm9UeXBlOiBmaXh0dXJlLCB2bSk8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjbHJab25lXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjbGVhclpvbmVUYXNrc1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImNsclpvbmVcIj5cbiAgICAgICAgICAgICAgWm9uZSB0YXNrc1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj4ocGxhbm9UeXBlOiB6b25lVmVyaWZpY2F0aW9uKTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFN1Ym1pdCAtLT5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdFwiPlxuICAgICAge3sgaXNTdWJtaXR0aW5nID8gJ1VwZGF0aW5nLi4uJyA6ICdVcGRhdGUnIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMyBhbGVydFwiICpuZ0lmPVwibWVzc2FnZVwiXG4gICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgIFtjbGFzcy5hbGVydC1kYW5nZXJdPVwibWVzc2FnZVR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XCI+XG4gICAgICB7eyBtZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1idWNrZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvbW92ZS1idWNrZXQvbW92ZS1idWNrZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvbW92ZS1idWNrZXQvbW92ZS1idWNrZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7QUF3QjdHLE1BQU0sY0FBYyxHQUFtQjtJQUNyQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO0lBQ3hEO1FBQ0UsS0FBSyxFQUFFLG1CQUFtQjtRQUMxQixLQUFLLEVBQUUsb0JBQW9CO1FBQzNCLE1BQU0sRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtDQUNsRSxDQUFDO0FBT0YsTUFBTSxPQUFPLG1CQUFtQjtJQTBCcEI7SUFDQTtJQUNBO0lBM0JWLFFBQVEsQ0FBUztJQUVqQixZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxlQUFlLEdBQWtCLElBQUksQ0FBQztJQUN0QyxrQkFBa0IsR0FBa0IsSUFB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QUUsQ0FBQztJQUMzQixDQUFDO3dHQXRQVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix1RENsRGhDLHkySkF1SEE7OzRGRHJFYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7XHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gIGZpbHRlcixcclxuICBTdWJqZWN0LFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcG9wdXBzL2RlbGV0ZS1jb25maXJtYXRpb24vZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuXHJcbmludGVyZmFjZSBTdG9yZU9wdGlvbiB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRmxvb3JPcHRpb24ge1xyXG4gIF9pZDogc3RyaW5nO1xyXG4gIGZsb29yTnVtYmVyOiBudW1iZXI7XHJcbiAgZmxvb3JOYW1lOiBzdHJpbmc7XHJcbiAgc3RhdHVzOiBCdWNrZXRTdGF0dXM7XHJcbiAgaXNQbGFub0FwcHJvdmVkPzogYm9vbGVhbjtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG50eXBlIEJ1Y2tldFN0YXR1cyA9IFwiZHJhZnRcIiB8IFwiYWxsb2NhdGlvblBlbmRpbmdcIiB8IFwiY29tcGxldGVkXCI7XHJcblxyXG5pbnRlcmZhY2UgU3RhdHVzT3B0aW9uIHtcclxuICB2YWx1ZTogQnVja2V0U3RhdHVzO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgYnVja2V0OiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IFNUQVRVU19PUFRJT05TOiBTdGF0dXNPcHRpb25bXSA9IFtcclxuICB7IHZhbHVlOiBcImRyYWZ0XCIsIGxhYmVsOiBcIkRyYWZ0XCIsIGJ1Y2tldDogXCJPbmJvYXJkaW5nXCIgfSxcclxuICB7XHJcbiAgICB2YWx1ZTogXCJhbGxvY2F0aW9uUGVuZGluZ1wiLFxyXG4gICAgbGFiZWw6IFwiQWxsb2NhdGlvbiBQZW5kaW5nXCIsXHJcbiAgICBidWNrZXQ6IFwiT25ib2FyZGluZ1wiLFxyXG4gIH0sXHJcbiAgeyB2YWx1ZTogXCJjb21wbGV0ZWRcIiwgbGFiZWw6IFwiQ29tcGxldGVkXCIsIGJ1Y2tldDogXCJNYW5hZ2VQbGFub1wiIH0sXHJcbl07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItbW92ZS1idWNrZXRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL21vdmUtYnVja2V0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9tb3ZlLWJ1Y2tldC5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW92ZUJ1Y2tldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBzdG9yZU9wdGlvbnM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBzZWxlY3RlZFN0b3JlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkU3RvcmVMYWJlbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGZsb29yczogRmxvb3JPcHRpb25bXSA9IFtdO1xyXG4gIHNlbGVjdGVkRmxvb3JJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgaXNMb2FkaW5nRmxvb3JzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHN0YXR1c09wdGlvbnMgPSBTVEFUVVNfT1BUSU9OUztcclxuICB0YXJnZXRTdGF0dXM6IEJ1Y2tldFN0YXR1cyB8IG51bGwgPSBudWxsO1xyXG4gIGN1cnJlbnRTdGF0dXM6IEJ1Y2tldFN0YXR1cyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjbGVhckxheW91dFRhc2tzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xlYXJGaXh0dXJlVGFza3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjbGVhclpvbmVUYXNrczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIG1lc3NhZ2VUeXBlOiBcInN1Y2Nlc3NcIiB8IFwiZXJyb3JcIiA9IFwic3VjY2Vzc1wiO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNiczogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgICAgZmlsdGVyKChkYXRhKSA9PiAhIWRhdGEpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkU3RvcmVzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFN0b3JlcygpIHtcclxuICAgIHRoaXMuc2JzXHJcbiAgICAgIC5nZXRTdG9yZU9yQ2x1c3Rlckxpc3QoeyBzZWFyY2hNb2RlOiBcInN0b3JlXCIgfSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblN0b3JlU2VsZWN0ZWQoc3RvcmVJZDogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlSWQgPSBzdG9yZUlkO1xyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnN0b3JlT3B0aW9ucy5maW5kKChzKSA9PiBzLmlkID09PSBzdG9yZUlkKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUxhYmVsID0gc3RvcmU/LmxhYmVsID8/IG51bGw7XHJcbiAgICB0aGlzLnJlc2V0Rmxvb3JTdGF0ZSgpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUxhYmVsKSB7XHJcbiAgICAgIHRoaXMubG9hZEZsb29ycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEZsb29yU3RhdGUoKSB7XHJcbiAgICB0aGlzLmZsb29ycyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50U3RhdHVzID0gbnVsbDtcclxuICAgIHRoaXMudGFyZ2V0U3RhdHVzID0gbnVsbDtcclxuICAgIHRoaXMuY2xlYXJMYXlvdXRUYXNrcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbGVhckZpeHR1cmVUYXNrcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbGVhclpvbmVUYXNrcyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZEZsb29ycygpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFN0b3JlTGFiZWwpIHJldHVybjtcclxuICAgIHRoaXMuaXNMb2FkaW5nRmxvb3JzID0gdHJ1ZTtcclxuICAgIHRoaXMuc2JzXHJcbiAgICAgIC5nZXRGbG9vcnNXaXRoU3RhdHVzKHRoaXMuc2VsZWN0ZWRTdG9yZUxhYmVsLCB0aGlzLmNsaWVudElkKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJhdzogYW55W10gPSByZXM/LmRhdGE/LmZsb29ycyB8fCBbXTtcclxuICAgICAgICAgIHRoaXMuZmxvb3JzID0gcmF3XHJcbiAgICAgICAgICAgIC5tYXAoKGYpID0+ICh7XHJcbiAgICAgICAgICAgICAgX2lkOiBmLl9pZCxcclxuICAgICAgICAgICAgICBmbG9vck51bWJlcjogZi5mbG9vck51bWJlcixcclxuICAgICAgICAgICAgICBmbG9vck5hbWU6IGYuZmxvb3JOYW1lLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogZi5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgaXNQbGFub0FwcHJvdmVkOiBmLmlzUGxhbm9BcHByb3ZlZCxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogYEZsb29yICR7Zi5mbG9vck51bWJlcn0g4oCUICR7Zi5mbG9vck5hbWV9IFske3RoaXMuZ2V0U3RhdHVzTGFiZWwoZi5zdGF0dXMpfV1gLFxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZmxvb3JOdW1iZXIgLSBiLmZsb29yTnVtYmVyKTtcclxuICAgICAgICAgIGlmICh0aGlzLmZsb29ycy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZsb29yU2VsZWN0ZWQodGhpcy5mbG9vcnNbMF0uX2lkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRmxvb3JzID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGxvYWQgZmxvb3JzLlwiLFxyXG4gICAgICAgICAgICBcImVycm9yXCIsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdGbG9vcnMgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRmxvb3JTZWxlY3RlZChmbG9vcklkOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JJZCA9IGZsb29ySWQ7XHJcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuZmxvb3JzLmZpbmQoKGYpID0+IGYuX2lkID09PSBmbG9vcklkKTtcclxuICAgIGlmIChmbG9vcikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRTdGF0dXMgPSBmbG9vci5zdGF0dXM7XHJcbiAgICAgIHRoaXMudGFyZ2V0U3RhdHVzID0gZmxvb3Iuc3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50U3RhdHVzID0gbnVsbDtcclxuICAgICAgdGhpcy50YXJnZXRTdGF0dXMgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UYXJnZXRTdGF0dXNTZWxlY3RlZCh2YWx1ZTogQnVja2V0U3RhdHVzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50YXJnZXRTdGF0dXMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzdGF0dXNDaGFuZ2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy50YXJnZXRTdGF0dXMgJiYgdGhpcy50YXJnZXRTdGF0dXMgIT09IHRoaXMuY3VycmVudFN0YXR1cztcclxuICB9XHJcblxyXG4gIGdldCBjYW5TdWJtaXQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEZsb29ySWQgfHwgIXRoaXMudGFyZ2V0U3RhdHVzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBhbnlDbGVhciA9XHJcbiAgICAgIHRoaXMuY2xlYXJMYXlvdXRUYXNrcyB8fCB0aGlzLmNsZWFyRml4dHVyZVRhc2tzIHx8IHRoaXMuY2xlYXJab25lVGFza3M7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNDaGFuZ2VkIHx8IGFueUNsZWFyO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzTGFiZWwoc3RhdHVzOiBCdWNrZXRTdGF0dXMgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghc3RhdHVzKSByZXR1cm4gXCItLVwiO1xyXG4gICAgcmV0dXJuIFNUQVRVU19PUFRJT05TLmZpbmQoKHMpID0+IHMudmFsdWUgPT09IHN0YXR1cyk/LmxhYmVsIHx8IHN0YXR1cztcclxuICB9XHJcblxyXG4gIGdldEJ1Y2tldExhYmVsKHN0YXR1czogQnVja2V0U3RhdHVzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuIFwiLS1cIjtcclxuICAgIHJldHVybiBTVEFUVVNfT1BUSU9OUy5maW5kKChzKSA9PiBzLnZhbHVlID09PSBzdGF0dXMpPy5idWNrZXQgfHwgXCItLVwiO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLmZsb29ycy5maW5kKChmKSA9PiBmLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZsb29ySWQpO1xyXG4gICAgY29uc3QgZmxvb3JMYWJlbCA9IGZsb29yXHJcbiAgICAgID8gYEZsb29yICR7Zmxvb3IuZmxvb3JOdW1iZXJ9ICgke2Zsb29yLmZsb29yTmFtZX0pYFxyXG4gICAgICA6IFwic2VsZWN0ZWQgZmxvb3JcIjtcclxuXHJcbiAgICBjb25zdCBjbGVhclN1bW1hcnk6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5jbGVhckxheW91dFRhc2tzKSBjbGVhclN1bW1hcnkucHVzaChcIkxheW91dFwiKTtcclxuICAgIGlmICh0aGlzLmNsZWFyRml4dHVyZVRhc2tzKSBjbGVhclN1bW1hcnkucHVzaChcIkZpeHR1cmVcIik7XHJcbiAgICBpZiAodGhpcy5jbGVhclpvbmVUYXNrcykgY2xlYXJTdW1tYXJ5LnB1c2goXCJab25lXCIpO1xyXG5cclxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGluZXMucHVzaChgU3RvcmU6ICR7dGhpcy5zZWxlY3RlZFN0b3JlTGFiZWwgPz8gXCItLVwifWApO1xyXG4gICAgbGluZXMucHVzaChmbG9vckxhYmVsKTtcclxuICAgIGlmICh0aGlzLnN0YXR1c0NoYW5nZWQpIHtcclxuICAgICAgbGluZXMucHVzaChcclxuICAgICAgICBgU3RhdHVzOiAke3RoaXMuZ2V0U3RhdHVzTGFiZWwodGhpcy5jdXJyZW50U3RhdHVzKX0g4oaSICR7dGhpcy5nZXRTdGF0dXNMYWJlbCh0aGlzLnRhcmdldFN0YXR1cyl9YCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChjbGVhclN1bW1hcnkubGVuZ3RoKSB7XHJcbiAgICAgIGxpbmVzLnB1c2goYENsZWFyIHRhc2tzOiAke2NsZWFyU3VtbWFyeS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICB9XHJcbiAgICBsaW5lcy5wdXNoKFwiVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4gQ29udGludWU/XCIpO1xyXG5cclxuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuY29uZmlybShcclxuICAgICAgXCJDb25maXJtIGJ1Y2tldCB1cGRhdGVcIixcclxuICAgICAgbGluZXMuam9pbihcIlxcblwiKSxcclxuICAgICk7XHJcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcklkISxcclxuICAgICAgdGFyZ2V0U3RhdHVzOiB0aGlzLnRhcmdldFN0YXR1cyEsXHJcbiAgICAgIGNsZWFyTGF5b3V0VGFza3M6IHRoaXMuY2xlYXJMYXlvdXRUYXNrcyxcclxuICAgICAgY2xlYXJGaXh0dXJlVGFza3M6IHRoaXMuY2xlYXJGaXh0dXJlVGFza3MsXHJcbiAgICAgIGNsZWFyWm9uZVRhc2tzOiB0aGlzLmNsZWFyWm9uZVRhc2tzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNicy5tb3ZlU3RvcmVCdWNrZXQocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcz8uZGF0YSB8fCB7fTtcclxuICAgICAgICBjb25zdCBkZWxldGVkID0gZGF0YT8uZGVsZXRlZENvdW50cyB8fCB7fTtcclxuICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAoZGF0YT8ucHJldlN0YXR1cyAmJiBkYXRhPy5uZXh0U3RhdHVzKSB7XHJcbiAgICAgICAgICBwYXJ0cy5wdXNoKFxyXG4gICAgICAgICAgICBgTW92ZWQgJHt0aGlzLmdldFN0YXR1c0xhYmVsKGRhdGEucHJldlN0YXR1cyl9IOKGkiAke3RoaXMuZ2V0U3RhdHVzTGFiZWwoZGF0YS5uZXh0U3RhdHVzKX1gLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRlbGV0ZWQucHJvY2Vzc2VkVGFza3MgfHwgZGVsZXRlZC5wbGFub1Rhc2tDb21wbGlhbmNlcykge1xyXG4gICAgICAgICAgcGFydHMucHVzaChcclxuICAgICAgICAgICAgYENsZWFyZWQgJHtkZWxldGVkLnByb2Nlc3NlZFRhc2tzIHx8IDB9IHRhc2socyksICR7ZGVsZXRlZC5wbGFub1Rhc2tDb21wbGlhbmNlcyB8fCAwfSBjb21wbGlhbmNlIHJvdyhzKWAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFxyXG4gICAgICAgICAgcGFydHMuam9pbihcIi4gXCIpIHx8IFwiVXBkYXRlZCBzdWNjZXNzZnVsbHlcIixcclxuICAgICAgICAgIFwic3VjY2Vzc1wiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvYWRGbG9vcnMoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byB1cGRhdGUuXCIsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25maXJtKHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSB0aXRsZTtcclxuICAgICAgcmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XHJcbiAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtTGFiZWwgPSBcIlVwZGF0ZVwiO1xyXG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUNsYXNzID0gXCJidG4tcHJpbWFyeVwiO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWYucmVzdWx0O1xyXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBcIm9rXCI7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd01lc3NhZ2UobXNnOiBzdHJpbmcsIHR5cGU6IFwic3VjY2Vzc1wiIHwgXCJlcnJvclwiKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubWVzc2FnZSA9IFwiXCIpLCA2MDAwKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwibW92ZS1idWNrZXQgcC0zXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgcC00XCIgc3R5bGU9XCJtYXgtd2lkdGg6IDY0MHB4O1wiPlxyXG4gICAgPGg1IGNsYXNzPVwibWItMVwiPk1vdmUgU3RvcmUgQnVja2V0PC9oNT5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtYi0zXCI+XHJcbiAgICAgIE1vdmUgYSBmbG9vciBiZXR3ZWVuIE9uYm9hcmRpbmcgKERyYWZ0IC8gQWxsb2NhdGlvbiBQZW5kaW5nKSBhbmQgTWFuYWdlUGxhbm8gKENvbXBsZXRlZCkgd2l0aG91dCBsb3Npbmcgc3RvcmUgZGF0YS5cclxuICAgIDwvcD5cclxuXHJcbiAgICA8IS0tIFN0b3JlIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICBsYWJlbD1cIlN0b3JlXCJcclxuICAgICAgICBbaWRGaWVsZF09XCInaWQnXCJcclxuICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgIFtkYXRhXT1cInN0b3JlT3B0aW9uc1wiXHJcbiAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFN0b3JlSWRcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RvcmVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRmxvb3IgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwic2VsZWN0ZWRTdG9yZUlkXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdGbG9vcnM7IGVsc2UgZmxvb3JQaWNrZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPkxvYWRpbmcgZmxvb3JzLi4uPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Zsb29yUGlja2VyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmbG9vcnMubGVuZ3RoID4gMDsgZWxzZSBub0Zsb29yc1wiPlxyXG4gICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICAgICAgbGFiZWw9XCJGbG9vclwiXHJcbiAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgW25hbWVGaWVsZF09XCInZGlzcGxheU5hbWUnXCJcclxuICAgICAgICAgICAgW2RhdGFdPVwiZmxvb3JzXCJcclxuICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRGbG9vcklkXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GbG9vclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vRmxvb3JzPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5ObyBmbG9vcnMgZm91bmQgZm9yIHRoaXMgc3RvcmUuPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQ3VycmVudCBidWNrZXQgaW5mbyArIHRhcmdldCBzdGF0dXMgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGbG9vcklkICYmIGN1cnJlbnRTdGF0dXNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcC0zIHJvdW5kZWQgY3VycmVudC1pbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBzbWFsbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+Q3VycmVudCBidWNrZXQ8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgZ2V0QnVja2V0TGFiZWwoY3VycmVudFN0YXR1cykgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBzbWFsbCBtdC0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj5DdXJyZW50IHN0YXR1czwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBnZXRTdGF0dXNMYWJlbChjdXJyZW50U3RhdHVzKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICBsYWJlbD1cIk1vdmUgdG8gc3RhdHVzXCJcclxuICAgICAgICAgIFtpZEZpZWxkXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgIFtzdWJUZXh0RmllbGRdPVwiJ2J1Y2tldCdcIlxyXG4gICAgICAgICAgW2RhdGFdPVwic3RhdHVzT3B0aW9uc1wiXHJcbiAgICAgICAgICBbbmdNb2RlbF09XCJ0YXJnZXRTdGF0dXNcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25UYXJnZXRTdGF0dXNTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC13YXJuaW5nXCIgKm5nSWY9XCJzdGF0dXNDaGFuZ2VkXCI+XHJcbiAgICAgICAgICBpc1BsYW5vQXBwcm92ZWQgd2lsbCBiZSBzZXQgdG9cclxuICAgICAgICAgIDxzdHJvbmc+e3sgdGFyZ2V0U3RhdHVzID09PSAnZHJhZnQnID8gJ2ZhbHNlJyA6ICd0cnVlJyB9fTwvc3Ryb25nPixcclxuICAgICAgICAgIHBsYW5vUHJvZ3Jlc3Mgd2lsbCBiZSBzZXQgdG9cclxuICAgICAgICAgIDxzdHJvbmc+e3sgdGFyZ2V0U3RhdHVzID09PSAnY29tcGxldGVkJyA/IDI1IDogMCB9fTwvc3Ryb25nPi5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFRhc2sgY2xlYW51cCBjaGVja2JveGVzIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5DbGVhciB0YXNrcyAmYW1wOyBjb21wbGlhbmNlIHJvd3MgKG9wdGlvbmFsKTwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2xyTGF5b3V0XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNsZWFyTGF5b3V0VGFza3NcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImNsckxheW91dFwiPlxyXG4gICAgICAgICAgICAgIExheW91dCB0YXNrc1xyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPihwbGFub1R5cGU6IGxheW91dCwgbGF5b3V0Rml4dHVyZSk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNsckZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2xlYXJGaXh0dXJlVGFza3NcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImNsckZpeHR1cmVcIj5cclxuICAgICAgICAgICAgICBGaXh0dXJlIHRhc2tzXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+KHBsYW5vVHlwZTogZml4dHVyZSwgdm0pPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjbHJab25lXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNsZWFyWm9uZVRhc2tzXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJjbHJab25lXCI+XHJcbiAgICAgICAgICAgICAgWm9uZSB0YXNrc1xyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPihwbGFub1R5cGU6IHpvbmVWZXJpZmljYXRpb24pPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBTdWJtaXQgLS0+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdFwiPlxyXG4gICAgICB7eyBpc1N1Ym1pdHRpbmcgPyAnVXBkYXRpbmcuLi4nIDogJ1VwZGF0ZScgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0zIGFsZXJ0XCIgKm5nSWY9XCJtZXNzYWdlXCJcclxuICAgICAgW2NsYXNzLmFsZXJ0LXN1Y2Nlc3NdPVwibWVzc2FnZVR5cGUgPT09ICdzdWNjZXNzJ1wiXHJcbiAgICAgIFtjbGFzcy5hbGVydC1kYW5nZXJdPVwibWVzc2FnZVR5cGUgPT09ICdlcnJvcidcIlxyXG4gICAgICBzdHlsZT1cIndoaXRlLXNwYWNlOiBwcmUtbGluZTtcIj5cclxuICAgICAge3sgbWVzc2FnZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1saWJyYXJ5LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9pbnRlcmZhY2VzL2ZpeHR1cmUtbGlicmFyeS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYW5vRGltZW5zaW9uLCBGaXh0dXJlU2VjdGlvbiB9IGZyb20gXCIuL3BsYW5vLWdlbmVyYWwuaW50ZXJmYWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpeHR1cmVMaWJyYXJ5TGlzdCB7XHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICB0eXBlOiBzdHJpbmcsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBwYXJ0aXRpb25zOiBudW1iZXIsXHJcbiAgICB0ZW1wbGF0ZXNUYWdnZWQ6IG51bWJlcixcclxuICAgIHN0YXR1czogc3RyaW5nLFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGNvZGU6IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpeHR1cmVMaWJyYXJ5RGV0YWlscyB7XHJcbiAgICBfaWQ/OiBzdHJpbmc7XHJcbiAgICBjbGllbnRJZD86IHN0cmluZztcclxuICAgIGZpeHR1cmVDYXRlZ29yeT86IHN0cmluZztcclxuICAgIGZpeHR1cmVUeXBlPzogc3RyaW5nO1xyXG4gICAgZml4dHVyZUNhcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgdGVtcGxhdGVJZD86IG51bWJlcjtcclxuICAgIHN0YXR1cz86IHN0cmluZztcclxuICAgIGZpeHR1cmVMZW5ndGg/OiBQbGFub0RpbWVuc2lvbjtcclxuICAgIGZpeHR1cmVXaWR0aD86IFBsYW5vRGltZW5zaW9uO1xyXG4gICAgaGVhZGVyPzogRml4dHVyZVNlY3Rpb247XHJcbiAgICBmb290ZXI/OiBGaXh0dXJlU2VjdGlvbjtcclxuICAgIHNoZWxmQ29uZmlnPzogRml4dHVyZUxpYnJhcnlTaGVsZkNvbmZpZ1tdO1xyXG4gICAgaXNCb2R5RW5hYmxlZD86IGJvb2xlYW47XHJcbiAgICBjcmVhdGVkQXQ/OiBEYXRlIHwgc3RyaW5nO1xyXG4gICAgdXBkYXRlZEF0PzogRGF0ZSB8IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaXh0dXJlTGlicmFyeVNoZWxmQ29uZmlnIHtcclxuICAgIHNoZWxmTnVtYmVyPzogbnVtYmVyO1xyXG4gICAgc2hlbGZUeXBlPzogc3RyaW5nO1xyXG4gICAgcHJvZHVjdFBlclNoZWxmPzogbnVtYmVyO1xyXG4gICAgdHJheVJvd3M/OiBudW1iZXI7XHJcbiAgICBsYWJlbD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaXh0dXJlRXhjZWxWYWxpZGF0aW9uIHtcclxuICAgIG1pc3NpbmdGaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgaW52YWxpZEZpZWxkczogc3RyaW5nW107XHJcbiAgICB0b3RhbFJvd3M6IG51bWJlcjtcclxuICAgIGVycm9yUm93czogc3RyaW5nW107XHJcbiAgICBuZXdSb3dzOiBGaXh0dXJlTGlicmFyeUV4Y2VsUm93W107XHJcbiAgICB1cGRhdGVSb3dzOiBGaXh0dXJlTGlicmFyeUV4Y2VsUm93W107XHJcbiAgICB2YWxpZFJvd3M6IEZpeHR1cmVMaWJyYXJ5RXhjZWxSb3dbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaXh0dXJlTGlicmFyeUV4Y2VsUm93IHtcclxuICAgIGZpeHR1cmVDb2RlPzogc3RyaW5nO1xyXG4gICAgZml4dHVyZU5hbWU6IHN0cmluZztcclxuICAgIGZpeHR1cmVUeXBlOiAnd2FsbCcgfCAnZmxvb3InO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XHJcbiAgICBmb290ZXJIZWlnaHQ6IG51bWJlcjtcclxuICAgIHNoZWxmTnVtYmVyOiBudW1iZXI7XHJcbiAgICBzaGVsZlR5cGU/OiAnc2hlbGYnIHwgJ3RyYXknIHwgJ3Ztb25seSc7XHJcbiAgICBzaGVsZk5hbWU/OiBzdHJpbmc7XHJcbiAgICB0cmF5Um93cz86IG51bWJlcjtcclxuICAgIHByb2R1Y3RQZXJTaGVsZj86IG51bWJlcjtcclxufSAiXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1saWJyYXJ5LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9pbnRlcmZhY2VzL2ZpeHR1cmUtbGlicmFyeS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYW5vRGltZW5zaW9uLCBGaXh0dXJlU2VjdGlvbiB9IGZyb20gXCIuL3BsYW5vLWdlbmVyYWwuaW50ZXJmYWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpeHR1cmVMaWJyYXJ5TGlzdCB7XHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICB0eXBlOiBzdHJpbmcsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBwYXJ0aXRpb25zOiBudW1iZXIsXHJcbiAgICB0ZW1wbGF0ZXNUYWdnZWQ6IG51bWJlcixcclxuICAgIHN0YXR1czogc3RyaW5nLFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGNvZGU6IHN0cmluZyxcclxuICAgIGNvdW50cnk6IHN0cmluZ1tdXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRml4dHVyZUxpYnJhcnlEZXRhaWxzIHtcclxuICAgIF9pZD86IHN0cmluZztcclxuICAgIGNsaWVudElkPzogc3RyaW5nO1xyXG4gICAgZml4dHVyZUNhdGVnb3J5Pzogc3RyaW5nO1xyXG4gICAgZml4dHVyZVR5cGU/OiBzdHJpbmc7XHJcbiAgICBmaXh0dXJlQ2FwYWNpdHk/OiBudW1iZXI7XHJcbiAgICB0ZW1wbGF0ZUlkPzogbnVtYmVyO1xyXG4gICAgc3RhdHVzPzogc3RyaW5nO1xyXG4gICAgZml4dHVyZUxlbmd0aD86IFBsYW5vRGltZW5zaW9uO1xyXG4gICAgZml4dHVyZVdpZHRoPzogUGxhbm9EaW1lbnNpb247XHJcbiAgICBoZWFkZXI/OiBGaXh0dXJlU2VjdGlvbjtcclxuICAgIGZvb3Rlcj86IEZpeHR1cmVTZWN0aW9uO1xyXG4gICAgc2hlbGZDb25maWc/OiBGaXh0dXJlTGlicmFyeVNoZWxmQ29uZmlnW107XHJcbiAgICBpc0JvZHlFbmFibGVkPzogYm9vbGVhbjtcclxuICAgIGNyZWF0ZWRBdD86IERhdGUgfCBzdHJpbmc7XHJcbiAgICB1cGRhdGVkQXQ/OiBEYXRlIHwgc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpeHR1cmVMaWJyYXJ5U2hlbGZDb25maWcge1xyXG4gICAgc2hlbGZOdW1iZXI/OiBudW1iZXI7XHJcbiAgICBzaGVsZlR5cGU/OiBzdHJpbmc7XHJcbiAgICBwcm9kdWN0UGVyU2hlbGY/OiBudW1iZXI7XHJcbiAgICB0cmF5Um93cz86IG51bWJlcjtcclxuICAgIGxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpeHR1cmVFeGNlbFZhbGlkYXRpb24ge1xyXG4gICAgbWlzc2luZ0ZpZWxkczogc3RyaW5nW107XHJcbiAgICBpbnZhbGlkRmllbGRzOiBzdHJpbmdbXTtcclxuICAgIHRvdGFsUm93czogbnVtYmVyO1xyXG4gICAgZXJyb3JSb3dzOiBzdHJpbmdbXTtcclxuICAgIG5ld1Jvd3M6IEZpeHR1cmVMaWJyYXJ5RXhjZWxSb3dbXTtcclxuICAgIHVwZGF0ZVJvd3M6IEZpeHR1cmVMaWJyYXJ5RXhjZWxSb3dbXTtcclxuICAgIHZhbGlkUm93czogRml4dHVyZUxpYnJhcnlFeGNlbFJvd1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpeHR1cmVMaWJyYXJ5RXhjZWxSb3cge1xyXG4gICAgZml4dHVyZUNvZGU/OiBzdHJpbmc7XHJcbiAgICBmaXh0dXJlTmFtZTogc3RyaW5nO1xyXG4gICAgZml4dHVyZVR5cGU6ICd3YWxsJyB8ICdmbG9vcic7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcclxuICAgIGZvb3RlckhlaWdodDogbnVtYmVyO1xyXG4gICAgc2hlbGZOdW1iZXI6IG51bWJlcjtcclxuICAgIHNoZWxmVHlwZT86ICdzaGVsZicgfCAndHJheScgfCAndm1vbmx5JztcclxuICAgIHNoZWxmTmFtZT86IHN0cmluZztcclxuICAgIHRyYXlSb3dzPzogbnVtYmVyO1xyXG4gICAgcHJvZHVjdFBlclNoZWxmPzogbnVtYmVyO1xyXG59ICJdfQ==