tango-app-ui-store-builder 1.0.57 → 1.0.59

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.
@@ -536,7 +536,6 @@ export class TemplateProductsComponent {
536
536
  this.cd.detectChanges();
537
537
  }
538
538
  get isAllShelfAddToSection() {
539
- console.log("@@ ~ this.shelvesList:", this.shelvesList);
540
539
  return this.shelvesList.every((s) => s.disabled);
541
540
  }
542
541
  getPayloadByLevel(status) {
@@ -851,4 +850,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
851
850
  MultiselectChipDropdownComponent,
852
851
  ], template: "<section id=\"fixture-template-products\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <!-- ====================================Left Column==================================== -->\r\n <div class=\"cols col\">\r\n <ul class=\"nav nav-tabs custom-tabs d-flex\" [class.disabled-click]=\"!isEditMode\">\r\n <li class=\"nav-item flex-fill\" *ngFor=\"let library of ['brand', 'product']\">\r\n <button class=\"nav-link w-100\" [class.active]=\"selectedLibrary === library\"\r\n (click)=\"selectedLibrary = library\" [attr.aria-current]=\"selectedLibrary === library ? 'page' : null\">\r\n {{ library | titlecase }} Library\r\n </button>\r\n </li>\r\n </ul>\r\n\r\n <div *ngIf=\"selectedLibrary === 'brand'\">\r\n <div *ngIf=\"selectedLevel !== 'spot'\">\r\n <h2>Add products by brand level</h2>\r\n <p>Place the product brand in the designated placement area.</p>\r\n </div>\r\n <!-- Fixture level within Brand Library -->\r\n <form [formGroup]=\"fixtureLevelForm\" *ngIf=\"selectedLevel === 'fixture'\">\r\n <div class=\"form-group mb-4\">\r\n <label for=\"productBrandName\" class=\"form-label mb-1\">Brand</label>\r\n <multiselect-chip-dropdown [items]=\"brandsList\" [idField]=\"'brandName'\" [nameField]=\"'brandName'\"\r\n [placeholder]=\"'Select brands'\" formControlName=\"productBrandName\"\r\n [search]=\"true\"></multiselect-chip-dropdown>\r\n <!-- <ng-container\r\n *ngIf=\"fixtureLevelForm.get('productBrandName')?.touched && fixtureLevelForm.get('productBrandName')?.invalid\"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureLevelForm.get('productBrandName')?.hasError('required')\">\r\n Please select product brand\r\n </small>\r\n </ng-container> -->\r\n </div>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"productCategory\" class=\"form-label mb-1\">Product category</label>\r\n <multiselect-chip-dropdown [idField]=\"'value'\" [nameField]=\"'label'\" [items]=\"categoriesList\"\r\n [placeholder]=\"'Select categories'\" formControlName=\"productCategory\"\r\n [search]=\"true\"></multiselect-chip-dropdown>\r\n </div>\r\n </form>\r\n\r\n <!-- Section level within Brand Library -->\r\n <form [formGroup]=\"sectionLevelForm\" *ngIf=\"selectedLevel === 'section'\">\r\n <div formArrayName=\"section\" class=\"array-wrapper\">\r\n <div *ngFor=\"let section of sectionArray?.controls; let i = index\" [formGroupName]=\"i\"\r\n class=\"array-container\">\r\n <!-- [ngStyle]=\"{ 'border-color': shelfColors[i].bg }\" -->\r\n <div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <h6 class=\"shelf-title\">SECTION {{ i + 1 }}</h6>\r\n <svg [class.disabled-click]=\"!isEditMode\" *ngIf=\"i !== 0\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" (click)=\"removeSection(i)\" class=\"cursor-pointer\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\">\r\n <label for=\"zone\" class=\"form-label mb-1\">Section label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"label\" formControlName=\"zone\" />\r\n\r\n <ng-container *ngIf=\"section.get('zone')?.touched && section.get('zone')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"section.get('zone')?.hasError('required')\"> Section name is\r\n required. </small>\r\n <small class=\"text-danger\" *ngIf=\"section.get('zone')?.hasError('whitespace')\">\r\n Section name cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *ngIf=\"section.get('zone')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n <small class=\"text-danger\" *ngIf=\"section.get('zone')?.hasError('notUnique')\"> Duplicate section name.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\">\r\n <label for=\"shelves\" class=\"form-label mb-1\">Pick the shelf(s) for section {{ i + 1 }}</label>\r\n <multiselect-chip-dropdown [items]=\"shelvesList\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n formControlName=\"shelves\" [search]=\"true\"></multiselect-chip-dropdown>\r\n <ng-container *ngIf=\"section.get('shelves')?.touched && section.get('shelves')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"section.get('shelves')?.hasError('required')\"> Pick the shelf(s)\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\">\r\n <label for=\"productBrandName\" class=\"form-label mb-1\">Brand</label>\r\n <multiselect-chip-dropdown [items]=\"brandsList\" [idField]=\"'brandName'\" [nameField]=\"'brandName'\"\r\n formControlName=\"productBrandName\" [search]=\"true\"></multiselect-chip-dropdown>\r\n <!-- <ng-container *ngIf=\"section.get('productBrandName')?.touched && section.get('productBrandName')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"section.get('productBrandName')?.hasError('required')\">\r\n Please select product brand\r\n </small>\r\n </ng-container> -->\r\n </div>\r\n\r\n <div class=\"form-group mb-4\">\r\n <label for=\"productCategory\" class=\"form-label mb-1\">Product category</label>\r\n <multiselect-chip-dropdown [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [items]=\"categoriesListMap.get('section' + i) ?? []\" formControlName=\"productCategory\"\r\n [search]=\"true\"></multiselect-chip-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-100 d-flex justify-content-end mt-4\">\r\n <span [ngbTooltip]=\"\r\n isAllShelvesUsedInSections\r\n ? 'All shelves are assigned. No shelves available for new sections.'\r\n : 'You cannot create more sections than the total shelves available.'\r\n \" [disableTooltip]=\"\r\n sectionArray.length < (fixtureTemplateDetails?.shelfConfig?.length ?? 0) && !isAllShelvesUsedInSections\r\n \">\r\n <button [disabled]=\"\r\n sectionArray.length >= (fixtureTemplateDetails?.shelfConfig?.length ?? 0) || isAllShelvesUsedInSections\r\n \" class=\"btn btn-outline text-end\" (click)=\"addSection()\">\r\n Add section\r\n </button>\r\n </span>\r\n </div>\r\n </form>\r\n\r\n <!-- Shelf level within Brand Library -->\r\n <form [formGroup]=\"shelfLevelForm\" *ngIf=\"selectedLevel === 'shelf'\">\r\n <div formArrayName=\"shelf\" class=\"array-wrapper\">\r\n <div *ngFor=\"let shelf of shelfArray?.controls; let i = index\" [formGroupName]=\"i\" class=\"array-container\">\r\n <!-- [ngStyle]=\"{ 'border-color': shelfColors[i].bg }\" -->\r\n <h6 class=\"shelf-title\">SHELF {{ i + 1 }}</h6>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"productBrandName\" class=\"form-label mb-1\">Brand</label>\r\n <multiselect-chip-dropdown [items]=\"brandsList\" [idField]=\"'brandName'\" [nameField]=\"'brandName'\"\r\n formControlName=\"productBrandName\" [search]=\"true\"></multiselect-chip-dropdown>\r\n <!-- <ng-container *ngIf=\"shelf.get('productBrandName')?.touched && shelf.get('productBrandName')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"shelf.get('productBrandName')?.hasError('required')\">\r\n Please select product brand\r\n </small>\r\n </ng-container> -->\r\n </div>\r\n\r\n <div class=\"form-group mb-4\">\r\n <label for=\"productCategory\" class=\"form-label mb-1\">Product category</label>\r\n <multiselect-chip-dropdown [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [items]=\"categoriesListMap.get('shelf' + i) ?? []\" formControlName=\"productCategory\"\r\n [search]=\"true\"></multiselect-chip-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <!-- Spot level within Brand Library -->\r\n <!-- <form [formGroup]=\"spotLevelForm\" *ngIf=\"selectedLevel === 'spot'\">Spot level Form</form> -->\r\n <div *ngIf=\"selectedLevel === 'spot'\"\r\n class=\"d-flex flex-column w-100 justify-content-center align-items-center text-center\" style=\"height: 50vh\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M37 37L32.65 32.65M35 27C35 31.4183 31.4183 35 27 35C22.5817 35 19 31.4183 19 27C19 22.5817 22.5817 19 27 19C31.4183 19 35 22.5817 35 27Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h3 class=\"mt-5 mb-2\">Coming soon</h3>\r\n <p>This feature is not available yet.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Coming soon for all levels -->\r\n <div *ngIf=\"selectedLibrary === 'product'\"\r\n class=\"d-flex flex-column w-100 justify-content-center align-items-center text-center mt-5\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M37 37L32.65 32.65M35 27C35 31.4183 31.4183 35 27 35C22.5817 35 19 31.4183 19 27C19 22.5817 22.5817 19 27 19C31.4183 19 35 22.5817 35 27Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h3 class=\"mt-5 mb-2\">Coming soon</h3>\r\n <p>This feature is not available yet. Start adding product from brand library</p>\r\n </div>\r\n </div>\r\n\r\n <!-- =======================================Right Column =======================================-->\r\n <div class=\"cols col-8\">\r\n <h6>Product brand placements</h6>\r\n\r\n <ul class=\"nav nav-tabs custom-tabs d-flex mt-4\" [class.disabled-click]=\"!isEditMode\">\r\n <li class=\"nav-item flex-fill\" *ngFor=\"let level of ['fixture', 'section', 'shelf', 'spot']\">\r\n <button class=\"nav-link w-100\" [class.active]=\"selectedLevel === level\" (click)=\"setTab(level)\"\r\n [attr.aria-current]=\"selectedLevel === level ? 'page' : null\">\r\n {{ level | titlecase }} level\r\n </button>\r\n </li>\r\n </ul>\r\n\r\n <ng-container *ngIf=\"selectedLevel === 'fixture'\">\r\n <div id=\"fixture-level\" class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>\r\n {{ fixtureTemplateDetails?.header?.label }}\r\n </p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" *ngIf=\"(fixtureTemplateDetails?.shelfConfig?.length ?? 0) > 0\">\r\n <div id=\"brand-category\" class=\"brand-category\"\r\n *ngIf=\"fixtureLevelForm?.get('productBrandName')?.value?.length\" [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixtureLevelForm?.get('productBrandName')?.value; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixtureLevelForm?.get('productCategory')?.value?.length\">\r\n <ng-container *ngFor=\"let c of fixtureLevelForm?.get('productCategory')?.value; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let b of fixtureLevelForm?.get('productBrandName')?.value; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixtureLevelForm?.get('productCategory')?.value?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixtureLevelForm?.get('productCategory')?.value; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\" class=\"shelfContainer\">\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedLevel === 'section'\">\r\n <div id=\"section-level\" class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container\r\n *ngTemplateOutlet=\"dimensionArrows; context: { value: fixtureTemplateDetails?.fixtureWidth?.value }\"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" id=\"section-body-block\">\r\n <!---------------------------------------------------------------------->\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n <!---------------------------------------------------------------------->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n <!---------------------------------------------------------------------->\r\n\r\n <div *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\" class=\"shelfContainer\">\r\n <!-- [NOTE] below block is identified by the function using 'lastElement' getter in DOM manipulation. \r\n So keep this block always at the bottom of this ngFor loop -->\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedLevel === 'shelf'\">\r\n <div id=\"shelf-level\" class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container\r\n *ngTemplateOutlet=\"dimensionArrows; context: { value: fixtureTemplateDetails?.fixtureWidth?.value }\"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>\r\n {{ fixtureTemplateDetails?.header?.label }}\r\n </p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" *ngIf=\"(fixtureTemplateDetails?.shelfConfig?.length ?? 0) > 0\">\r\n <div *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\" class=\"shelfContainer\">\r\n <!---------------------------------------------------------------------->\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\"\r\n *ngIf=\"shelfArray.controls[i]?.get('productBrandName')?.value?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"shelfArray.controls[i]?.get('productBrandName')?.value?.length\">\r\n <ng-container\r\n *ngFor=\"let b of shelfArray.controls[i]?.get('productBrandName')?.value; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"shelfArray.controls[i]?.get('productCategory')?.value?.length\" class=\"separator\"> -\r\n </span>\r\n <span class=\"category\" *ngIf=\"shelfArray.controls[i]?.get('productCategory')?.value?.length\">\r\n <ng-container\r\n *ngFor=\"let b of shelfArray.controls[i]?.get('productCategory')?.value; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container\r\n *ngFor=\"let c of shelfArray.controls[i]?.get('productBrandName')?.value; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"shelfArray.controls[i]?.get('productCategory')?.value?.length\">\r\n <b>Categories: </b>\r\n <ng-container\r\n *ngFor=\"let c of shelfArray.controls[i]?.get('productCategory')?.value; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n <!---------------------------------------------------------------------->\r\n\r\n <!-- [NOTE] below block is identified by the function using 'lastElement' getter in DOM manipulation. \r\n So keep this block always at the bottom of this ngFor loop -->\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedLevel === 'spot'\">\r\n <div class=\"d-flex flex-column w-100 justify-content-center align-items-center text-center\"\r\n style=\"height: 50vh\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M37 37L32.65 32.65M35 27C35 31.4183 31.4183 35 27 35C22.5817 35 19 31.4183 19 27C19 22.5817 22.5817 19 27 19C31.4183 19 35 22.5817 35 27Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h3 class=\"mt-5 mb-2\">Coming soon</h3>\r\n <p>This feature is not available yet. Try Fixture, Section, and Shelf levels</p>\r\n </div>\r\n\r\n <!-- <div id=\"spot-level\" class=\"d-flex justify-content-center\">\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureWidth?.value }}{{ fixtureTemplateDetails?.fixtureWidth?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureLength?.value\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <div\r\n class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\r\n <p>\r\n {{ fixtureTemplateDetails?.header?.label }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"body-block\" *ngIf=\"(fixtureTemplateDetails?.shelfConfig?.length ?? 0) > 0\">\r\n <div *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf \">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product \"></div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block \">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product \"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"fixture-template-products-skeleton\" *ngIf=\"isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<!-- Common dimension arrows -->\r\n<ng-template #dimensionArrows let-label=\"label\" let-value=\"value\">\r\n <div class=\"horizontal-dimension\">\r\n <div class=\"arrow left\"></div>\r\n <div class=\"line\">\r\n <span>{{ value }} {{ fixtureTemplateDetails?.fixtureWidth?.unit }}</span>\r\n </div>\r\n <div class=\"arrow right\"></div>\r\n </div>\r\n</ng-template>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.badge.draft{color:#009bf3;background:#eaf8ff}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;max-width:345px;min-width:234px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .shelfContainer .block{border:1px solid #98a2b3;border-top:none}.wall-viewport .body-block .shelfContainer:first-child .block{border-top:1px solid #98a2b3}.wall-viewport .body-block .block{padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .vmonly-placeholder{background-image:repeating-linear-gradient(45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px),repeating-linear-gradient(-45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px)}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.custom-tabs{border-radius:8px;border:1px solid var(--Gray-300, #d0d5dd);overflow:hidden;margin-bottom:24px}.custom-tabs .nav-link{border-radius:0%;color:#495057;padding:.75rem 1rem;background-color:#fff;text-align:center;border-right:1px solid var(--Gray-300, #d0d5dd);transition:all ease .2s;font-weight:500}.custom-tabs .nav-link.active{background:var(--Primary-50, #eaf8ff)}.nav-item{text-align:center}.nav-item:last-child .nav-link{border:none}.footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}.footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}.sub-footer{position:relative;width:48%}.array-wrapper{border-radius:4px;background:var(--Gray-50, #f9fafb);padding:16px}.array-container{border-radius:6px;padding:12px;background:#fff;margin-bottom:12px;border:1px solid white}#fixture-level .body-block{position:relative}#fixture-level .brand-category{position:absolute;max-width:90%;min-width:123px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(-50%,-50%);transition:all .3s ease;cursor:pointer}#fixture-level .brand,#fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-level .category{margin-top:12px}#section-level .body-block{position:relative}#section-level .brand-category{position:absolute;max-width:90%;min-width:123px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#section-level .brand,#section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#section-level .separator{margin:0 4px;font-weight:600}#section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#shelf-level .body-block{position:relative}#shelf-level .brand-category{position:absolute;max-width:90%;min-width:123px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#shelf-level .brand,#shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#shelf-level .separator{margin:0 4px;font-weight:600}\n"] }]
