@decaf-ts/for-angular 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/assets/i18n/en.json +3 -73
  2. package/assets/i18n/pt.json +5 -74
  3. package/components/crud-field/crud-field.component.d.ts +12 -3
  4. package/components/crud-form/crud-form.component.d.ts +36 -14
  5. package/components/empty-state/empty-state.component.d.ts +9 -10
  6. package/components/fieldset/fieldset.component.d.ts +9 -0
  7. package/components/filter/filter.component.d.ts +11 -2
  8. package/engine/NgxBaseComponent.d.ts +39 -39
  9. package/engine/NgxCrudFormField.d.ts +2 -1
  10. package/engine/NgxRenderingEngine.d.ts +44 -16
  11. package/engine/interfaces.d.ts +10 -0
  12. package/engine/types.d.ts +8 -0
  13. package/esm2022/components/crud-field/crud-field.component.mjs +23 -3
  14. package/esm2022/components/crud-form/crud-form.component.mjs +33 -18
  15. package/esm2022/components/empty-state/empty-state.component.mjs +11 -10
  16. package/esm2022/components/fieldset/fieldset.component.mjs +7 -4
  17. package/esm2022/components/filter/filter.component.mjs +16 -6
  18. package/esm2022/components/layout/layout.component.mjs +3 -3
  19. package/esm2022/components/list-item/list-item.component.mjs +4 -4
  20. package/esm2022/components/pagination/pagination.component.mjs +6 -6
  21. package/esm2022/engine/NgxBaseComponent.mjs +48 -53
  22. package/esm2022/engine/NgxCrudFormField.mjs +1 -1
  23. package/esm2022/engine/NgxRenderingEngine.mjs +20 -4
  24. package/esm2022/engine/interfaces.mjs +1 -1
  25. package/esm2022/engine/types.mjs +1 -1
  26. package/esm2022/helpers/utils.mjs +49 -32
  27. package/esm2022/i18n/Loader.mjs +82 -0
  28. package/fesm2022/decaf-ts-for-angular.mjs +288 -134
  29. package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  30. package/helpers/utils.d.ts +42 -17
  31. package/i18n/Loader.d.ts +48 -0
  32. package/package.json +10 -1
@@ -73,7 +73,7 @@ let ListItemComponent = class ListItemComponent extends NgxBaseComponent {
73
73
  * @default 'inset'
74
74
  * @memberOf ListItemComponent
75
75
  */
76
- this.lines = 'inset';
76
+ this.lines = 'full';
77
77
  /**
78
78
  * @description Position of the icon within the list item.
79
79
  * @summary Determines whether the icon appears at the start (left in LTR languages)
@@ -355,7 +355,7 @@ let ListItemComponent = class ListItemComponent extends NgxBaseComponent {
355
355
  this.actionMenuOpen = true;
356
356
  }
357
357
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
358
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ListItemComponent, isStandalone: true, selector: "ngx-decaf-list-item", inputs: { lines: "lines", item: "item", icon: "icon", iconSlot: "iconSlot", button: "button", title: "title", description: "description", info: "info", subinfo: "subinfo" }, outputs: { clickEvent: "clickEvent" }, host: { listeners: { "window:resize": "enableSlideItems($event)" } }, viewQueries: [{ propertyName: "actionMenuComponent", first: true, predicate: ["actionMenuComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "\n@if(title || description) {\n <ion-item-sliding #component>\n <ion-item\n [id]=\"uid\"\n [lines]=\"lines\"\n [button]=\"button\"\n [class]=\"className\"\n (click)=\"operations?.includes('read') ? handleAction('read', $event, component) : ''\n \">\n @if(icon && lines !== 'inset') {\n <div class=\"dcf-icon\" [slot]=\"iconSlot\">\n <ion-button shape=\"round\" fill=\"clear\">\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" color=\"dark\" size=\"default\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-flex dcf-flex-middle dcf-grid-collapse\" dcf-grid>\n @if(icon && lines === 'inset') {\n <div class=\"dcf-icon dcf-grid-icon\">\n <ion-button shape=\"round\" fill=\"clear\">\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" color=\"dark\" size=\"default\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-width-expand@s dcf-width-1-1 dcf-label\">\n <ion-label class=\"dcf-item-title\" [innerHTML]=\"uid + ' - ' + title\" ></ion-label>\n <div *ngIf =\"description\" class=\"dcf-description\" [innerHTML]=\"description\"></div>\n </div>\n @if(info || subinfo) {\n <div class=\"dcf-width-auto@s dcf-width-expand dcf-info dcf-flex dcf-flex-right@s\">\n <div>\n <span *ngIf=\"info\" [innerHTML]=\"info\"></span>\n <div *ngIf=\"subinfo\" class=\"dcf-subinfo dcf-text-truncate\" [innerHTML]=\"subinfo\" ></div>\n </div>\n </div>\n }\n\n <div class=\"dcf-width-auto dcf-flex dcf-flex-middle dcf-flex-right\">\n @if((operations.includes('delete') || operations.includes('update')) && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n <ion-button class=\"dcf-hidden@m\" shape=\"round\" fill=\"clear\" color=\"primary\" (click)=\"presentActionsMenu($event)\">\n <ion-icon slot=\"icon-only\" aria-hidden=\"true\" name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n <ion-popover\n #actionMenuComponent\n side=\"bottom\"\n alignment=\"left\"\n\n [isOpen]=\"actionMenuOpen\"\n (didDismiss)=\"actionMenuOpen = false\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <ion-list lines=\"none\">\n <ion-list-header>\n <h4 class=\"dcf-text-capitalize\" [innerHTML]=\"'actions' | translate\"></h4>\n </ion-list-header>\n @for (operation of ['update', 'delete']; track operation) {\n @if(operations.includes(operation)) {\n <ion-item [button]=\"true\" (click)=\"handleAction(operation, $event, component)\">\n <ion-avatar class=\"dcf-flex dcf-flex-middle\" aria-hidden=\"true\" slot=\"start\">\n @if(operation === 'update') {\n <ion-icon color=\"primary\" aria-hidden=\"true\" name=\"create-outline\"></ion-icon>\n } @else {\n <ion-icon color=\"danger\" aria-hidden=\"true\" name=\"trash\"></ion-icon>\n }\n </ion-avatar>\n <ion-label class=\"dcf-text-capitalize\">{{ operation | translate }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n </div>\n }\n <!-- @if(operations?.length && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n @if(operations?.includes('update')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"primary\" (click)=\"handleAction('update', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-button>\n }\n @if(operations?.includes('delete')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"danger\" (click)=\"handleAction('delete', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n }\n </div>\n } -->\n @if(windowWidth > 768) {\n <div id=\"end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n </div>\n }\n </div>\n </div>\n </div>\n </ion-item>\n @if(showSlideItems && uid) {\n <ion-item-options side=\"end\" (ionSwipe)=\"operations.length === 1 ? handleAction(operations[0], $event, component) : ''\">\n @if(operations?.includes('update')) {\n <ion-item-option class=\"update\" (click)=\"handleAction('update', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-item-option>\n }\n @if(operations?.includes('delete')) {\n <ion-item-option class=\"delete\" (click)=\"handleAction('delete', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-item-option>\n }\n </ion-item-options>\n }\n </ion-item-sliding>\n}\n", styles: ["ion-item{--min-height: 50px;--padding-top: .25rem;--padding-bottom: .25rem;--padding-start: .75rem;--padding-end: .75rem;--inner-padding-start: 0px !important;--inner-padding-end: 0px !important;--border-color: var(--dcf-color-gray-2)}ion-item.item-lines-inset{--padding-top: 0rem !important;--padding-bottom: 0rem !important;--inner-padding-top: .5rem !important;--inner-padding-bottom: .65rem !important;--border-color: var(--dcf-color-gray-2)}ion-item:hover .dcf-info{background:transparent!important}ion-item .dcf-info{min-width:10vw;color:var(--dcf-color-gray-6)}ion-item .dcf-grid{padding:0!important;margin:0!important;min-width:100%!important}ion-item .dcf-item-title{color:var(--dcf-color-gray-8);font-style:normal;font-weight:700}ion-item .dcf-description{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dcf-color-gray-6);font-style:normal;font-weight:400;font-size:.925rem}ion-item::part(native){min-width:100%}ion-item [slot=start]{margin-right:.5rem!important}ion-item [slot=end]{margin-left:.5rem!important}ion-item .dcf-info{font-size:.9rem;background:#fff}ion-item .dcf-info .dcf-subinfo.dcf-line{margin-left:.5rem}@media (min-width: var(--dcf-width-sm)){ion-item .dcf-info .dcf-subinfo.dcf-line{display:block;margin-left:0}}ion-item #dcf-actions{padding:5px}@media (max-width: 768px){ion-item #dcf-actions{display:none;pointer-events:none!important;cursor:text!important}ion-item #dcf-actions *{display:none;pointer-events:none!important;cursor:text!important}}ion-item #dcf-actions ion-button{--padding-start: 1rem;--padding-end: .75rem;--padding-top: .85rem !important;--padding-bottom: .85rem !important;color:#ccc;margin-right:.5rem!important;--background: var(--dcf-color-gray-2) !important}ion-item #dcf-actions ion-button ion-icon{position:relative;left:-1px}@media (max-width: 768px){ion-item #dcf-end,ion-item [slot=end]{display:none!important}}ion-item #dcf-end{padding-top:5px;display:flex;align-items:flex-end}ion-item .dcf-icon{display:flex;justify-content:center;align-items:center;text-align:center;margin-right:.5rem!important}ion-item .dcf-icon.dcf-grid-icon{min-width:50px;text-align:left;display:flex;justify-content:flex-start}@media (max-width: 578px){ion-item .dcf-icon{align-items:flex-start!important}}ion-item .dcf-icon ion-button{color:var(--dcf-color-gray-3);--padding-start: 1rem;--padding-end: .85rem;--padding-top: .85rem !important;--padding-bottom: .85rem !important;--background: var(--dcf-color-gray-1) !important}ion-item .dcf-icon ion-button ion-icon{font-size:20px}ion-item .dcf-icon ion-avatar{transform:scale(.9);background:var(--dcf-color-gray-1);display:flex;justify-content:center;align-items:center;text-align:center;box-sizing:border-box!important}ion-item .dcf-icon ion-avatar .dcf-icon-large{transform:translateY(5px)}ion-item-sliding{box-sizing:border-box}ion-item-sliding ion-item-option:not(.dcf-delete),ion-item-sliding ion-item-option:not(.dcf-update){background:rgba(var(--dcf-color-dark-rgb),.25)!important}ion-item-sliding ion-item-option:not(.dcf-delete) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-delete) ion-icon,ion-item-sliding ion-item-option:not(.dcf-update) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-update) ion-icon{color:var(--dcf-color-gray-7)!important}ion-item-sliding ion-item-option.dcf-delete{background:rgba(var(--dcf-color-danger-rgb),.15)!important}ion-item-sliding ion-item-option.dcf-delete .dcf-ti,ion-item-sliding ion-item-option.dcf-delete *,ion-item-sliding ion-item-option.dcf-delete ion-icon{color:var(--dcf-color-danger)!important}ion-item-sliding ion-item-option.dcf-update{background:rgba(var(--dcf-color-primary-rgb),.25)!important}ion-item-sliding ion-item-option.dcf-update .dcf-ti,ion-item-sliding ion-item-option.dcf-update ion-icon{color:var(--dcf-color-gray-7)!important}ion-item-sliding[class*=active-slide]{border-color:var(--dcf-color-gray-3)}ion-item-sliding ion-item-option{color:var(--dcf-color-gray-5);box-shadow:inset 0 0 5px rgba(var(--dcf-color-dark-rgb),.15)!important;background:var(--dcf-color-gray-3)}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonItemSliding, selector: "ion-item-sliding", inputs: ["disabled"] }, { kind: "component", type: IonItemOptions, selector: "ion-item-options", inputs: ["side"] }, { kind: "component", type: IonItemOption, selector: "ion-item-option", inputs: ["color", "disabled", "download", "expandable", "href", "mode", "rel", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonPopover, selector: "ion-popover" }] }); }
358
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ListItemComponent, isStandalone: true, selector: "ngx-decaf-list-item", inputs: { lines: "lines", item: "item", icon: "icon", iconSlot: "iconSlot", button: "button", title: "title", description: "description", info: "info", subinfo: "subinfo" }, outputs: { clickEvent: "clickEvent" }, host: { listeners: { "window:resize": "enableSlideItems($event)" } }, viewQueries: [{ propertyName: "actionMenuComponent", first: true, predicate: ["actionMenuComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "\n@if(title || description) {\n <ion-item-sliding #component>\n <ion-item\n [id]=\"uid\"\n [lines]=\"lines\"\n [button]=\"button\"\n [class]=\"className\"\n (click)=\"operations?.includes('read') ? handleAction('read', $event, component) : ''\n \">\n @if(icon && lines !== 'inset') {\n <div class=\"dcf-icon\" [slot]=\"iconSlot\">\n <ion-avatar>\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" size=\"default\"></ion-icon>\n </ion-avatar>\n </div>\n }\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-flex dcf-flex-middle dcf-grid-collapse\" dcf-grid>\n @if(icon && lines === 'inset') {\n <div class=\"dcf-icon dcf-grid-icon\">\n <ion-avatar>\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" size=\"default\"></ion-icon>\n </ion-avatar>\n </div>\n }\n <div class=\"dcf-width-expand@s dcf-width-1-1 dcf-label\">\n <ion-label class=\"dcf-item-title\" [innerHTML]=\"uid + ' - ' + title\" ></ion-label>\n <div *ngIf =\"description\" class=\"dcf-description\" [innerHTML]=\"description\"></div>\n </div>\n @if(info || subinfo) {\n <div class=\"dcf-width-auto@s dcf-width-expand dcf-info dcf-flex dcf-flex-right@s\">\n <div>\n <span *ngIf=\"info\" [innerHTML]=\"info\"></span>\n <div *ngIf=\"subinfo\" class=\"dcf-subinfo dcf-text-truncate\" [innerHTML]=\"subinfo\" ></div>\n </div>\n </div>\n }\n\n <div class=\"dcf-width-auto dcf-flex dcf-flex-middle dcf-flex-right\">\n @if((operations.includes('delete') || operations.includes('update')) && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n <ion-button class=\"dcf-hidden@m\" shape=\"round\" fill=\"clear\" color=\"primary\" (click)=\"presentActionsMenu($event)\">\n <ion-icon slot=\"icon-only\" aria-hidden=\"true\" name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n <ion-popover\n #actionMenuComponent\n side=\"bottom\"\n alignment=\"left\"\n\n [isOpen]=\"actionMenuOpen\"\n (didDismiss)=\"actionMenuOpen = false\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <ion-list lines=\"none\">\n <ion-list-header>\n <h4 class=\"dcf-text-capitalize\" [innerHTML]=\"'actions' | translate\"></h4>\n </ion-list-header>\n @for (operation of ['update', 'delete']; track operation) {\n @if(operations.includes(operation)) {\n <ion-item [button]=\"true\" (click)=\"handleAction(operation, $event, component)\">\n <ion-avatar class=\"dcf-flex dcf-flex-middle\" aria-hidden=\"true\" slot=\"start\">\n @if(operation === 'update') {\n <ion-icon color=\"primary\" aria-hidden=\"true\" name=\"create-outline\"></ion-icon>\n } @else {\n <ion-icon color=\"danger\" aria-hidden=\"true\" name=\"trash\"></ion-icon>\n }\n </ion-avatar>\n <ion-label class=\"dcf-text-capitalize\">{{ operation | translate }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n </div>\n }\n <!-- @if(operations?.length && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n @if(operations?.includes('update')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"primary\" (click)=\"handleAction('update', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-button>\n }\n @if(operations?.includes('delete')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"danger\" (click)=\"handleAction('delete', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n }\n </div>\n } -->\n @if(windowWidth > 768) {\n <div id=\"end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n </div>\n }\n </div>\n </div>\n </div>\n </ion-item>\n @if(showSlideItems && uid) {\n <ion-item-options side=\"end\" (ionSwipe)=\"operations.length === 1 ? handleAction(operations[0], $event, component) : ''\">\n @if(operations?.includes('update')) {\n <ion-item-option class=\"dcf-update\" (click)=\"handleAction('update', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-item-option>\n }\n @if(operations?.includes('delete')) {\n <ion-item-option class=\"dcf- delete\" (click)=\"handleAction('delete', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-item-option>\n }\n </ion-item-options>\n }\n </ion-item-sliding>\n}\n", styles: ["ion-item{--min-height: 50px;--padding-top: .25rem;--padding-bottom: .25rem;--padding-start: .75rem;--padding-end: .75rem;--inner-padding-start: 0px !important;--inner-padding-end: 0px !important;--background-hover: var(--dcf-color-gray-8);--background-focused: var(--dcf-color-gray-8)}@media (prefers-color-scheme: dark){ion-item{--background-hover-opacity: .25;--background-focused-opacity: .25}}@media (prefers-color-scheme: light){ion-item{--background-hover-opacity: .1;--background-focused-opacity: .1}}ion-item.item-lines-full{--padding-top: .5rem;--padding-bottom: .5rem;--padding-start: .25rem;-padding-end:.25rem;padding:0 .65rem}ion-item.item-lines-inset{--padding-top: 0rem !important;--padding-bottom: 0rem !important;--inner-padding-top: .5rem !important;--inner-padding-bottom: .65rem !important}@media (prefers-color-scheme: light){ion-item{--border-color: var(--dcf-color-gray-2)}ion-item .dcf-info{color:var(--dcf-color-gray-6)}ion-item .dcf-item-title{color:var(--dcf-color-gray-8)}ion-item .dcf-description{color:var(--dcf-color-gray-6)}}@media (prefers-color-scheme: dark){ion-item{--border-color: var(--dcf-color-gray-6)}ion-item .dcf-description{color:var(--dcf-color-gray-4)}}ion-item .dcf-info{min-width:10vw;background:transparent!important}ion-item .dcf-grid{padding:0!important;margin:0!important;min-width:100%!important}ion-item .dcf-item-title{font-style:normal;font-weight:700}ion-item .dcf-description{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:.925rem}ion-item::part(native){min-width:100%}ion-item [slot=start]{margin-right:.5rem!important}ion-item [slot=end]{margin-left:.5rem!important}ion-item .dcf-info{font-size:.9rem}ion-item .dcf-info .dcf-subinfo.dcf-line{margin-left:.5rem}@media (min-width: var(--dcf-width-sm)){ion-item .dcf-info .dcf-subinfo.dcf-line{display:block;margin-left:0}}ion-item #dcf-actions{padding:5px}@media (max-width: var(--dcf-width-m)){ion-item #dcf-actions{display:none;pointer-events:none!important;cursor:text!important}ion-item #dcf-actions *{display:none;pointer-events:none!important;cursor:text!important}}ion-item #dcf-actions ion-button{--padding-start: 1rem;--padding-end: .75rem;--padding-top: .85rem !important;--padding-bottom: .85rem !important;color:#ccc;margin-right:.5rem!important;--background: var(--dcf-color-gray-2) !important}ion-item #dcf-actions ion-button ion-icon{position:relative;left:-1px}@media (max-width: var(--dcf-width-m)){ion-item #dcf-end,ion-item [slot=end]{display:none!important}}ion-item #dcf-end{padding-top:5px;display:flex;align-items:flex-end}ion-item .dcf-icon{display:flex;justify-content:center;align-items:center;text-align:center;margin-right:.5rem!important}ion-item .dcf-icon.dcf-grid-icon{min-width:50px;text-align:left;display:flex;justify-content:flex-start}@media (max-width: var(--dcf-width-s)){ion-item .dcf-icon{align-items:flex-start!important}}@media (prefers-color-scheme: light){ion-item .dcf-icon ion-button{color:var(--dcf-color-gray-7);--background: var(--dcf-color-gray-1) !important}}@media (prefers-color-scheme: dark){ion-item .dcf-icon ion-button{color:var(--dcf-color-gray-1)!important;--background: var(--dcf-color-gray-7) !important}}ion-item .dcf-icon ion-button ion-icon{font-size:20px}ion-item .dcf-icon ion-avatar{width:48px;height:48px;display:flex;justify-content:center;align-items:center;text-align:center}@media (prefers-color-scheme: light){ion-item .dcf-icon ion-avatar{color:var(--dcf-color-gray-7);background:var(--dcf-color-gray-1)!important}}@media (prefers-color-scheme: dark){ion-item .dcf-icon ion-avatar{color:var(--dcf-color-gray-1)!important;background:var(--dcf-background-color)!important}}ion-item .dcf-icon ion-avatar ion-icon{font-size:20px}ion-item .dcf-icon ion-avatar .dcf-icon-large{transform:translateY(5px)}ion-item-sliding{box-sizing:border-box}@media (prefers-color-scheme: light){ion-item-sliding ion-item-option:not(.dcf-delete),ion-item-sliding ion-item-option:not(.dcf-update){background:rgba(var(--dcf-color-dark-rgb),.25)!important}ion-item-sliding ion-item-option:not(.dcf-delete) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-delete) ion-icon,ion-item-sliding ion-item-option:not(.dcf-update) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-update) ion-icon{color:var(--dcf-color-gray-7)!important}ion-item-sliding ion-item-option.dcf-delete{background:rgba(var(--dcf-color-danger-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-delete .dcf-ti,ion-item-sliding ion-item-option.dcf-delete *,ion-item-sliding ion-item-option.dcf-delete ion-icon{color:var(--dcf-color-danger)!important}ion-item-sliding ion-item-option.dcf-update{background:rgba(var(--dcf-color-primary-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-update .dcf-ti,ion-item-sliding ion-item-option.dcf-update ion-icon{color:var(--dcf-color-primary)!important}}@media (prefers-color-scheme: dark){ion-item-sliding ion-item-option:not(.dcf-delete),ion-item-sliding ion-item-option:not(.dcf-update){background:rgba(var(--dcf-color-dark-rgb),1)!important}ion-item-sliding ion-item-option:not(.dcf-delete) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-delete) ion-icon,ion-item-sliding ion-item-option:not(.dcf-update) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-update) ion-icon{color:var(--dcf-color-gray-2)!important}ion-item-sliding ion-item-option.dcf-delete{background:rgba(var(--dcf-color-danger-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-delete .dcf-ti,ion-item-sliding ion-item-option.dcf-delete *,ion-item-sliding ion-item-option.dcf-delete ion-icon{color:var(--dcf-color-danger)!important}ion-item-sliding ion-item-option.dcf-update{background:rgba(var(--dcf-color-primary-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-update .dcf-ti,ion-item-sliding ion-item-option.dcf-update ion-icon{color:var(--dcf-color-gray-2)!important}}ion-item-sliding[class*=active-slide]{border-color:var(--dcf-color-gray-3)}ion-item-sliding ion-item-option{color:var(--dcf-color-gray-5);box-shadow:inset 0 0 5px rgba(var(--dcf-color-dark-rgb),.15)!important;background:var(--dcf-color-gray-3)}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonItemSliding, selector: "ion-item-sliding", inputs: ["disabled"] }, { kind: "component", type: IonItemOptions, selector: "ion-item-options", inputs: ["side"] }, { kind: "component", type: IonItemOption, selector: "ion-item-option", inputs: ["color", "disabled", "download", "expandable", "href", "mode", "rel", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonPopover, selector: "ion-popover" }] }); }
359
359
  };
360
360
  ListItemComponent = __decorate([
361
361
  Dynamic(),
@@ -377,7 +377,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
377
377
  IonButton,
378
378
  IonContent,
379
379
  IonPopover
380
- ], template: "\n@if(title || description) {\n <ion-item-sliding #component>\n <ion-item\n [id]=\"uid\"\n [lines]=\"lines\"\n [button]=\"button\"\n [class]=\"className\"\n (click)=\"operations?.includes('read') ? handleAction('read', $event, component) : ''\n \">\n @if(icon && lines !== 'inset') {\n <div class=\"dcf-icon\" [slot]=\"iconSlot\">\n <ion-button shape=\"round\" fill=\"clear\">\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" color=\"dark\" size=\"default\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-flex dcf-flex-middle dcf-grid-collapse\" dcf-grid>\n @if(icon && lines === 'inset') {\n <div class=\"dcf-icon dcf-grid-icon\">\n <ion-button shape=\"round\" fill=\"clear\">\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" color=\"dark\" size=\"default\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-width-expand@s dcf-width-1-1 dcf-label\">\n <ion-label class=\"dcf-item-title\" [innerHTML]=\"uid + ' - ' + title\" ></ion-label>\n <div *ngIf =\"description\" class=\"dcf-description\" [innerHTML]=\"description\"></div>\n </div>\n @if(info || subinfo) {\n <div class=\"dcf-width-auto@s dcf-width-expand dcf-info dcf-flex dcf-flex-right@s\">\n <div>\n <span *ngIf=\"info\" [innerHTML]=\"info\"></span>\n <div *ngIf=\"subinfo\" class=\"dcf-subinfo dcf-text-truncate\" [innerHTML]=\"subinfo\" ></div>\n </div>\n </div>\n }\n\n <div class=\"dcf-width-auto dcf-flex dcf-flex-middle dcf-flex-right\">\n @if((operations.includes('delete') || operations.includes('update')) && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n <ion-button class=\"dcf-hidden@m\" shape=\"round\" fill=\"clear\" color=\"primary\" (click)=\"presentActionsMenu($event)\">\n <ion-icon slot=\"icon-only\" aria-hidden=\"true\" name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n <ion-popover\n #actionMenuComponent\n side=\"bottom\"\n alignment=\"left\"\n\n [isOpen]=\"actionMenuOpen\"\n (didDismiss)=\"actionMenuOpen = false\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <ion-list lines=\"none\">\n <ion-list-header>\n <h4 class=\"dcf-text-capitalize\" [innerHTML]=\"'actions' | translate\"></h4>\n </ion-list-header>\n @for (operation of ['update', 'delete']; track operation) {\n @if(operations.includes(operation)) {\n <ion-item [button]=\"true\" (click)=\"handleAction(operation, $event, component)\">\n <ion-avatar class=\"dcf-flex dcf-flex-middle\" aria-hidden=\"true\" slot=\"start\">\n @if(operation === 'update') {\n <ion-icon color=\"primary\" aria-hidden=\"true\" name=\"create-outline\"></ion-icon>\n } @else {\n <ion-icon color=\"danger\" aria-hidden=\"true\" name=\"trash\"></ion-icon>\n }\n </ion-avatar>\n <ion-label class=\"dcf-text-capitalize\">{{ operation | translate }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n </div>\n }\n <!-- @if(operations?.length && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n @if(operations?.includes('update')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"primary\" (click)=\"handleAction('update', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-button>\n }\n @if(operations?.includes('delete')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"danger\" (click)=\"handleAction('delete', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n }\n </div>\n } -->\n @if(windowWidth > 768) {\n <div id=\"end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n </div>\n }\n </div>\n </div>\n </div>\n </ion-item>\n @if(showSlideItems && uid) {\n <ion-item-options side=\"end\" (ionSwipe)=\"operations.length === 1 ? handleAction(operations[0], $event, component) : ''\">\n @if(operations?.includes('update')) {\n <ion-item-option class=\"update\" (click)=\"handleAction('update', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-item-option>\n }\n @if(operations?.includes('delete')) {\n <ion-item-option class=\"delete\" (click)=\"handleAction('delete', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-item-option>\n }\n </ion-item-options>\n }\n </ion-item-sliding>\n}\n", styles: ["ion-item{--min-height: 50px;--padding-top: .25rem;--padding-bottom: .25rem;--padding-start: .75rem;--padding-end: .75rem;--inner-padding-start: 0px !important;--inner-padding-end: 0px !important;--border-color: var(--dcf-color-gray-2)}ion-item.item-lines-inset{--padding-top: 0rem !important;--padding-bottom: 0rem !important;--inner-padding-top: .5rem !important;--inner-padding-bottom: .65rem !important;--border-color: var(--dcf-color-gray-2)}ion-item:hover .dcf-info{background:transparent!important}ion-item .dcf-info{min-width:10vw;color:var(--dcf-color-gray-6)}ion-item .dcf-grid{padding:0!important;margin:0!important;min-width:100%!important}ion-item .dcf-item-title{color:var(--dcf-color-gray-8);font-style:normal;font-weight:700}ion-item .dcf-description{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dcf-color-gray-6);font-style:normal;font-weight:400;font-size:.925rem}ion-item::part(native){min-width:100%}ion-item [slot=start]{margin-right:.5rem!important}ion-item [slot=end]{margin-left:.5rem!important}ion-item .dcf-info{font-size:.9rem;background:#fff}ion-item .dcf-info .dcf-subinfo.dcf-line{margin-left:.5rem}@media (min-width: var(--dcf-width-sm)){ion-item .dcf-info .dcf-subinfo.dcf-line{display:block;margin-left:0}}ion-item #dcf-actions{padding:5px}@media (max-width: 768px){ion-item #dcf-actions{display:none;pointer-events:none!important;cursor:text!important}ion-item #dcf-actions *{display:none;pointer-events:none!important;cursor:text!important}}ion-item #dcf-actions ion-button{--padding-start: 1rem;--padding-end: .75rem;--padding-top: .85rem !important;--padding-bottom: .85rem !important;color:#ccc;margin-right:.5rem!important;--background: var(--dcf-color-gray-2) !important}ion-item #dcf-actions ion-button ion-icon{position:relative;left:-1px}@media (max-width: 768px){ion-item #dcf-end,ion-item [slot=end]{display:none!important}}ion-item #dcf-end{padding-top:5px;display:flex;align-items:flex-end}ion-item .dcf-icon{display:flex;justify-content:center;align-items:center;text-align:center;margin-right:.5rem!important}ion-item .dcf-icon.dcf-grid-icon{min-width:50px;text-align:left;display:flex;justify-content:flex-start}@media (max-width: 578px){ion-item .dcf-icon{align-items:flex-start!important}}ion-item .dcf-icon ion-button{color:var(--dcf-color-gray-3);--padding-start: 1rem;--padding-end: .85rem;--padding-top: .85rem !important;--padding-bottom: .85rem !important;--background: var(--dcf-color-gray-1) !important}ion-item .dcf-icon ion-button ion-icon{font-size:20px}ion-item .dcf-icon ion-avatar{transform:scale(.9);background:var(--dcf-color-gray-1);display:flex;justify-content:center;align-items:center;text-align:center;box-sizing:border-box!important}ion-item .dcf-icon ion-avatar .dcf-icon-large{transform:translateY(5px)}ion-item-sliding{box-sizing:border-box}ion-item-sliding ion-item-option:not(.dcf-delete),ion-item-sliding ion-item-option:not(.dcf-update){background:rgba(var(--dcf-color-dark-rgb),.25)!important}ion-item-sliding ion-item-option:not(.dcf-delete) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-delete) ion-icon,ion-item-sliding ion-item-option:not(.dcf-update) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-update) ion-icon{color:var(--dcf-color-gray-7)!important}ion-item-sliding ion-item-option.dcf-delete{background:rgba(var(--dcf-color-danger-rgb),.15)!important}ion-item-sliding ion-item-option.dcf-delete .dcf-ti,ion-item-sliding ion-item-option.dcf-delete *,ion-item-sliding ion-item-option.dcf-delete ion-icon{color:var(--dcf-color-danger)!important}ion-item-sliding ion-item-option.dcf-update{background:rgba(var(--dcf-color-primary-rgb),.25)!important}ion-item-sliding ion-item-option.dcf-update .dcf-ti,ion-item-sliding ion-item-option.dcf-update ion-icon{color:var(--dcf-color-gray-7)!important}ion-item-sliding[class*=active-slide]{border-color:var(--dcf-color-gray-3)}ion-item-sliding ion-item-option{color:var(--dcf-color-gray-5);box-shadow:inset 0 0 5px rgba(var(--dcf-color-dark-rgb),.15)!important;background:var(--dcf-color-gray-3)}\n"] }]
380
+ ], template: "\n@if(title || description) {\n <ion-item-sliding #component>\n <ion-item\n [id]=\"uid\"\n [lines]=\"lines\"\n [button]=\"button\"\n [class]=\"className\"\n (click)=\"operations?.includes('read') ? handleAction('read', $event, component) : ''\n \">\n @if(icon && lines !== 'inset') {\n <div class=\"dcf-icon\" [slot]=\"iconSlot\">\n <ion-avatar>\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" size=\"default\"></ion-icon>\n </ion-avatar>\n </div>\n }\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-flex dcf-flex-middle dcf-grid-collapse\" dcf-grid>\n @if(icon && lines === 'inset') {\n <div class=\"dcf-icon dcf-grid-icon\">\n <ion-avatar>\n <ion-icon aria-hidden=\"true\" name=\"reader-outline\" size=\"default\"></ion-icon>\n </ion-avatar>\n </div>\n }\n <div class=\"dcf-width-expand@s dcf-width-1-1 dcf-label\">\n <ion-label class=\"dcf-item-title\" [innerHTML]=\"uid + ' - ' + title\" ></ion-label>\n <div *ngIf =\"description\" class=\"dcf-description\" [innerHTML]=\"description\"></div>\n </div>\n @if(info || subinfo) {\n <div class=\"dcf-width-auto@s dcf-width-expand dcf-info dcf-flex dcf-flex-right@s\">\n <div>\n <span *ngIf=\"info\" [innerHTML]=\"info\"></span>\n <div *ngIf=\"subinfo\" class=\"dcf-subinfo dcf-text-truncate\" [innerHTML]=\"subinfo\" ></div>\n </div>\n </div>\n }\n\n <div class=\"dcf-width-auto dcf-flex dcf-flex-middle dcf-flex-right\">\n @if((operations.includes('delete') || operations.includes('update')) && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n <ion-button class=\"dcf-hidden@m\" shape=\"round\" fill=\"clear\" color=\"primary\" (click)=\"presentActionsMenu($event)\">\n <ion-icon slot=\"icon-only\" aria-hidden=\"true\" name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n <ion-popover\n #actionMenuComponent\n side=\"bottom\"\n alignment=\"left\"\n\n [isOpen]=\"actionMenuOpen\"\n (didDismiss)=\"actionMenuOpen = false\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <ion-list lines=\"none\">\n <ion-list-header>\n <h4 class=\"dcf-text-capitalize\" [innerHTML]=\"'actions' | translate\"></h4>\n </ion-list-header>\n @for (operation of ['update', 'delete']; track operation) {\n @if(operations.includes(operation)) {\n <ion-item [button]=\"true\" (click)=\"handleAction(operation, $event, component)\">\n <ion-avatar class=\"dcf-flex dcf-flex-middle\" aria-hidden=\"true\" slot=\"start\">\n @if(operation === 'update') {\n <ion-icon color=\"primary\" aria-hidden=\"true\" name=\"create-outline\"></ion-icon>\n } @else {\n <ion-icon color=\"danger\" aria-hidden=\"true\" name=\"trash\"></ion-icon>\n }\n </ion-avatar>\n <ion-label class=\"dcf-text-capitalize\">{{ operation | translate }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n </div>\n }\n <!-- @if(operations?.length && uid) {\n <div class=\"dcf-visible@m\" id=\"dcf-actions\">\n @if(operations?.includes('update')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"primary\" (click)=\"handleAction('update', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-button>\n }\n @if(operations?.includes('delete')) {\n <ion-button fill=\"clear\" size=\"small\" color=\"danger\" (click)=\"handleAction('delete', component)\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-button>\n }\n </div>\n } -->\n @if(windowWidth > 768) {\n <div id=\"end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n </div>\n }\n </div>\n </div>\n </div>\n </ion-item>\n @if(showSlideItems && uid) {\n <ion-item-options side=\"end\" (ionSwipe)=\"operations.length === 1 ? handleAction(operations[0], $event, component) : ''\">\n @if(operations?.includes('update')) {\n <ion-item-option class=\"dcf-update\" (click)=\"handleAction('update', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"create-outline\"></ion-icon>\n </ion-item-option>\n }\n @if(operations?.includes('delete')) {\n <ion-item-option class=\"dcf- delete\" (click)=\"handleAction('delete', $event, component)\" [expandable]=\"operations.length === 1\">\n <ion-icon aria-hidden=\"true\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n </ion-item-option>\n }\n </ion-item-options>\n }\n </ion-item-sliding>\n}\n", styles: ["ion-item{--min-height: 50px;--padding-top: .25rem;--padding-bottom: .25rem;--padding-start: .75rem;--padding-end: .75rem;--inner-padding-start: 0px !important;--inner-padding-end: 0px !important;--background-hover: var(--dcf-color-gray-8);--background-focused: var(--dcf-color-gray-8)}@media (prefers-color-scheme: dark){ion-item{--background-hover-opacity: .25;--background-focused-opacity: .25}}@media (prefers-color-scheme: light){ion-item{--background-hover-opacity: .1;--background-focused-opacity: .1}}ion-item.item-lines-full{--padding-top: .5rem;--padding-bottom: .5rem;--padding-start: .25rem;-padding-end:.25rem;padding:0 .65rem}ion-item.item-lines-inset{--padding-top: 0rem !important;--padding-bottom: 0rem !important;--inner-padding-top: .5rem !important;--inner-padding-bottom: .65rem !important}@media (prefers-color-scheme: light){ion-item{--border-color: var(--dcf-color-gray-2)}ion-item .dcf-info{color:var(--dcf-color-gray-6)}ion-item .dcf-item-title{color:var(--dcf-color-gray-8)}ion-item .dcf-description{color:var(--dcf-color-gray-6)}}@media (prefers-color-scheme: dark){ion-item{--border-color: var(--dcf-color-gray-6)}ion-item .dcf-description{color:var(--dcf-color-gray-4)}}ion-item .dcf-info{min-width:10vw;background:transparent!important}ion-item .dcf-grid{padding:0!important;margin:0!important;min-width:100%!important}ion-item .dcf-item-title{font-style:normal;font-weight:700}ion-item .dcf-description{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:.925rem}ion-item::part(native){min-width:100%}ion-item [slot=start]{margin-right:.5rem!important}ion-item [slot=end]{margin-left:.5rem!important}ion-item .dcf-info{font-size:.9rem}ion-item .dcf-info .dcf-subinfo.dcf-line{margin-left:.5rem}@media (min-width: var(--dcf-width-sm)){ion-item .dcf-info .dcf-subinfo.dcf-line{display:block;margin-left:0}}ion-item #dcf-actions{padding:5px}@media (max-width: var(--dcf-width-m)){ion-item #dcf-actions{display:none;pointer-events:none!important;cursor:text!important}ion-item #dcf-actions *{display:none;pointer-events:none!important;cursor:text!important}}ion-item #dcf-actions ion-button{--padding-start: 1rem;--padding-end: .75rem;--padding-top: .85rem !important;--padding-bottom: .85rem !important;color:#ccc;margin-right:.5rem!important;--background: var(--dcf-color-gray-2) !important}ion-item #dcf-actions ion-button ion-icon{position:relative;left:-1px}@media (max-width: var(--dcf-width-m)){ion-item #dcf-end,ion-item [slot=end]{display:none!important}}ion-item #dcf-end{padding-top:5px;display:flex;align-items:flex-end}ion-item .dcf-icon{display:flex;justify-content:center;align-items:center;text-align:center;margin-right:.5rem!important}ion-item .dcf-icon.dcf-grid-icon{min-width:50px;text-align:left;display:flex;justify-content:flex-start}@media (max-width: var(--dcf-width-s)){ion-item .dcf-icon{align-items:flex-start!important}}@media (prefers-color-scheme: light){ion-item .dcf-icon ion-button{color:var(--dcf-color-gray-7);--background: var(--dcf-color-gray-1) !important}}@media (prefers-color-scheme: dark){ion-item .dcf-icon ion-button{color:var(--dcf-color-gray-1)!important;--background: var(--dcf-color-gray-7) !important}}ion-item .dcf-icon ion-button ion-icon{font-size:20px}ion-item .dcf-icon ion-avatar{width:48px;height:48px;display:flex;justify-content:center;align-items:center;text-align:center}@media (prefers-color-scheme: light){ion-item .dcf-icon ion-avatar{color:var(--dcf-color-gray-7);background:var(--dcf-color-gray-1)!important}}@media (prefers-color-scheme: dark){ion-item .dcf-icon ion-avatar{color:var(--dcf-color-gray-1)!important;background:var(--dcf-background-color)!important}}ion-item .dcf-icon ion-avatar ion-icon{font-size:20px}ion-item .dcf-icon ion-avatar .dcf-icon-large{transform:translateY(5px)}ion-item-sliding{box-sizing:border-box}@media (prefers-color-scheme: light){ion-item-sliding ion-item-option:not(.dcf-delete),ion-item-sliding ion-item-option:not(.dcf-update){background:rgba(var(--dcf-color-dark-rgb),.25)!important}ion-item-sliding ion-item-option:not(.dcf-delete) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-delete) ion-icon,ion-item-sliding ion-item-option:not(.dcf-update) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-update) ion-icon{color:var(--dcf-color-gray-7)!important}ion-item-sliding ion-item-option.dcf-delete{background:rgba(var(--dcf-color-danger-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-delete .dcf-ti,ion-item-sliding ion-item-option.dcf-delete *,ion-item-sliding ion-item-option.dcf-delete ion-icon{color:var(--dcf-color-danger)!important}ion-item-sliding ion-item-option.dcf-update{background:rgba(var(--dcf-color-primary-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-update .dcf-ti,ion-item-sliding ion-item-option.dcf-update ion-icon{color:var(--dcf-color-primary)!important}}@media (prefers-color-scheme: dark){ion-item-sliding ion-item-option:not(.dcf-delete),ion-item-sliding ion-item-option:not(.dcf-update){background:rgba(var(--dcf-color-dark-rgb),1)!important}ion-item-sliding ion-item-option:not(.dcf-delete) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-delete) ion-icon,ion-item-sliding ion-item-option:not(.dcf-update) .dcf-ti,ion-item-sliding ion-item-option:not(.dcf-update) ion-icon{color:var(--dcf-color-gray-2)!important}ion-item-sliding ion-item-option.dcf-delete{background:rgba(var(--dcf-color-danger-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-delete .dcf-ti,ion-item-sliding ion-item-option.dcf-delete *,ion-item-sliding ion-item-option.dcf-delete ion-icon{color:var(--dcf-color-danger)!important}ion-item-sliding ion-item-option.dcf-update{background:rgba(var(--dcf-color-primary-rgb),.05)!important}ion-item-sliding ion-item-option.dcf-update .dcf-ti,ion-item-sliding ion-item-option.dcf-update ion-icon{color:var(--dcf-color-gray-2)!important}}ion-item-sliding[class*=active-slide]{border-color:var(--dcf-color-gray-3)}ion-item-sliding ion-item-option{color:var(--dcf-color-gray-5);box-shadow:inset 0 0 5px rgba(var(--dcf-color-dark-rgb),.15)!important;background:var(--dcf-color-gray-3)}\n"] }]
381
381
  }], ctorParameters: () => [], propDecorators: { actionMenuComponent: [{
382
382
  type: ViewChild,
383
383
  args: ['actionMenuComponent']
@@ -405,4 +405,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
405
405
  type: HostListener,
406
406
  args: ['window:resize', ['$event']]
407
407
  }] } });
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFVBQVUsRUFDVixPQUFPLEVBQ1AsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEVBQ2QsY0FBYyxFQUNkLGFBQWEsRUFDZCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7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QUFpQjttR0FBakIsaUJBQWlCLDZmQ3RGOUIsaTBMQXFIQSxzaUlEOUNJLGdCQUFnQixxbkJBQ2hCLE9BQU8seUZBQ1AsYUFBYSxnR0FDYixPQUFPLDBOQUNQLGNBQWMsbUZBQ2QsY0FBYywrRUFDZCxhQUFhLDhKQUNiLE9BQU8sMkpBQ1AsUUFBUSw2RkFHUixVQUFVOztBQUlELGlCQUFpQjtJQXRCN0IsT0FBTyxFQUFFOztHQXNCRyxpQkFBaUIsQ0FpYTdCOzs0RkFqYVksaUJBQWlCO2tCQXJCN0IsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixVQUFVO3FCQUNYO3dEQWVELG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBY2hDLEtBQUs7c0JBREosS0FBSztnQkFhRyxJQUFJO3NCQURaLEtBQUs7Z0JBYU4sSUFBSTtzQkFESCxLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixNQUFNO3NCQURMLEtBQUs7Z0JBYU4sS0FBSztzQkFESixLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSztnQkFhTixJQUFJO3NCQURILEtBQUs7Z0JBYU4sT0FBTztzQkFETixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsTUFBTTtnQkFtTFAsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IHJlbW92ZUZvY3VzVHJhcCwgc3RyaW5nVG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBnZXRXaW5kb3dXaWR0aCwgd2luZG93RXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBEeW5hbWljLCBFdmVudENvbnN0YW50cywgTGlzdEl0ZW1DdXN0b21FdmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25JdGVtLFxuICBJb25MYWJlbCxcbiAgSW9uTGlzdCxcbiAgSW9uQ29udGVudCxcbiAgSW9uSWNvbixcbiAgSW9uTGlzdEhlYWRlcixcbiAgSW9uUG9wb3ZlcixcbiAgSW9uSXRlbVNsaWRpbmcsXG4gIElvbkl0ZW1PcHRpb25zLFxuICBJb25JdGVtT3B0aW9uXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0ICogYXMgQWxsSWNvbnMgZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYSBsaXN0IGl0ZW0gd2l0aCB2YXJpb3VzIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoZSBMaXN0SXRlbUNvbXBvbmVudCBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IGV4dGVuZHMgTmd4QmFzZUNvbXBvbmVudC4gSXQgcHJvdmlkZXMgYSBmbGV4aWJsZSBhbmQgY3VzdG9taXphYmxlIGxpc3QgaXRlbSBpbnRlcmZhY2Ugd2l0aCBzdXBwb3J0IGZvciBpY29ucywgYnV0dG9ucywgYW5kIHZhcmlvdXMgdGV4dCBlbGVtZW50cy4gVGhlIGNvbXBvbmVudCBhbHNvIGhhbmRsZXMgYWN0aW9ucyBhbmQgbmF2aWdhdGlvbiBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9ucy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIE5neEJhc2VDb21wb25lbnRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2xpbmVzPSdub25lJ10gLSBEZXRlcm1pbmVzIHRoZSBsaW5lIHN0eWxlIG9mIHRoZSBpdGVtLiBDYW4gYmUgJ2luc2V0JywgJ2luc2VldCcsIG9yICdub25lJy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gaXRlbSAtIFRoZSBkYXRhIGl0ZW0gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBsaXN0IGl0ZW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gaWNvbiAtIFRoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGJlIGRpc3BsYXllZC5cbiAqIEBwYXJhbSB7J3N0YXJ0JyB8ICdlbmQnfSBbaWNvblNsb3Q9J3N0YXJ0J10gLSBUaGUgcG9zaXRpb24gb2YgdGhlIGljb24gd2l0aGluIHRoZSBpdGVtLlxuICogQHBhcmFtIHtTdHJpbmdPckJvb2xlYW59IFtidXR0b249dHJ1ZV0gLSBEZXRlcm1pbmVzIGlmIHRoZSBpdGVtIHNob3VsZCBiZWhhdmUgYXMgYSBidXR0b24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSAtIFRoZSBtYWluIHRpdGxlIG9mIHRoZSBsaXN0IGl0ZW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXSAtIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaXN0IGl0ZW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2luZm9dIC0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGxpc3QgaXRlbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3ViaW5mb10gLSBTdWItaW5mb3JtYXRpb24gZm9yIHRoZSBsaXN0IGl0ZW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIDxuZ3gtZGVjYWYtbGlzdC1pdGVtXG4gKiAgIFtpdGVtXT1cImRhdGFJdGVtXCJcbiAqICAgaWNvbj1cInN0YXJcIlxuICogICB0aXRsZT1cIkl0ZW0gVGl0bGVcIlxuICogICBkZXNjcmlwdGlvbj1cIkl0ZW0gRGVzY3JpcHRpb25cIlxuICogICAoY2xpY2tFdmVudCk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtbGlzdC1pdGVtPlxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgViBhcyBWaWV3XG4gKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICogICBDLT4+VjogSW5pdGlhbGl6ZSBjb21wb25lbnRcbiAqICAgVi0+PlU6IERpc3BsYXkgbGlzdCBpdGVtXG4gKiAgIFUtPj5WOiBDbGljayBvbiBpdGVtIG9yIGFjdGlvblxuICogICBWLT4+QzogVHJpZ2dlciBoYW5kbGVBY3Rpb24oKVxuICogICBDLT4+QzogUHJvY2VzcyBhY3Rpb25cbiAqICAgQy0+PlY6IFVwZGF0ZSB2aWV3IG9yIG5hdmlnYXRlXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1saXN0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkxpc3QsXG4gICAgSW9uTGlzdEhlYWRlcixcbiAgICBJb25JdGVtLFxuICAgIElvbkl0ZW1TbGlkaW5nLFxuICAgIElvbkl0ZW1PcHRpb25zLFxuICAgIElvbkl0ZW1PcHRpb24sXG4gICAgSW9uSWNvbixcbiAgICBJb25MYWJlbCxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25Qb3BvdmVyXG4gIF1cblxufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBhY3Rpb24gbWVudSBwb3BvdmVyIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVmlld0NoaWxkIHJlZmVyZW5jZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSFRNTElvblBvcG92ZXJFbGVtZW50XG4gICAqIHVzZWQgZm9yIGRpc3BsYXlpbmcgYWN0aW9uIG1lbnVzLiBUaGlzIHJlZmVyZW5jZSBpcyB1c2VkIHRvIHByb2dyYW1tYXRpY2FsbHlcbiAgICogY29udHJvbCB0aGUgcG9wb3Zlciwgc3VjaCBhcyBkaXNtaXNzaW5nIGl0IHdoZW4gbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTElvblBvcG92ZXJFbGVtZW50fVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDb21wb25lbnQnKVxuICBhY3Rpb25NZW51Q29tcG9uZW50ITogSFRNTElvblBvcG92ZXJFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgdGhlIGRpc3BsYXkgb2YgbGluZXMgYXJvdW5kIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaG93IGxpbmVzIGFyZSBkaXNwbGF5ZWQgYXJvdW5kIHRoZSBsaXN0IGl0ZW0gYm9yZGVycy5cbiAgICogJ2luc2V0JyBzaG93cyBsaW5lcyB3aXRoIHBhZGRpbmcsICdmdWxsJyBzaG93cyBmdWxsLXdpZHRoIGxpbmVzLCBhbmQgJ25vbmUnXG4gICAqIHJlbW92ZXMgYWxsIGxpbmVzLiBUaGlzIGFmZmVjdHMgdGhlIHZpc3VhbCBzZXBhcmF0aW9uIGJldHdlZW4gbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHR5cGUgeydpbnNldCcgfCAnZnVsbCcgfCAnbm9uZSd9XG4gICAqIEBkZWZhdWx0ICdpbnNldCdcbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBsaW5lczogJ2luc2V0JyB8ICdmdWxsJyB8ICdub25lJyA9ICdpbnNldCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZGF0YSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgcmF3IGRhdGEgdGhhdCB0aGlzIGxpc3QgaXRlbSByZXByZXNlbnRzLiBUaGlzIG9iamVjdFxuICAgKiBpcyB1c2VkIHRvIGV4dHJhY3QgZGlzcGxheSBpbmZvcm1hdGlvbiBhbmQgZm9yIHBhc3NpbmcgdG8gZXZlbnQgaGFuZGxlcnNcbiAgICogd2hlbiB0aGUgaXRlbSBpcyBpbnRlcmFjdGVkIHdpdGguIEl0IG92ZXJyaWRlcyB0aGUgYmFzZSBpdGVtIHByb3BlcnR5LlxuICAgKlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgaXRlbSE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hbWUgb2YgdGhlIGljb24gdG8gZGlzcGxheSBpbiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBkaXNwbGF5IHVzaW5nIElvbmljJ3MgaWNvbiBzeXN0ZW0uXG4gICAqIFRoZSBpY29uIG5hbWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIElvbmljIGljb24gb3IgYSBjdXN0b21cbiAgICogaWNvbiB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgaWNvbiByZWdpc3RyeS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUG9zaXRpb24gb2YgdGhlIGljb24gd2l0aGluIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBhcHBlYXJzIGF0IHRoZSBzdGFydCAobGVmdCBpbiBMVFIgbGFuZ3VhZ2VzKVxuICAgKiBvciBlbmQgKHJpZ2h0IGluIExUUiBsYW5ndWFnZXMpIG9mIHRoZSBsaXN0IGl0ZW0uIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbFxuICAgKiBsYXlvdXQgYW5kIHZpc3VhbCBoaWVyYXJjaHkgb2YgdGhlIGl0ZW0gY29udGVudC5cbiAgICpcbiAgICogQHR5cGUgeydzdGFydCcgfCAnZW5kJ31cbiAgICogQGRlZmF1bHQgJ3N0YXJ0J1xuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb25TbG90OiAnc3RhcnQnIHwgJ2VuZCcgPSdzdGFydCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb250cm9scyB3aGV0aGVyIHRoZSBsaXN0IGl0ZW0gYmVoYXZlcyBhcyBhIGNsaWNrYWJsZSBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFdoZW4gc2V0IHRvIHRydWUsIHRoZSBsaXN0IGl0ZW0gd2lsbCBoYXZlIGJ1dHRvbi1saWtlIGJlaGF2aW9yIGluY2x1ZGluZ1xuICAgKiBob3ZlciBlZmZlY3RzLCBjbGljayBoYW5kbGluZywgYW5kIGFwcHJvcHJpYXRlIGFjY2Vzc2liaWxpdHkgYXR0cmlidXRlcy5cbiAgICogV2hlbiBmYWxzZSwgdGhlIGl0ZW0gaXMgZGlzcGxheWVkIGFzIHN0YXRpYyBjb250ZW50IHdpdGhvdXQgaW50ZXJhY3RpdmUgYmVoYXZpb3IuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmdPckJvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFpbiB0aXRsZSB0ZXh0IGRpc3BsYXllZCBpbiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBwcmltYXJ5IHRleHQgY29udGVudCB0aGF0IGFwcGVhcnMgcHJvbWluZW50bHkgaW4gdGhlIGxpc3QgaXRlbS5cbiAgICogVGhpcyBpcyB0eXBpY2FsbHkgdGhlIG1vc3QgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpdGVtIGFuZCBpcyBkaXNwbGF5ZWRcbiAgICogd2l0aCBlbXBoYXNpcyBpbiB0aGUgY29tcG9uZW50J3MgdmlzdWFsIGhpZXJhcmNoeS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlY29uZGFyeSBkZXNjcmlwdGl2ZSB0ZXh0IGZvciB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnRleHQgb3IgZGV0YWlscyBhYm91dCB0aGUgaXRlbS4gVGhpcyB0ZXh0XG4gICAqIGlzIHR5cGljYWxseSBkaXNwbGF5ZWQgYmVsb3cgdGhlIHRpdGxlIHdpdGggbGVzcyB2aXN1YWwgZW1waGFzaXMuXG4gICAqIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIGNvbnRleHQgd2l0aG91dCBjbHV0dGVyaW5nIHRoZSBtYWluIHRpdGxlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBEaXNwbGF5cyBzdXBwbGVtZW50YXJ5IGluZm9ybWF0aW9uIHRoYXQgcHJvdmlkZXMgZXh0cmEgY29udGV4dFxuICAgKiBhYm91dCB0aGUgaXRlbS4gVGhpcyBjb3VsZCBpbmNsdWRlIG1ldGFkYXRhLCBzdGF0dXMgaW5mb3JtYXRpb24sIG9yXG4gICAqIG90aGVyIHJlbGV2YW50IGRldGFpbHMgdGhhdCBkb24ndCBmaXQgaW4gdGhlIHRpdGxlIG9yIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGluZm8/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdWItaW5mb3JtYXRpb24gdGV4dCBkaXNwbGF5ZWQgaW4gdGhlIGxpc3QgaXRlbS5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgdGVydGlhcnkgbGV2ZWwgaW5mb3JtYXRpb24gdGhhdCBjb21wbGVtZW50cyB0aGUgaW5mbyBmaWVsZC5cbiAgICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgYWRkaXRpb25hbCBtZXRhZGF0YSBvciBjb250ZXh0dWFsIGRldGFpbHNcbiAgICogdGhhdCBhcmUgdXNlZnVsIGJ1dCBub3QgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGl0ZW0uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc3ViaW5mbz86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIGxpc3QgaXRlbSBjbGljayBpbnRlcmFjdGlvbnMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIGN1c3RvbSBldmVudHMgd2hlbiB0aGUgbGlzdCBpdGVtIGlzIGNsaWNrZWQgb3Igd2hlbiBhY3Rpb25zXG4gICAqIGFyZSBwZXJmb3JtZWQgb24gaXQuIFRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb24sXG4gICAqIHRoZSBpdGVtIGRhdGEsIGFuZCBvdGhlciByZWxldmFudCBjb250ZXh0IGZvciBwYXJlbnQgY29tcG9uZW50cyB0byBoYW5kbGUuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8TGlzdEl0ZW1DdXN0b21FdmVudD59XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNsaWNrRXZlbnQ6ICBFdmVudEVtaXR0ZXI8TGlzdEl0ZW1DdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtQ3VzdG9tRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBzbGlkZSBpdGVtcyBhcmUgY3VycmVudGx5IGVuYWJsZWQuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHNsaWRlIGFjdGlvbnMgYmFzZWQgb24gc2NyZWVuIHNpemUgYW5kXG4gICAqIGF2YWlsYWJsZSBvcGVyYXRpb25zLiBXaGVuIHRydWUsIHVzZXJzIGNhbiBzd2lwZSBvbiB0aGUgaXRlbSB0byByZXZlYWxcbiAgICogYWN0aW9uIGJ1dHRvbnMgZm9yIG9wZXJhdGlvbnMgbGlrZSBlZGl0IGFuZCBkZWxldGUuXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIHNob3dTbGlkZUl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHdpbmRvdyB3aWR0aCBpbiBwaXhlbHMuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvdyB3aWR0aCB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZVxuICAgKiByZXNwb25zaXZlIGJlaGF2aW9yLCBzdWNoIGFzIHdoZW4gdG8gc2hvdyBvciBoaWRlIHNsaWRlIGl0ZW1zIGJhc2VkIG9uXG4gICAqIHNjcmVlbiBzaXplLiBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgb24gd2luZG93IHJlc2l6ZSBldmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgd2luZG93V2lkdGghOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgYWN0aW9uIG1lbnUgcG9wb3ZlciBpcyBjdXJyZW50bHkgb3Blbi5cbiAgICogQHN1bW1hcnkgVHJhY2tzIHRoZSBzdGF0ZSBvZiB0aGUgYWN0aW9uIG1lbnUgdG8gcHJldmVudCBtdWx0aXBsZSBpbnN0YW5jZXNcbiAgICogZnJvbSBiZWluZyBvcGVuZWQgc2ltdWx0YW5lb3VzbHkgYW5kIHRvIGVuc3VyZSBwcm9wZXIgY2xlYW51cCB3aGVuIGFjdGlvbnNcbiAgICogYXJlIHBlcmZvcm1lZC4gVXNlZCBmb3IgbWFuYWdpbmcgdGhlIHBvcG92ZXIgbGlmZWN5Y2xlLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBhY3Rpb25NZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQW5ndWxhciBOYXZDb250cm9sbGVyIHNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24uXG4gICAqIEBzdW1tYXJ5IEluamVjdGVkIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBwcm9ncmFtbWF0aWMgbmF2aWdhdGlvblxuICAgKiB3aXRoaW4gdGhlIElvbmljIGFwcGxpY2F0aW9uLiBVc2VkIGZvciBuYXZpZ2F0aW5nIHRvIGRpZmZlcmVudCByb3V0ZXMgd2hlblxuICAgKiBsaXN0IGl0ZW0gYWN0aW9ucyBhcmUgcGVyZm9ybWVkIG9yIHdoZW4gdGhlIGl0ZW0gaXRzZWxmIGlzIGNsaWNrZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtOYXZDb250cm9sbGVyfVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlciA9IGluamVjdChOYXZDb250cm9sbGVyKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGlzdEl0ZW1Db21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IExpc3RJdGVtQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIEFsc28gcmVnaXN0ZXJzXG4gICAqIGFsbCBhdmFpbGFibGUgSW9uaWMgaWNvbnMgdG8gZW5zdXJlIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpbiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiTGlzdEl0ZW1Db21wb25lbnRcIik7XG4gICAgYWRkSWNvbnMoQWxsSWNvbnMpXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgZGV0ZXJtaW5pbmcgc2xpZGUgaXRlbSB2aXNpYmlsaXR5LCBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLFxuICAgKiBidWlsZGluZyBDU1MgY2xhc3MgbmFtZXMgYmFzZWQgb24gcHJvcGVydGllcywgYW5kIGNhcHR1cmluZyB0aGUgY3VycmVudCB3aW5kb3cgd2lkdGguXG4gICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIHRoZSBjb21wb25lbnQgZm9yIHVzZXIgaW50ZXJhY3Rpb24gYnkgZW5zdXJpbmcgYWxsIHByb3BlcnRpZXMgYXJlXG4gICAqIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCByZXNwb25zaXZlIGJlaGF2aW9yIGlzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIExpc3RJdGVtQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVyBhcyBXaW5kb3dcbiAgICpcbiAgICogICBBLT4+TDogbmdPbkluaXQoKVxuICAgKiAgIEwtPj5MOiBlbmFibGVTbGlkZUl0ZW1zKClcbiAgICogICBMLT4+TDogUHJvY2VzcyBidXR0b24gYm9vbGVhblxuICAgKiAgIEwtPj5MOiBCdWlsZCBjbGFzc05hbWUgd2l0aCBmbGV4IGNsYXNzZXNcbiAgICogICBhbHQgb3BlcmF0aW9ucyBleGlzdFxuICAgKiAgICAgTC0+Pkw6IEFkZCAnYWN0aW9uJyBjbGFzc1xuICAgKiAgIGVuZFxuICAgKiAgIEwtPj5XOiBnZXRXaW5kb3dXaWR0aCgpXG4gICAqICAgVy0tPj5MOiBSZXR1cm4gY3VycmVudCB3aWR0aFxuICAgKiAgIEwtPj5MOiBTdG9yZSB3aW5kb3dXaWR0aFxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd1NsaWRlSXRlbXMgPSB0aGlzLmVuYWJsZVNsaWRlSXRlbXMoKTtcbiAgICB0aGlzLmJ1dHRvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLmJ1dHRvbik7XG5cbiAgICB0aGlzLmNsYXNzTmFtZSA9IGAke3RoaXMuY2xhc3NOYW1lfSAgZGNmLWZsZXggZGNmLWZsZXgtbWlkZGxlIGdyaWQtaXRlbWA7XG4gICAgaWYodGhpcy5vcGVyYXRpb25zPy5sZW5ndGgpXG4gICAgICB0aGlzLmNsYXNzTmFtZSArPSBgIGFjdGlvbmA7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IGdldFdpbmRvd1dpZHRoKCkgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHVzZXIgaW50ZXJhY3Rpb25zIGFuZCBhY3Rpb25zIHBlcmZvcm1lZCBvbiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpcyB0aGUgY2VudHJhbCBhY3Rpb24gaGFuZGxlciBmb3IgbGlzdCBpdGVtIGludGVyYWN0aW9ucy4gSXQgbWFuYWdlc1xuICAgKiBldmVudCBwcm9wYWdhdGlvbiwgZGlzbWlzc2VzIG9wZW4gYWN0aW9uIG1lbnVzLCByZW1vdmVzIGZvY3VzIHRyYXBzLCBhbmQgZWl0aGVyIGVtaXRzXG4gICAqIGV2ZW50cyBmb3IgcGFyZW50IGNvbXBvbmVudHMgdG8gaGFuZGxlIG9yIHBlcmZvcm1zIG5hdmlnYXRpb24gYmFzZWQgb24gdGhlIGNvbXBvbmVudCdzXG4gICAqIHJvdXRlIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGJvdGggZXZlbnQtZHJpdmVuIGFuZCBuYXZpZ2F0aW9uLWRyaXZlbiBhcmNoaXRlY3R1cmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NydWRPcGVyYXRpb25zfSBhY3Rpb24gLSBUaGUgdHlwZSBvZiBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWRcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBUaGUgYnJvd3NlciBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gT3B0aW9uYWwgdGFyZ2V0IGVsZW1lbnQgZm9yIHRoZSBldmVudFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW58dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIG5hdmlnYXRpb24gc3VjY2VzcyBvciB2b2lkIGZvciBldmVudHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBMaXN0SXRlbUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFyZW50IENvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgTmF2Q29udHJvbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRXZlbnQgU3lzdGVtXG4gICAqXG4gICAqICAgVS0+Pkw6IFBlcmZvcm0gYWN0aW9uIChjbGljay9zd2lwZSlcbiAgICogICBMLT4+TDogc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICogICBhbHQgYWN0aW9uTWVudU9wZW5cbiAgICogICAgIEwtPj5MOiBEaXNtaXNzIGFjdGlvbiBtZW51XG4gICAqICAgZW5kXG4gICAqICAgTC0+Pkw6IHJlbW92ZUZvY3VzVHJhcCgpXG4gICAqICAgYWx0IE5vIHJvdXRlIGNvbmZpZ3VyZWRcbiAgICogICAgIEwtPj5FOiB3aW5kb3dFdmVudEVtaXR0ZXIoKVxuICAgKiAgICAgTC0+PlA6IGNsaWNrRXZlbnQuZW1pdCgpXG4gICAqICAgZWxzZSBSb3V0ZSBjb25maWd1cmVkXG4gICAqICAgICBMLT4+TjogcmVkaXJlY3QoYWN0aW9uLCB1aWQpXG4gICAqICAgICBOLS0+Pkw6IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIGhhbmRsZUFjdGlvbihhY3Rpb246IENydWRPcGVyYXRpb25zLCBldmVudDogRXZlbnQsIHRhcmdldD86IEhUTUxFbGVtZW50KTogUHJvbWlzZTxib29sZWFufHZvaWQ+IHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZih0aGlzLmFjdGlvbk1lbnVPcGVuKVxuICAgICAgYXdhaXQgdGhpcy5hY3Rpb25NZW51Q29tcG9uZW50LmRpc21pc3MoKTtcbiAgICAvLyBmb3JjaW5nIHRyYXAgZm9jdXNcbiAgICByZW1vdmVGb2N1c1RyYXAoKTtcbiAgICBpZighdGhpcy5yb3V0ZSkge1xuICAgICAgY29uc3QgZXZlbnQgPSB7dGFyZ2V0OiB0YXJnZXQsIGFjdGlvbiwgcGs6IHRoaXMucGssIGRhdGE6IHRoaXMudWlkLCBuYW1lOiBFdmVudENvbnN0YW50cy5DTElDSywgY29tcG9uZW50OiB0aGlzLmNvbXBvbmVudE5hbWUgfSBhcyBMaXN0SXRlbUN1c3RvbUV2ZW50O1xuICAgICAgd2luZG93RXZlbnRFbWl0dGVyKGBMaXN0SXRlbSR7RXZlbnRDb25zdGFudHMuQ0xJQ0t9YCwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVkaXJlY3QoYWN0aW9uLCAodHlwZW9mIHRoaXMudWlkID09PSAnbnVtYmVyJyA/IGAke3RoaXMudWlkfWA6IHRoaXMudWlkKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlc3BvbnNpdmUgaGFuZGxlciB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgc2xpZGUgaXRlbXMgYmFzZWQgb24gc2NyZWVuIHNpemUgYW5kIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gdGhlIHdpbmRvdyBpcyByZXNpemVkIGFuZCBhbHNvIGR1cmluZyBjb21wb25lbnRcbiAgICogaW5pdGlhbGl6YXRpb24uIEl0IGRldGVybWluZXMgd2hldGhlciBzbGlkZSBhY3Rpb25zIHNob3VsZCBiZSBhdmFpbGFibGUgYmFzZWQgb24gdGhlIGN1cnJlbnRcbiAgICogd2luZG93IHdpZHRoIGFuZCB0aGUgcHJlc2VuY2Ugb2YgVVBEQVRFIG9yIERFTEVURSBvcGVyYXRpb25zLiBTbGlkZSBpdGVtcyBhcmUgdHlwaWNhbGx5IGhpZGRlblxuICAgKiBvbiBsYXJnZXIgc2NyZWVucyB3aGVyZSB0aGVyZSdzIHNwYWNlIGZvciBkZWRpY2F0ZWQgYWN0aW9uIGJ1dHRvbnMuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgc2xpZGUgaXRlbXMgc2hvdWxkIGJlIHNob3duLCBmYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVyBhcyBXaW5kb3dcbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIExpc3RJdGVtQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVSVxuICAgKlxuICAgKiAgIFctPj5MOiByZXNpemUgZXZlbnRcbiAgICogICBMLT4+VzogZ2V0V2luZG93V2lkdGgoKVxuICAgKiAgIFctLT4+TDogUmV0dXJuIGN1cnJlbnQgd2lkdGhcbiAgICogICBMLT4+TDogU3RvcmUgd2luZG93V2lkdGhcbiAgICogICBhbHQgTm8gb3BlcmF0aW9ucyBPUiB3aWR0aCA+IDc2OHB4XG4gICAqICAgICBMLT4+VTogc2hvd1NsaWRlSXRlbXMgPSBmYWxzZVxuICAgKiAgIGVsc2UgT3BlcmF0aW9ucyBpbmNsdWRlIFVQREFURS9ERUxFVEVcbiAgICogICAgIEwtPj5VOiBzaG93U2xpZGVJdGVtcyA9IHRydWVcbiAgICogICBlbmRcbiAgICogICBMLS0+PlU6IFJldHVybiBzaG93U2xpZGVJdGVtcyB2YWx1ZVxuICAgKlxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBlbmFibGVTbGlkZUl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMud2luZG93V2lkdGggPSBnZXRXaW5kb3dXaWR0aCgpIGFzIG51bWJlcjtcbiAgICBpZighdGhpcy5vcGVyYXRpb25zPy5sZW5ndGggfHwgdGhpcy53aW5kb3dXaWR0aCA+IDc2OClcbiAgICAgIHJldHVybiB0aGlzLnNob3dTbGlkZUl0ZW1zID0gZmFsc2U7XG4gICAgdGhpcy5zaG93U2xpZGVJdGVtcyA9IHRoaXMub3BlcmF0aW9ucy5pbmNsdWRlcyhPcGVyYXRpb25LZXlzLlVQREFURSkgfHwgdGhpcy5vcGVyYXRpb25zLmluY2x1ZGVzKE9wZXJhdGlvbktleXMuREVMRVRFKTtcbiAgICByZXR1cm4gdGhpcy5zaG93U2xpZGVJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQW5pbWF0ZXMgYW5kIHJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSBET00uXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGFwcGxpZXMgQ1NTIGFuaW1hdGlvbiBjbGFzc2VzIHRvIGNyZWF0ZSBhIHNtb290aCBmYWRlLW91dCBlZmZlY3RcbiAgICogYmVmb3JlIHJlbW92aW5nIHRoZSBlbGVtZW50IGZyb20gdGhlIERPTS4gVGhlIGFuaW1hdGlvbiBlbmhhbmNlcyB1c2VyIGV4cGVyaWVuY2UgYnlcbiAgICogcHJvdmlkaW5nIHZpc3VhbCBmZWVkYmFjayB3aGVuIGl0ZW1zIGFyZSBkZWxldGVkIG9yIHJlbW92ZWQgZnJvbSBsaXN0cy4gVGhlIHRpbWluZ1xuICAgKiBpcyBjb29yZGluYXRlZCB3aXRoIHRoZSBDU1MgYW5pbWF0aW9uIGR1cmF0aW9uIHRvIGVuc3VyZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkXG4gICAqIGFmdGVyIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGFuaW1hdGUgYW5kIHJlbW92ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIExpc3RJdGVtQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBIVE1MRWxlbWVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRE9NXG4gICAqXG4gICAqICAgTC0+PkU6IEFkZCBhbmltYXRpb24gY2xhc3Nlc1xuICAgKiAgIE5vdGUgb3ZlciBFOiB1ay1hbmltYXRpb24tZmFkZSwgdWstYW5pbWF0aW9uLW1lZGl1bSwgdWstYW5pbWF0aW9uLXJldmVyc2VcbiAgICogICBFLT4+RTogU3RhcnQgZmFkZSBhbmltYXRpb25cbiAgICogICBMLT4+TDogc2V0VGltZW91dCg2MDBtcylcbiAgICogICBOb3RlIG92ZXIgTDogV2FpdCBmb3IgYW5pbWF0aW9uIHRvIGNvbXBsZXRlXG4gICAqICAgTC0+PkQ6IGVsZW1lbnQucmVtb3ZlKClcbiAgICogICBELT4+RDogUmVtb3ZlIGVsZW1lbnQgZnJvbSBET01cbiAgICpcbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCd1ay1hbmltYXRpb24tZmFkZScsICd1ay1hbmltYXRpb24tbWVkaXVtJywgJ3VrLWFuaW1hdGlvbi1yZXZlcnNlJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7ZWxlbWVudC5yZW1vdmUoKX0sIDYwMClcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTmF2aWdhdGVzIHRvIGEgbmV3IHJvdXRlIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgYWN0aW9uIGFuZCBpdGVtIElELlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBjb25zdHJ1Y3RzIGEgbmF2aWdhdGlvbiBVUkwgdXNpbmcgdGhlIGNvbXBvbmVudCdzIHJvdXRlIGNvbmZpZ3VyYXRpb24sXG4gICAqIHRoZSBzcGVjaWZpZWQgYWN0aW9uLCBhbmQgYW4gaXRlbSBpZGVudGlmaWVyLiBJdCB1c2VzIElvbmljJ3MgTmF2Q29udHJvbGxlciB0byBwZXJmb3JtXG4gICAqIGZvcndhcmQgbmF2aWdhdGlvbiB3aXRoIGFwcHJvcHJpYXRlIGFuaW1hdGlvbnMuIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIGZvclxuICAgKiBDUlVEIG9wZXJhdGlvbnMgd2hlcmUgZWFjaCBhY3Rpb24gKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpIGhhcyBpdHMgb3duIHJvdXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgKGUuZy4sICdlZGl0JywgJ3ZpZXcnLCAnZGVsZXRlJylcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtpZF0gLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGl0ZW0gdG8gYmUgYWN0ZWQgdXBvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIG5hdmlnYXRpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBMaXN0SXRlbUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgTmF2Q29udHJvbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUm91dGVyXG4gICAqXG4gICAqICAgTC0+Pkw6IHJlZGlyZWN0KGFjdGlvbiwgaWQpXG4gICAqICAgTC0+Pkw6IENvbnN0cnVjdCBVUkw6IC97cm91dGV9L3thY3Rpb259L3tpZH1cbiAgICogICBMLT4+TjogbmF2aWdhdGVGb3J3YXJkKHVybClcbiAgICogICBOLT4+UjogTmF2aWdhdGUgdG8gY29uc3RydWN0ZWQgVVJMXG4gICAqICAgUi0tPj5OOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICBOLS0+Pkw6IFJldHVybiBib29sZWFuIHN1Y2Nlc3NcbiAgICpcbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyByZWRpcmVjdChhY3Rpb246IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZChgLyR7dGhpcy5yb3V0ZX0vJHthY3Rpb259LyR7aWQgfHwgdGhpcy51aWR9YCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXNlbnRzIHRoZSBhY3Rpb25zIG1lbnUgcG9wb3ZlciBmb3IgdGhlIGxpc3QgaXRlbS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgZGlzcGxheSBvZiBhIGNvbnRleHR1YWwgYWN0aW9uIG1lbnUgd2hlbiB0cmlnZ2VyZWQgYnkgdXNlclxuICAgKiBpbnRlcmFjdGlvbiAodHlwaWNhbGx5IGEgbG9uZyBwcmVzcyBvciByaWdodC1jbGljaykuIEl0IHN0b3BzIGV2ZW50IHByb3BhZ2F0aW9uIHRvIHByZXZlbnRcbiAgICogdW53YW50ZWQgc2lkZSBlZmZlY3RzLCByZW1vdmVzIGFueSBleGlzdGluZyBmb2N1cyB0cmFwcyBmb3IgYWNjZXNzaWJpbGl0eSwgY29uZmlndXJlcyB0aGVcbiAgICogcG9wb3ZlciB3aXRoIHRoZSB0cmlnZ2VyaW5nIGV2ZW50LCBhbmQgb3BlbnMgdGhlIGFjdGlvbiBtZW51LiBUaGUgbWVudSB0eXBpY2FsbHkgY29udGFpbnNcbiAgICogYXZhaWxhYmxlIENSVUQgb3BlcmF0aW9ucyBmb3IgdGhlIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhY3Rpb24gbWVudSByZXF1ZXN0XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgTGlzdEl0ZW1Db21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBvcG92ZXJcbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFjY2Vzc2liaWxpdHlcbiAgICpcbiAgICogICBVLT4+TDogVHJpZ2dlciBhY3Rpb24gbWVudSAobG9uZyBwcmVzcy9yaWdodC1jbGljaylcbiAgICogICBMLT4+TDogc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICogICBMLT4+QTogcmVtb3ZlRm9jdXNUcmFwKClcbiAgICogICBMLT4+UDogU2V0IGV2ZW50IHJlZmVyZW5jZVxuICAgKiAgIEwtPj5MOiBhY3Rpb25NZW51T3BlbiA9IHRydWVcbiAgICogICBMLT4+UDogRGlzcGxheSBwb3BvdmVyIHdpdGggYWN0aW9uc1xuICAgKlxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIHByZXNlbnRBY3Rpb25zTWVudShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAvLyBmb3JjaW5nIHRyYXAgZm9jdXNcbiAgICByZW1vdmVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLmFjdGlvbk1lbnVDb21wb25lbnQuZXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmFjdGlvbk1lbnVPcGVuID0gdHJ1ZTtcbiAgfVxufVxuIiwiXG5AaWYodGl0bGUgfHwgZGVzY3JpcHRpb24pIHtcbiAgPGlvbi1pdGVtLXNsaWRpbmcgI2NvbXBvbmVudD5cbiAgICA8aW9uLWl0ZW1cbiAgICAgIFtpZF09XCJ1aWRcIlxuICAgICAgW2xpbmVzXT1cImxpbmVzXCJcbiAgICAgIFtidXR0b25dPVwiYnV0dG9uXCJcbiAgICAgIFtjbGFzc109XCJjbGFzc05hbWVcIlxuICAgICAgKGNsaWNrKT1cIm9wZXJhdGlvbnM/LmluY2x1ZGVzKCdyZWFkJykgPyBoYW5kbGVBY3Rpb24oJ3JlYWQnLCAkZXZlbnQsIGNvbXBvbmVudCkgOiAnJ1xuICAgIFwiPlxuICAgICAgQGlmKGljb24gJiYgbGluZXMgIT09ICdpbnNldCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRjZi1pY29uXCIgW3Nsb3RdPVwiaWNvblNsb3RcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgbmFtZT1cInJlYWRlci1vdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2l6ZT1cImRlZmF1bHRcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLWV4cGFuZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLWZsZXggZGNmLWZsZXgtbWlkZGxlIGRjZi1ncmlkLWNvbGxhcHNlXCIgZGNmLWdyaWQ+XG4gICAgICAgICAgQGlmKGljb24gJiYgbGluZXMgPT09ICdpbnNldCcpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbiBkY2YtZ3JpZC1pY29uXCI+XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwiY2xlYXJcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgbmFtZT1cInJlYWRlci1vdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2l6ZT1cImRlZmF1bHRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRjZi13aWR0aC1leHBhbmRAcyBkY2Ytd2lkdGgtMS0xIGRjZi1sYWJlbFwiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImRjZi1pdGVtLXRpdGxlXCIgW2lubmVySFRNTF09XCJ1aWQgKyAnIC0gJyArIHRpdGxlXCIgPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGRpdiAqbmdJZiA9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZGNmLWRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZihpbmZvIHx8IHN1YmluZm8pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtYXV0b0BzIGRjZi13aWR0aC1leHBhbmQgZGNmLWluZm8gZGNmLWZsZXggZGNmLWZsZXgtcmlnaHRAc1wiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvXCIgW2lubmVySFRNTF09XCJpbmZvXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN1YmluZm9cIiBjbGFzcz1cImRjZi1zdWJpbmZvIGRjZi10ZXh0LXRydW5jYXRlXCIgW2lubmVySFRNTF09XCJzdWJpbmZvXCIgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtYXV0byBkY2YtZmxleCBkY2YtZmxleC1taWRkbGUgZGNmLWZsZXgtcmlnaHRcIj5cbiAgICAgICAgICAgIEBpZigob3BlcmF0aW9ucy5pbmNsdWRlcygnZGVsZXRlJykgfHwgb3BlcmF0aW9ucy5pbmNsdWRlcygndXBkYXRlJykpICYmIHVpZCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXZpc2libGVAbVwiIGlkPVwiZGNmLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImRjZi1oaWRkZW5AbVwiIHNoYXBlPVwicm91bmRcIiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwicHJlc2VudEFjdGlvbnNNZW51KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgbmFtZT1cImVsbGlwc2lzLXZlcnRpY2FsLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8aW9uLXBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICNhY3Rpb25NZW51Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzaWRlPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudD1cImxlZnRcIlxuXG4gICAgICAgICAgICAgICAgICBbaXNPcGVuXT1cImFjdGlvbk1lbnVPcGVuXCJcbiAgICAgICAgICAgICAgICAgIChkaWREaXNtaXNzKT1cImFjdGlvbk1lbnVPcGVuID0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJkY2YtdGV4dC1jYXBpdGFsaXplXCIgW2lubmVySFRNTF09XCInYWN0aW9ucycgfCB0cmFuc2xhdGVcIj48L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChvcGVyYXRpb24gb2YgWyd1cGRhdGUnLCAnZGVsZXRlJ107IHRyYWNrIG9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYob3BlcmF0aW9ucy5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBbYnV0dG9uXT1cInRydWVcIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKG9wZXJhdGlvbiwgJGV2ZW50LCBjb21wb25lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWF2YXRhciBjbGFzcz1cImRjZi1mbGV4IGRjZi1mbGV4LW1pZGRsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYob3BlcmF0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBuYW1lPVwiY3JlYXRlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBuYW1lPVwidHJhc2hcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiZGNmLXRleHQtY2FwaXRhbGl6ZVwiPnt7IG9wZXJhdGlvbiB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1wb3BvdmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gQGlmKG9wZXJhdGlvbnM/Lmxlbmd0aCAmJiB1aWQpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRjZi12aXNpYmxlQG1cIiBpZD1cImRjZi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgQGlmKG9wZXJhdGlvbnM/LmluY2x1ZGVzKCd1cGRhdGUnKSkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbigndXBkYXRlJywgIGNvbXBvbmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY3JlYXRlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYob3BlcmF0aW9ucz8uaW5jbHVkZXMoJ2RlbGV0ZScpKSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBzaXplPVwic21hbGxcIiBjb2xvcj1cImRhbmdlclwiIChjbGljayk9XCJoYW5kbGVBY3Rpb24oJ2RlbGV0ZScsICBjb21wb25lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInRyYXNoXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgIEBpZih3aW5kb3dXaWR0aCA+IDc2OCkge1xuICAgICAgICAgICAgICA8ZGl2IGlkPVwiZW5kXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1pdGVtPlxuICAgIEBpZihzaG93U2xpZGVJdGVtcyAmJiB1aWQpIHtcbiAgICAgIDxpb24taXRlbS1vcHRpb25zIHNpZGU9XCJlbmRcIiAoaW9uU3dpcGUpPVwib3BlcmF0aW9ucy5sZW5ndGggPT09IDEgPyBoYW5kbGVBY3Rpb24ob3BlcmF0aW9uc1swXSwgICRldmVudCwgY29tcG9uZW50KSA6ICcnXCI+XG4gICAgICAgIEBpZihvcGVyYXRpb25zPy5pbmNsdWRlcygndXBkYXRlJykpIHtcbiAgICAgICAgICA8aW9uLWl0ZW0tb3B0aW9uIGNsYXNzPVwidXBkYXRlXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbigndXBkYXRlJywgJGV2ZW50LCBjb21wb25lbnQpXCIgW2V4cGFuZGFibGVdPVwib3BlcmF0aW9ucy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1pdGVtLW9wdGlvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYob3BlcmF0aW9ucz8uaW5jbHVkZXMoJ2RlbGV0ZScpKSB7XG4gICAgICAgICAgPGlvbi1pdGVtLW9wdGlvbiBjbGFzcz1cImRlbGV0ZVwiIChjbGljayk9XCJoYW5kbGVBY3Rpb24oJ2RlbGV0ZScsICAkZXZlbnQsIGNvbXBvbmVudClcIiBbZXhwYW5kYWJsZV09XCJvcGVyYXRpb25zLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwidHJhc2hcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWl0ZW0tb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1pdGVtLW9wdGlvbnM+XG4gICAgfVxuICA8L2lvbi1pdGVtLXNsaWRpbmc+XG59XG4iXX0=
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFVBQVUsRUFDVixPQUFPLEVBQ1AsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEVBQ2QsY0FBYyxFQUNkLGFBQWEsRUFDZCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7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QUFpQjttR0FBakIsaUJBQWlCLDZmQ3RGOUIsc3ZMQXFIQSxxa01EOUNJLGdCQUFnQixxbkJBQ2hCLE9BQU8seUZBQ1AsYUFBYSxnR0FDYixPQUFPLDBOQUNQLGNBQWMsbUZBQ2QsY0FBYywrRUFDZCxhQUFhLDhKQUNiLE9BQU8sMkpBQ1AsUUFBUSw2RkFHUixVQUFVOztBQUlELGlCQUFpQjtJQXRCN0IsT0FBTyxFQUFFOztHQXNCRyxpQkFBaUIsQ0FpYTdCOzs0RkFqYVksaUJBQWlCO2tCQXJCN0IsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixVQUFVO3FCQUNYO3dEQWVELG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBY2hDLEtBQUs7c0JBREosS0FBSztnQkFhRyxJQUFJO3NCQURaLEtBQUs7Z0JBYU4sSUFBSTtzQkFESCxLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixNQUFNO3NCQURMLEtBQUs7Z0JBYU4sS0FBSztzQkFESixLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSztnQkFhTixJQUFJO3NCQURILEtBQUs7Z0JBYU4sT0FBTztzQkFETixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsTUFBTTtnQkFtTFAsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IHJlbW92ZUZvY3VzVHJhcCwgc3RyaW5nVG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBnZXRXaW5kb3dXaWR0aCwgd2luZG93RXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBEeW5hbWljLCBFdmVudENvbnN0YW50cywgTGlzdEl0ZW1DdXN0b21FdmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25JdGVtLFxuICBJb25MYWJlbCxcbiAgSW9uTGlzdCxcbiAgSW9uQ29udGVudCxcbiAgSW9uSWNvbixcbiAgSW9uTGlzdEhlYWRlcixcbiAgSW9uUG9wb3ZlcixcbiAgSW9uSXRlbVNsaWRpbmcsXG4gIElvbkl0ZW1PcHRpb25zLFxuICBJb25JdGVtT3B0aW9uXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0ICogYXMgQWxsSWNvbnMgZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYSBsaXN0IGl0ZW0gd2l0aCB2YXJpb3VzIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoZSBMaXN0SXRlbUNvbXBvbmVudCBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IGV4dGVuZHMgTmd4QmFzZUNvbXBvbmVudC4gSXQgcHJvdmlkZXMgYSBmbGV4aWJsZSBhbmQgY3VzdG9taXphYmxlIGxpc3QgaXRlbSBpbnRlcmZhY2Ugd2l0aCBzdXBwb3J0IGZvciBpY29ucywgYnV0dG9ucywgYW5kIHZhcmlvdXMgdGV4dCBlbGVtZW50cy4gVGhlIGNvbXBvbmVudCBhbHNvIGhhbmRsZXMgYWN0aW9ucyBhbmQgbmF2aWdhdGlvbiBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9ucy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIE5neEJhc2VDb21wb25lbnRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2xpbmVzPSdub25lJ10gLSBEZXRlcm1pbmVzIHRoZSBsaW5lIHN0eWxlIG9mIHRoZSBpdGVtLiBDYW4gYmUgJ2luc2V0JywgJ2luc2VldCcsIG9yICdub25lJy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gaXRlbSAtIFRoZSBkYXRhIGl0ZW0gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBsaXN0IGl0ZW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gaWNvbiAtIFRoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGJlIGRpc3BsYXllZC5cbiAqIEBwYXJhbSB7J3N0YXJ0JyB8ICdlbmQnfSBbaWNvblNsb3Q9J3N0YXJ0J10gLSBUaGUgcG9zaXRpb24gb2YgdGhlIGljb24gd2l0aGluIHRoZSBpdGVtLlxuICogQHBhcmFtIHtTdHJpbmdPckJvb2xlYW59IFtidXR0b249dHJ1ZV0gLSBEZXRlcm1pbmVzIGlmIHRoZSBpdGVtIHNob3VsZCBiZWhhdmUgYXMgYSBidXR0b24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSAtIFRoZSBtYWluIHRpdGxlIG9mIHRoZSBsaXN0IGl0ZW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXSAtIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaXN0IGl0ZW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2luZm9dIC0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGxpc3QgaXRlbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3ViaW5mb10gLSBTdWItaW5mb3JtYXRpb24gZm9yIHRoZSBsaXN0IGl0ZW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIDxuZ3gtZGVjYWYtbGlzdC1pdGVtXG4gKiAgIFtpdGVtXT1cImRhdGFJdGVtXCJcbiAqICAgaWNvbj1cInN0YXJcIlxuICogICB0aXRsZT1cIkl0ZW0gVGl0bGVcIlxuICogICBkZXNjcmlwdGlvbj1cIkl0ZW0gRGVzY3JpcHRpb25cIlxuICogICAoY2xpY2tFdmVudCk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtbGlzdC1pdGVtPlxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgViBhcyBWaWV3XG4gKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICogICBDLT4+VjogSW5pdGlhbGl6ZSBjb21wb25lbnRcbiAqICAgVi0+PlU6IERpc3BsYXkgbGlzdCBpdGVtXG4gKiAgIFUtPj5WOiBDbGljayBvbiBpdGVtIG9yIGFjdGlvblxuICogICBWLT4+QzogVHJpZ2dlciBoYW5kbGVBY3Rpb24oKVxuICogICBDLT4+QzogUHJvY2VzcyBhY3Rpb25cbiAqICAgQy0+PlY6IFVwZGF0ZSB2aWV3IG9yIG5hdmlnYXRlXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1saXN0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkxpc3QsXG4gICAgSW9uTGlzdEhlYWRlcixcbiAgICBJb25JdGVtLFxuICAgIElvbkl0ZW1TbGlkaW5nLFxuICAgIElvbkl0ZW1PcHRpb25zLFxuICAgIElvbkl0ZW1PcHRpb24sXG4gICAgSW9uSWNvbixcbiAgICBJb25MYWJlbCxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25Qb3BvdmVyXG4gIF1cblxufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBhY3Rpb24gbWVudSBwb3BvdmVyIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVmlld0NoaWxkIHJlZmVyZW5jZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSFRNTElvblBvcG92ZXJFbGVtZW50XG4gICAqIHVzZWQgZm9yIGRpc3BsYXlpbmcgYWN0aW9uIG1lbnVzLiBUaGlzIHJlZmVyZW5jZSBpcyB1c2VkIHRvIHByb2dyYW1tYXRpY2FsbHlcbiAgICogY29udHJvbCB0aGUgcG9wb3Zlciwgc3VjaCBhcyBkaXNtaXNzaW5nIGl0IHdoZW4gbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTElvblBvcG92ZXJFbGVtZW50fVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDb21wb25lbnQnKVxuICBhY3Rpb25NZW51Q29tcG9uZW50ITogSFRNTElvblBvcG92ZXJFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgdGhlIGRpc3BsYXkgb2YgbGluZXMgYXJvdW5kIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaG93IGxpbmVzIGFyZSBkaXNwbGF5ZWQgYXJvdW5kIHRoZSBsaXN0IGl0ZW0gYm9yZGVycy5cbiAgICogJ2luc2V0JyBzaG93cyBsaW5lcyB3aXRoIHBhZGRpbmcsICdmdWxsJyBzaG93cyBmdWxsLXdpZHRoIGxpbmVzLCBhbmQgJ25vbmUnXG4gICAqIHJlbW92ZXMgYWxsIGxpbmVzLiBUaGlzIGFmZmVjdHMgdGhlIHZpc3VhbCBzZXBhcmF0aW9uIGJldHdlZW4gbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHR5cGUgeydpbnNldCcgfCAnZnVsbCcgfCAnbm9uZSd9XG4gICAqIEBkZWZhdWx0ICdpbnNldCdcbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBsaW5lczogJ2luc2V0JyB8ICdmdWxsJyB8ICdub25lJyA9ICdmdWxsJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBkYXRhIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIHRoZSByYXcgZGF0YSB0aGF0IHRoaXMgbGlzdCBpdGVtIHJlcHJlc2VudHMuIFRoaXMgb2JqZWN0XG4gICAqIGlzIHVzZWQgdG8gZXh0cmFjdCBkaXNwbGF5IGluZm9ybWF0aW9uIGFuZCBmb3IgcGFzc2luZyB0byBldmVudCBoYW5kbGVyc1xuICAgKiB3aGVuIHRoZSBpdGVtIGlzIGludGVyYWN0ZWQgd2l0aC4gSXQgb3ZlcnJpZGVzIHRoZSBiYXNlIGl0ZW0gcHJvcGVydHkuXG4gICAqXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn1cbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBpdGVtITogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5IGluIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGljaCBpY29uIHRvIGRpc3BsYXkgdXNpbmcgSW9uaWMncyBpY29uIHN5c3RlbS5cbiAgICogVGhlIGljb24gbmFtZSBzaG91bGQgY29ycmVzcG9uZCB0byBhbiBhdmFpbGFibGUgSW9uaWMgaWNvbiBvciBhIGN1c3RvbVxuICAgKiBpY29uIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIHRoZSBpY29uIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb24hOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQb3NpdGlvbiBvZiB0aGUgaWNvbiB3aXRoaW4gdGhlIGxpc3QgaXRlbS5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBpY29uIGFwcGVhcnMgYXQgdGhlIHN0YXJ0IChsZWZ0IGluIExUUiBsYW5ndWFnZXMpXG4gICAqIG9yIGVuZCAocmlnaHQgaW4gTFRSIGxhbmd1YWdlcykgb2YgdGhlIGxpc3QgaXRlbS4gVGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsXG4gICAqIGxheW91dCBhbmQgdmlzdWFsIGhpZXJhcmNoeSBvZiB0aGUgaXRlbSBjb250ZW50LlxuICAgKlxuICAgKiBAdHlwZSB7J3N0YXJ0JyB8ICdlbmQnfVxuICAgKiBAZGVmYXVsdCAnc3RhcnQnXG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNsb3Q6ICdzdGFydCcgfCAnZW5kJyA9J3N0YXJ0JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgdGhlIGxpc3QgaXRlbSBiZWhhdmVzIGFzIGEgY2xpY2thYmxlIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIGxpc3QgaXRlbSB3aWxsIGhhdmUgYnV0dG9uLWxpa2UgYmVoYXZpb3IgaW5jbHVkaW5nXG4gICAqIGhvdmVyIGVmZmVjdHMsIGNsaWNrIGhhbmRsaW5nLCBhbmQgYXBwcm9wcmlhdGUgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVzLlxuICAgKiBXaGVuIGZhbHNlLCB0aGUgaXRlbSBpcyBkaXNwbGF5ZWQgYXMgc3RhdGljIGNvbnRlbnQgd2l0aG91dCBpbnRlcmFjdGl2ZSBiZWhhdmlvci5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbjogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYWluIHRpdGxlIHRleHQgZGlzcGxheWVkIGluIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IFNldHMgdGhlIHByaW1hcnkgdGV4dCBjb250ZW50IHRoYXQgYXBwZWFycyBwcm9taW5lbnRseSBpbiB0aGUgbGlzdCBpdGVtLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB0aGUgbW9zdCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGl0ZW0gYW5kIGlzIGRpc3BsYXllZFxuICAgKiB3aXRoIGVtcGhhc2lzIGluIHRoZSBjb21wb25lbnQncyB2aXN1YWwgaGllcmFyY2h5LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2Vjb25kYXJ5IGRlc2NyaXB0aXZlIHRleHQgZm9yIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBkZXRhaWxzIGFib3V0IHRoZSBpdGVtLiBUaGlzIHRleHRcbiAgICogaXMgdHlwaWNhbGx5IGRpc3BsYXllZCBiZWxvdyB0aGUgdGl0bGUgd2l0aCBsZXNzIHZpc3VhbCBlbXBoYXNpcy5cbiAgICogVXNlZnVsIGZvciBwcm92aWRpbmcgY29udGV4dCB3aXRob3V0IGNsdXR0ZXJpbmcgdGhlIG1haW4gdGl0bGUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRleHQgZm9yIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IERpc3BsYXlzIHN1cHBsZW1lbnRhcnkgaW5mb3JtYXRpb24gdGhhdCBwcm92aWRlcyBleHRyYSBjb250ZXh0XG4gICAqIGFib3V0IHRoZSBpdGVtLiBUaGlzIGNvdWxkIGluY2x1ZGUgbWV0YWRhdGEsIHN0YXR1cyBpbmZvcm1hdGlvbiwgb3JcbiAgICogb3RoZXIgcmVsZXZhbnQgZGV0YWlscyB0aGF0IGRvbid0IGZpdCBpbiB0aGUgdGl0bGUgb3IgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaW5mbz86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1Yi1pbmZvcm1hdGlvbiB0ZXh0IGRpc3BsYXllZCBpbiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyB0ZXJ0aWFyeSBsZXZlbCBpbmZvcm1hdGlvbiB0aGF0IGNvbXBsZW1lbnRzIHRoZSBpbmZvIGZpZWxkLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBhZGRpdGlvbmFsIG1ldGFkYXRhIG9yIGNvbnRleHR1YWwgZGV0YWlsc1xuICAgKiB0aGF0IGFyZSB1c2VmdWwgYnV0IG5vdCBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaXRlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzdWJpbmZvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3IgbGlzdCBpdGVtIGNsaWNrIGludGVyYWN0aW9ucy5cbiAgICogQHN1bW1hcnkgRW1pdHMgY3VzdG9tIGV2ZW50cyB3aGVuIHRoZSBsaXN0IGl0ZW0gaXMgY2xpY2tlZCBvciB3aGVuIGFjdGlvbnNcbiAgICogYXJlIHBlcmZvcm1lZCBvbiBpdC4gVGhlIGVtaXR0ZWQgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGlvbixcbiAgICogdGhlIGl0ZW0gZGF0YSwgYW5kIG90aGVyIHJlbGV2YW50IGNvbnRleHQgZm9yIHBhcmVudCBjb21wb25lbnRzIHRvIGhhbmRsZS5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxMaXN0SXRlbUN1c3RvbUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgY2xpY2tFdmVudDogIEV2ZW50RW1pdHRlcjxMaXN0SXRlbUN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEl0ZW1DdXN0b21FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHNsaWRlIGl0ZW1zIGFyZSBjdXJyZW50bHkgZW5hYmxlZC5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2Ygc2xpZGUgYWN0aW9ucyBiYXNlZCBvbiBzY3JlZW4gc2l6ZSBhbmRcbiAgICogYXZhaWxhYmxlIG9wZXJhdGlvbnMuIFdoZW4gdHJ1ZSwgdXNlcnMgY2FuIHN3aXBlIG9uIHRoZSBpdGVtIHRvIHJldmVhbFxuICAgKiBhY3Rpb24gYnV0dG9ucyBmb3Igb3BlcmF0aW9ucyBsaWtlIGVkaXQgYW5kIGRlbGV0ZS5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgc2hvd1NsaWRlSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgd2luZG93IHdpZHRoIGluIHBpeGVscy5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93IHdpZHRoIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lXG4gICAqIHJlc3BvbnNpdmUgYmVoYXZpb3IsIHN1Y2ggYXMgd2hlbiB0byBzaG93IG9yIGhpZGUgc2xpZGUgaXRlbXMgYmFzZWQgb25cbiAgICogc2NyZWVuIHNpemUuIFVwZGF0ZWQgYXV0b21hdGljYWxseSBvbiB3aW5kb3cgcmVzaXplIGV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlck9mIExpc3RJdGVtQ29tcG9uZW50XG4gICAqL1xuICB3aW5kb3dXaWR0aCE6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhY3Rpb24gbWVudSBwb3BvdmVyIGlzIGN1cnJlbnRseSBvcGVuLlxuICAgKiBAc3VtbWFyeSBUcmFja3MgdGhlIHN0YXRlIG9mIHRoZSBhY3Rpb24gbWVudSB0byBwcmV2ZW50IG11bHRpcGxlIGluc3RhbmNlc1xuICAgKiBmcm9tIGJlaW5nIG9wZW5lZCBzaW11bHRhbmVvdXNseSBhbmQgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIHdoZW4gYWN0aW9uc1xuICAgKiBhcmUgcGVyZm9ybWVkLiBVc2VkIGZvciBtYW5hZ2luZyB0aGUgcG9wb3ZlciBsaWZlY3ljbGUuXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIGFjdGlvbk1lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIE5hdkNvbnRyb2xsZXIgc2VydmljZSBmb3IgaGFuZGxpbmcgbmF2aWdhdGlvbi5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIHByb2dyYW1tYXRpYyBuYXZpZ2F0aW9uXG4gICAqIHdpdGhpbiB0aGUgSW9uaWMgYXBwbGljYXRpb24uIFVzZWQgZm9yIG5hdmlnYXRpbmcgdG8gZGlmZmVyZW50IHJvdXRlcyB3aGVuXG4gICAqIGxpc3QgaXRlbSBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgb3Igd2hlbiB0aGUgaXRlbSBpdHNlbGYgaXMgY2xpY2tlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge05hdkNvbnRyb2xsZXJ9XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBuYXZDb250cm9sbGVyOiBOYXZDb250cm9sbGVyID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMaXN0SXRlbUNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgTGlzdEl0ZW1Db21wb25lbnQgYnkgY2FsbGluZyB0aGUgcGFyZW50IGNsYXNzIGNvbnN0cnVjdG9yXG4gICAqIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lIGZvciBsb2dnaW5nIGFuZCBpZGVudGlmaWNhdGlvbiBwdXJwb3Nlcy4gQWxzbyByZWdpc3RlcnNcbiAgICogYWxsIGF2YWlsYWJsZSBJb25pYyBpY29ucyB0byBlbnN1cmUgdGhleSBjYW4gYmUgZGlzcGxheWVkIGluIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJMaXN0SXRlbUNvbXBvbmVudFwiKTtcbiAgICBhZGRJY29ucyhBbGxJY29ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBkZXRlcm1pbmluZyBzbGlkZSBpdGVtIHZpc2liaWxpdHksIHByb2Nlc3NpbmcgYm9vbGVhbiBpbnB1dHMsXG4gICAqIGJ1aWxkaW5nIENTUyBjbGFzcyBuYW1lcyBiYXNlZCBvbiBwcm9wZXJ0aWVzLCBhbmQgY2FwdHVyaW5nIHRoZSBjdXJyZW50IHdpbmRvdyB3aWR0aC5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHJlc3BvbnNpdmUgYmVoYXZpb3IgaXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgTGlzdEl0ZW1Db21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvd1xuICAgKlxuICAgKiAgIEEtPj5MOiBuZ09uSW5pdCgpXG4gICAqICAgTC0+Pkw6IGVuYWJsZVNsaWRlSXRlbXMoKVxuICAgKiAgIEwtPj5MOiBQcm9jZXNzIGJ1dHRvbiBib29sZWFuXG4gICAqICAgTC0+Pkw6IEJ1aWxkIGNsYXNzTmFtZSB3aXRoIGZsZXggY2xhc3Nlc1xuICAgKiAgIGFsdCBvcGVyYXRpb25zIGV4aXN0XG4gICAqICAgICBMLT4+TDogQWRkICdhY3Rpb24nIGNsYXNzXG4gICAqICAgZW5kXG4gICAqICAgTC0+Plc6IGdldFdpbmRvd1dpZHRoKClcbiAgICogICBXLS0+Pkw6IFJldHVybiBjdXJyZW50IHdpZHRoXG4gICAqICAgTC0+Pkw6IFN0b3JlIHdpbmRvd1dpZHRoXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93U2xpZGVJdGVtcyA9IHRoaXMuZW5hYmxlU2xpZGVJdGVtcygpO1xuICAgIHRoaXMuYnV0dG9uID0gc3RyaW5nVG9Cb29sZWFuKHRoaXMuYnV0dG9uKTtcblxuICAgIHRoaXMuY2xhc3NOYW1lID0gYCR7dGhpcy5jbGFzc05hbWV9ICBkY2YtZmxleCBkY2YtZmxleC1taWRkbGUgZ3JpZC1pdGVtYDtcbiAgICBpZih0aGlzLm9wZXJhdGlvbnM/Lmxlbmd0aClcbiAgICAgIHRoaXMuY2xhc3NOYW1lICs9IGAgYWN0aW9uYDtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gZ2V0V2luZG93V2lkdGgoKSBhcyBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgdXNlciBpbnRlcmFjdGlvbnMgYW5kIGFjdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGlzIHRoZSBjZW50cmFsIGFjdGlvbiBoYW5kbGVyIGZvciBsaXN0IGl0ZW0gaW50ZXJhY3Rpb25zLiBJdCBtYW5hZ2VzXG4gICAqIGV2ZW50IHByb3BhZ2F0aW9uLCBkaXNtaXNzZXMgb3BlbiBhY3Rpb24gbWVudXMsIHJlbW92ZXMgZm9jdXMgdHJhcHMsIGFuZCBlaXRoZXIgZW1pdHNcbiAgICogZXZlbnRzIGZvciBwYXJlbnQgY29tcG9uZW50cyB0byBoYW5kbGUgb3IgcGVyZm9ybXMgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgY29tcG9uZW50J3NcbiAgICogcm91dGUgY29uZmlndXJhdGlvbi4gVGhpcyBtZXRob2Qgc3VwcG9ydHMgYm90aCBldmVudC1kcml2ZW4gYW5kIG5hdmlnYXRpb24tZHJpdmVuIGFyY2hpdGVjdHVyZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q3J1ZE9wZXJhdGlvbnN9IGFjdGlvbiAtIFRoZSB0eXBlIG9mIENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZFxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIFRoZSBicm93c2VyIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3RhcmdldF0gLSBPcHRpb25hbCB0YXJnZXQgZWxlbWVudCBmb3IgdGhlIGV2ZW50XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbnx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gbmF2aWdhdGlvbiBzdWNjZXNzIG9yIHZvaWQgZm9yIGV2ZW50c1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIExpc3RJdGVtQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYXJlbnQgQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgTiBhcyBOYXZDb250cm9sbGVyXG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBFdmVudCBTeXN0ZW1cbiAgICpcbiAgICogICBVLT4+TDogUGVyZm9ybSBhY3Rpb24gKGNsaWNrL3N3aXBlKVxuICAgKiAgIEwtPj5MOiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgKiAgIGFsdCBhY3Rpb25NZW51T3BlblxuICAgKiAgICAgTC0+Pkw6IERpc21pc3MgYWN0aW9uIG1lbnVcbiAgICogICBlbmRcbiAgICogICBMLT4+TDogcmVtb3ZlRm9jdXNUcmFwKClcbiAgICogICBhbHQgTm8gcm91dGUgY29uZmlndXJlZFxuICAgKiAgICAgTC0+PkU6IHdpbmRvd0V2ZW50RW1pdHRlcigpXG4gICAqICAgICBMLT4+UDogY2xpY2tFdmVudC5lbWl0KClcbiAgICogICBlbHNlIFJvdXRlIGNvbmZpZ3VyZWRcbiAgICogICAgIEwtPj5OOiByZWRpcmVjdChhY3Rpb24sIHVpZClcbiAgICogICAgIE4tLT4+TDogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQWN0aW9uKGFjdGlvbjogQ3J1ZE9wZXJhdGlvbnMsIGV2ZW50OiBFdmVudCwgdGFyZ2V0PzogSFRNTEVsZW1lbnQpOiBQcm9taXNlPGJvb2xlYW58dm9pZD4ge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmKHRoaXMuYWN0aW9uTWVudU9wZW4pXG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbk1lbnVDb21wb25lbnQuZGlzbWlzcygpO1xuICAgIC8vIGZvcmNpbmcgdHJhcCBmb2N1c1xuICAgIHJlbW92ZUZvY3VzVHJhcCgpO1xuICAgIGlmKCF0aGlzLnJvdXRlKSB7XG4gICAgICBjb25zdCBldmVudCA9IHt0YXJnZXQ6IHRhcmdldCwgYWN0aW9uLCBwazogdGhpcy5waywgZGF0YTogdGhpcy51aWQsIG5hbWU6IEV2ZW50Q29uc3RhbnRzLkNMSUNLLCBjb21wb25lbnQ6IHRoaXMuY29tcG9uZW50TmFtZSB9IGFzIExpc3RJdGVtQ3VzdG9tRXZlbnQ7XG4gICAgICB3aW5kb3dFdmVudEVtaXR0ZXIoYExpc3RJdGVtJHtFdmVudENvbnN0YW50cy5DTElDS31gLCBldmVudCk7XG4gICAgICByZXR1cm4gdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWRpcmVjdChhY3Rpb24sICh0eXBlb2YgdGhpcy51aWQgPT09ICdudW1iZXInID8gYCR7dGhpcy51aWR9YDogdGhpcy51aWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzcG9uc2l2ZSBoYW5kbGVyIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBzbGlkZSBpdGVtcyBiYXNlZCBvbiBzY3JlZW4gc2l6ZSBhbmQgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbiB0aGUgd2luZG93IGlzIHJlc2l6ZWQgYW5kIGFsc28gZHVyaW5nIGNvbXBvbmVudFxuICAgKiBpbml0aWFsaXphdGlvbi4gSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHNsaWRlIGFjdGlvbnMgc2hvdWxkIGJlIGF2YWlsYWJsZSBiYXNlZCBvbiB0aGUgY3VycmVudFxuICAgKiB3aW5kb3cgd2lkdGggYW5kIHRoZSBwcmVzZW5jZSBvZiBVUERBVEUgb3IgREVMRVRFIG9wZXJhdGlvbnMuIFNsaWRlIGl0ZW1zIGFyZSB0eXBpY2FsbHkgaGlkZGVuXG4gICAqIG9uIGxhcmdlciBzY3JlZW5zIHdoZXJlIHRoZXJlJ3Mgc3BhY2UgZm9yIGRlZGljYXRlZCBhY3Rpb24gYnV0dG9ucy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBzbGlkZSBpdGVtcyBzaG91bGQgYmUgc2hvd24sIGZhbHNlIG90aGVyd2lzZVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvd1xuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgTGlzdEl0ZW1Db21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVJXG4gICAqXG4gICAqICAgVy0+Pkw6IHJlc2l6ZSBldmVudFxuICAgKiAgIEwtPj5XOiBnZXRXaW5kb3dXaWR0aCgpXG4gICAqICAgVy0tPj5MOiBSZXR1cm4gY3VycmVudCB3aWR0aFxuICAgKiAgIEwtPj5MOiBTdG9yZSB3aW5kb3dXaWR0aFxuICAgKiAgIGFsdCBObyBvcGVyYXRpb25zIE9SIHdpZHRoID4gNzY4cHhcbiAgICogICAgIEwtPj5VOiBzaG93U2xpZGVJdGVtcyA9IGZhbHNlXG4gICAqICAgZWxzZSBPcGVyYXRpb25zIGluY2x1ZGUgVVBEQVRFL0RFTEVURVxuICAgKiAgICAgTC0+PlU6IHNob3dTbGlkZUl0ZW1zID0gdHJ1ZVxuICAgKiAgIGVuZFxuICAgKiAgIEwtLT4+VTogUmV0dXJuIHNob3dTbGlkZUl0ZW1zIHZhbHVlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIGVuYWJsZVNsaWRlSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IGdldFdpbmRvd1dpZHRoKCkgYXMgbnVtYmVyO1xuICAgIGlmKCF0aGlzLm9wZXJhdGlvbnM/Lmxlbmd0aCB8fCB0aGlzLndpbmRvd1dpZHRoID4gNzY4KVxuICAgICAgcmV0dXJuIHRoaXMuc2hvd1NsaWRlSXRlbXMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTbGlkZUl0ZW1zID0gdGhpcy5vcGVyYXRpb25zLmluY2x1ZGVzKE9wZXJhdGlvbktleXMuVVBEQVRFKSB8fCB0aGlzLm9wZXJhdGlvbnMuaW5jbHVkZXMoT3BlcmF0aW9uS2V5cy5ERUxFVEUpO1xuICAgIHJldHVybiB0aGlzLnNob3dTbGlkZUl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmltYXRlcyBhbmQgcmVtb3ZlcyBhbiBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgYXBwbGllcyBDU1MgYW5pbWF0aW9uIGNsYXNzZXMgdG8gY3JlYXRlIGEgc21vb3RoIGZhZGUtb3V0IGVmZmVjdFxuICAgKiBiZWZvcmUgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUgRE9NLiBUaGUgYW5pbWF0aW9uIGVuaGFuY2VzIHVzZXIgZXhwZXJpZW5jZSBieVxuICAgKiBwcm92aWRpbmcgdmlzdWFsIGZlZWRiYWNrIHdoZW4gaXRlbXMgYXJlIGRlbGV0ZWQgb3IgcmVtb3ZlZCBmcm9tIGxpc3RzLiBUaGUgdGltaW5nXG4gICAqIGlzIGNvb3JkaW5hdGVkIHdpdGggdGhlIENTUyBhbmltYXRpb24gZHVyYXRpb24gdG8gZW5zdXJlIHRoZSBlbGVtZW50IGlzIHJlbW92ZWRcbiAgICogYWZ0ZXIgdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgRE9NIGVsZW1lbnQgdG8gYW5pbWF0ZSBhbmQgcmVtb3ZlXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgTGlzdEl0ZW1Db21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEhUTUxFbGVtZW50XG4gICAqICAgcGFydGljaXBhbnQgRCBhcyBET01cbiAgICpcbiAgICogICBMLT4+RTogQWRkIGFuaW1hdGlvbiBjbGFzc2VzXG4gICAqICAgTm90ZSBvdmVyIEU6IHVrLWFuaW1hdGlvbi1mYWRlLCB1ay1hbmltYXRpb24tbWVkaXVtLCB1ay1hbmltYXRpb24tcmV2ZXJzZVxuICAgKiAgIEUtPj5FOiBTdGFydCBmYWRlIGFuaW1hdGlvblxuICAgKiAgIEwtPj5MOiBzZXRUaW1lb3V0KDYwMG1zKVxuICAgKiAgIE5vdGUgb3ZlciBMOiBXYWl0IGZvciBhbmltYXRpb24gdG8gY29tcGxldGVcbiAgICogICBMLT4+RDogZWxlbWVudC5yZW1vdmUoKVxuICAgKiAgIEQtPj5EOiBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICAgKlxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3VrLWFuaW1hdGlvbi1mYWRlJywgJ3VrLWFuaW1hdGlvbi1tZWRpdW0nLCAndWstYW5pbWF0aW9uLXJldmVyc2UnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtlbGVtZW50LnJlbW92ZSgpfSwgNjAwKVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gYSBuZXcgcm91dGUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBhY3Rpb24gYW5kIGl0ZW0gSUQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGNvbnN0cnVjdHMgYSBuYXZpZ2F0aW9uIFVSTCB1c2luZyB0aGUgY29tcG9uZW50J3Mgcm91dGUgY29uZmlndXJhdGlvbixcbiAgICogdGhlIHNwZWNpZmllZCBhY3Rpb24sIGFuZCBhbiBpdGVtIGlkZW50aWZpZXIuIEl0IHVzZXMgSW9uaWMncyBOYXZDb250cm9sbGVyIHRvIHBlcmZvcm1cbiAgICogZm9yd2FyZCBuYXZpZ2F0aW9uIHdpdGggYXBwcm9wcmlhdGUgYW5pbWF0aW9ucy4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgZm9yXG4gICAqIENSVUQgb3BlcmF0aW9ucyB3aGVyZSBlYWNoIGFjdGlvbiAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSkgaGFzIGl0cyBvd24gcm91dGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCAoZS5nLiwgJ2VkaXQnLCAndmlldycsICdkZWxldGUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgaXRlbSB0byBiZSBhY3RlZCB1cG9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgbmF2aWdhdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIExpc3RJdGVtQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgTiBhcyBOYXZDb250cm9sbGVyXG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBSb3V0ZXJcbiAgICpcbiAgICogICBMLT4+TDogcmVkaXJlY3QoYWN0aW9uLCBpZClcbiAgICogICBMLT4+TDogQ29uc3RydWN0IFVSTDogL3tyb3V0ZX0ve2FjdGlvbn0ve2lkfVxuICAgKiAgIEwtPj5OOiBuYXZpZ2F0ZUZvcndhcmQodXJsKVxuICAgKiAgIE4tPj5SOiBOYXZpZ2F0ZSB0byBjb25zdHJ1Y3RlZCBVUkxcbiAgICogICBSLS0+Pk46IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgIE4tLT4+TDogUmV0dXJuIGJvb2xlYW4gc3VjY2Vzc1xuICAgKlxuICAgKiBAbWVtYmVyT2YgTGlzdEl0ZW1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIHJlZGlyZWN0KGFjdGlvbjogc3RyaW5nLCBpZD86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGAvJHt0aGlzLnJvdXRlfS8ke2FjdGlvbn0vJHtpZCB8fCB0aGlzLnVpZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlc2VudHMgdGhlIGFjdGlvbnMgbWVudSBwb3BvdmVyIGZvciB0aGUgbGlzdCBpdGVtLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBkaXNwbGF5IG9mIGEgY29udGV4dHVhbCBhY3Rpb24gbWVudSB3aGVuIHRyaWdnZXJlZCBieSB1c2VyXG4gICAqIGludGVyYWN0aW9uICh0eXBpY2FsbHkgYSBsb25nIHByZXNzIG9yIHJpZ2h0LWNsaWNrKS4gSXQgc3RvcHMgZXZlbnQgcHJvcGFnYXRpb24gdG8gcHJldmVudFxuICAgKiB1bndhbnRlZCBzaWRlIGVmZmVjdHMsIHJlbW92ZXMgYW55IGV4aXN0aW5nIGZvY3VzIHRyYXBzIGZvciBhY2Nlc3NpYmlsaXR5LCBjb25maWd1cmVzIHRoZVxuICAgKiBwb3BvdmVyIHdpdGggdGhlIHRyaWdnZXJpbmcgZXZlbnQsIGFuZCBvcGVucyB0aGUgYWN0aW9uIG1lbnUuIFRoZSBtZW51IHR5cGljYWxseSBjb250YWluc1xuICAgKiBhdmFpbGFibGUgQ1JVRCBvcGVyYXRpb25zIGZvciB0aGUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGFjdGlvbiBtZW51IHJlcXVlc3RcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBMaXN0SXRlbUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUG9wb3ZlclxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQWNjZXNzaWJpbGl0eVxuICAgKlxuICAgKiAgIFUtPj5MOiBUcmlnZ2VyIGFjdGlvbiBtZW51IChsb25nIHByZXNzL3JpZ2h0LWNsaWNrKVxuICAgKiAgIEwtPj5MOiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgKiAgIEwtPj5BOiByZW1vdmVGb2N1c1RyYXAoKVxuICAgKiAgIEwtPj5QOiBTZXQgZXZlbnQgcmVmZXJlbmNlXG4gICAqICAgTC0+Pkw6IGFjdGlvbk1lbnVPcGVuID0gdHJ1ZVxuICAgKiAgIEwtPj5QOiBEaXNwbGF5IHBvcG92ZXIgd2l0aCBhY3Rpb25zXG4gICAqXG4gICAqIEBtZW1iZXJPZiBMaXN0SXRlbUNvbXBvbmVudFxuICAgKi9cbiAgcHJlc2VudEFjdGlvbnNNZW51KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIC8vIGZvcmNpbmcgdHJhcCBmb2N1c1xuICAgIHJlbW92ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuYWN0aW9uTWVudUNvbXBvbmVudC5ldmVudCA9IGV2ZW50O1xuICAgIHRoaXMuYWN0aW9uTWVudU9wZW4gPSB0cnVlO1xuICB9XG59XG4iLCJcbkBpZih0aXRsZSB8fCBkZXNjcmlwdGlvbikge1xuICA8aW9uLWl0ZW0tc2xpZGluZyAjY29tcG9uZW50PlxuICAgIDxpb24taXRlbVxuICAgICAgW2lkXT1cInVpZFwiXG4gICAgICBbbGluZXNdPVwibGluZXNcIlxuICAgICAgW2J1dHRvbl09XCJidXR0b25cIlxuICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICAoY2xpY2spPVwib3BlcmF0aW9ucz8uaW5jbHVkZXMoJ3JlYWQnKSA/IGhhbmRsZUFjdGlvbigncmVhZCcsICRldmVudCwgY29tcG9uZW50KSA6ICcnXG4gICAgXCI+XG4gICAgICBAaWYoaWNvbiAmJiBsaW5lcyAhPT0gJ2luc2V0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb25cIiBbc2xvdF09XCJpY29uU2xvdFwiPlxuICAgICAgICAgIDxpb24tYXZhdGFyPlxuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIG5hbWU9XCJyZWFkZXItb3V0bGluZVwiIHNpemU9XCJkZWZhdWx0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1hdmF0YXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImRjZi13aWR0aC1leHBhbmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRjZi1mbGV4IGRjZi1mbGV4LW1pZGRsZSBkY2YtZ3JpZC1jb2xsYXBzZVwiIGRjZi1ncmlkPlxuICAgICAgICAgIEBpZihpY29uICYmIGxpbmVzID09PSAnaW5zZXQnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24gZGNmLWdyaWQtaWNvblwiPlxuICAgICAgICAgICAgICA8aW9uLWF2YXRhcj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgbmFtZT1cInJlYWRlci1vdXRsaW5lXCIgIHNpemU9XCJkZWZhdWx0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kQHMgZGNmLXdpZHRoLTEtMSBkY2YtbGFiZWxcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJkY2YtaXRlbS10aXRsZVwiIFtpbm5lckhUTUxdPVwidWlkICsgJyAtICcgKyB0aXRsZVwiID48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWYgPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cImRjZi1kZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwiZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYoaW5mbyB8fCBzdWJpbmZvKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLWF1dG9AcyBkY2Ytd2lkdGgtZXhwYW5kIGRjZi1pbmZvIGRjZi1mbGV4IGRjZi1mbGV4LXJpZ2h0QHNcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW5mb1wiIFtpbm5lckhUTUxdPVwiaW5mb1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJpbmZvXCIgY2xhc3M9XCJkY2Ytc3ViaW5mbyBkY2YtdGV4dC10cnVuY2F0ZVwiIFtpbm5lckhUTUxdPVwic3ViaW5mb1wiID48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLWF1dG8gZGNmLWZsZXggZGNmLWZsZXgtbWlkZGxlIGRjZi1mbGV4LXJpZ2h0XCI+XG4gICAgICAgICAgICBAaWYoKG9wZXJhdGlvbnMuaW5jbHVkZXMoJ2RlbGV0ZScpIHx8IG9wZXJhdGlvbnMuaW5jbHVkZXMoJ3VwZGF0ZScpKSAmJiB1aWQpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRjZi12aXNpYmxlQG1cIiBpZD1cImRjZi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJkY2YtaGlkZGVuQG1cIiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInByZXNlbnRBY3Rpb25zTWVudSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIG5hbWU9XCJlbGxpcHNpcy12ZXJ0aWNhbC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgPGlvbi1wb3BvdmVyXG4gICAgICAgICAgICAgICAgICAjYWN0aW9uTWVudUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgc2lkZT1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ9XCJsZWZ0XCJcblxuICAgICAgICAgICAgICAgICAgW2lzT3Blbl09XCJhY3Rpb25NZW51T3BlblwiXG4gICAgICAgICAgICAgICAgICAoZGlkRGlzbWlzcyk9XCJhY3Rpb25NZW51T3BlbiA9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1saXN0IGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZGNmLXRleHQtY2FwaXRhbGl6ZVwiIFtpbm5lckhUTUxdPVwiJ2FjdGlvbnMnIHwgdHJhbnNsYXRlXCI+PC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAob3BlcmF0aW9uIG9mIFsndXBkYXRlJywgJ2RlbGV0ZSddOyB0cmFjayBvcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKG9wZXJhdGlvbnMuaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gW2J1dHRvbl09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbihvcGVyYXRpb24sICRldmVudCwgY29tcG9uZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1hdmF0YXIgY2xhc3M9XCJkY2YtZmxleCBkY2YtZmxleC1taWRkbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgbmFtZT1cInRyYXNoXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImRjZi10ZXh0LWNhcGl0YWxpemVcIj57eyBvcGVyYXRpb24gfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9pb24tcG9wb3Zlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8IS0tIEBpZihvcGVyYXRpb25zPy5sZW5ndGggJiYgdWlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtdmlzaWJsZUBtXCIgaWQ9XCJkY2YtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIEBpZihvcGVyYXRpb25zPy5pbmNsdWRlcygndXBkYXRlJykpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJoYW5kbGVBY3Rpb24oJ3VwZGF0ZScsICBjb21wb25lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmKG9wZXJhdGlvbnM/LmluY2x1ZGVzKCdkZWxldGUnKSkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJkYW5nZXJcIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKCdkZWxldGUnLCAgY29tcG9uZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJ0cmFzaFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICBAaWYod2luZG93V2lkdGggPiA3NjgpIHtcbiAgICAgICAgICAgICAgPGRpdiBpZD1cImVuZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PSdlbmQnXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24taXRlbT5cbiAgICBAaWYoc2hvd1NsaWRlSXRlbXMgJiYgdWlkKSB7XG4gICAgICA8aW9uLWl0ZW0tb3B0aW9ucyBzaWRlPVwiZW5kXCIgKGlvblN3aXBlKT1cIm9wZXJhdGlvbnMubGVuZ3RoID09PSAxID8gaGFuZGxlQWN0aW9uKG9wZXJhdGlvbnNbMF0sICAkZXZlbnQsIGNvbXBvbmVudCkgOiAnJ1wiPlxuICAgICAgICBAaWYob3BlcmF0aW9ucz8uaW5jbHVkZXMoJ3VwZGF0ZScpKSB7XG4gICAgICAgICAgPGlvbi1pdGVtLW9wdGlvbiBjbGFzcz1cImRjZi11cGRhdGVcIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKCd1cGRhdGUnLCAkZXZlbnQsIGNvbXBvbmVudClcIiBbZXhwYW5kYWJsZV09XCJvcGVyYXRpb25zLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY3JlYXRlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWl0ZW0tb3B0aW9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZihvcGVyYXRpb25zPy5pbmNsdWRlcygnZGVsZXRlJykpIHtcbiAgICAgICAgPGlvbi1pdGVtLW9wdGlvbiBjbGFzcz1cImRjZi0gICAgICAgICAgZGVsZXRlXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbignZGVsZXRlJywgICRldmVudCwgY29tcG9uZW50KVwiIFtleHBhbmRhYmxlXT1cIm9wZXJhdGlvbnMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJ0cmFzaFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24taXRlbS1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWl0ZW0tb3B0aW9ucz5cbiAgICB9XG4gIDwvaW9uLWl0ZW0tc2xpZGluZz5cbn1cbiJdfQ==
@@ -179,10 +179,10 @@ export class PaginationComponent extends NgxBaseComponent {
179
179
  if (!current)
180
180
  current = this.current;
181
181
  const pages = [];
182
- function getPage(index, text = '') {
182
+ function getPage(index, text = '', clazz = 'button') {
183
183
  if (pages.some(item => item['index'] === index))
184
184
  return;
185
- pages.push({ index, text: index != null ? index.toString().padStart(2, '0') : text });
185
+ pages.push({ index, text: index != null ? index.toString().padStart(2, '0') : text, class: clazz });
186
186
  }
187
187
  if (total <= 5) {
188
188
  for (let i = 1; i <= total; i++)
@@ -200,7 +200,7 @@ export class PaginationComponent extends NgxBaseComponent {
200
200
  getPage(current);
201
201
  // Adiciona "..." entre os blocos
202
202
  if (current && current < total - 2)
203
- getPage(null, '...');
203
+ getPage(null, '...', 'separator');
204
204
  // Adiciona os dois últimos
205
205
  getPage(total - 1);
206
206
  getPage(total);
@@ -304,14 +304,14 @@ export class PaginationComponent extends NgxBaseComponent {
304
304
  this.handleClick(page > this.current ? 'next' : 'previous', page);
305
305
  }
306
306
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PaginationComponent, isStandalone: true, selector: "ngx-decaf-pagination", inputs: { totalPages: "totalPages", current: "current" }, outputs: { clickEvent: "clickEvent" }, usesInheritance: true, ngImport: i0, template: " <div [id]=\"uid\" class=\"dcf-paginator-container dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination aeon-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index'], 'dcf-disabled': page['index'] === ndivl}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [".dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:top;color:var(--dcf-color-gray-7);font-weight:600;width:36px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem}.dcf-pagination>*:not(.disabled){cursor:pointer}.dcf-pagination>*:hover .page-item{color:var(--dcf-color-primary)}.dcf-pagination>* .page-item{color:var(--dcf-color-gray-7);font-weight:600}.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--dcf-color-primary-rgb),.15)}.dcf-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:var(--dcf-color-gray-8);transition:color .1s ease-in-out}.dcf-pagination>*>:hover{color:var(--dcf-color-gray-6);text-decoration:none}.dcf-pagination .dcf-disabled>*{opacity:.5;color:var(--dcf-color-gray-6)}.dcf-pagination-resume{color:var(--dcf-color-gray-8);margin:1rem 0px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
307
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PaginationComponent, isStandalone: true, selector: "ngx-decaf-pagination", inputs: { totalPages: "totalPages", current: "current" }, outputs: { clickEvent: "clickEvent" }, usesInheritance: true, ngImport: i0, template: " <div [id]=\"uid\" class=\"dcf-paginator-container dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" [class]=\"page['class']\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index']}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [".dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:center;text-align:center;font-weight:600;width:34px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}@media (prefers-color-scheme: dark){.dcf-pagination .page-item{color:var(--dcf-color-gray-3)!important}}@media (prefers-color-scheme: light){.dcf-pagination .page-item{color:var(--dcf-color-gray-7)!important}}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem;cursor:pointer}.dcf-pagination>*.dcf-disabled{pointer-events:none;touch-action:none;cursor:text}.dcf-pagination>*.dcf-active{pointer-events:none;touch-action:none}@media (prefers-color-scheme: light){.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--dcf-color-primary-rgb),.15)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}@media (prefers-color-scheme: dark){.dcf-pagination>*.dcf-active .page-item{background:var(--dcf-color-gray-7)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}.dcf-pagination-resume{margin:1rem 0px;text-align:center}@media (prefers-color-scheme: light){.dcf-pagination-resume{color:var(--dcf-color-gray-8)}}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
308
308
  }
309
309
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, decorators: [{
310
310
  type: Component,
311
311
  args: [{ selector: 'ngx-decaf-pagination', imports: [
312
312
  ForAngularModule,
313
313
  IonIcon
314
- ], standalone: true, template: " <div [id]=\"uid\" class=\"dcf-paginator-container dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination aeon-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index'], 'dcf-disabled': page['index'] === ndivl}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [".dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:top;color:var(--dcf-color-gray-7);font-weight:600;width:36px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem}.dcf-pagination>*:not(.disabled){cursor:pointer}.dcf-pagination>*:hover .page-item{color:var(--dcf-color-primary)}.dcf-pagination>* .page-item{color:var(--dcf-color-gray-7);font-weight:600}.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--dcf-color-primary-rgb),.15)}.dcf-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:var(--dcf-color-gray-8);transition:color .1s ease-in-out}.dcf-pagination>*>:hover{color:var(--dcf-color-gray-6);text-decoration:none}.dcf-pagination .dcf-disabled>*{opacity:.5;color:var(--dcf-color-gray-6)}.dcf-pagination-resume{color:var(--dcf-color-gray-8);margin:1rem 0px;text-align:center}\n"] }]
314
+ ], standalone: true, template: " <div [id]=\"uid\" class=\"dcf-paginator-container dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" [class]=\"page['class']\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index']}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [".dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:center;text-align:center;font-weight:600;width:34px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}@media (prefers-color-scheme: dark){.dcf-pagination .page-item{color:var(--dcf-color-gray-3)!important}}@media (prefers-color-scheme: light){.dcf-pagination .page-item{color:var(--dcf-color-gray-7)!important}}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem;cursor:pointer}.dcf-pagination>*.dcf-disabled{pointer-events:none;touch-action:none;cursor:text}.dcf-pagination>*.dcf-active{pointer-events:none;touch-action:none}@media (prefers-color-scheme: light){.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--dcf-color-primary-rgb),.15)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}@media (prefers-color-scheme: dark){.dcf-pagination>*.dcf-active .page-item{background:var(--dcf-color-gray-7)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}.dcf-pagination-resume{margin:1rem 0px;text-align:center}@media (prefers-color-scheme: light){.dcf-pagination-resume{color:var(--dcf-color-gray-8)}}\n"] }]
315
315
  }], ctorParameters: () => [], propDecorators: { totalPages: [{
316
316
  type: Input,
317
317
  args: [{ required: true }]
@@ -320,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
320
320
  }], clickEvent: [{
321
321
  type: Output
322
322
  }] } });
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUE2QixNQUFNLGNBQWMsQ0FBQzs7OztBQUd6RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQVlILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBZ0I7SUFvRXZEOzs7O09BSUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBeEUvQjs7Ozs7Ozs7V0FRRztRQUNNLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQWM5Qzs7Ozs7Ozs7V0FRRztRQUVILFlBQU8sR0FBRyxDQUFDLENBQUM7UUFxQlo7Ozs7Ozs7O1dBUUc7UUFFSCxlQUFVLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBU3pGLFFBQVEsQ0FBQyxFQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBZSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdCRztJQUNILFdBQVcsQ0FBQyxTQUE4QixFQUFFLElBQWE7UUFDdkQsSUFBRyxJQUFJO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzFCLElBQUksRUFBRTtnQkFDSixTQUFTO2dCQUNULElBQUksRUFBRSxJQUFJLENBQUMsT0FBTzthQUNuQjtZQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNMLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQkc7SUFDSCxRQUFRLENBQUMsS0FBYSxFQUFFLE9BQWdCO1FBQ3RDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFckMsTUFBTSxLQUFLLEdBQWUsRUFBRSxDQUFDO1FBRTdCLFNBQVMsT0FBTyxDQUFDLEtBQW9CLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDNUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQ3hELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLDZCQUE2QjtZQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFWCxpQ0FBaUM7WUFDakMsSUFBSSxPQUFPLElBQUksT0FBTyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVqRCwrQ0FBK0M7WUFDL0MsSUFBSSxPQUFPLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXBFLGlDQUFpQztZQUNqQyxJQUFJLE9BQU8sSUFBSSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6RCwyQkFBMkI7WUFDM0IsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ0gsSUFBSTtRQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUcsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQUNILFFBQVE7UUFDTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNILFFBQVEsQ0FBQyxJQUFtQjtRQUMxQixJQUFHLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFjO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7K0dBMVNVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHdNQzdEaEMsc3VDQTJCQSwwb0NENEJJLGdCQUFnQiwwTEFDaEIsT0FBTzs7NEZBS0UsbUJBQW1CO2tCQVgvQixTQUFTOytCQUNFLHNCQUFzQixXQUd2Qjt3QkFDUCxnQkFBZ0I7d0JBQ2hCLE9BQU87cUJBQ1IsY0FDVyxJQUFJO3dEQTBCaEIsVUFBVTtzQkFEVCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFhekIsT0FBTztzQkFETixLQUFLO2dCQWdDTixVQUFVO3NCQURULE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZXZyb25CYWNrT3V0bGluZSwgY2hldnJvbkZvcndhcmRPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSB9IGZyb20gJy4uLy4uL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEJhc2VDb21wb25lbnQnO1xuaW1wb3J0IHsgRXZlbnRDb25zdGFudHMsIEtleVZhbHVlLCBTdHJpbmdPckJvb2xlYW4gfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkN1c3RvbUV2ZW50IH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHBhZ2luYXRpb24gY29tcG9uZW50IGZvciBuYXZpZ2F0aW5nIHRocm91Z2ggbXVsdGlwbGUgcGFnZXMgb2YgY29udGVudC5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgdXNlciBpbnRlcmZhY2UgZm9yIHBhZ2luYXRlZCBjb250ZW50IG5hdmlnYXRpb24sXG4gKiBkaXNwbGF5aW5nIHBhZ2UgbnVtYmVycyBhbmQgbmF2aWdhdGlvbiBjb250cm9scy4gSXQgc3VwcG9ydHMgY3VzdG9taXphYmxlIHBhZ2UgY291bnRzLFxuICogY3VycmVudCBwYWdlIHRyYWNraW5nLCBhbmQgZW1pdHMgZXZlbnRzIHdoZW4gdXNlcnMgbmF2aWdhdGUgYmV0d2VlbiBwYWdlcy5cbiAqXG4gKiBUaGUgY29tcG9uZW50IGludGVsbGlnZW50bHkgaGFuZGxlcyBsYXJnZSBudW1iZXJzIG9mIHBhZ2VzIGJ5IHNob3dpbmcgYSBzdWJzZXQgb2YgcGFnZVxuICogbnVtYmVycyB3aXRoIGVsbGlwc2VzIHRvIGluZGljYXRlIHNraXBwZWQgcGFnZXMsIGVuc3VyaW5nIHRoZSBVSSByZW1haW5zIGNsZWFuIGFuZCB1c2FibGVcbiAqIGV2ZW4gd2l0aCBtYW55IHBhZ2VzLlxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICogICBwYXJ0aWNpcGFudCBFIGFzIEV4dGVybmFsIENvbXBvbmVudFxuICpcbiAqICAgVS0+PlA6IENsaWNrIHBhZ2UgbnVtYmVyXG4gKiAgIFAtPj5QOiBuYXZpZ2F0ZShwYWdlKVxuICogICBQLT4+UDogaGFuZGxlQ2xpY2soZGlyZWN0aW9uLCBwYWdlKVxuICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggUGFnaW5hdGlvbkN1c3RvbUV2ZW50XG4gKlxuICogICBVLT4+UDogQ2xpY2sgbmV4dCBidXR0b25cbiAqICAgUC0+PlA6IG5leHQoKVxuICogICBQLT4+UDogaGFuZGxlQ2xpY2soJ25leHQnKVxuICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggUGFnaW5hdGlvbkN1c3RvbUV2ZW50XG4gKlxuICogICBVLT4+UDogQ2xpY2sgcHJldmlvdXMgYnV0dG9uXG4gKiAgIFAtPj5QOiBwcmV2aW91cygpXG4gKiAgIFAtPj5QOiBoYW5kbGVDbGljaygncHJldmlvdXMnKVxuICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggUGFnaW5hdGlvbkN1c3RvbUV2ZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIDxuZ3gtZGVjYWYtcGFnaW5hdGlvblxuICogICBbcGFnZXNdPVwiMTBcIlxuICogICBbY3VycmVudF09XCIzXCJcbiAqICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gKiA8L25neC1kZWNhZi1wYWdpbmF0aW9uPlxuICpcbiAqIEBleHRlbmRzIHtOZ3hCYXNlQ29tcG9uZW50fVxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLXBhZ2luYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIEZvckFuZ3VsYXJNb2R1bGUsXG4gICAgSW9uSWNvblxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB1c2VzIHRyYW5zbGF0aW9uIHNlcnZpY2VzLlxuICAgKiBAc3VtbWFyeSBXaGVuIHNldCB0byB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgYXR0ZW1wdCB0byB1c2UgdHJhbnNsYXRpb24gc2VydmljZXNcbiAgICogZm9yIGFueSB0ZXh0IGNvbnRlbnQuIFRoaXMgYWxsb3dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmdPckJvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG92ZXJyaWRlIHRyYW5zbGF0YWJsZTogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgdG8gZGlzcGxheSBpbiB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBmb3IgbmF2aWdhdGlvbi4gVGhpcyBpcyBhIHJlcXVpcmVkXG4gICAqIGlucHV0IHRoYXQgZGV0ZXJtaW5lcyBob3cgbWFueSBwYWdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYW5kIGRpc3BsYXllZC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHJlcXVpcmVkXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICB0b3RhbFBhZ2VzITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnRseSBhY3RpdmUgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGljaCBwYWdlIGlzIGN1cnJlbnRseSBhY3RpdmUgb3Igc2VsZWN0ZWQuIFRoaXMgdmFsdWUgaXMgdXNlZFxuICAgKiB0byBoaWdobGlnaHQgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgVUkgYW5kIGFzIGEgcmVmZXJlbmNlIHBvaW50IGZvciBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjdXJyZW50ID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHBhZ2Ugb2JqZWN0cyBmb3IgcmVuZGVyaW5nIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdGhlIHByb2Nlc3NlZCBwYWdlIGRhdGEgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKiBFYWNoIG9iamVjdCBpbmNsdWRlcyBhbiBpbmRleCAocGFnZSBudW1iZXIpIGFuZCB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWVbXX1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIHBhZ2VzITogS2V5VmFsdWVbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsYXN0IHBhZ2UgbnVtYmVyIGluIHRoZSBwYWdpbmF0aW9uLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBwYWdlIGZvciBib3VuZGFyeSBjaGVja2luZyBkdXJpbmcgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGxhc3QhOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBwYWdpbmF0aW9uIG5hdmlnYXRpb24gZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBhIGN1c3RvbSBldmVudCB3aGVuIHVzZXJzIG5hdmlnYXRlIGJldHdlZW4gcGFnZXMsIGVpdGhlciBieSBjbGlja2luZ1xuICAgKiBvbiBwYWdlIG51bWJlcnMgb3IgdXNpbmcgdGhlIG5leHQvcHJldmlvdXMgYnV0dG9ucy4gVGhlIGV2ZW50IGNvbnRhaW5zIGluZm9ybWF0aW9uXG4gICAqIGFib3V0IHRoZSBuYXZpZ2F0aW9uIGRpcmVjdGlvbiBhbmQgdGhlIHRhcmdldCBwYWdlIG51bWJlci5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxQYWdpbmF0aW9uQ3VzdG9tRXZlbnQ+fVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uQ3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uQ3VzdG9tRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFBhZ2luYXRpb25Db21wb25lbnQuXG4gICAqIENhbGxzIHRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgY29tcG9uZW50IG5hbWUgZm9yIGdlbmVyYXRlIGJhc2UgbG9jYWxlIHN0cmluZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUGFnaW5hdGlvbkNvbXBvbmVudFwiKTtcbiAgICAgYWRkSWNvbnMoe2NoZXZyb25CYWNrT3V0bGluZSwgY2hldnJvbkZvcndhcmRPdXRsaW5lfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgaW5pdGlhbGl6aW5nIHRoZSBsb2NhbGUgc2V0dGluZ3MgYmFzZWQgb24gdGhlXG4gICAqIHRyYW5zbGF0YWJsZSBwcm9wZXJ0eSwgZ2VuZXJhdGluZyB0aGUgcGFnZSBudW1iZXJzIGJhc2VkIG9uIHRoZSB0b3RhbCBwYWdlcyBhbmRcbiAgICogY3VycmVudCBwYWdlLCBhbmQgc3RvcmluZyB0aGUgbGFzdCBwYWdlIG51bWJlciBmb3IgYm91bmRhcnkgY2hlY2tpbmcuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBBLT4+UDogbmdPbkluaXQoKVxuICAgKiAgIFAtPj5QOiBnZXRMb2NhbGUodHJhbnNsYXRhYmxlKVxuICAgKiAgIFAtPj5QOiBTZXQgbG9jYWxlXG4gICAqICAgUC0+PlA6IGdldFBhZ2VzKGRhdGEsIGN1cnJlbnQpXG4gICAqICAgUC0+PlA6IFNldCBwYWdlcyBhcnJheVxuICAgKiAgIFAtPj5QOiBTZXQgbGFzdCBwYWdlIG51bWJlclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbGUodGhpcy50cmFuc2xhdGFibGUpO1xuICAgIHRoaXMucGFnZXMgPSB0aGlzLmdldFBhZ2VzKHRoaXMudG90YWxQYWdlcywgdGhpcy5jdXJyZW50KSBhcyBLZXlWYWx1ZVtdO1xuICAgIHRoaXMubGFzdCA9IHRoaXMudG90YWxQYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGljayBldmVudHMgb24gcGFnaW5hdGlvbiBjb250cm9scy5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHVzZXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LCB1cGRhdGluZyB0aGVcbiAgICogY3VycmVudCBwYWdlIGlmIHNwZWNpZmllZCBhbmQgZW1pdHRpbmcgYW4gZXZlbnQgd2l0aCBuYXZpZ2F0aW9uIGRldGFpbHMuIFRoaXMgbWV0aG9kXG4gICAqIGlzIGNhbGxlZCB3aGVuIHVzZXJzIGNsaWNrIG9uIHBhZ2UgbnVtYmVycyBvciBuYXZpZ2F0aW9uIGJ1dHRvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7KCduZXh0JyB8ICdwcmV2aW91cycpfSBkaXJlY3Rpb24gLSBUaGUgZGlyZWN0aW9uIG9mIG5hdmlnYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYWdlXSAtIE9wdGlvbmFsIHBhZ2UgbnVtYmVyIHRvIG5hdmlnYXRlIHRvIGRpcmVjdGx5XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEV4dGVybmFsIENvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwYWdpbmF0aW9uIGNvbnRyb2xcbiAgICogICBQLT4+UDogaGFuZGxlQ2xpY2soZGlyZWN0aW9uLCBwYWdlPylcbiAgICogICBhbHQgcGFnZSBpcyBwcm92aWRlZFxuICAgKiAgICAgUC0+PlA6IFVwZGF0ZSBjdXJyZW50IHBhZ2VcbiAgICogICBlbmRcbiAgICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggZGlyZWN0aW9uIGFuZCBwYWdlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDbGljayhkaXJlY3Rpb246ICduZXh0JyB8ICdwcmV2aW91cycsIHBhZ2U/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZihwYWdlKVxuICAgICAgdGhpcy5jdXJyZW50ID0gcGFnZTtcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICBuYW1lOiBFdmVudENvbnN0YW50cy5DTElDSyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBwYWdlOiB0aGlzLmN1cnJlbnRcbiAgICAgIH0sXG4gICAgICBjb21wb25lbnQ6IHRoaXMuY29tcG9uZW50TmFtZVxuICAgIH0gYXMgUGFnaW5hdGlvbkN1c3RvbUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIHRoZSBhcnJheSBvZiBwYWdlIG9iamVjdHMgZm9yIGRpc3BsYXkuXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYW4gYXJyYXkgb2YgcGFnZSBvYmplY3RzIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgYW5kXG4gICAqIHRoZSBjdXJyZW50IHBhZ2UuIEZvciBzbWFsbCBwYWdlIGNvdW50cyAo4omkNSksIGFsbCBwYWdlcyBhcmUgc2hvd24uIEZvciBsYXJnZXIgcGFnZVxuICAgKiBjb3VudHMsIGEgc3Vic2V0IGlzIHNob3duIHdpdGggZWxsaXBzZXMgdG8gaW5kaWNhdGUgc2tpcHBlZCBwYWdlcy4gVGhpcyBlbnN1cmVzXG4gICAqIHRoZSBwYWdpbmF0aW9uIFVJIHJlbWFpbnMgY2xlYW4gYW5kIHVzYWJsZSBldmVuIHdpdGggbWFueSBwYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsIC0gVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW2N1cnJlbnRdIC0gVGhlIGN1cnJlbnQgYWN0aXZlIHBhZ2UgKGRlZmF1bHRzIHRvIHRoaXMuY3VycmVudClcbiAgICogQHJldHVybnMge0tleVZhbHVlW119IEFycmF5IG9mIHBhZ2Ugb2JqZWN0cyB3aXRoIGluZGV4IGFuZCB0ZXh0IHByb3BlcnRpZXNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogZmxvd2NoYXJ0IFREXG4gICAqICAgQVtTdGFydF0gLS0+IEJ7dG90YWwgPD0gNT99XG4gICAqICAgQiAtLT58WWVzfCBDW1Nob3cgYWxsIHBhZ2VzXVxuICAgKiAgIEIgLS0+fE5vfCBEW1Nob3cgZmlyc3QgcGFnZV1cbiAgICogICBEIC0tPiBFW1Nob3cgbGFzdCBwYWdlc11cbiAgICogICBFIC0tPiBGW0FkZCBlbGxpcHNlcyBmb3Igc2tpcHBlZCBwYWdlc11cbiAgICogICBDIC0tPiBHW1JldHVybiBwYWdlcyBhcnJheV1cbiAgICogICBGIC0tPiBHXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBnZXRQYWdlcyh0b3RhbDogbnVtYmVyLCBjdXJyZW50PzogbnVtYmVyKTogS2V5VmFsdWVbXSB7XG4gICAgaWYgKCFjdXJyZW50KSBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgY29uc3QgcGFnZXM6IEtleVZhbHVlW10gPSBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFBhZ2UoaW5kZXg6IG51bWJlciB8IG51bGwsIHRleHQgPSAnJykge1xuICAgICAgICBpZiAocGFnZXMuc29tZShpdGVtID0+IGl0ZW1bJ2luZGV4J10gPT09IGluZGV4KSkgcmV0dXJuO1xuICAgICAgICBwYWdlcy5wdXNoKHsgaW5kZXgsIHRleHQ6IGluZGV4ICE9IG51bGwgPyBpbmRleC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgOiB0ZXh0IH0pO1xuICAgIH1cblxuICAgIGlmICh0b3RhbCA8PSA1KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsOyBpKyspIGdldFBhZ2UoaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkaWNpb25hIG9zIGRvaXMgcHJpbWVpcm9zXG4gICAgICBnZXRQYWdlKDEpO1xuICAgICAgZ2V0UGFnZSgyKTtcblxuICAgICAgLy8gQWRpY2lvbmEgXCIuLi5cIiBlbnRyZSBvcyBibG9jb3NcbiAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgPiAzKSBnZXRQYWdlKG51bGwsICcuLi4nKTtcblxuICAgICAgLy8gQWRpY2lvbmEgYSBww6FnaW5hIGF0dWFsIChzZSBlc3RpdmVyIG5vIG1laW8pXG4gICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50ID4gMiAmJiBjdXJyZW50IDwgdG90YWwgLSAxKSBnZXRQYWdlKGN1cnJlbnQpO1xuXG4gICAgICAvLyBBZGljaW9uYSBcIi4uLlwiIGVudHJlIG9zIGJsb2Nvc1xuICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudCA8IHRvdGFsIC0gMikgZ2V0UGFnZShudWxsLCAnLi4uJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIG9zIGRvaXMgw7psdGltb3NcbiAgICAgIGdldFBhZ2UodG90YWwgLSAxKTtcbiAgICAgIGdldFBhZ2UodG90YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBhY3RpdmUgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgdGhhdCBpcyBhY3RpdmUgaW4gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgcGFnZSBzdGF0ZSBmcm9tIG91dHNpZGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGdldEN1cnJlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcGFnZS5cbiAgICogQHN1bW1hcnkgSW5jcmVtZW50cyB0aGUgY3VycmVudCBwYWdlIG51bWJlciBpZiBub3QgYXQgdGhlIGxhc3QgcGFnZSBhbmQgdHJpZ2dlcnNcbiAgICogdGhlIGNsaWNrIGV2ZW50IGhhbmRsZXIgd2l0aCAnbmV4dCcgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcIm5leHRcIiBidXR0b24gaW4gdGhlIHBhZ2luYXRpb24gVUkuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBVLT4+UDogQ2xpY2sgbmV4dCBidXR0b25cbiAgICogICBQLT4+UDogbmV4dCgpXG4gICAqICAgYWx0IHBhZ2UgPD0gbWF4IHBhZ2VzXG4gICAqICAgICBQLT4+UDogSW5jcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCduZXh0JylcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG5leHQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuY3VycmVudCArIDE7XG4gICAgaWYocGFnZSA8PSBPYmplY3Qua2V5cyh0aGlzLnBhZ2VzKT8ubGVuZ3RoIHx8IDApIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IHBhZ2U7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKCduZXh0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gICAqIEBzdW1tYXJ5IERlY3JlbWVudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaWYgbm90IGF0IHRoZSBmaXJzdCBwYWdlIGFuZCB0cmlnZ2Vyc1xuICAgKiB0aGUgY2xpY2sgZXZlbnQgaGFuZGxlciB3aXRoICdwcmV2aW91cycgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcInByZXZpb3VzXCIgYnV0dG9uIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIHByZXZpb3VzIGJ1dHRvblxuICAgKiAgIFAtPj5QOiBwcmV2aW91cygpXG4gICAqICAgYWx0IHBhZ2UgPiAwXG4gICAqICAgICBQLT4+UDogRGVjcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCdwcmV2aW91cycpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlID0gdGhpcy5jdXJyZW50IC0gMTtcbiAgICBpZihwYWdlID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50ID0gcGFnZTtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soJ3ByZXZpb3VzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBwYWdlIG51bWJlci5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyB0aGUgY3VycmVudCBwYWdlIHRvIHRoZSBzcGVjaWZpZWQgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXJzXG4gICAqIHRoZSBjbGljayBldmVudCBoYW5kbGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5XG4gICAqIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBkaXJlY3RseSBvbiBhIHBhZ2UgbnVtYmVyIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IG51bGx9IHBhZ2UgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwYWdlIG51bWJlclxuICAgKiAgIFAtPj5QOiBuYXZpZ2F0ZShwYWdlKVxuICAgKiAgIGFsdCBwYWdlIGlzIG5vdCBudWxsIGFuZCBkaWZmZXJlbnQgZnJvbSBjdXJyZW50XG4gICAqICAgICBQLT4+UDogRGV0ZXJtaW5lIGRpcmVjdGlvbiAobmV4dC9wcmV2aW91cylcbiAgICogICAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2UpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBuYXZpZ2F0ZShwYWdlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYocGFnZSAhPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnQgIT09IHBhZ2UgYXMgbnVtYmVyKVxuICAgICAgdGhpcy5oYW5kbGVDbGljayhwYWdlID4gdGhpcy5jdXJyZW50ID8gJ25leHQnIDogJ3ByZXZpb3VzJywgcGFnZSk7XG4gIH1cbn1cbiIsIiA8ZGl2IFtpZF09XCJ1aWRcIiBjbGFzcz1cImRjZi1wYWdpbmF0b3ItY29udGFpbmVyIGRjZi1mbGV4IGRjZi1mbGV4LWNlbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbi1yZXN1bWVcIiBbaW5uZXJIVE1MXT1cImxvY2FsZSArICcucmVzdW1lJyB8IHRyYW5zbGF0ZToge3ZhbHVlMDogY3VycmVudCwgdmFsdWUxOiBsYXN0fVwiPjwvZGl2PlxuICAgIDxkaXYgI3BhZ2luYXRpb25Db21wb25lbnQgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbiBhZW9uLXBhZ2luYXRpb24gZGNmLWZsZXgtY2VudGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGFyaWEtbGFiZWw9XCJwcmV2aW91c1wiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicHJldmlvdXMoKVwiIFtuZ0NsYXNzXT1cInsnZGNmLWRpc2FibGVkJzogY3VycmVudCA9PT0gMX1cIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBmb3IocGFnZSBvZiBwYWdlczsgdHJhY2sgcGFnZSkge1xuICAgICAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJuYXZpZ2F0ZShwYWdlWydpbmRleCddKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmF2aWdhdGUocGFnZVsnaW5kZXgnXSlcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGNmLWFjdGl2ZSc6IGN1cnJlbnQgPT09IHBhZ2VbJ2luZGV4J10sICdkY2YtZGlzYWJsZWQnOiBwYWdlWydpbmRleCddID09PSBuZGl2bH1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtaXRlbVwiPnt7IHBhZ2VbJ3RleHQnXSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2XG4gICAgICAgIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJuZXh0KClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJuZXh0KClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2RjZi1kaXNhYmxlZCc6IGN1cnJlbnQgPT09IGxhc3R9XCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUE2QixNQUFNLGNBQWMsQ0FBQzs7OztBQUd6RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQVlILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBZ0I7SUFvRXZEOzs7O09BSUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBeEUvQjs7Ozs7Ozs7V0FRRztRQUNNLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQWM5Qzs7Ozs7Ozs7V0FRRztRQUVILFlBQU8sR0FBRyxDQUFDLENBQUM7UUFxQlo7Ozs7Ozs7O1dBUUc7UUFFSCxlQUFVLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBU3pGLFFBQVEsQ0FBQyxFQUFDLGtCQUFrQixFQUFF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Qjt3QkFDaEIsT0FBTztxQkFDUixjQUNXLElBQUk7d0RBMEJoQixVQUFVO3NCQURULEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWF6QixPQUFPO3NCQUROLEtBQUs7Z0JBZ0NOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hldnJvbkJhY2tPdXRsaW5lLCBjaGV2cm9uRm9yd2FyZE91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBFdmVudENvbnN0YW50cywgS2V5VmFsdWUsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ3VzdG9tRXZlbnQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgcGFnaW5hdGlvbiBjb21wb25lbnQgZm9yIG5hdmlnYXRpbmcgdGhyb3VnaCBtdWx0aXBsZSBwYWdlcyBvZiBjb250ZW50LlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSB1c2VyIGludGVyZmFjZSBmb3IgcGFnaW5hdGVkIGNvbnRlbnQgbmF2aWdhdGlvbixcbiAqIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIGFuZCBuYXZpZ2F0aW9uIGNvbnRyb2xzLiBJdCBzdXBwb3J0cyBjdXN0b21pemFibGUgcGFnZSBjb3VudHMsXG4gKiBjdXJyZW50IHBhZ2UgdHJhY2tpbmcsIGFuZCBlbWl0cyBldmVudHMgd2hlbiB1c2VycyBuYXZpZ2F0ZSBiZXR3ZWVuIHBhZ2VzLlxuICpcbiAqIFRoZSBjb21wb25lbnQgaW50ZWxsaWdlbnRseSBoYW5kbGVzIGxhcmdlIG51bWJlcnMgb2YgcGFnZXMgYnkgc2hvd2luZyBhIHN1YnNldCBvZiBwYWdlXG4gKiBudW1iZXJzIHdpdGggZWxsaXBzZXMgdG8gaW5kaWNhdGUgc2tpcHBlZCBwYWdlcywgZW5zdXJpbmcgdGhlIFVJIHJlbWFpbnMgY2xlYW4gYW5kIHVzYWJsZVxuICogZXZlbiB3aXRoIG1hbnkgcGFnZXMuXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gKiAgIHBhcnRpY2lwYW50IEUgYXMgRXh0ZXJuYWwgQ29tcG9uZW50XG4gKlxuICogICBVLT4+UDogQ2xpY2sgcGFnZSBudW1iZXJcbiAqICAgUC0+PlA6IG5hdmlnYXRlKHBhZ2UpXG4gKiAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2UpXG4gKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBQYWdpbmF0aW9uQ3VzdG9tRXZlbnRcbiAqXG4gKiAgIFUtPj5QOiBDbGljayBuZXh0IGJ1dHRvblxuICogICBQLT4+UDogbmV4dCgpXG4gKiAgIFAtPj5QOiBoYW5kbGVDbGljaygnbmV4dCcpXG4gKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBQYWdpbmF0aW9uQ3VzdG9tRXZlbnRcbiAqXG4gKiAgIFUtPj5QOiBDbGljayBwcmV2aW91cyBidXR0b25cbiAqICAgUC0+PlA6IHByZXZpb3VzKClcbiAqICAgUC0+PlA6IGhhbmRsZUNsaWNrKCdwcmV2aW91cycpXG4gKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBQYWdpbmF0aW9uQ3VzdG9tRXZlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogPG5neC1kZWNhZi1wYWdpbmF0aW9uXG4gKiAgIFtwYWdlc109XCIxMFwiXG4gKiAgIFtjdXJyZW50XT1cIjNcIlxuICogICAoY2xpY2tFdmVudCk9XCJoYW5kbGVQYWdlQ2hhbmdlKCRldmVudClcIj5cbiAqIDwvbmd4LWRlY2FmLXBhZ2luYXRpb24+XG4gKlxuICogQGV4dGVuZHMge05neEJhc2VDb21wb25lbnR9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgRm9yQW5ndWxhck1vZHVsZSxcbiAgICBJb25JY29uXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG5cbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgY29tcG9uZW50IHVzZXMgdHJhbnNsYXRpb24gc2VydmljZXMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gc2V0IHRvIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBhdHRlbXB0IHRvIHVzZSB0cmFuc2xhdGlvbiBzZXJ2aWNlc1xuICAgKiBmb3IgYW55IHRleHQgY29udGVudC4gVGhpcyBhbGxvd3MgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIG9mIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgb3ZlcnJpZGUgdHJhbnNsYXRhYmxlOiBTdHJpbmdPckJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyB0byBkaXNwbGF5IGluIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgYXZhaWxhYmxlIGZvciBuYXZpZ2F0aW9uLiBUaGlzIGlzIGEgcmVxdWlyZWRcbiAgICogaW5wdXQgdGhhdCBkZXRlcm1pbmVzIGhvdyBtYW55IHBhZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgZGlzcGxheWVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAcmVxdWlyZWRcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHRvdGFsUGFnZXMhOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudGx5IGFjdGl2ZSBwYWdlIG51bWJlci5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoaWNoIHBhZ2UgaXMgY3VycmVudGx5IGFjdGl2ZSBvciBzZWxlY3RlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBVSSBhbmQgYXMgYSByZWZlcmVuY2UgcG9pbnQgZm9yIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGN1cnJlbnQgPSAxO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgcGFnZSBvYmplY3RzIGZvciByZW5kZXJpbmcgaW4gdGhlIHRlbXBsYXRlLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgcHJvY2Vzc2VkIHBhZ2UgZGF0YSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRpb24gVUkuXG4gICAqIEVhY2ggb2JqZWN0IGluY2x1ZGVzIGFuIGluZGV4IChwYWdlIG51bWJlcikgYW5kIHRleHQgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZVtdfVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgcGFnZXMhOiBLZXlWYWx1ZVtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGxhc3QgcGFnZSBudW1iZXIgaW4gdGhlIHBhZ2luYXRpb24uXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IHBhZ2UgZm9yIGJvdW5kYXJ5IGNoZWNraW5nIGR1cmluZyBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgbGFzdCE6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIHBhZ2luYXRpb24gbmF2aWdhdGlvbiBldmVudHMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIGEgY3VzdG9tIGV2ZW50IHdoZW4gdXNlcnMgbmF2aWdhdGUgYmV0d2VlbiBwYWdlcywgZWl0aGVyIGJ5IGNsaWNraW5nXG4gICAqIG9uIHBhZ2UgbnVtYmVycyBvciB1c2luZyB0aGUgbmV4dC9wcmV2aW91cyBidXR0b25zLiBUaGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb25cbiAgICogYWJvdXQgdGhlIG5hdmlnYXRpb24gZGlyZWN0aW9uIGFuZCB0aGUgdGFyZ2V0IHBhZ2UgbnVtYmVyLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPFBhZ2luYXRpb25DdXN0b21FdmVudD59XG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgY2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPFBhZ2luYXRpb25DdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2luYXRpb25DdXN0b21FdmVudD4oKTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgUGFnaW5hdGlvbkNvbXBvbmVudC5cbiAgICogQ2FsbHMgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgZ2VuZXJhdGUgYmFzZSBsb2NhbGUgc3RyaW5nLlxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJQYWdpbmF0aW9uQ29tcG9uZW50XCIpO1xuICAgICBhZGRJY29ucyh7Y2hldnJvbkJhY2tPdXRsaW5lLCBjaGV2cm9uRm9yd2FyZE91dGxpbmV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIHNldHMgdGhlIGlucHV0IHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBpbml0aWFsaXppbmcgdGhlIGxvY2FsZSBzZXR0aW5ncyBiYXNlZCBvbiB0aGVcbiAgICogdHJhbnNsYXRhYmxlIHByb3BlcnR5LCBnZW5lcmF0aW5nIHRoZSBwYWdlIG51bWJlcnMgYmFzZWQgb24gdGhlIHRvdGFsIHBhZ2VzIGFuZFxuICAgKiBjdXJyZW50IHBhZ2UsIGFuZCBzdG9yaW5nIHRoZSBsYXN0IHBhZ2UgbnVtYmVyIGZvciBib3VuZGFyeSBjaGVja2luZy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5QOiBuZ09uSW5pdCgpXG4gICAqICAgUC0+PlA6IGdldExvY2FsZSh0cmFuc2xhdGFibGUpXG4gICAqICAgUC0+PlA6IFNldCBsb2NhbGVcbiAgICogICBQLT4+UDogZ2V0UGFnZXMoZGF0YSwgY3VycmVudClcbiAgICogICBQLT4+UDogU2V0IHBhZ2VzIGFycmF5XG4gICAqICAgUC0+PlA6IFNldCBsYXN0IHBhZ2UgbnVtYmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5wYWdlcyA9IHRoaXMuZ2V0UGFnZXModGhpcy50b3RhbFBhZ2VzLCB0aGlzLmN1cnJlbnQpIGFzIEtleVZhbHVlW107XG4gICAgdGhpcy5sYXN0ID0gdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBwYWdpbmF0aW9uIGNvbnRyb2xzLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgdXNlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQsIHVwZGF0aW5nIHRoZVxuICAgKiBjdXJyZW50IHBhZ2UgaWYgc3BlY2lmaWVkIGFuZCBlbWl0dGluZyBhbiBldmVudCB3aXRoIG5hdmlnYXRpb24gZGV0YWlscy4gVGhpcyBtZXRob2RcbiAgICogaXMgY2FsbGVkIHdoZW4gdXNlcnMgY2xpY2sgb24gcGFnZSBudW1iZXJzIG9yIG5hdmlnYXRpb24gYnV0dG9ucy5cbiAgICpcbiAgICogQHBhcmFtIHsoJ25leHQnIHwgJ3ByZXZpb3VzJyl9IGRpcmVjdGlvbiAtIFRoZSBkaXJlY3Rpb24gb2YgbmF2aWdhdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhZ2VdIC0gT3B0aW9uYWwgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG8gZGlyZWN0bHlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRXh0ZXJuYWwgQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIHBhZ2luYXRpb24gY29udHJvbFxuICAgKiAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2U/KVxuICAgKiAgIGFsdCBwYWdlIGlzIHByb3ZpZGVkXG4gICAqICAgICBQLT4+UDogVXBkYXRlIGN1cnJlbnQgcGFnZVxuICAgKiAgIGVuZFxuICAgKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBkaXJlY3Rpb24gYW5kIHBhZ2VcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsaWNrKGRpcmVjdGlvbjogJ25leHQnIHwgJ3ByZXZpb3VzJywgcGFnZT86IG51bWJlcik6IHZvaWQge1xuICAgIGlmKHBhZ2UpXG4gICAgICB0aGlzLmN1cnJlbnQgPSBwYWdlO1xuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KHtcbiAgICAgIG5hbWU6IEV2ZW50Q29uc3RhbnRzLkNMSUNLLFxuICAgICAgZGF0YToge1xuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudDogdGhpcy5jb21wb25lbnROYW1lXG4gICAgfSBhcyBQYWdpbmF0aW9uQ3VzdG9tRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgdGhlIGFycmF5IG9mIHBhZ2Ugb2JqZWN0cyBmb3IgZGlzcGxheS5cbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhbiBhcnJheSBvZiBwYWdlIG9iamVjdHMgYmFzZWQgb24gdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBhbmRcbiAgICogdGhlIGN1cnJlbnQgcGFnZS4gRm9yIHNtYWxsIHBhZ2UgY291bnRzICjiiaQ1KSwgYWxsIHBhZ2VzIGFyZSBzaG93bi4gRm9yIGxhcmdlciBwYWdlXG4gICAqIGNvdW50cywgYSBzdWJzZXQgaXMgc2hvd24gd2l0aCBlbGxpcHNlcyB0byBpbmRpY2F0ZSBza2lwcGVkIHBhZ2VzLiBUaGlzIGVuc3VyZXNcbiAgICogdGhlIHBhZ2luYXRpb24gVUkgcmVtYWlucyBjbGVhbiBhbmQgdXNhYmxlIGV2ZW4gd2l0aCBtYW55IHBhZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwgLSBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY3VycmVudF0gLSBUaGUgY3VycmVudCBhY3RpdmUgcGFnZSAoZGVmYXVsdHMgdG8gdGhpcy5jdXJyZW50KVxuICAgKiBAcmV0dXJucyB7S2V5VmFsdWVbXX0gQXJyYXkgb2YgcGFnZSBvYmplY3RzIHdpdGggaW5kZXggYW5kIHRleHQgcHJvcGVydGllc1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBmbG93Y2hhcnQgVERcbiAgICogICBBW1N0YXJ0XSAtLT4gQnt0b3RhbCA8PSA1P31cbiAgICogICBCIC0tPnxZZXN8IENbU2hvdyBhbGwgcGFnZXNdXG4gICAqICAgQiAtLT58Tm98IERbU2hvdyBmaXJzdCBwYWdlXVxuICAgKiAgIEQgLS0+IEVbU2hvdyBsYXN0IHBhZ2VzXVxuICAgKiAgIEUgLS0+IEZbQWRkIGVsbGlwc2VzIGZvciBza2lwcGVkIHBhZ2VzXVxuICAgKiAgIEMgLS0+IEdbUmV0dXJuIHBhZ2VzIGFycmF5XVxuICAgKiAgIEYgLS0+IEdcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGdldFBhZ2VzKHRvdGFsOiBudW1iZXIsIGN1cnJlbnQ/OiBudW1iZXIpOiBLZXlWYWx1ZVtdIHtcbiAgICBpZiAoIWN1cnJlbnQpIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICBjb25zdCBwYWdlczogS2V5VmFsdWVbXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UGFnZShpbmRleDogbnVtYmVyIHwgbnVsbCwgdGV4dCA9ICcnLCBjbGF6eiA9ICdidXR0b24nKTogdm9pZCB7XG4gICAgICAgIGlmIChwYWdlcy5zb21lKGl0ZW0gPT4gaXRlbVsnaW5kZXgnXSA9PT0gaW5kZXgpKSByZXR1cm47XG4gICAgICAgIHBhZ2VzLnB1c2goeyBpbmRleCwgdGV4dDogaW5kZXggIT0gbnVsbCA/IGluZGV4LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSA6IHRleHQsIGNsYXNzOiBjbGF6eiB9KTtcbiAgICB9XG5cbiAgICBpZiAodG90YWwgPD0gNSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbDsgaSsrKSBnZXRQYWdlKGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGljaW9uYSBvcyBkb2lzIHByaW1laXJvc1xuICAgICAgZ2V0UGFnZSgxKTtcbiAgICAgIGdldFBhZ2UoMik7XG5cbiAgICAgIC8vIEFkaWNpb25hIFwiLi4uXCIgZW50cmUgb3MgYmxvY29zXG4gICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50ID4gMykgZ2V0UGFnZShudWxsLCAnLi4uJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIGEgcMOhZ2luYSBhdHVhbCAoc2UgZXN0aXZlciBubyBtZWlvKVxuICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudCA+IDIgJiYgY3VycmVudCA8IHRvdGFsIC0gMSkgZ2V0UGFnZShjdXJyZW50KTtcblxuICAgICAgLy8gQWRpY2lvbmEgXCIuLi5cIiBlbnRyZSBvcyBibG9jb3NcbiAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgPCB0b3RhbCAtIDIpIGdldFBhZ2UobnVsbCwgJy4uLicgLCAnc2VwYXJhdG9yJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIG9zIGRvaXMgw7psdGltb3NcbiAgICAgIGdldFBhZ2UodG90YWwgLSAxKTtcbiAgICAgIGdldFBhZ2UodG90YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBhY3RpdmUgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgdGhhdCBpcyBhY3RpdmUgaW4gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgcGFnZSBzdGF0ZSBmcm9tIG91dHNpZGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGdldEN1cnJlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcGFnZS5cbiAgICogQHN1bW1hcnkgSW5jcmVtZW50cyB0aGUgY3VycmVudCBwYWdlIG51bWJlciBpZiBub3QgYXQgdGhlIGxhc3QgcGFnZSBhbmQgdHJpZ2dlcnNcbiAgICogdGhlIGNsaWNrIGV2ZW50IGhhbmRsZXIgd2l0aCAnbmV4dCcgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcIm5leHRcIiBidXR0b24gaW4gdGhlIHBhZ2luYXRpb24gVUkuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBVLT4+UDogQ2xpY2sgbmV4dCBidXR0b25cbiAgICogICBQLT4+UDogbmV4dCgpXG4gICAqICAgYWx0IHBhZ2UgPD0gbWF4IHBhZ2VzXG4gICAqICAgICBQLT4+UDogSW5jcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCduZXh0JylcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG5leHQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuY3VycmVudCArIDE7XG4gICAgaWYocGFnZSA8PSBPYmplY3Qua2V5cyh0aGlzLnBhZ2VzKT8ubGVuZ3RoIHx8IDApIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IHBhZ2U7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKCduZXh0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gICAqIEBzdW1tYXJ5IERlY3JlbWVudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaWYgbm90IGF0IHRoZSBmaXJzdCBwYWdlIGFuZCB0cmlnZ2Vyc1xuICAgKiB0aGUgY2xpY2sgZXZlbnQgaGFuZGxlciB3aXRoICdwcmV2aW91cycgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcInByZXZpb3VzXCIgYnV0dG9uIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIHByZXZpb3VzIGJ1dHRvblxuICAgKiAgIFAtPj5QOiBwcmV2aW91cygpXG4gICAqICAgYWx0IHBhZ2UgPiAwXG4gICAqICAgICBQLT4+UDogRGVjcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCdwcmV2aW91cycpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlID0gdGhpcy5jdXJyZW50IC0gMTtcbiAgICBpZihwYWdlID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50ID0gcGFnZTtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soJ3ByZXZpb3VzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBwYWdlIG51bWJlci5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyB0aGUgY3VycmVudCBwYWdlIHRvIHRoZSBzcGVjaWZpZWQgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXJzXG4gICAqIHRoZSBjbGljayBldmVudCBoYW5kbGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5XG4gICAqIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBkaXJlY3RseSBvbiBhIHBhZ2UgbnVtYmVyIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IG51bGx9IHBhZ2UgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwYWdlIG51bWJlclxuICAgKiAgIFAtPj5QOiBuYXZpZ2F0ZShwYWdlKVxuICAgKiAgIGFsdCBwYWdlIGlzIG5vdCBudWxsIGFuZCBkaWZmZXJlbnQgZnJvbSBjdXJyZW50XG4gICAqICAgICBQLT4+UDogRGV0ZXJtaW5lIGRpcmVjdGlvbiAobmV4dC9wcmV2aW91cylcbiAgICogICAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2UpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBuYXZpZ2F0ZShwYWdlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYocGFnZSAhPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnQgIT09IHBhZ2UgYXMgbnVtYmVyKVxuICAgICAgdGhpcy5oYW5kbGVDbGljayhwYWdlID4gdGhpcy5jdXJyZW50ID8gJ25leHQnIDogJ3ByZXZpb3VzJywgcGFnZSk7XG4gIH1cbn1cbiIsIiA8ZGl2IFtpZF09XCJ1aWRcIiBjbGFzcz1cImRjZi1wYWdpbmF0b3ItY29udGFpbmVyIGRjZi1mbGV4IGRjZi1mbGV4LWNlbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbi1yZXN1bWVcIiBbaW5uZXJIVE1MXT1cImxvY2FsZSArICcucmVzdW1lJyB8IHRyYW5zbGF0ZToge3ZhbHVlMDogY3VycmVudCwgdmFsdWUxOiBsYXN0fVwiPjwvZGl2PlxuICAgIDxkaXYgI3BhZ2luYXRpb25Db21wb25lbnQgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbiBkY2YtZmxleC1jZW50ZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgYXJpYS1sYWJlbD1cInByZXZpb3VzXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzKClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJwcmV2aW91cygpXCIgW25nQ2xhc3NdPVwieydkY2YtZGlzYWJsZWQnOiBjdXJyZW50ID09PSAxfVwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGZvcihwYWdlIG9mIHBhZ2VzOyB0cmFjayBwYWdlKSB7XG4gICAgICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgW2NsYXNzXT1cInBhZ2VbJ2NsYXNzJ11cIiAoY2xpY2spPVwibmF2aWdhdGUocGFnZVsnaW5kZXgnXSlcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5hdmlnYXRlKHBhZ2VbJ2luZGV4J10pXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2RjZi1hY3RpdmUnOiBjdXJyZW50ID09PSBwYWdlWydpbmRleCddfVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1pdGVtXCI+e3sgcGFnZVsndGV4dCddIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXZcbiAgICAgICAgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5leHQoKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnZGNmLWRpc2FibGVkJzogY3VycmVudCA9PT0gbGFzdH1cIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==