853
852
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.PlanoDataService }, { type: i4.ToastService }, { type: i5.GlobalStateService }, { type: i6.NgbModal }, { type: i5.PageInfoService }, { type: i0.ChangeDetectorRef }] });
854
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcHJvZHVjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS90ZW1wbGF0ZS1wcm9kdWN0cy90ZW1wbGF0ZS1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLXByb2R1Y3RzL3RlbXBsYXRlLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEUsT0FBTyxFQUNMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSw0QkFBNEIsQ0FBQztBQVVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsK0JBQStCLEdBQ2hDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUVBQXFFLENBQUM7Ozs7Ozs7OztBQWdCdkgsTUFBTSxPQUFPLHlCQUF5QjtJQXVDMUI7SUFD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QztxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICBDb21wb25lbnQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtR3JvdXAsXHJcbiAgRm9ybXNNb2R1bGUsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHtcclxuICBOZ2JBY2NvcmRpb25Nb2R1bGUsXHJcbiAgTmdiTW9kYWwsXHJcbiAgTmdiVG9vbHRpcCxcclxufSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQge1xyXG4gIEZpeHR1cmVUZW1wbGF0ZURldGFpbHMsXHJcbiAgU2VjdGlvbkNvbmZpZyxcclxuICBTaGVsZkNvbmZpZyxcclxufSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcGxhbm8tZ2VuZXJhbC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9wbGFuby1kYXRhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnJhbmREZXRhaWxzIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZml4dHVyZS10ZW1wbGF0ZS5kYXRhXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2VuZXJhbFZhbGlkYXRvcixcclxuICByZ2JUb0hleCxcclxuICB1bmlxdWVGaWVsZEluRm9ybUFycmF5VmFsaWRhdG9yLFxyXG59IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcG9wdXBzL2NvbXBsZXRlLWNvbmZpcm1hdGlvbi9jb21wbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE11bHRpc2VsZWN0Q2hpcERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24vbXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93bi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi10ZW1wbGF0ZS1wcm9kdWN0c1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGVtcGxhdGUtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RlbXBsYXRlLXByb2R1Y3RzLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBOZ2JUb29sdGlwLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTmdiQWNjb3JkaW9uTW9kdWxlLFxyXG4gICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUHJvZHVjdHNDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkXHJcbntcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsO1xyXG4gIHNlbGVjdGVkTGV2ZWw6IFwiZml4dHVyZVwiIHwgXCJzZWN0aW9uXCIgfCBcInNoZWxmXCIgfCBcInNwb3RcIiB8IHN0cmluZyA9IFwiZml4dHVyZVwiO1xyXG5cclxuICBzZWxlY3RlZExpYnJhcnk6IFwicHJvZHVjdFwiIHwgXCJicmFuZFwiIHwgc3RyaW5nID0gXCJicmFuZFwiO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGJyYW5kc0xpc3Q6IEJyYW5kRGV0YWlsc1tdID0gW107XHJcbiAgY2F0ZWdvcmllc0xpc3Q6IERyb3Bkb3duSUZbXSA9IFtdO1xyXG4gIGNhdGVnb3JpZXNMaXN0TWFwOiBNYXA8c3RyaW5nLCBEcm9wZG93bklGW10+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBzaGVsdmVzTGlzdDogRHJvcGRvd25JRltdO1xyXG5cclxuICBmaXh0dXJlTGV2ZWxGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VjdGlvbkxldmVsRm9ybTogRm9ybUdyb3VwO1xyXG4gIHNoZWxmTGV2ZWxGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc3BvdExldmVsRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBzaGVsZkNvbG9ycyA9IFNIRUxGX0NPTE9SUztcclxuXHJcbiAgc2VjdGlvbkJ5Wm9uZXM6IHtcclxuICAgIHpvbmU6IHN0cmluZztcclxuICAgIHNlY3Rpb246IHtcclxuICAgICAgYnJhbmRzOiBzdHJpbmdbXTtcclxuICAgICAgY2F0ZWdvcmllczogc3RyaW5nW107XHJcbiAgICAgIHNoZWx2ZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpW107XHJcbiAgICB9O1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGlzVmlld3BvcnRJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBwczogUGxhbm9EYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBzLmJyYW5kc0xpc3RcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLmJyYW5kc0xpc3QgPSBlKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMucHMuZmV0Y2hCcmFuZHNMaXN0KHRoaXMuY2xpZW50SWQpO1xyXG5cclxuICAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHNcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgICAgIGZpbHRlcigoZGF0YSkgPT4gIWRhdGE/Lmlnbm9yZVVwZGF0ZSksXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFnZUxvYWRpbmcpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hlbHZlc0xpc3QgPVxyXG4gICAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke2U/LnNoZWxmVHlwZT8udG9VcHBlckNhc2UoKX0gJHtlPy5zaGVsZk51bWJlcn1gLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogYCR7ZT8uc2hlbGZUeXBlfSAke2U/LnNoZWxmTnVtYmVyfWAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pID8/IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJCeUxldmVsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZpeHR1cmVMZXZlbEZvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0U2VjdGlvbkxldmVsRm9ybSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRTaGVsZkxldmVsRm9ybSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRTcG90TGV2ZWxGb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlblRvQWxsRm9ybUNoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXBcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSBwYXJhbXMuZ2V0KFwiaXNFZGl0XCIpID09PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hlbGZMZXZlbEZvcm0/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zcG90TGV2ZWxGb3JtPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZml4dHVyZUxldmVsRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNoZWxmTGV2ZWxGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNwb3RMZXZlbEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVGb3JtJFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5zdWJtaXRGb3JtKGRhdGEpKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJQcm9kdWN0c1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkZpeHR1cmUgVGVtcGxhdGVcIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNWaWV3cG9ydEluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWaWV3cG9ydEluaXRpYWxpemVkID0gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJCeUxldmVsKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwpIHtcclxuICAgICAgY2FzZSBcIkwxXCI6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExldmVsID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMMlwiOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZXZlbCA9IFwic2hlbGZcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkwzXCI6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExldmVsID0gXCJzZWN0aW9uXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMNFwiOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZXZlbCA9IFwic3BvdFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IGxldmVsOiB0aGlzLnNlbGVjdGVkTGV2ZWwgfSxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiLFxyXG4gICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExldmVsQnlUYWIoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMZXZlbCkge1xyXG4gICAgICBjYXNlIFwiZml4dHVyZVwiOlxyXG4gICAgICAgIHJldHVybiBcIkwxXCI7XHJcbiAgICAgIGNhc2UgXCJzZWN0aW9uXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiTDNcIjtcclxuICAgICAgY2FzZSBcInNoZWxmXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiTDJcIjtcclxuICAgICAgY2FzZSBcInNwb3RcIjpcclxuICAgICAgICByZXR1cm4gXCJMNFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEZpeHR1cmVMZXZlbEZvcm0oKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW3RoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdEJyYW5kTmFtZV0sXHJcbiAgICAgIHByb2R1Y3RDYXRlZ29yeTogW3RoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdENhdGVnb3J5XSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBjb25zdCBjYXRlZ29yaWVzID1cclxuICAgICAgICB0aGlzLmJyYW5kc0xpc3RcclxuICAgICAgICAgIC5maW5kKChiKSA9PiBiLmJyYW5kTmFtZSA9PT0gZSlcclxuICAgICAgICAgID8uY2F0ZWdvcnk/Lm1hcCgoYykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogYywgdmFsdWU6IGMgfTtcclxuICAgICAgICAgIH0pID8/IFtdO1xyXG4gICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0ID0gWy4uLnRoaXMuY2F0ZWdvcmllc0xpc3QsIC4uLmNhdGVnb3JpZXNdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlTGV2ZWxGb3JtXHJcbiAgICAgIC5nZXQoXCJwcm9kdWN0QnJhbmROYW1lXCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2OiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3QgPSBbXTtcclxuICAgICAgICB2LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgICAgICB0aGlzLmJyYW5kc0xpc3RcclxuICAgICAgICAgICAgICAuZmluZCgoYikgPT4gYi5icmFuZE5hbWUgPT09IGUpXHJcbiAgICAgICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbDogYywgdmFsdWU6IGMgfTtcclxuICAgICAgICAgICAgICB9KSA/PyBbXTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3QgPSBbLi4udGhpcy5jYXRlZ29yaWVzTGlzdCwgLi4uY2F0ZWdvcmllc107XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbGlkQ2F0ZWdvcnlJZHMgPSB0aGlzLmNhdGVnb3JpZXNMaXN0Py5tYXAoKGMpID0+IGMudmFsdWUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXRTZWxlY3Rpb24gPVxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlTGV2ZWxGb3JtPy5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIik/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhdFNlbGVjdGlvbiA9IGN1cnJlbnRDYXRTZWxlY3Rpb24uZmlsdGVyKChpZDogYW55KSA9PlxyXG4gICAgICAgICAgdmFsaWRDYXRlZ29yeUlkcy5pbmNsdWRlcyhpZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm1cclxuICAgICAgICAgID8uZ2V0KFwicHJvZHVjdENhdGVnb3J5XCIpXHJcbiAgICAgICAgICA/LnNldFZhbHVlKG5ld0NhdFNlbGVjdGlvbiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0/LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGMpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHRoaXMuZml4dHVyZUxldmVsRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0U2VjdGlvbkxldmVsRm9ybSgpIHtcclxuICAgIHRoaXMuc2VjdGlvbkxldmVsRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBzZWN0aW9uOiB0aGlzLmZiLmFycmF5KFtdLCB1bmlxdWVGaWVsZEluRm9ybUFycmF5VmFsaWRhdG9yKFwiem9uZVwiKSksXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9uR3JvdXBBcnJheSA9IHRoaXMuZ3JvdXBTaGVsdmVzQnlab25lKFxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnID8/IFtdLFxyXG4gICAgKTtcclxuXHJcbiAgICBzZWN0aW9uR3JvdXBBcnJheS5mb3JFYWNoKChzLCBpKSA9PiB0aGlzLmFkZFNlY3Rpb24ocywgaSkpO1xyXG5cclxuICAgIGlmIChzZWN0aW9uR3JvdXBBcnJheS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5hZGRTZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXMgPSBzZWN0aW9uR3JvdXBBcnJheVxyXG4gICAgICAubWFwKChzZSkgPT4gc2U/LnNoZWx2ZXM/Lm1hcCgocykgPT4gcykpXHJcbiAgICAgIC5mbGF0KCk7XHJcblxyXG4gICAgdGhpcy5zaGVsdmVzTGlzdCA9IHRoaXMuc2hlbHZlc0xpc3QubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICBkaXNhYmxlZDogYWxsU2VjdGlvblNoZWx2ZXM/LmluY2x1ZGVzKGAke2l0ZW0/LnZhbHVlfWApLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQXJyYXkudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoczogU2VjdGlvbkNvbmZpZ1tdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXMgPSBzXHJcbiAgICAgICAgICAubWFwKChzZSkgPT4gc2U/LnNoZWx2ZXM/Lm1hcCgocykgPT4gcykpXHJcbiAgICAgICAgICAuZmxhdCgpO1xyXG4gICAgICAgIHRoaXMuc2hlbHZlc0xpc3QgPSB0aGlzLnNoZWx2ZXNMaXN0Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGFsbFNlY3Rpb25TaGVsdmVzPy5pbmNsdWRlcyhgJHtpdGVtPy52YWx1ZX1gKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSB0aGlzLnNlY3Rpb25MZXZlbEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWxsU2hlbHZlc1VzZWRJblNlY3Rpb25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hlbHZlc0xpc3QuZmlsdGVyKChzKSA9PiAhcy5kaXNhYmxlZCkubGVuZ3RoIDw9IDA7XHJcbiAgfVxyXG5cclxuICBpbml0U2hlbGZMZXZlbEZvcm0oKSB7XHJcbiAgICB0aGlzLnNoZWxmTGV2ZWxGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNoZWxmOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LmZvckVhY2goKGUsIGkpID0+XHJcbiAgICAgIHRoaXMuYWRkU2hlbGYoZSwgaSksXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSB0aGlzLnNoZWxmTGV2ZWxGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGluaXRTcG90TGV2ZWxGb3JtKCkge1xyXG4gICAgdGhpcy5zcG90TGV2ZWxGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGJyYW5kOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHByb2R1Y3RDYXRlZ29yeTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHRoaXMuc3BvdExldmVsRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWIodGFiOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRMZXZlbCA9IHRhYjtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICBxdWVyeVBhcmFtczogeyBsZXZlbDogdGhpcy5zZWxlY3RlZExldmVsIH0sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIixcclxuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlc1RvTG9jYWwoKTtcclxuICB9XHJcblxyXG4gIGdldCBzaGVsZkFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVsZkxldmVsRm9ybS5nZXQoXCJzaGVsZlwiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VjdGlvbkFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9uTGV2ZWxGb3JtLmdldChcInNlY3Rpb25cIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgYWRkU2VjdGlvbihcclxuICAgIHNlY3Rpb24/OiBTZWN0aW9uQ29uZmlnLFxyXG4gICAgaTogbnVtYmVyID0gdGhpcy5zZWN0aW9uQXJyYXkuY29udHJvbHMubGVuZ3RoLFxyXG4gICkge1xyXG4gICAgY29uc3Qgc2VjdGlvbkdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHpvbmU6IFtzZWN0aW9uPy56b25lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgZ2VuZXJhbFZhbGlkYXRvcigpXV0sXHJcbiAgICAgIHNoZWx2ZXM6IFtzZWN0aW9uPy5zaGVsdmVzID8/IFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW3NlY3Rpb24/LnByb2R1Y3RCcmFuZE5hbWVdLFxyXG4gICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtzZWN0aW9uPy5wcm9kdWN0Q2F0ZWdvcnkgPz8gXCJcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb25BcnJheS5wdXNoKHNlY3Rpb25Hcm91cCk7XHJcblxyXG4gICAgY29uc3QgbWFwSWQgPSBgc2VjdGlvbiR7aX1gO1xyXG4gICAgc2VjdGlvbj8ucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgIHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgICAgLmZpbmQoKGIpID0+IGIuYnJhbmROYW1lID09PSBlKVxyXG4gICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLCB2YWx1ZTogYyB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuc2V0KG1hcElkLCBbXHJcbiAgICAgICAgLi4uKHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KG1hcElkKSA/PyBbXSksXHJcbiAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwU2VjdGlvbkxpc3RlbmVyKHNlY3Rpb25Hcm91cCwgbWFwSWQpO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hlbGYoc2hlbGY6IFNoZWxmQ29uZmlnLCBpOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNoZWxmR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW3NoZWxmPy5wcm9kdWN0QnJhbmROYW1lXSxcclxuICAgICAgcHJvZHVjdENhdGVnb3J5OiBbc2hlbGY/LnByb2R1Y3RDYXRlZ29yeSA/PyBcIlwiXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2hlbGZBcnJheS5wdXNoKHNoZWxmR3JvdXApO1xyXG5cclxuICAgIGNvbnN0IG1hcElkID0gYHNoZWxmJHtpfWA7XHJcbiAgICBzaGVsZj8ucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgIHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgICAgLmZpbmQoKGIpID0+IGIuYnJhbmROYW1lID09PSBlKVxyXG4gICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLCB2YWx1ZTogYyB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuc2V0KG1hcElkLCBbXHJcbiAgICAgICAgLi4uKHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KG1hcElkKSA/PyBbXSksXHJcbiAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwU2hlbGZMaXN0ZW5lcihzaGVsZkdyb3VwLCBtYXBJZCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBTaGVsZkxpc3RlbmVyKHNoZWxmR3JvdXA6IEZvcm1Hcm91cCwgaTogc3RyaW5nKSB7XHJcbiAgICBzaGVsZkdyb3VwXHJcbiAgICAgIC5nZXQoXCJwcm9kdWN0QnJhbmROYW1lXCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChicmFuZHMpID0+IHtcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TWFwLnNldChpLCBbXSk7XHJcbiAgICAgICAgYnJhbmRzLmZvckVhY2goKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgICAgICAgIC5maW5kKChiKSA9PiBiLmJyYW5kTmFtZSA9PT0gZSlcclxuICAgICAgICAgICAgICA/LmNhdGVnb3J5Py5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLCB2YWx1ZTogYyB9O1xyXG4gICAgICAgICAgICAgIH0pID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdE1hcC5zZXQoaSwgW1xyXG4gICAgICAgICAgICAuLi4odGhpcy5jYXRlZ29yaWVzTGlzdE1hcC5nZXQoaSkgPz8gW10pLFxyXG4gICAgICAgICAgICAuLi5jYXRlZ29yaWVzLFxyXG4gICAgICAgICAgXSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGNhdGVnb3J5IHNlbGVjdGlvbiBpZiBwcmV2aW91c2x5IHNlbGVjdGVkIGNhdGVnb3JpZXMgYXJlIG5vIGxvbmdlciB2YWxpZFxyXG4gICAgICAgIGNvbnN0IHZhbGlkQ2F0ZWdvcnlJZHMgPVxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdE1hcD8uZ2V0KGkpPy5tYXAoKGMpID0+IGMudmFsdWUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXRTZWxlY3Rpb24gPVxyXG4gICAgICAgICAgc2hlbGZHcm91cC5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIik/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhdFNlbGVjdGlvbiA9IGN1cnJlbnRDYXRTZWxlY3Rpb24uZmlsdGVyKChpZDogYW55KSA9PlxyXG4gICAgICAgICAgdmFsaWRDYXRlZ29yeUlkcy5pbmNsdWRlcyhpZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzaGVsZkdyb3VwXHJcbiAgICAgICAgICAuZ2V0KFwicHJvZHVjdENhdGVnb3J5XCIpXHJcbiAgICAgICAgICA/LnNldFZhbHVlKG5ld0NhdFNlbGVjdGlvbiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2hlbGZHcm91cFxyXG4gICAgICAuZ2V0KFwicHJvZHVjdENhdGVnb3J5XCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldHVwU2VjdGlvbkxpc3RlbmVyKHNlY3Rpb25Hcm91cDogRm9ybUdyb3VwLCBpOiBzdHJpbmcpIHtcclxuICAgIHNlY3Rpb25Hcm91cFxyXG4gICAgICAuZ2V0KFwicHJvZHVjdEJyYW5kTmFtZVwiKVxyXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoYnJhbmRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdE1hcC5zZXQoaSwgW10pO1xyXG4gICAgICAgIGJyYW5kcy5mb3JFYWNoKChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgICAgICB0aGlzLmJyYW5kc0xpc3RcclxuICAgICAgICAgICAgICAuZmluZCgoYikgPT4gYi5icmFuZE5hbWUgPT09IGUpXHJcbiAgICAgICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbDogYywgdmFsdWU6IGMgfTtcclxuICAgICAgICAgICAgICB9KSA/PyBbXTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuc2V0KGksIFtcclxuICAgICAgICAgICAgLi4uKHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KGkpID8/IFtdKSxcclxuICAgICAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBjYXRlZ29yeSBzZWxlY3Rpb24gaWYgcHJldmlvdXNseSBzZWxlY3RlZCBjYXRlZ29yaWVzIGFyZSBubyBsb25nZXIgdmFsaWRcclxuICAgICAgICBjb25zdCB2YWxpZENhdGVnb3J5SWRzID1cclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXA/LmdldChpKT8ubWFwKChjKSA9PiBjLnZhbHVlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q2F0U2VsZWN0aW9uID1cclxuICAgICAgICAgIHNlY3Rpb25Hcm91cC5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIik/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhdFNlbGVjdGlvbiA9IGN1cnJlbnRDYXRTZWxlY3Rpb24uZmlsdGVyKChpZDogYW55KSA9PlxyXG4gICAgICAgICAgdmFsaWRDYXRlZ29yeUlkcy5pbmNsdWRlcyhpZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZWN0aW9uR3JvdXBcclxuICAgICAgICAgIC5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIilcclxuICAgICAgICAgID8uc2V0VmFsdWUobmV3Q2F0U2VsZWN0aW9uLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzZWN0aW9uR3JvdXBcclxuICAgICAgLmdldChcInByb2R1Y3RDYXRlZ29yeVwiKVxyXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VjdGlvbkdyb3VwXHJcbiAgICAgIC5nZXQoXCJzaGVsdmVzXCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzZWN0aW9uR3JvdXBcclxuICAgICAgLmdldChcInpvbmVcIilcclxuICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuYWRkQ29sb3JUb1NoZWx2ZXMoKSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWN0aW9uKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLnNlY3Rpb25BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRkQ29sb3JUb1NoZWx2ZXMoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZvcm1CeUxldmVsKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGV2ZWwpIHtcclxuICAgICAgY2FzZSBcImZpeHR1cmVcIjpcclxuICAgICAgICByZXR1cm4gdGhpcy5maXh0dXJlTGV2ZWxGb3JtO1xyXG4gICAgICBjYXNlIFwic2VjdGlvblwiOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25MZXZlbEZvcm07XHJcbiAgICAgIGNhc2UgXCJzaGVsZlwiOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNoZWxmTGV2ZWxGb3JtO1xyXG4gICAgICBjYXNlIFwic3BvdFwiOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNwb3RMZXZlbEZvcm07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZml4dHVyZUxldmVsRm9ybTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbG9yVG9TaGVsdmVzKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbGV2ZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLnNlbGVjdGVkTGV2ZWx9LWxldmVsYCk7XHJcbiAgICBpZiAoIWxldmVsKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBib2RpZXMgPSBsZXZlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIi5ib2R5LWJsb2NrXCIpO1xyXG4gICAgaWYgKCFib2RpZXMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGJvZGllcy5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkRpdnMgPSBib2R5Q2hpbGRyZW5cclxuICAgICAgLm1hcCgoZGl2KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGFzdCA9IGRpdi5sYXN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgIHJldHVybiBsYXN0ICYmIGxhc3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImRpdlwiXHJcbiAgICAgICAgICA/IChsYXN0IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChkKTogZCBpcyBIVE1MRWxlbWVudCA9PiAhIWQpO1xyXG5cclxuICAgIGlmICghc2hlbGZEaXZzLmxlbmd0aCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRkQ29sb3JUb1NoZWx2ZXMoKSwgMTAwKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZExldmVsKSB7XHJcbiAgICAgIGNhc2UgXCJzZWN0aW9uXCI6IHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2cyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25BcnJheSA9XHJcbiAgICAgICAgICAodGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy52YWx1ZT8uc2VjdGlvbiBhcyBTZWN0aW9uQ29uZmlnW10pID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGFsbFNlY3Rpb25TaGVsdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBzZWN0aW9uQXJyYXkuZm9yRWFjaCgoc2UsIGkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmSWRzID1cclxuICAgICAgICAgICAgc2Uuc2hlbHZlcz8ubWFwKChzaCkgPT4gc2gucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkpID8/IFtdO1xyXG4gICAgICAgICAgYWxsU2VjdGlvblNoZWx2ZXMucHVzaCguLi5zaGVsZklkcyk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VjRGl2cyA9IHNoZWxmRGl2cy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgIHNoZWxmSWRzLmluY2x1ZGVzKGl0ZW0uaWQpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHNlY0RpdnMuZm9yRWFjaChcclxuICAgICAgICAgICAgKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmcpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgdW5hc3NpZ25lZFNoZWx2ZXMgPSBzaGVsZkRpdnMuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VjdGlvbi1ib2R5LWJsb2NrXCIpO1xyXG4gICAgICAgIGlmIChzZWN0aW9uQm9keSkge1xyXG4gICAgICAgICAgbGV0IHNlY3Rpb25Hcm91cEhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbldpZHRoID1cclxuICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5vZmZzZXRXaWR0aCA/PyAzNDU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGJjID0gc2VjdGlvbkJvZHkucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0JnID0gcmdiVG9IZXgoXHJcbiAgICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZWxmQ29sb3JzLmZpbmQoKGMpID0+IGMuYmcgPT09IHNlY0JnKSA/P1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZWxmQ29sb3JzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3IuYm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZmZmXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNYID0gKGN1cnJlbnRTZWN0aW9uV2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNZID1cclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRTZWN0aW9uSGVpZ2h0IC0gYmMub2Zmc2V0SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYfXB4LCAke2JjWX1weClgO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodCArPSBjdXJyZW50U2VjdGlvbkhlaWdodDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBcInNoZWxmXCI6XHJcbiAgICAgICAgYm9keUNoaWxkcmVuLmZvckVhY2goKGRpdiwgaSkgPT4ge1xyXG4gICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmMgPSBkaXYucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYCNicmFuZC1jYXRlZ29yeSR7aX1gKTtcclxuICAgICAgICAgIGlmIChiYykge1xyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJvcmRlcjtcclxuICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS50ZXh0Qmc7XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1h9cHgsICR7YmNZfXB4KWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiZml4dHVyZVwiOlxyXG4gICAgICBjYXNlIFwic3BvdFwiOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKFxyXG4gICAgICAgICAgKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmcpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZXF1ZW50aWFsU2VjdGlvbihzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwpW10pIHtcclxuICAgIGNvbnN0IHNoZWxmQ29uZmlnczogU2hlbGZDb25maWdbXSA9IHRoaXMuYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKFxyXG4gICAgICB0aGlzLnNlY3Rpb25MZXZlbEZvcm0/LnZhbHVlPy5zZWN0aW9uIGFzIFNlY3Rpb25Db25maWdbXSxcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdTZWN0aW9uQnlab25lcyA9IFtdO1xyXG5cclxuICAgIGxldCBwWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IHMgb2Ygc2hlbGZDb25maWdzKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBzLnpvbmUgfHwgXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZJZCA9IGAke3Muc2hlbGZUeXBlfSR7cy5zaGVsZk51bWJlcn1gO1xyXG4gICAgICBjb25zdCBzaGVsZkRpdiA9IHNoZWxmRGl2cy5maW5kKChkKSA9PiBkPy5pZCA9PT0gc2hlbGZJZCk7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW3NoZWxmRGl2XSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcFpvbmUgPSB6b25lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbHZlcy5wdXNoKHNoZWxmSWQpO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbGZEaXZzLnB1c2goc2hlbGZEaXYpO1xyXG5cclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbGxTaGVsZkFkZFRvU2VjdGlvbigpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiQEAgfiB0aGlzLnNoZWx2ZXNMaXN0OlwiLCB0aGlzLnNoZWx2ZXNMaXN0KTtcclxuICAgIHJldHVybiB0aGlzLnNoZWx2ZXNMaXN0LmV2ZXJ5KChzKSA9PiBzLmRpc2FibGVkKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRQYXlsb2FkQnlMZXZlbChzdGF0dXM6IHN0cmluZyk6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm1CeUxldmVsKCk7XHJcbiAgICBjb25zdCBsZXZlbCA9IHRoaXMuZ2V0TGV2ZWxCeVRhYigpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgZm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICh0aGlzLnNlbGVjdGVkTGV2ZWwgPT09IFwic2VjdGlvblwiICYmICF0aGlzLmlzQWxsU2hlbGZBZGRUb1NlY3Rpb24pXHJcbiAgICApIHtcclxuICAgICAgZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgICBjb25zdCBlcnJvck1zZyA9IGZvcm0uaW52YWxpZFxyXG4gICAgICAgID8gXCJGb3JtIGlzIGludmFsaWRcIlxyXG4gICAgICAgIDogXCJBc3NpZ24gYWxsIHNoZWx2ZXMgdG8gYSBzZWN0aW9uXCI7XHJcblxyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyb3JNc2cpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMZXZlbCkge1xyXG4gICAgICBjYXNlIFwiZml4dHVyZVwiOiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBTaGVsZkNvbmZpZ1tdID1cclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgocywgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnMsXHJcbiAgICAgICAgICAgICAgem9uZTogXCJcIixcclxuICAgICAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbXSxcclxuICAgICAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMhLFxyXG4gICAgICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgICAgIC8vIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbLi4uZm9ybT8udmFsdWUucHJvZHVjdEJyYW5kTmFtZV0sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFsuLi5mb3JtPy52YWx1ZS5wcm9kdWN0Q2F0ZWdvcnldLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcInNlY3Rpb25cIjoge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZzogU2hlbGZDb25maWdbXSA9IHRoaXMuYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKFxyXG4gICAgICAgICAgdGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy52YWx1ZT8uc2VjdGlvbiBhcyBTZWN0aW9uQ29uZmlnW10sXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzISxcclxuICAgICAgICAgIGZpeHR1cmVOYW1lOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVOYW1lPy50cmltKCksXHJcbiAgICAgICAgICAvLyBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgIGlzRWRpdGVkOiB0cnVlLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogW10sXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcInNoZWxmXCI6IHtcclxuICAgICAgICBjb25zdCBjb25maWc6IFNoZWxmQ29uZmlnW10gPVxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubWFwKChzLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4ucyxcclxuICAgICAgICAgICAgICB6b25lOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IGZvcm0/LnZhbHVlPy5zaGVsZltpXT8ucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IGZvcm0/LnZhbHVlPy5zaGVsZltpXT8ucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMhLFxyXG4gICAgICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgICAgIC8vIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBsZXZlbCxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBbXSxcclxuICAgICAgICAgIHNoZWxmQ29uZmlnOiBjb25maWcsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwic3BvdFwiOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMhLFxyXG4gICAgICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgICAgIC8vIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogW10sXHJcbiAgICAgICAgICBpc0VkaXRlZDogdHJ1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUNvbXBsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBcIkNvbXBsZXRlIHRlbXBsYXRlXCI7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgIFwiVGVtcGxhdGUgaXMgbm93IHJlYWR5IHRvIGFzc2lnbiBpdCB0byB0aGUgc3RvcmUgYnV0IHN0aWxsIHlvdSBjYW4gY29tZSBhZ2FpbiBhbnkgdGltZSBhbmQgZWRpdCB0aGlzIHRlbXBsYXRlLlwiO1xyXG4gICAgLy8gbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2Uubm90ZSA9ICdZb3UgY2FuXFwndCBlZGl0IGl0IG9uY2UgYXNzaWduZWQgdG8gdGhlIHRlbXBsYXRlLic7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN1Ym1pdEZvcm0oZGF0YTogeyBzdGF0dXM6IHN0cmluZzsgZ29CYWNrOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGV0ID0gdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVFcnJvclRhYnM7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQ6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsID0gdGhpcy5nZXRQYXlsb2FkQnlMZXZlbChcclxuICAgICAgZGF0YS5zdGF0dXMsXHJcbiAgICApO1xyXG4gICAgaWYgKCFwYXlsb2FkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGV0LmJhc2ljRGV0YWlscyB8fCBldC5wcm9kdWN0cyB8fCBldC52bXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIilcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtQ29tcGxldGlvbigpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHMuc3VibWl0Rml4dHVyZVRlbXBsYXRlRGV0YWlscyhcclxuICAgICAgeyAuLi5wYXlsb2FkLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCkgfSxcclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLl9pZCEsXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgaXNFZGl0OiBmYWxzZSB9LFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIixcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiRml4dHVyZSB0ZW1wbGF0ZSBkZXRhaWxzIHVwZGF0ZWQuXCIpO1xyXG4gICAgICBpZiAoZGF0YS5nb0JhY2spIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlc1wiXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIikge1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYXNzaWduLXN0b3Jlc1wiXSwge1xyXG4gICAgICAgIC8vICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJwcmVzZXJ2ZVwiLFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBncm91cFNoZWx2ZXNCeVpvbmUoaW5wdXQ6IFNoZWxmQ29uZmlnW10pOiBTZWN0aW9uQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgem9uZU1hcDogeyBbem9uZTogc3RyaW5nXTogU2VjdGlvbkNvbmZpZyB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBpdGVtPy56b25lID8/IFwiXCI7XHJcbiAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtpdGVtLnNoZWxmVHlwZX0gJHtpdGVtLnNoZWxmTnVtYmVyfWA7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcblxyXG4gICAgICBpZiAoIXpvbmVNYXBbem9uZV0pIHtcclxuICAgICAgICB6b25lTWFwW3pvbmVdID0ge1xyXG4gICAgICAgICAgc2hlbHZlczogW10sXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOlxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0QnJhbmROYW1lXHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTpcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdENhdGVnb3J5XHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHpvbmU6IHpvbmUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgem9uZU1hcFt6b25lXT8uc2hlbHZlcz8ucHVzaChzaGVsZkxhYmVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh6b25lTWFwKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2VjdGlvbkNvbmZpZ1RvU2hlbHZlcyhzZWN0aW9uczogU2VjdGlvbkNvbmZpZ1tdKTogU2hlbGZDb25maWdbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICBQaWNrPFNlY3Rpb25Db25maWcsIFwiem9uZVwiIHwgXCJwcm9kdWN0QnJhbmROYW1lXCIgfCBcInByb2R1Y3RDYXRlZ29yeVwiPlxyXG4gICAgPigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmTGFiZWwgb2Ygc2VjdGlvbi5zaGVsdmVzISkge1xyXG4gICAgICAgIHNlY3Rpb25NYXAuc2V0KHNoZWxmTGFiZWwsIHtcclxuICAgICAgICAgIHpvbmU6IHNlY3Rpb24uem9uZSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IHNlY3Rpb24ucHJvZHVjdEJyYW5kTmFtZSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogc2VjdGlvbi5wcm9kdWN0Q2F0ZWdvcnksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBcHBseSBvdmVycmlkZXMgdG8gbWF0Y2hpbmcgc2hlbHZlc1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubWFwKChzaGVsZikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtzaGVsZi5zaGVsZlR5cGV9ICR7c2hlbGYuc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IHNlY3Rpb25NYXAuZ2V0KHNoZWxmTGFiZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uc2hlbGYsXHJcbiAgICAgICAgICB6b25lOiBvdmVycmlkZT8uem9uZSB8fCBcIlwiLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogb3ZlcnJpZGU/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IG92ZXJyaWRlPy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSkgPz8gW11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlblRvQWxsRm9ybUNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUNoYW5nZXNUb0xvY2FsKCk7XHJcblxyXG4gICAgY29uc3QgZm9ybXNUb1dhdGNoID0gW1xyXG4gICAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0sXHJcbiAgICAgIHRoaXMuc2VjdGlvbkxldmVsRm9ybSxcclxuICAgICAgdGhpcy5zaGVsZkxldmVsRm9ybSxcclxuICAgICAgdGhpcy5zcG90TGV2ZWxGb3JtLFxyXG4gICAgXTtcclxuXHJcbiAgICBmb3Jtc1RvV2F0Y2guZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICBpZiAoIWZvcm0pIHJldHVybjtcclxuICAgICAgaWYgKHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzLnByb2R1Y3RzKSBmb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgZm9ybS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VzVG9Mb2NhbCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGFuZ2VzVG9Mb2NhbCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm1CeUxldmVsKCk7XHJcbiAgICBjb25zdCB2YWwgPSBmb3JtLnZhbHVlO1xyXG5cclxuICAgIGxldCBwYXlsb2FkOiBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzIHwgbnVsbDtcclxuXHJcbiAgICBjb25zdCBsZXZlbCA9IHRoaXMuZ2V0TGV2ZWxCeVRhYigpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZExldmVsKSB7XHJcbiAgICAgIGNhc2UgXCJmaXh0dXJlXCI6IHtcclxuICAgICAgICBjb25zdCBjb25maWc6IFNoZWxmQ29uZmlnW10gPVxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubWFwKChzLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4ucyxcclxuICAgICAgICAgICAgICB6b25lOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IFtdLFxyXG4gICAgICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogW10sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KSA/PyBbXTtcclxuXHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyEsXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbLi4udmFsLnByb2R1Y3RCcmFuZE5hbWVdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBbLi4udmFsLnByb2R1Y3RDYXRlZ29yeV0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwic2VjdGlvblwiOiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBTaGVsZkNvbmZpZ1tdID0gdGhpcy5hcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoXHJcbiAgICAgICAgICB2YWwuc2VjdGlvbiBhcyBTZWN0aW9uQ29uZmlnW10sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzISxcclxuICAgICAgICAgIHByb2R1Y3RSZXNvbHV0aW9uTGV2ZWw6IGxldmVsLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgICAgc2hlbGZDb25maWc6IGNvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgXCJzaGVsZlwiOiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBTaGVsZkNvbmZpZ1tdID1cclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgocywgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnMsXHJcbiAgICAgICAgICAgICAgem9uZTogXCJcIixcclxuICAgICAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiB2YWwuc2hlbGZbaV0/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiB2YWwuc2hlbGZbaV0/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pID8/IFtdO1xyXG5cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzISxcclxuICAgICAgICAgIHByb2R1Y3RSZXNvbHV0aW9uTGV2ZWw6IGxldmVsLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgICAgc2hlbGZDb25maWc6IGNvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgXCJzcG90XCI6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyEsXHJcbiAgICAgICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBsZXZlbCxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5uZXh0KHsgLi4ucGF5bG9hZCwgaWdub3JlVXBkYXRlOiB0cnVlIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy5wcm9kdWN0cyA9XHJcbiAgICAgICAgZm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICAgKHRoaXMuc2VsZWN0ZWRMZXZlbCA9PT0gXCJzZWN0aW9uXCIgJiYgIXRoaXMuaXNBbGxTaGVsZkFkZFRvU2VjdGlvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFuVXBFbXB0eVNlY3Rpb25zKCkge1xyXG4gICAgY29uc3Qgc2hlbGZDb25maWdzOiBTaGVsZkNvbmZpZ1tdID0gdGhpcy5hcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoXHJcbiAgICAgIHRoaXMuc2VjdGlvbkxldmVsRm9ybT8udmFsdWU/LnNlY3Rpb24gYXMgU2VjdGlvbkNvbmZpZ1tdLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IG5ld1NlY3Rpb25CeVpvbmVzID0gW107XHJcblxyXG4gICAgbGV0IHBab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgcyBvZiBzaGVsZkNvbmZpZ3MpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBab25lID0gem9uZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBzZWN0aW9uID0gbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbjtcclxuXHJcbiAgICAgICAgc2VjdGlvbi5zaGVsdmVzLnB1c2goc2hlbGZJZCk7XHJcbiAgICAgICAgc2VjdGlvbi5zaGVsZkRpdnMgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY2xlYW5VcEVtcHR5U2VjdGlvbnMoKTtcclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5uZXh0KHtcclxuICAgICAgLi4udGhpcy5wcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLnZhbHVlLFxyXG4gICAgICBpZ25vcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwiZml4dHVyZS10ZW1wbGF0ZS1wcm9kdWN0c1wiICpuZ0lmPVwiIWlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGdhcC00IGJ1aWxkZXJcIj5cclxuICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09TGVmdCBDb2x1bW49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29scyBjb2xcIj5cclxuICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzIGN1c3RvbS10YWJzIGQtZmxleFwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCIhaXNFZGl0TW9kZVwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGZsZXgtZmlsbFwiICpuZ0Zvcj1cImxldCBsaWJyYXJ5IG9mIFsnYnJhbmQnLCAncHJvZHVjdCddXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmsgdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkTGlicmFyeSA9PT0gbGlicmFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZExpYnJhcnkgPSBsaWJyYXJ5XCIgW2F0dHIuYXJpYS1jdXJyZW50XT1cInNlbGVjdGVkTGlicmFyeSA9PT0gbGlicmFyeSA/ICdwYWdlJyA6IG51bGxcIj5cclxuICAgICAgICAgICAge3sgbGlicmFyeSB8IHRpdGxlY2FzZSB9fSBMaWJyYXJ5XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkTGlicmFyeSA9PT0gJ2JyYW5kJ1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZExldmVsICE9PSAnc3BvdCdcIj5cclxuICAgICAgICAgIDxoMj5BZGQgcHJvZHVjdHMgYnkgYnJhbmQgbGV2ZWw8L2gyPlxyXG4gICAgICAgICAgPHA+UGxhY2UgdGhlIHByb2R1Y3QgYnJhbmQgaW4gdGhlIGRlc2lnbmF0ZWQgcGxhY2VtZW50IGFyZWEuPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gRml4dHVyZSBsZXZlbCB3aXRoaW4gQnJhbmQgTGlicmFyeSAgLS0+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaXh0dXJlTGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnZml4dHVyZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByb2R1Y3RCcmFuZE5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkJyYW5kPC9sYWJlbD5cclxuICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24gW2l0ZW1zXT1cImJyYW5kc0xpc3RcIiBbaWRGaWVsZF09XCInYnJhbmROYW1lJ1wiIFtuYW1lRmllbGRdPVwiJ2JyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGJyYW5kcydcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0QnJhbmROYW1lXCJcclxuICAgICAgICAgICAgICBbc2VhcmNoXT1cInRydWVcIj48L211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZUxldmVsRm9ybS5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udG91Y2hlZCAmJiBmaXh0dXJlTGV2ZWxGb3JtLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmaXh0dXJlTGV2ZWxGb3JtLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBwcm9kdWN0IGJyYW5kXHJcbiAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9kdWN0Q2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlByb2R1Y3QgY2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93biBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2l0ZW1zXT1cImNhdGVnb3JpZXNMaXN0XCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBjYXRlZ29yaWVzJ1wiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RDYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8IS0tIFNlY3Rpb24gbGV2ZWwgd2l0aGluIEJyYW5kIExpYnJhcnkgLS0+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWN0aW9uTGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc2VjdGlvbidcIj5cclxuICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cInNlY3Rpb25cIiBjbGFzcz1cImFycmF5LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9uQXJyYXk/LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhcnJheS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8IS0tIFtuZ1N0eWxlXT1cInsgJ2JvcmRlci1jb2xvcic6IHNoZWxmQ29sb3JzW2ldLmJnIH1cIiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzaGVsZi10aXRsZVwiPlNFQ1RJT04ge3sgaSArIDEgfX08L2g2PlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwiIWlzRWRpdE1vZGVcIiAqbmdJZj1cImkgIT09IDBcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgKGNsaWNrKT1cInJlbW92ZVNlY3Rpb24oaSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNkwxOCAxOFwiIHN0cm9rZT1cIiM5OEEyQjNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ6b25lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5TZWN0aW9uIGxhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJsYWJlbFwiIGZvcm1Db250cm9sTmFtZT1cInpvbmVcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uLmdldCgnem9uZScpPy50b3VjaGVkICYmIHNlY3Rpb24uZ2V0KCd6b25lJyk/LmludmFsaWRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInNlY3Rpb24uZ2V0KCd6b25lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+IFNlY3Rpb24gbmFtZSBpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLiA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3pvbmUnKT8uaGFzRXJyb3IoJ3doaXRlc3BhY2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNlY3Rpb24gbmFtZSBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3pvbmUnKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3pvbmUnKT8uaGFzRXJyb3IoJ25vdFVuaXF1ZScpXCI+IER1cGxpY2F0ZSBzZWN0aW9uIG5hbWUuXHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNoZWx2ZXNcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlBpY2sgdGhlIHNoZWxmKHMpIGZvciBzZWN0aW9uIHt7IGkgKyAxIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duIFtpdGVtc109XCJzaGVsdmVzTGlzdFwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaGVsdmVzXCIgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb24uZ2V0KCdzaGVsdmVzJyk/LnRvdWNoZWQgJiYgc2VjdGlvbi5nZXQoJ3NoZWx2ZXMnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3NoZWx2ZXMnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj4gUGljayB0aGUgc2hlbGYocylcclxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHJvZHVjdEJyYW5kTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+QnJhbmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24gW2l0ZW1zXT1cImJyYW5kc0xpc3RcIiBbaWRGaWVsZF09XCInYnJhbmROYW1lJ1wiIFtuYW1lRmllbGRdPVwiJ2JyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0QnJhbmROYW1lXCIgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udG91Y2hlZCAmJiBzZWN0aW9uLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJzZWN0aW9uLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgcHJvZHVjdCBicmFuZFxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHJvZHVjdENhdGVnb3J5XCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5Qcm9kdWN0IGNhdGVnb3J5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KCdzZWN0aW9uJyArIGkpID8/IFtdXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdENhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC00XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ2JUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgaXNBbGxTaGVsdmVzVXNlZEluU2VjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgPyAnQWxsIHNoZWx2ZXMgYXJlIGFzc2lnbmVkLiBObyBzaGVsdmVzIGF2YWlsYWJsZSBmb3IgbmV3IHNlY3Rpb25zLidcclxuICAgICAgICAgICAgICAgICAgOiAnWW91IGNhbm5vdCBjcmVhdGUgbW9yZSBzZWN0aW9ucyB0aGFuIHRoZSB0b3RhbCBzaGVsdmVzIGF2YWlsYWJsZS4nXHJcbiAgICAgICAgICAgICAgXCIgW2Rpc2FibGVUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkFycmF5Lmxlbmd0aCA8IChmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApICYmICFpc0FsbFNoZWx2ZXNVc2VkSW5TZWN0aW9uc1xyXG4gICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uQXJyYXkubGVuZ3RoID49IChmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApIHx8IGlzQWxsU2hlbHZlc1VzZWRJblNlY3Rpb25zXHJcbiAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LWVuZFwiIChjbGljayk9XCJhZGRTZWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIEFkZCBzZWN0aW9uXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgPCEtLSBTaGVsZiBsZXZlbCB3aXRoaW4gQnJhbmQgTGlicmFyeSAtLT5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNoZWxmTGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc2hlbGYnXCI+XHJcbiAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJzaGVsZlwiIGNsYXNzPVwiYXJyYXktd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzaGVsZiBvZiBzaGVsZkFycmF5Py5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cImFycmF5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gW25nU3R5bGVdPVwieyAnYm9yZGVyLWNvbG9yJzogc2hlbGZDb2xvcnNbaV0uYmcgfVwiIC0tPlxyXG4gICAgICAgICAgICAgIDxoNiBjbGFzcz1cInNoZWxmLXRpdGxlXCI+U0hFTEYge3sgaSArIDEgfX08L2g2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9kdWN0QnJhbmROYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5CcmFuZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93biBbaXRlbXNdPVwiYnJhbmRzTGlzdFwiIFtpZEZpZWxkXT1cIidicmFuZE5hbWUnXCIgW25hbWVGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RCcmFuZE5hbWVcIiBbc2VhcmNoXT1cInRydWVcIj48L211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaGVsZi5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udG91Y2hlZCAmJiBzaGVsZi5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2hlbGYuZ2V0KCdwcm9kdWN0QnJhbmROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBwcm9kdWN0IGJyYW5kXHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9kdWN0Q2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlByb2R1Y3QgY2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24gW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJjYXRlZ29yaWVzTGlzdE1hcC5nZXQoJ3NoZWxmJyArIGkpID8/IFtdXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdENhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgPCEtLSBTcG90IGxldmVsIHdpdGhpbiBCcmFuZCBMaWJyYXJ5IC0tPlxyXG4gICAgICAgIDwhLS0gPGZvcm0gW2Zvcm1Hcm91cF09XCJzcG90TGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc3BvdCdcIj5TcG90IGxldmVsIEZvcm08L2Zvcm0+IC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc3BvdCdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogNTB2aFwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCI4XCIgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTM3IDM3TDMyLjY1IDMyLjY1TTM1IDI3QzM1IDMxLjQxODMgMzEuNDE4MyAzNSAyNyAzNUMyMi41ODE3IDM1IDE5IDMxLjQxODMgMTkgMjdDMTkgMjIuNTgxNyAyMi41ODE3IDE5IDI3IDE5QzMxLjQxODMgMTkgMzUgMjIuNTgxNyAzNSAyN1pcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwibXQtNSBtYi0yXCI+Q29taW5nIHNvb248L2gzPlxyXG4gICAgICAgICAgPHA+VGhpcyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgeWV0LjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIENvbWluZyBzb29uIGZvciBhbGwgbGV2ZWxzIC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRMaWJyYXJ5ID09PSAncHJvZHVjdCdcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY2VudGVyIG10LTVcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTM3IDM3TDMyLjY1IDMyLjY1TTM1IDI3QzM1IDMxLjQxODMgMzEuNDE4MyAzNSAyNyAzNUMyMi41ODE3IDM1IDE5IDMxLjQxODMgMTkgMjdDMTkgMjIuNTgxNyAyMi41ODE3IDE5IDI3IDE5QzMxLjQxODMgMTkgMzUgMjIuNTgxNyAzNSAyN1pcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwibXQtNSBtYi0yXCI+Q29taW5nIHNvb248L2gzPlxyXG4gICAgICAgIDxwPlRoaXMgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIHlldC4gU3RhcnQgYWRkaW5nIHByb2R1Y3QgZnJvbSBicmFuZCBsaWJyYXJ5PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09UmlnaHQgQ29sdW1uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHMgY29sLThcIj5cclxuICAgICAgPGg2PlByb2R1Y3QgYnJhbmQgcGxhY2VtZW50czwvaDY+XHJcblxyXG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY3VzdG9tLXRhYnMgZC1mbGV4IG10LTRcIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwiIWlzRWRpdE1vZGVcIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBmbGV4LWZpbGxcIiAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgWydmaXh0dXJlJywgJ3NlY3Rpb24nLCAnc2hlbGYnLCAnc3BvdCddXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmsgdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkTGV2ZWwgPT09IGxldmVsXCIgKGNsaWNrKT1cInNldFRhYihsZXZlbClcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic2VsZWN0ZWRMZXZlbCA9PT0gbGV2ZWwgPyAncGFnZScgOiBudWxsXCI+XHJcbiAgICAgICAgICAgIHt7IGxldmVsIHwgdGl0bGVjYXNlIH19IGxldmVsXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTGV2ZWwgPT09ICdmaXh0dXJlJ1wiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWxldmVsXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgPCEtLSBWZXJ0aWNhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtZGltZW5zaW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVMZW5ndGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyBkb3duXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEhvcml6b250YWwgYXJyb3dzIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25BcnJvd3M7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGg/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAge3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiAqbmdJZj1cIihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImJyYW5kLWNhdGVnb3J5XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZUxldmVsRm9ybT8uZ2V0KCdwcm9kdWN0QnJhbmROYW1lJyk/LnZhbHVlPy5sZW5ndGhcIiBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBmaXh0dXJlTGV2ZWxGb3JtPy5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBkcmFmdCBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJmaXh0dXJlTGV2ZWxGb3JtPy5nZXQoJ3Byb2R1Y3RDYXRlZ29yeScpPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaXh0dXJlTGV2ZWxGb3JtPy5nZXQoJ3Byb2R1Y3RDYXRlZ29yeScpPy52YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGZpeHR1cmVMZXZlbEZvcm0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpeHR1cmVMZXZlbEZvcm0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZUxldmVsRm9ybT8uZ2V0KCdwcm9kdWN0Q2F0ZWdvcnknKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJzaGVsZkNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoaXRlbS5zaGVsZlR5cGUgPT09J3RyYXknKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0udHJheVJvd3MpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlISArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52bW9ubHktcGxhY2Vob2xkZXJdPVwiaXRlbS5zaGVsZlR5cGUgPT09J3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRMZXZlbCA9PT0gJ3NlY3Rpb24nXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInNlY3Rpb24tbGV2ZWxcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICA8IS0tIFZlcnRpY2FsIGFycm93cyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1kaW1lbnNpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IHVwXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udmFsdWUgfX17eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlTGVuZ3RoPy51bml0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IGRvd25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDwhLS0gSG9yaXpvbnRhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRpbWVuc2lvbkFycm93czsgY29udGV4dDogeyB2YWx1ZTogZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoPy52YWx1ZSB9XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiBpZD1cInNlY3Rpb24tYm9keS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGlkPVwiYm9keS1sb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uQnlab25lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyAkaW5kZXhcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCIgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGRyYWZ0IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uem9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmJyYW5kcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGIgb2YgaXRlbT8uc2VjdGlvbj8uYnJhbmRzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGMgb2YgaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwic2hlbGZDb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBbTk9URV0gYmVsb3cgYmxvY2sgaXMgaWRlbnRpZmllZCBieSB0aGUgZnVuY3Rpb24gdXNpbmcgJ2xhc3RFbGVtZW50JyBnZXR0ZXIgaW4gRE9NIG1hbmlwdWxhdGlvbi4gXHJcbiAgICAgICAgICAgICAgICAgIFNvIGtlZXAgdGhpcyBibG9jayBhbHdheXMgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIG5nRm9yIGxvb3AgLS0+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUhICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnZtb25seS1wbGFjZWhvbGRlcl09XCJpdGVtLnNoZWxmVHlwZSA9PT0ndm1vbmx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgcmlnaHQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc2hlbGYnXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInNoZWxmLWxldmVsXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgPCEtLSBWZXJ0aWNhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtZGltZW5zaW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVMZW5ndGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyBkb3duXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEhvcml6b250YWwgYXJyb3dzIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaW1lbnNpb25BcnJvd3M7IGNvbnRleHQ6IHsgdmFsdWU6IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udmFsdWUgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhbGwtdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgICA8IS0tIEhlYWRlciBibG9jayAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBCb2R5IGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWJsb2NrXCIgKm5nSWY9XCIoZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAwKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInNoZWxmQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArIGlcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBiIG9mIHNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGIgb2Ygc2hlbGZBcnJheS5jb250cm9sc1tpXT8uZ2V0KCdwcm9kdWN0Q2F0ZWdvcnknKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGMgb2Ygc2hlbGZBcnJheS5jb250cm9sc1tpXT8uZ2V0KCdwcm9kdWN0QnJhbmROYW1lJyk/LnZhbHVlOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGMgb2Ygc2hlbGZBcnJheS5jb250cm9sc1tpXT8uZ2V0KCdwcm9kdWN0Q2F0ZWdvcnknKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBbTk9URV0gYmVsb3cgYmxvY2sgaXMgaWRlbnRpZmllZCBieSB0aGUgZnVuY3Rpb24gdXNpbmcgJ2xhc3RFbGVtZW50JyBnZXR0ZXIgaW4gRE9NIG1hbmlwdWxhdGlvbi4gXHJcbiAgICAgICAgICAgICAgICAgIFNvIGtlZXAgdGhpcyBibG9jayBhbHdheXMgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIG5nRm9yIGxvb3AgLS0+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUhICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnZtb25seS1wbGFjZWhvbGRlcl09XCJpdGVtLnNoZWxmVHlwZSA9PT0ndm1vbmx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgcmlnaHQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc3BvdCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY2VudGVyXCJcclxuICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA1MHZoXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjhcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMzcgMzdMMzIuNjUgMzIuNjVNMzUgMjdDMzUgMzEuNDE4MyAzMS40MTgzIDM1IDI3IDM1QzIyLjU4MTcgMzUgMTkgMzEuNDE4MyAxOSAyN0MxOSAyMi41ODE3IDIyLjU4MTcgMTkgMjcgMTlDMzEuNDE4MyAxOSAzNSAyMi41ODE3IDM1IDI3WlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJtdC01IG1iLTJcIj5Db21pbmcgc29vbjwvaDM+XHJcbiAgICAgICAgICA8cD5UaGlzIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSB5ZXQuIFRyeSBGaXh0dXJlLCBTZWN0aW9uLCBhbmQgU2hlbGYgbGV2ZWxzPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgaWQ9XCJzcG90LWxldmVsXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWRpbWVuc2lvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgdXBcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoPy51bml0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IGRvd25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgZGltZW5zaW9uQXJyb3dzO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiAqbmdJZj1cIihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoaXRlbS5zaGVsZlR5cGUgPT09J3NoZWxmJyl7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGYgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0ICBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlISArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0udHJheVJvd3MpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0ICBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvb3Rlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIGxlZnQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciByaWdodC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBpZD1cImZpeHR1cmUtdGVtcGxhdGUtcHJvZHVjdHMtc2tlbGV0b25cIiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBDb21tb24gZGltZW5zaW9uIGFycm93cyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaW1lbnNpb25BcnJvd3MgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpbWVuc2lvblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IGxlZnRcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgIDxzcGFuPnt7IHZhbHVlIH19IHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IHJpZ2h0XCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
853
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcHJvZHVjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS90ZW1wbGF0ZS1wcm9kdWN0cy90ZW1wbGF0ZS1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLXByb2R1Y3RzL3RlbXBsYXRlLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEUsT0FBTyxFQUNMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSw0QkFBNEIsQ0FBQztBQVVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsK0JBQStCLEdBQ2hDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUVBQXFFLENBQUM7Ozs7Ozs7OztBQWdCdkgsTUFBTSxPQUFPLHlCQUF5QjtJQXVDMUI7SUFD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Z3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICBDb21wb25lbnQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtR3JvdXAsXHJcbiAgRm9ybXNNb2R1bGUsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHtcclxuICBOZ2JBY2NvcmRpb25Nb2R1bGUsXHJcbiAgTmdiTW9kYWwsXHJcbiAgTmdiVG9vbHRpcCxcclxufSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQge1xyXG4gIEZpeHR1cmVUZW1wbGF0ZURldGFpbHMsXHJcbiAgU2VjdGlvbkNvbmZpZyxcclxuICBTaGVsZkNvbmZpZyxcclxufSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcGxhbm8tZ2VuZXJhbC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9wbGFuby1kYXRhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnJhbmREZXRhaWxzIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZml4dHVyZS10ZW1wbGF0ZS5kYXRhXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2VuZXJhbFZhbGlkYXRvcixcclxuICByZ2JUb0hleCxcclxuICB1bmlxdWVGaWVsZEluRm9ybUFycmF5VmFsaWRhdG9yLFxyXG59IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcG9wdXBzL2NvbXBsZXRlLWNvbmZpcm1hdGlvbi9jb21wbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE11bHRpc2VsZWN0Q2hpcERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24vbXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93bi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi10ZW1wbGF0ZS1wcm9kdWN0c1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGVtcGxhdGUtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RlbXBsYXRlLXByb2R1Y3RzLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBOZ2JUb29sdGlwLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTmdiQWNjb3JkaW9uTW9kdWxlLFxyXG4gICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUHJvZHVjdHNDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkXHJcbntcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsO1xyXG4gIHNlbGVjdGVkTGV2ZWw6IFwiZml4dHVyZVwiIHwgXCJzZWN0aW9uXCIgfCBcInNoZWxmXCIgfCBcInNwb3RcIiB8IHN0cmluZyA9IFwiZml4dHVyZVwiO1xyXG5cclxuICBzZWxlY3RlZExpYnJhcnk6IFwicHJvZHVjdFwiIHwgXCJicmFuZFwiIHwgc3RyaW5nID0gXCJicmFuZFwiO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGJyYW5kc0xpc3Q6IEJyYW5kRGV0YWlsc1tdID0gW107XHJcbiAgY2F0ZWdvcmllc0xpc3Q6IERyb3Bkb3duSUZbXSA9IFtdO1xyXG4gIGNhdGVnb3JpZXNMaXN0TWFwOiBNYXA8c3RyaW5nLCBEcm9wZG93bklGW10+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBzaGVsdmVzTGlzdDogRHJvcGRvd25JRltdO1xyXG5cclxuICBmaXh0dXJlTGV2ZWxGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VjdGlvbkxldmVsRm9ybTogRm9ybUdyb3VwO1xyXG4gIHNoZWxmTGV2ZWxGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc3BvdExldmVsRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBzaGVsZkNvbG9ycyA9IFNIRUxGX0NPTE9SUztcclxuXHJcbiAgc2VjdGlvbkJ5Wm9uZXM6IHtcclxuICAgIHpvbmU6IHN0cmluZztcclxuICAgIHNlY3Rpb246IHtcclxuICAgICAgYnJhbmRzOiBzdHJpbmdbXTtcclxuICAgICAgY2F0ZWdvcmllczogc3RyaW5nW107XHJcbiAgICAgIHNoZWx2ZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpW107XHJcbiAgICB9O1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGlzVmlld3BvcnRJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBwczogUGxhbm9EYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBzLmJyYW5kc0xpc3RcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLmJyYW5kc0xpc3QgPSBlKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMucHMuZmV0Y2hCcmFuZHNMaXN0KHRoaXMuY2xpZW50SWQpO1xyXG5cclxuICAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHNcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgICAgIGZpbHRlcigoZGF0YSkgPT4gIWRhdGE/Lmlnbm9yZVVwZGF0ZSksXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFnZUxvYWRpbmcpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hlbHZlc0xpc3QgPVxyXG4gICAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke2U/LnNoZWxmVHlwZT8udG9VcHBlckNhc2UoKX0gJHtlPy5zaGVsZk51bWJlcn1gLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogYCR7ZT8uc2hlbGZUeXBlfSAke2U/LnNoZWxmTnVtYmVyfWAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pID8/IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJCeUxldmVsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZpeHR1cmVMZXZlbEZvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0U2VjdGlvbkxldmVsRm9ybSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRTaGVsZkxldmVsRm9ybSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRTcG90TGV2ZWxGb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlblRvQWxsRm9ybUNoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXBcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzRWRpdE1vZGUgPSBwYXJhbXMuZ2V0KFwiaXNFZGl0XCIpID09PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hlbGZMZXZlbEZvcm0/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zcG90TGV2ZWxGb3JtPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZml4dHVyZUxldmVsRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNoZWxmTGV2ZWxGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNwb3RMZXZlbEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVGb3JtJFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5zdWJtaXRGb3JtKGRhdGEpKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJQcm9kdWN0c1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkZpeHR1cmUgVGVtcGxhdGVcIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNWaWV3cG9ydEluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWaWV3cG9ydEluaXRpYWxpemVkID0gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJCeUxldmVsKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwpIHtcclxuICAgICAgY2FzZSBcIkwxXCI6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExldmVsID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMMlwiOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZXZlbCA9IFwic2hlbGZcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkwzXCI6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExldmVsID0gXCJzZWN0aW9uXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMNFwiOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZXZlbCA9IFwic3BvdFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IGxldmVsOiB0aGlzLnNlbGVjdGVkTGV2ZWwgfSxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiLFxyXG4gICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExldmVsQnlUYWIoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMZXZlbCkge1xyXG4gICAgICBjYXNlIFwiZml4dHVyZVwiOlxyXG4gICAgICAgIHJldHVybiBcIkwxXCI7XHJcbiAgICAgIGNhc2UgXCJzZWN0aW9uXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiTDNcIjtcclxuICAgICAgY2FzZSBcInNoZWxmXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiTDJcIjtcclxuICAgICAgY2FzZSBcInNwb3RcIjpcclxuICAgICAgICByZXR1cm4gXCJMNFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEZpeHR1cmVMZXZlbEZvcm0oKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW3RoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdEJyYW5kTmFtZV0sXHJcbiAgICAgIHByb2R1Y3RDYXRlZ29yeTogW3RoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdENhdGVnb3J5XSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBjb25zdCBjYXRlZ29yaWVzID1cclxuICAgICAgICB0aGlzLmJyYW5kc0xpc3RcclxuICAgICAgICAgIC5maW5kKChiKSA9PiBiLmJyYW5kTmFtZSA9PT0gZSlcclxuICAgICAgICAgID8uY2F0ZWdvcnk/Lm1hcCgoYykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogYywgdmFsdWU6IGMgfTtcclxuICAgICAgICAgIH0pID8/IFtdO1xyXG4gICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0ID0gWy4uLnRoaXMuY2F0ZWdvcmllc0xpc3QsIC4uLmNhdGVnb3JpZXNdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlTGV2ZWxGb3JtXHJcbiAgICAgIC5nZXQoXCJwcm9kdWN0QnJhbmROYW1lXCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2OiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3QgPSBbXTtcclxuICAgICAgICB2LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgICAgICB0aGlzLmJyYW5kc0xpc3RcclxuICAgICAgICAgICAgICAuZmluZCgoYikgPT4gYi5icmFuZE5hbWUgPT09IGUpXHJcbiAgICAgICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbDogYywgdmFsdWU6IGMgfTtcclxuICAgICAgICAgICAgICB9KSA/PyBbXTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3QgPSBbLi4udGhpcy5jYXRlZ29yaWVzTGlzdCwgLi4uY2F0ZWdvcmllc107XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbGlkQ2F0ZWdvcnlJZHMgPSB0aGlzLmNhdGVnb3JpZXNMaXN0Py5tYXAoKGMpID0+IGMudmFsdWUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXRTZWxlY3Rpb24gPVxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlTGV2ZWxGb3JtPy5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIik/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhdFNlbGVjdGlvbiA9IGN1cnJlbnRDYXRTZWxlY3Rpb24uZmlsdGVyKChpZDogYW55KSA9PlxyXG4gICAgICAgICAgdmFsaWRDYXRlZ29yeUlkcy5pbmNsdWRlcyhpZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm1cclxuICAgICAgICAgID8uZ2V0KFwicHJvZHVjdENhdGVnb3J5XCIpXHJcbiAgICAgICAgICA/LnNldFZhbHVlKG5ld0NhdFNlbGVjdGlvbiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0/LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGMpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHRoaXMuZml4dHVyZUxldmVsRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0U2VjdGlvbkxldmVsRm9ybSgpIHtcclxuICAgIHRoaXMuc2VjdGlvbkxldmVsRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBzZWN0aW9uOiB0aGlzLmZiLmFycmF5KFtdLCB1bmlxdWVGaWVsZEluRm9ybUFycmF5VmFsaWRhdG9yKFwiem9uZVwiKSksXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9uR3JvdXBBcnJheSA9IHRoaXMuZ3JvdXBTaGVsdmVzQnlab25lKFxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnID8/IFtdLFxyXG4gICAgKTtcclxuXHJcbiAgICBzZWN0aW9uR3JvdXBBcnJheS5mb3JFYWNoKChzLCBpKSA9PiB0aGlzLmFkZFNlY3Rpb24ocywgaSkpO1xyXG5cclxuICAgIGlmIChzZWN0aW9uR3JvdXBBcnJheS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5hZGRTZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXMgPSBzZWN0aW9uR3JvdXBBcnJheVxyXG4gICAgICAubWFwKChzZSkgPT4gc2U/LnNoZWx2ZXM/Lm1hcCgocykgPT4gcykpXHJcbiAgICAgIC5mbGF0KCk7XHJcblxyXG4gICAgdGhpcy5zaGVsdmVzTGlzdCA9IHRoaXMuc2hlbHZlc0xpc3QubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICBkaXNhYmxlZDogYWxsU2VjdGlvblNoZWx2ZXM/LmluY2x1ZGVzKGAke2l0ZW0/LnZhbHVlfWApLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQXJyYXkudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoczogU2VjdGlvbkNvbmZpZ1tdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXMgPSBzXHJcbiAgICAgICAgICAubWFwKChzZSkgPT4gc2U/LnNoZWx2ZXM/Lm1hcCgocykgPT4gcykpXHJcbiAgICAgICAgICAuZmxhdCgpO1xyXG4gICAgICAgIHRoaXMuc2hlbHZlc0xpc3QgPSB0aGlzLnNoZWx2ZXNMaXN0Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGFsbFNlY3Rpb25TaGVsdmVzPy5pbmNsdWRlcyhgJHtpdGVtPy52YWx1ZX1gKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSB0aGlzLnNlY3Rpb25MZXZlbEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWxsU2hlbHZlc1VzZWRJblNlY3Rpb25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hlbHZlc0xpc3QuZmlsdGVyKChzKSA9PiAhcy5kaXNhYmxlZCkubGVuZ3RoIDw9IDA7XHJcbiAgfVxyXG5cclxuICBpbml0U2hlbGZMZXZlbEZvcm0oKSB7XHJcbiAgICB0aGlzLnNoZWxmTGV2ZWxGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNoZWxmOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LmZvckVhY2goKGUsIGkpID0+XHJcbiAgICAgIHRoaXMuYWRkU2hlbGYoZSwgaSksXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSB0aGlzLnNoZWxmTGV2ZWxGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGluaXRTcG90TGV2ZWxGb3JtKCkge1xyXG4gICAgdGhpcy5zcG90TGV2ZWxGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGJyYW5kOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHByb2R1Y3RDYXRlZ29yeTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHRoaXMuc3BvdExldmVsRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWIodGFiOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRMZXZlbCA9IHRhYjtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICBxdWVyeVBhcmFtczogeyBsZXZlbDogdGhpcy5zZWxlY3RlZExldmVsIH0sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIixcclxuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlc1RvTG9jYWwoKTtcclxuICB9XHJcblxyXG4gIGdldCBzaGVsZkFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVsZkxldmVsRm9ybS5nZXQoXCJzaGVsZlwiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VjdGlvbkFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9uTGV2ZWxGb3JtLmdldChcInNlY3Rpb25cIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgYWRkU2VjdGlvbihcclxuICAgIHNlY3Rpb24/OiBTZWN0aW9uQ29uZmlnLFxyXG4gICAgaTogbnVtYmVyID0gdGhpcy5zZWN0aW9uQXJyYXkuY29udHJvbHMubGVuZ3RoLFxyXG4gICkge1xyXG4gICAgY29uc3Qgc2VjdGlvbkdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHpvbmU6IFtzZWN0aW9uPy56b25lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgZ2VuZXJhbFZhbGlkYXRvcigpXV0sXHJcbiAgICAgIHNoZWx2ZXM6IFtzZWN0aW9uPy5zaGVsdmVzID8/IFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW3NlY3Rpb24/LnByb2R1Y3RCcmFuZE5hbWVdLFxyXG4gICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtzZWN0aW9uPy5wcm9kdWN0Q2F0ZWdvcnkgPz8gXCJcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb25BcnJheS5wdXNoKHNlY3Rpb25Hcm91cCk7XHJcblxyXG4gICAgY29uc3QgbWFwSWQgPSBgc2VjdGlvbiR7aX1gO1xyXG4gICAgc2VjdGlvbj8ucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgIHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgICAgLmZpbmQoKGIpID0+IGIuYnJhbmROYW1lID09PSBlKVxyXG4gICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLCB2YWx1ZTogYyB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuc2V0KG1hcElkLCBbXHJcbiAgICAgICAgLi4uKHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KG1hcElkKSA/PyBbXSksXHJcbiAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwU2VjdGlvbkxpc3RlbmVyKHNlY3Rpb25Hcm91cCwgbWFwSWQpO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hlbGYoc2hlbGY6IFNoZWxmQ29uZmlnLCBpOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNoZWxmR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW3NoZWxmPy5wcm9kdWN0QnJhbmROYW1lXSxcclxuICAgICAgcHJvZHVjdENhdGVnb3J5OiBbc2hlbGY/LnByb2R1Y3RDYXRlZ29yeSA/PyBcIlwiXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2hlbGZBcnJheS5wdXNoKHNoZWxmR3JvdXApO1xyXG5cclxuICAgIGNvbnN0IG1hcElkID0gYHNoZWxmJHtpfWA7XHJcbiAgICBzaGVsZj8ucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgIHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgICAgLmZpbmQoKGIpID0+IGIuYnJhbmROYW1lID09PSBlKVxyXG4gICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLCB2YWx1ZTogYyB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuc2V0KG1hcElkLCBbXHJcbiAgICAgICAgLi4uKHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KG1hcElkKSA/PyBbXSksXHJcbiAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwU2hlbGZMaXN0ZW5lcihzaGVsZkdyb3VwLCBtYXBJZCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBTaGVsZkxpc3RlbmVyKHNoZWxmR3JvdXA6IEZvcm1Hcm91cCwgaTogc3RyaW5nKSB7XHJcbiAgICBzaGVsZkdyb3VwXHJcbiAgICAgIC5nZXQoXCJwcm9kdWN0QnJhbmROYW1lXCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChicmFuZHMpID0+IHtcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TWFwLnNldChpLCBbXSk7XHJcbiAgICAgICAgYnJhbmRzLmZvckVhY2goKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgICAgICAgIC5maW5kKChiKSA9PiBiLmJyYW5kTmFtZSA9PT0gZSlcclxuICAgICAgICAgICAgICA/LmNhdGVnb3J5Py5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLCB2YWx1ZTogYyB9O1xyXG4gICAgICAgICAgICAgIH0pID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdE1hcC5zZXQoaSwgW1xyXG4gICAgICAgICAgICAuLi4odGhpcy5jYXRlZ29yaWVzTGlzdE1hcC5nZXQoaSkgPz8gW10pLFxyXG4gICAgICAgICAgICAuLi5jYXRlZ29yaWVzLFxyXG4gICAgICAgICAgXSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGNhdGVnb3J5IHNlbGVjdGlvbiBpZiBwcmV2aW91c2x5IHNlbGVjdGVkIGNhdGVnb3JpZXMgYXJlIG5vIGxvbmdlciB2YWxpZFxyXG4gICAgICAgIGNvbnN0IHZhbGlkQ2F0ZWdvcnlJZHMgPVxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdE1hcD8uZ2V0KGkpPy5tYXAoKGMpID0+IGMudmFsdWUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXRTZWxlY3Rpb24gPVxyXG4gICAgICAgICAgc2hlbGZHcm91cC5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIik/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhdFNlbGVjdGlvbiA9IGN1cnJlbnRDYXRTZWxlY3Rpb24uZmlsdGVyKChpZDogYW55KSA9PlxyXG4gICAgICAgICAgdmFsaWRDYXRlZ29yeUlkcy5pbmNsdWRlcyhpZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzaGVsZkdyb3VwXHJcbiAgICAgICAgICAuZ2V0KFwicHJvZHVjdENhdGVnb3J5XCIpXHJcbiAgICAgICAgICA/LnNldFZhbHVlKG5ld0NhdFNlbGVjdGlvbiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2hlbGZHcm91cFxyXG4gICAgICAuZ2V0KFwicHJvZHVjdENhdGVnb3J5XCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldHVwU2VjdGlvbkxpc3RlbmVyKHNlY3Rpb25Hcm91cDogRm9ybUdyb3VwLCBpOiBzdHJpbmcpIHtcclxuICAgIHNlY3Rpb25Hcm91cFxyXG4gICAgICAuZ2V0KFwicHJvZHVjdEJyYW5kTmFtZVwiKVxyXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoYnJhbmRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdE1hcC5zZXQoaSwgW10pO1xyXG4gICAgICAgIGJyYW5kcy5mb3JFYWNoKChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPVxyXG4gICAgICAgICAgICB0aGlzLmJyYW5kc0xpc3RcclxuICAgICAgICAgICAgICAuZmluZCgoYikgPT4gYi5icmFuZE5hbWUgPT09IGUpXHJcbiAgICAgICAgICAgICAgPy5jYXRlZ29yeT8ubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbDogYywgdmFsdWU6IGMgfTtcclxuICAgICAgICAgICAgICB9KSA/PyBbXTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuc2V0KGksIFtcclxuICAgICAgICAgICAgLi4uKHRoaXMuY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KGkpID8/IFtdKSxcclxuICAgICAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBjYXRlZ29yeSBzZWxlY3Rpb24gaWYgcHJldmlvdXNseSBzZWxlY3RlZCBjYXRlZ29yaWVzIGFyZSBubyBsb25nZXIgdmFsaWRcclxuICAgICAgICBjb25zdCB2YWxpZENhdGVnb3J5SWRzID1cclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RNYXA/LmdldChpKT8ubWFwKChjKSA9PiBjLnZhbHVlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q2F0U2VsZWN0aW9uID1cclxuICAgICAgICAgIHNlY3Rpb25Hcm91cC5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIik/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhdFNlbGVjdGlvbiA9IGN1cnJlbnRDYXRTZWxlY3Rpb24uZmlsdGVyKChpZDogYW55KSA9PlxyXG4gICAgICAgICAgdmFsaWRDYXRlZ29yeUlkcy5pbmNsdWRlcyhpZCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZWN0aW9uR3JvdXBcclxuICAgICAgICAgIC5nZXQoXCJwcm9kdWN0Q2F0ZWdvcnlcIilcclxuICAgICAgICAgID8uc2V0VmFsdWUobmV3Q2F0U2VsZWN0aW9uLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzZWN0aW9uR3JvdXBcclxuICAgICAgLmdldChcInByb2R1Y3RDYXRlZ29yeVwiKVxyXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGRDb2xvclRvU2hlbHZlcygpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc2VjdGlvbkdyb3VwXHJcbiAgICAgIC5nZXQoXCJzaGVsdmVzXCIpXHJcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZENvbG9yVG9TaGVsdmVzKCkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzZWN0aW9uR3JvdXBcclxuICAgICAgLmdldChcInpvbmVcIilcclxuICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuYWRkQ29sb3JUb1NoZWx2ZXMoKSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWN0aW9uKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLnNlY3Rpb25BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRkQ29sb3JUb1NoZWx2ZXMoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZvcm1CeUxldmVsKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGV2ZWwpIHtcclxuICAgICAgY2FzZSBcImZpeHR1cmVcIjpcclxuICAgICAgICByZXR1cm4gdGhpcy5maXh0dXJlTGV2ZWxGb3JtO1xyXG4gICAgICBjYXNlIFwic2VjdGlvblwiOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25MZXZlbEZvcm07XHJcbiAgICAgIGNhc2UgXCJzaGVsZlwiOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNoZWxmTGV2ZWxGb3JtO1xyXG4gICAgICBjYXNlIFwic3BvdFwiOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNwb3RMZXZlbEZvcm07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZml4dHVyZUxldmVsRm9ybTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbG9yVG9TaGVsdmVzKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbGV2ZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLnNlbGVjdGVkTGV2ZWx9LWxldmVsYCk7XHJcbiAgICBpZiAoIWxldmVsKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBib2RpZXMgPSBsZXZlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIi5ib2R5LWJsb2NrXCIpO1xyXG4gICAgaWYgKCFib2RpZXMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGJvZGllcy5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkRpdnMgPSBib2R5Q2hpbGRyZW5cclxuICAgICAgLm1hcCgoZGl2KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGFzdCA9IGRpdi5sYXN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgIHJldHVybiBsYXN0ICYmIGxhc3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImRpdlwiXHJcbiAgICAgICAgICA/IChsYXN0IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChkKTogZCBpcyBIVE1MRWxlbWVudCA9PiAhIWQpO1xyXG5cclxuICAgIGlmICghc2hlbGZEaXZzLmxlbmd0aCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRkQ29sb3JUb1NoZWx2ZXMoKSwgMTAwKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZExldmVsKSB7XHJcbiAgICAgIGNhc2UgXCJzZWN0aW9uXCI6IHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2cyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25BcnJheSA9XHJcbiAgICAgICAgICAodGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy52YWx1ZT8uc2VjdGlvbiBhcyBTZWN0aW9uQ29uZmlnW10pID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGFsbFNlY3Rpb25TaGVsdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBzZWN0aW9uQXJyYXkuZm9yRWFjaCgoc2UsIGkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmSWRzID1cclxuICAgICAgICAgICAgc2Uuc2hlbHZlcz8ubWFwKChzaCkgPT4gc2gucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkpID8/IFtdO1xyXG4gICAgICAgICAgYWxsU2VjdGlvblNoZWx2ZXMucHVzaCguLi5zaGVsZklkcyk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VjRGl2cyA9IHNoZWxmRGl2cy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgIHNoZWxmSWRzLmluY2x1ZGVzKGl0ZW0uaWQpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHNlY0RpdnMuZm9yRWFjaChcclxuICAgICAgICAgICAgKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmcpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgdW5hc3NpZ25lZFNoZWx2ZXMgPSBzaGVsZkRpdnMuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VjdGlvbi1ib2R5LWJsb2NrXCIpO1xyXG4gICAgICAgIGlmIChzZWN0aW9uQm9keSkge1xyXG4gICAgICAgICAgbGV0IHNlY3Rpb25Hcm91cEhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbldpZHRoID1cclxuICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5vZmZzZXRXaWR0aCA/PyAzNDU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGJjID0gc2VjdGlvbkJvZHkucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0JnID0gcmdiVG9IZXgoXHJcbiAgICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZWxmQ29sb3JzLmZpbmQoKGMpID0+IGMuYmcgPT09IHNlY0JnKSA/P1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZWxmQ29sb3JzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3IuYm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZmZmXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNYID0gKGN1cnJlbnRTZWN0aW9uV2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNZID1cclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRTZWN0aW9uSGVpZ2h0IC0gYmMub2Zmc2V0SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYfXB4LCAke2JjWX1weClgO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodCArPSBjdXJyZW50U2VjdGlvbkhlaWdodDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBcInNoZWxmXCI6XHJcbiAgICAgICAgYm9keUNoaWxkcmVuLmZvckVhY2goKGRpdiwgaSkgPT4ge1xyXG4gICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmMgPSBkaXYucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYCNicmFuZC1jYXRlZ29yeSR7aX1gKTtcclxuICAgICAgICAgIGlmIChiYykge1xyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJvcmRlcjtcclxuICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS50ZXh0Qmc7XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1h9cHgsICR7YmNZfXB4KWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiZml4dHVyZVwiOlxyXG4gICAgICBjYXNlIFwic3BvdFwiOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKFxyXG4gICAgICAgICAgKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmcpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZXF1ZW50aWFsU2VjdGlvbihzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwpW10pIHtcclxuICAgIGNvbnN0IHNoZWxmQ29uZmlnczogU2hlbGZDb25maWdbXSA9IHRoaXMuYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKFxyXG4gICAgICB0aGlzLnNlY3Rpb25MZXZlbEZvcm0/LnZhbHVlPy5zZWN0aW9uIGFzIFNlY3Rpb25Db25maWdbXSxcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdTZWN0aW9uQnlab25lcyA9IFtdO1xyXG5cclxuICAgIGxldCBwWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IHMgb2Ygc2hlbGZDb25maWdzKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBzLnpvbmUgfHwgXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZJZCA9IGAke3Muc2hlbGZUeXBlfSR7cy5zaGVsZk51bWJlcn1gO1xyXG4gICAgICBjb25zdCBzaGVsZkRpdiA9IHNoZWxmRGl2cy5maW5kKChkKSA9PiBkPy5pZCA9PT0gc2hlbGZJZCk7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW3NoZWxmRGl2XSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcFpvbmUgPSB6b25lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbHZlcy5wdXNoKHNoZWxmSWQpO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbGZEaXZzLnB1c2goc2hlbGZEaXYpO1xyXG5cclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbGxTaGVsZkFkZFRvU2VjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnNoZWx2ZXNMaXN0LmV2ZXJ5KChzKSA9PiBzLmRpc2FibGVkKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRQYXlsb2FkQnlMZXZlbChzdGF0dXM6IHN0cmluZyk6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm1CeUxldmVsKCk7XHJcbiAgICBjb25zdCBsZXZlbCA9IHRoaXMuZ2V0TGV2ZWxCeVRhYigpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgZm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICh0aGlzLnNlbGVjdGVkTGV2ZWwgPT09IFwic2VjdGlvblwiICYmICF0aGlzLmlzQWxsU2hlbGZBZGRUb1NlY3Rpb24pXHJcbiAgICApIHtcclxuICAgICAgZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgICBjb25zdCBlcnJvck1zZyA9IGZvcm0uaW52YWxpZFxyXG4gICAgICAgID8gXCJGb3JtIGlzIGludmFsaWRcIlxyXG4gICAgICAgIDogXCJBc3NpZ24gYWxsIHNoZWx2ZXMgdG8gYSBzZWN0aW9uXCI7XHJcblxyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyb3JNc2cpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMZXZlbCkge1xyXG4gICAgICBjYXNlIFwiZml4dHVyZVwiOiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBTaGVsZkNvbmZpZ1tdID1cclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgocywgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnMsXHJcbiAgICAgICAgICAgICAgem9uZTogXCJcIixcclxuICAgICAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbXSxcclxuICAgICAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMhLFxyXG4gICAgICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgICAgIC8vIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbLi4uZm9ybT8udmFsdWUucHJvZHVjdEJyYW5kTmFtZV0sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFsuLi5mb3JtPy52YWx1ZS5wcm9kdWN0Q2F0ZWdvcnldLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcInNlY3Rpb25cIjoge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZzogU2hlbGZDb25maWdbXSA9IHRoaXMuYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKFxyXG4gICAgICAgICAgdGhpcy5zZWN0aW9uTGV2ZWxGb3JtPy52YWx1ZT8uc2VjdGlvbiBhcyBTZWN0aW9uQ29uZmlnW10sXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzISxcclxuICAgICAgICAgIGZpeHR1cmVOYW1lOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVOYW1lPy50cmltKCksXHJcbiAgICAgICAgICAvLyBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgIGlzRWRpdGVkOiB0cnVlLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogW10sXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcInNoZWxmXCI6IHtcclxuICAgICAgICBjb25zdCBjb25maWc6IFNoZWxmQ29uZmlnW10gPVxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubWFwKChzLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4ucyxcclxuICAgICAgICAgICAgICB6b25lOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IGZvcm0/LnZhbHVlPy5zaGVsZltpXT8ucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IGZvcm0/LnZhbHVlPy5zaGVsZltpXT8ucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSkgPz8gW107XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMhLFxyXG4gICAgICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgICAgIC8vIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBsZXZlbCxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBbXSxcclxuICAgICAgICAgIHNoZWxmQ29uZmlnOiBjb25maWcsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwic3BvdFwiOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMhLFxyXG4gICAgICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgICAgIC8vIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogW10sXHJcbiAgICAgICAgICBpc0VkaXRlZDogdHJ1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUNvbXBsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBcIkNvbXBsZXRlIHRlbXBsYXRlXCI7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgIFwiVGVtcGxhdGUgaXMgbm93IHJlYWR5IHRvIGFzc2lnbiBpdCB0byB0aGUgc3RvcmUgYnV0IHN0aWxsIHlvdSBjYW4gY29tZSBhZ2FpbiBhbnkgdGltZSBhbmQgZWRpdCB0aGlzIHRlbXBsYXRlLlwiO1xyXG4gICAgLy8gbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2Uubm90ZSA9ICdZb3UgY2FuXFwndCBlZGl0IGl0IG9uY2UgYXNzaWduZWQgdG8gdGhlIHRlbXBsYXRlLic7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN1Ym1pdEZvcm0oZGF0YTogeyBzdGF0dXM6IHN0cmluZzsgZ29CYWNrOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGV0ID0gdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVFcnJvclRhYnM7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQ6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsID0gdGhpcy5nZXRQYXlsb2FkQnlMZXZlbChcclxuICAgICAgZGF0YS5zdGF0dXMsXHJcbiAgICApO1xyXG4gICAgaWYgKCFwYXlsb2FkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGV0LmJhc2ljRGV0YWlscyB8fCBldC5wcm9kdWN0cyB8fCBldC52bXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIilcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtQ29tcGxldGlvbigpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHMuc3VibWl0Rml4dHVyZVRlbXBsYXRlRGV0YWlscyhcclxuICAgICAgeyAuLi5wYXlsb2FkLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCkgfSxcclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLl9pZCEsXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgaXNFZGl0OiBmYWxzZSB9LFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIixcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiRml4dHVyZSB0ZW1wbGF0ZSBkZXRhaWxzIHVwZGF0ZWQuXCIpO1xyXG4gICAgICBpZiAoZGF0YS5nb0JhY2spIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlc1wiXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIikge1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYXNzaWduLXN0b3Jlc1wiXSwge1xyXG4gICAgICAgIC8vICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJwcmVzZXJ2ZVwiLFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBncm91cFNoZWx2ZXNCeVpvbmUoaW5wdXQ6IFNoZWxmQ29uZmlnW10pOiBTZWN0aW9uQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgem9uZU1hcDogeyBbem9uZTogc3RyaW5nXTogU2VjdGlvbkNvbmZpZyB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBpdGVtPy56b25lID8/IFwiXCI7XHJcbiAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtpdGVtLnNoZWxmVHlwZX0gJHtpdGVtLnNoZWxmTnVtYmVyfWA7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcblxyXG4gICAgICBpZiAoIXpvbmVNYXBbem9uZV0pIHtcclxuICAgICAgICB6b25lTWFwW3pvbmVdID0ge1xyXG4gICAgICAgICAgc2hlbHZlczogW10sXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOlxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0QnJhbmROYW1lXHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTpcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdENhdGVnb3J5XHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHpvbmU6IHpvbmUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgem9uZU1hcFt6b25lXT8uc2hlbHZlcz8ucHVzaChzaGVsZkxhYmVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh6b25lTWFwKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2VjdGlvbkNvbmZpZ1RvU2hlbHZlcyhzZWN0aW9uczogU2VjdGlvbkNvbmZpZ1tdKTogU2hlbGZDb25maWdbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICBQaWNrPFNlY3Rpb25Db25maWcsIFwiem9uZVwiIHwgXCJwcm9kdWN0QnJhbmROYW1lXCIgfCBcInByb2R1Y3RDYXRlZ29yeVwiPlxyXG4gICAgPigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmTGFiZWwgb2Ygc2VjdGlvbi5zaGVsdmVzISkge1xyXG4gICAgICAgIHNlY3Rpb25NYXAuc2V0KHNoZWxmTGFiZWwsIHtcclxuICAgICAgICAgIHpvbmU6IHNlY3Rpb24uem9uZSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IHNlY3Rpb24ucHJvZHVjdEJyYW5kTmFtZSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogc2VjdGlvbi5wcm9kdWN0Q2F0ZWdvcnksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBcHBseSBvdmVycmlkZXMgdG8gbWF0Y2hpbmcgc2hlbHZlc1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubWFwKChzaGVsZikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtzaGVsZi5zaGVsZlR5cGV9ICR7c2hlbGYuc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IHNlY3Rpb25NYXAuZ2V0KHNoZWxmTGFiZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uc2hlbGYsXHJcbiAgICAgICAgICB6b25lOiBvdmVycmlkZT8uem9uZSB8fCBcIlwiLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogb3ZlcnJpZGU/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IG92ZXJyaWRlPy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSkgPz8gW11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlblRvQWxsRm9ybUNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUNoYW5nZXNUb0xvY2FsKCk7XHJcblxyXG4gICAgY29uc3QgZm9ybXNUb1dhdGNoID0gW1xyXG4gICAgICB0aGlzLmZpeHR1cmVMZXZlbEZvcm0sXHJcbiAgICAgIHRoaXMuc2VjdGlvbkxldmVsRm9ybSxcclxuICAgICAgdGhpcy5zaGVsZkxldmVsRm9ybSxcclxuICAgICAgdGhpcy5zcG90TGV2ZWxGb3JtLFxyXG4gICAgXTtcclxuXHJcbiAgICBmb3Jtc1RvV2F0Y2guZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICBpZiAoIWZvcm0pIHJldHVybjtcclxuICAgICAgaWYgKHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzLnByb2R1Y3RzKSBmb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgZm9ybS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VzVG9Mb2NhbCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGFuZ2VzVG9Mb2NhbCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm1CeUxldmVsKCk7XHJcbiAgICBjb25zdCB2YWwgPSBmb3JtLnZhbHVlO1xyXG5cclxuICAgIGxldCBwYXlsb2FkOiBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzIHwgbnVsbDtcclxuXHJcbiAgICBjb25zdCBsZXZlbCA9IHRoaXMuZ2V0TGV2ZWxCeVRhYigpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZExldmVsKSB7XHJcbiAgICAgIGNhc2UgXCJmaXh0dXJlXCI6IHtcclxuICAgICAgICBjb25zdCBjb25maWc6IFNoZWxmQ29uZmlnW10gPVxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubWFwKChzLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4ucyxcclxuICAgICAgICAgICAgICB6b25lOiBcIlwiLFxyXG4gICAgICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IFtdLFxyXG4gICAgICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogW10sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KSA/PyBbXTtcclxuXHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyEsXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogbGV2ZWwsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBbLi4udmFsLnByb2R1Y3RCcmFuZE5hbWVdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBbLi4udmFsLnByb2R1Y3RDYXRlZ29yeV0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwic2VjdGlvblwiOiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBTaGVsZkNvbmZpZ1tdID0gdGhpcy5hcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoXHJcbiAgICAgICAgICB2YWwuc2VjdGlvbiBhcyBTZWN0aW9uQ29uZmlnW10sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzISxcclxuICAgICAgICAgIHByb2R1Y3RSZXNvbHV0aW9uTGV2ZWw6IGxldmVsLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgICAgc2hlbGZDb25maWc6IGNvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgXCJzaGVsZlwiOiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBTaGVsZkNvbmZpZ1tdID1cclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgocywgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnMsXHJcbiAgICAgICAgICAgICAgem9uZTogXCJcIixcclxuICAgICAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiB2YWwuc2hlbGZbaV0/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiB2YWwuc2hlbGZbaV0/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pID8/IFtdO1xyXG5cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzISxcclxuICAgICAgICAgIHByb2R1Y3RSZXNvbHV0aW9uTGV2ZWw6IGxldmVsLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IFtdLFxyXG4gICAgICAgICAgc2hlbGZDb25maWc6IGNvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgXCJzcG90XCI6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyEsXHJcbiAgICAgICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBsZXZlbCxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5uZXh0KHsgLi4ucGF5bG9hZCwgaWdub3JlVXBkYXRlOiB0cnVlIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy5wcm9kdWN0cyA9XHJcbiAgICAgICAgZm9ybS5pbnZhbGlkIHx8XHJcbiAgICAgICAgKHRoaXMuc2VsZWN0ZWRMZXZlbCA9PT0gXCJzZWN0aW9uXCIgJiYgIXRoaXMuaXNBbGxTaGVsZkFkZFRvU2VjdGlvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFuVXBFbXB0eVNlY3Rpb25zKCkge1xyXG4gICAgY29uc3Qgc2hlbGZDb25maWdzOiBTaGVsZkNvbmZpZ1tdID0gdGhpcy5hcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoXHJcbiAgICAgIHRoaXMuc2VjdGlvbkxldmVsRm9ybT8udmFsdWU/LnNlY3Rpb24gYXMgU2VjdGlvbkNvbmZpZ1tdLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IG5ld1NlY3Rpb25CeVpvbmVzID0gW107XHJcblxyXG4gICAgbGV0IHBab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgcyBvZiBzaGVsZkNvbmZpZ3MpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBab25lID0gem9uZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBzZWN0aW9uID0gbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbjtcclxuXHJcbiAgICAgICAgc2VjdGlvbi5zaGVsdmVzLnB1c2goc2hlbGZJZCk7XHJcbiAgICAgICAgc2VjdGlvbi5zaGVsZkRpdnMgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY2xlYW5VcEVtcHR5U2VjdGlvbnMoKTtcclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5uZXh0KHtcclxuICAgICAgLi4udGhpcy5wcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLnZhbHVlLFxyXG4gICAgICBpZ25vcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwiZml4dHVyZS10ZW1wbGF0ZS1wcm9kdWN0c1wiICpuZ0lmPVwiIWlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGdhcC00IGJ1aWxkZXJcIj5cclxuICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09TGVmdCBDb2x1bW49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29scyBjb2xcIj5cclxuICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzIGN1c3RvbS10YWJzIGQtZmxleFwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCIhaXNFZGl0TW9kZVwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGZsZXgtZmlsbFwiICpuZ0Zvcj1cImxldCBsaWJyYXJ5IG9mIFsnYnJhbmQnLCAncHJvZHVjdCddXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmsgdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkTGlicmFyeSA9PT0gbGlicmFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZExpYnJhcnkgPSBsaWJyYXJ5XCIgW2F0dHIuYXJpYS1jdXJyZW50XT1cInNlbGVjdGVkTGlicmFyeSA9PT0gbGlicmFyeSA/ICdwYWdlJyA6IG51bGxcIj5cclxuICAgICAgICAgICAge3sgbGlicmFyeSB8IHRpdGxlY2FzZSB9fSBMaWJyYXJ5XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkTGlicmFyeSA9PT0gJ2JyYW5kJ1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZExldmVsICE9PSAnc3BvdCdcIj5cclxuICAgICAgICAgIDxoMj5BZGQgcHJvZHVjdHMgYnkgYnJhbmQgbGV2ZWw8L2gyPlxyXG4gICAgICAgICAgPHA+UGxhY2UgdGhlIHByb2R1Y3QgYnJhbmQgaW4gdGhlIGRlc2lnbmF0ZWQgcGxhY2VtZW50IGFyZWEuPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gRml4dHVyZSBsZXZlbCB3aXRoaW4gQnJhbmQgTGlicmFyeSAgLS0+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaXh0dXJlTGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnZml4dHVyZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByb2R1Y3RCcmFuZE5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkJyYW5kPC9sYWJlbD5cclxuICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24gW2l0ZW1zXT1cImJyYW5kc0xpc3RcIiBbaWRGaWVsZF09XCInYnJhbmROYW1lJ1wiIFtuYW1lRmllbGRdPVwiJ2JyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGJyYW5kcydcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0QnJhbmROYW1lXCJcclxuICAgICAgICAgICAgICBbc2VhcmNoXT1cInRydWVcIj48L211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZUxldmVsRm9ybS5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udG91Y2hlZCAmJiBmaXh0dXJlTGV2ZWxGb3JtLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmaXh0dXJlTGV2ZWxGb3JtLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBwcm9kdWN0IGJyYW5kXHJcbiAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9kdWN0Q2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlByb2R1Y3QgY2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93biBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2l0ZW1zXT1cImNhdGVnb3JpZXNMaXN0XCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBjYXRlZ29yaWVzJ1wiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RDYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8IS0tIFNlY3Rpb24gbGV2ZWwgd2l0aGluIEJyYW5kIExpYnJhcnkgLS0+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWN0aW9uTGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc2VjdGlvbidcIj5cclxuICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cInNlY3Rpb25cIiBjbGFzcz1cImFycmF5LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9uQXJyYXk/LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhcnJheS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8IS0tIFtuZ1N0eWxlXT1cInsgJ2JvcmRlci1jb2xvcic6IHNoZWxmQ29sb3JzW2ldLmJnIH1cIiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzaGVsZi10aXRsZVwiPlNFQ1RJT04ge3sgaSArIDEgfX08L2g2PlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwiIWlzRWRpdE1vZGVcIiAqbmdJZj1cImkgIT09IDBcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgKGNsaWNrKT1cInJlbW92ZVNlY3Rpb24oaSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNkwxOCAxOFwiIHN0cm9rZT1cIiM5OEEyQjNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ6b25lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5TZWN0aW9uIGxhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJsYWJlbFwiIGZvcm1Db250cm9sTmFtZT1cInpvbmVcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uLmdldCgnem9uZScpPy50b3VjaGVkICYmIHNlY3Rpb24uZ2V0KCd6b25lJyk/LmludmFsaWRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInNlY3Rpb24uZ2V0KCd6b25lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+IFNlY3Rpb24gbmFtZSBpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLiA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3pvbmUnKT8uaGFzRXJyb3IoJ3doaXRlc3BhY2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNlY3Rpb24gbmFtZSBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3pvbmUnKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3pvbmUnKT8uaGFzRXJyb3IoJ25vdFVuaXF1ZScpXCI+IER1cGxpY2F0ZSBzZWN0aW9uIG5hbWUuXHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNoZWx2ZXNcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlBpY2sgdGhlIHNoZWxmKHMpIGZvciBzZWN0aW9uIHt7IGkgKyAxIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duIFtpdGVtc109XCJzaGVsdmVzTGlzdFwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaGVsdmVzXCIgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb24uZ2V0KCdzaGVsdmVzJyk/LnRvdWNoZWQgJiYgc2VjdGlvbi5nZXQoJ3NoZWx2ZXMnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3NoZWx2ZXMnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj4gUGljayB0aGUgc2hlbGYocylcclxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHJvZHVjdEJyYW5kTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+QnJhbmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24gW2l0ZW1zXT1cImJyYW5kc0xpc3RcIiBbaWRGaWVsZF09XCInYnJhbmROYW1lJ1wiIFtuYW1lRmllbGRdPVwiJ2JyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0QnJhbmROYW1lXCIgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbi5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udG91Y2hlZCAmJiBzZWN0aW9uLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJzZWN0aW9uLmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgcHJvZHVjdCBicmFuZFxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHJvZHVjdENhdGVnb3J5XCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5Qcm9kdWN0IGNhdGVnb3J5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiY2F0ZWdvcmllc0xpc3RNYXAuZ2V0KCdzZWN0aW9uJyArIGkpID8/IFtdXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdENhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC00XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ2JUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgaXNBbGxTaGVsdmVzVXNlZEluU2VjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgPyAnQWxsIHNoZWx2ZXMgYXJlIGFzc2lnbmVkLiBObyBzaGVsdmVzIGF2YWlsYWJsZSBmb3IgbmV3IHNlY3Rpb25zLidcclxuICAgICAgICAgICAgICAgICAgOiAnWW91IGNhbm5vdCBjcmVhdGUgbW9yZSBzZWN0aW9ucyB0aGFuIHRoZSB0b3RhbCBzaGVsdmVzIGF2YWlsYWJsZS4nXHJcbiAgICAgICAgICAgICAgXCIgW2Rpc2FibGVUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkFycmF5Lmxlbmd0aCA8IChmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApICYmICFpc0FsbFNoZWx2ZXNVc2VkSW5TZWN0aW9uc1xyXG4gICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uQXJyYXkubGVuZ3RoID49IChmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApIHx8IGlzQWxsU2hlbHZlc1VzZWRJblNlY3Rpb25zXHJcbiAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LWVuZFwiIChjbGljayk9XCJhZGRTZWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIEFkZCBzZWN0aW9uXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgPCEtLSBTaGVsZiBsZXZlbCB3aXRoaW4gQnJhbmQgTGlicmFyeSAtLT5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNoZWxmTGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc2hlbGYnXCI+XHJcbiAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJzaGVsZlwiIGNsYXNzPVwiYXJyYXktd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzaGVsZiBvZiBzaGVsZkFycmF5Py5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cImFycmF5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gW25nU3R5bGVdPVwieyAnYm9yZGVyLWNvbG9yJzogc2hlbGZDb2xvcnNbaV0uYmcgfVwiIC0tPlxyXG4gICAgICAgICAgICAgIDxoNiBjbGFzcz1cInNoZWxmLXRpdGxlXCI+U0hFTEYge3sgaSArIDEgfX08L2g2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9kdWN0QnJhbmROYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5CcmFuZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93biBbaXRlbXNdPVwiYnJhbmRzTGlzdFwiIFtpZEZpZWxkXT1cIidicmFuZE5hbWUnXCIgW25hbWVGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RCcmFuZE5hbWVcIiBbc2VhcmNoXT1cInRydWVcIj48L211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaGVsZi5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udG91Y2hlZCAmJiBzaGVsZi5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2hlbGYuZ2V0KCdwcm9kdWN0QnJhbmROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBwcm9kdWN0IGJyYW5kXHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9kdWN0Q2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlByb2R1Y3QgY2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24gW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJjYXRlZ29yaWVzTGlzdE1hcC5nZXQoJ3NoZWxmJyArIGkpID8/IFtdXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdENhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+PC9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgPCEtLSBTcG90IGxldmVsIHdpdGhpbiBCcmFuZCBMaWJyYXJ5IC0tPlxyXG4gICAgICAgIDwhLS0gPGZvcm0gW2Zvcm1Hcm91cF09XCJzcG90TGV2ZWxGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc3BvdCdcIj5TcG90IGxldmVsIEZvcm08L2Zvcm0+IC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc3BvdCdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogNTB2aFwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCI4XCIgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTM3IDM3TDMyLjY1IDMyLjY1TTM1IDI3QzM1IDMxLjQxODMgMzEuNDE4MyAzNSAyNyAzNUMyMi41ODE3IDM1IDE5IDMxLjQxODMgMTkgMjdDMTkgMjIuNTgxNyAyMi41ODE3IDE5IDI3IDE5QzMxLjQxODMgMTkgMzUgMjIuNTgxNyAzNSAyN1pcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwibXQtNSBtYi0yXCI+Q29taW5nIHNvb248L2gzPlxyXG4gICAgICAgICAgPHA+VGhpcyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgeWV0LjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIENvbWluZyBzb29uIGZvciBhbGwgbGV2ZWxzIC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRMaWJyYXJ5ID09PSAncHJvZHVjdCdcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY2VudGVyIG10LTVcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTM3IDM3TDMyLjY1IDMyLjY1TTM1IDI3QzM1IDMxLjQxODMgMzEuNDE4MyAzNSAyNyAzNUMyMi41ODE3IDM1IDE5IDMxLjQxODMgMTkgMjdDMTkgMjIuNTgxNyAyMi41ODE3IDE5IDI3IDE5QzMxLjQxODMgMTkgMzUgMjIuNTgxNyAzNSAyN1pcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwibXQtNSBtYi0yXCI+Q29taW5nIHNvb248L2gzPlxyXG4gICAgICAgIDxwPlRoaXMgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIHlldC4gU3RhcnQgYWRkaW5nIHByb2R1Y3QgZnJvbSBicmFuZCBsaWJyYXJ5PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09UmlnaHQgQ29sdW1uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHMgY29sLThcIj5cclxuICAgICAgPGg2PlByb2R1Y3QgYnJhbmQgcGxhY2VtZW50czwvaDY+XHJcblxyXG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY3VzdG9tLXRhYnMgZC1mbGV4IG10LTRcIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwiIWlzRWRpdE1vZGVcIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBmbGV4LWZpbGxcIiAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgWydmaXh0dXJlJywgJ3NlY3Rpb24nLCAnc2hlbGYnLCAnc3BvdCddXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmsgdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkTGV2ZWwgPT09IGxldmVsXCIgKGNsaWNrKT1cInNldFRhYihsZXZlbClcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic2VsZWN0ZWRMZXZlbCA9PT0gbGV2ZWwgPyAncGFnZScgOiBudWxsXCI+XHJcbiAgICAgICAgICAgIHt7IGxldmVsIHwgdGl0bGVjYXNlIH19IGxldmVsXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTGV2ZWwgPT09ICdmaXh0dXJlJ1wiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWxldmVsXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgPCEtLSBWZXJ0aWNhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtZGltZW5zaW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVMZW5ndGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyBkb3duXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEhvcml6b250YWwgYXJyb3dzIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25BcnJvd3M7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGg/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAge3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiAqbmdJZj1cIihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImJyYW5kLWNhdGVnb3J5XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZUxldmVsRm9ybT8uZ2V0KCdwcm9kdWN0QnJhbmROYW1lJyk/LnZhbHVlPy5sZW5ndGhcIiBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBmaXh0dXJlTGV2ZWxGb3JtPy5nZXQoJ3Byb2R1Y3RCcmFuZE5hbWUnKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBkcmFmdCBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJmaXh0dXJlTGV2ZWxGb3JtPy5nZXQoJ3Byb2R1Y3RDYXRlZ29yeScpPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaXh0dXJlTGV2ZWxGb3JtPy5nZXQoJ3Byb2R1Y3RDYXRlZ29yeScpPy52YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGZpeHR1cmVMZXZlbEZvcm0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpeHR1cmVMZXZlbEZvcm0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZUxldmVsRm9ybT8uZ2V0KCdwcm9kdWN0Q2F0ZWdvcnknKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJzaGVsZkNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoaXRlbS5zaGVsZlR5cGUgPT09J3RyYXknKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0udHJheVJvd3MpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlISArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52bW9ubHktcGxhY2Vob2xkZXJdPVwiaXRlbS5zaGVsZlR5cGUgPT09J3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRMZXZlbCA9PT0gJ3NlY3Rpb24nXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInNlY3Rpb24tbGV2ZWxcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICA8IS0tIFZlcnRpY2FsIGFycm93cyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1kaW1lbnNpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IHVwXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udmFsdWUgfX17eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlTGVuZ3RoPy51bml0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IGRvd25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDwhLS0gSG9yaXpvbnRhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRpbWVuc2lvbkFycm93czsgY29udGV4dDogeyB2YWx1ZTogZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoPy52YWx1ZSB9XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiBpZD1cInNlY3Rpb24tYm9keS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGlkPVwiYm9keS1sb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uQnlab25lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyAkaW5kZXhcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCIgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGRyYWZ0IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uem9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmJyYW5kcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGIgb2YgaXRlbT8uc2VjdGlvbj8uYnJhbmRzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGMgb2YgaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwic2hlbGZDb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBbTk9URV0gYmVsb3cgYmxvY2sgaXMgaWRlbnRpZmllZCBieSB0aGUgZnVuY3Rpb24gdXNpbmcgJ2xhc3RFbGVtZW50JyBnZXR0ZXIgaW4gRE9NIG1hbmlwdWxhdGlvbi4gXHJcbiAgICAgICAgICAgICAgICAgIFNvIGtlZXAgdGhpcyBibG9jayBhbHdheXMgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIG5nRm9yIGxvb3AgLS0+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUhICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnZtb25seS1wbGFjZWhvbGRlcl09XCJpdGVtLnNoZWxmVHlwZSA9PT0ndm1vbmx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgcmlnaHQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc2hlbGYnXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInNoZWxmLWxldmVsXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgPCEtLSBWZXJ0aWNhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtZGltZW5zaW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVMZW5ndGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyBkb3duXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEhvcml6b250YWwgYXJyb3dzIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaW1lbnNpb25BcnJvd3M7IGNvbnRleHQ6IHsgdmFsdWU6IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udmFsdWUgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhbGwtdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgICA8IS0tIEhlYWRlciBibG9jayAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBCb2R5IGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWJsb2NrXCIgKm5nSWY9XCIoZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAwKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInNoZWxmQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArIGlcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBiIG9mIHNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdEJyYW5kTmFtZScpPy52YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGIgb2Ygc2hlbGZBcnJheS5jb250cm9sc1tpXT8uZ2V0KCdwcm9kdWN0Q2F0ZWdvcnknKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGMgb2Ygc2hlbGZBcnJheS5jb250cm9sc1tpXT8uZ2V0KCdwcm9kdWN0QnJhbmROYW1lJyk/LnZhbHVlOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNoZWxmQXJyYXkuY29udHJvbHNbaV0/LmdldCgncHJvZHVjdENhdGVnb3J5Jyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGMgb2Ygc2hlbGZBcnJheS5jb250cm9sc1tpXT8uZ2V0KCdwcm9kdWN0Q2F0ZWdvcnknKT8udmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBbTk9URV0gYmVsb3cgYmxvY2sgaXMgaWRlbnRpZmllZCBieSB0aGUgZnVuY3Rpb24gdXNpbmcgJ2xhc3RFbGVtZW50JyBnZXR0ZXIgaW4gRE9NIG1hbmlwdWxhdGlvbi4gXHJcbiAgICAgICAgICAgICAgICAgIFNvIGtlZXAgdGhpcyBibG9jayBhbHdheXMgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIG5nRm9yIGxvb3AgLS0+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUhICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnZtb25seS1wbGFjZWhvbGRlcl09XCJpdGVtLnNoZWxmVHlwZSA9PT0ndm1vbmx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgcmlnaHQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZExldmVsID09PSAnc3BvdCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY2VudGVyXCJcclxuICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA1MHZoXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjhcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMzcgMzdMMzIuNjUgMzIuNjVNMzUgMjdDMzUgMzEuNDE4MyAzMS40MTgzIDM1IDI3IDM1QzIyLjU4MTcgMzUgMTkgMzEuNDE4MyAxOSAyN0MxOSAyMi41ODE3IDIyLjU4MTcgMTkgMjcgMTlDMzEuNDE4MyAxOSAzNSAyMi41ODE3IDM1IDI3WlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJtdC01IG1iLTJcIj5Db21pbmcgc29vbjwvaDM+XHJcbiAgICAgICAgICA8cD5UaGlzIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSB5ZXQuIFRyeSBGaXh0dXJlLCBTZWN0aW9uLCBhbmQgU2hlbGYgbGV2ZWxzPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgaWQ9XCJzcG90LWxldmVsXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWRpbWVuc2lvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgdXBcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoPy51bml0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IGRvd25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgZGltZW5zaW9uQXJyb3dzO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udmFsdWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiAqbmdJZj1cIihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoaXRlbS5zaGVsZlR5cGUgPT09J3NoZWxmJyl7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGYgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0ICBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlISArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0udHJheVJvd3MpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0ICBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvb3Rlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIGxlZnQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciByaWdodC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBpZD1cImZpeHR1cmUtdGVtcGxhdGUtcHJvZHVjdHMtc2tlbGV0b25cIiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBDb21tb24gZGltZW5zaW9uIGFycm93cyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaW1lbnNpb25BcnJvd3MgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpbWVuc2lvblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IGxlZnRcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgIDxzcGFuPnt7IHZhbHVlIH19IHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IHJpZ2h0XCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19