@po-ui/ng-components 17.7.0 → 17.9.0

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 (44) hide show
  1. package/esm2022/lib/components/po-table/po-table-base.component.mjs +17 -2
  2. package/esm2022/lib/components/po-table/po-table-column-label/po-table-column-label.component.mjs +4 -5
  3. package/esm2022/lib/components/po-table/po-table.component.mjs +7 -7
  4. package/esm2022/lib/services/index.mjs +2 -1
  5. package/esm2022/lib/services/po-theme/enum/po-theme-type.enum.mjs +27 -0
  6. package/esm2022/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.mjs +203 -0
  7. package/esm2022/lib/services/po-theme/helpers/po-theme-light-defaults.constant.mjs +134 -0
  8. package/esm2022/lib/services/po-theme/helpers/po-theme-poui.constant.mjs +31 -0
  9. package/esm2022/lib/services/po-theme/index.mjs +10 -0
  10. package/esm2022/lib/services/po-theme/interfaces/po-theme-color.interface.mjs +3 -0
  11. package/esm2022/lib/services/po-theme/interfaces/po-theme-tokens.interface.mjs +2 -0
  12. package/esm2022/lib/services/po-theme/interfaces/po-theme.interface.mjs +2 -0
  13. package/esm2022/lib/services/po-theme/po-theme.module.mjs +27 -0
  14. package/esm2022/lib/services/po-theme/po-theme.service.mjs +260 -0
  15. package/esm2022/lib/services/services.module.mjs +14 -7
  16. package/fesm2022/po-ui-ng-components.mjs +711 -20
  17. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  18. package/lib/components/po-table/po-table-base.component.d.ts +14 -1
  19. package/lib/components/po-table/po-table-column-label/po-table-column-label.component.d.ts +1 -2
  20. package/lib/services/index.d.ts +1 -0
  21. package/lib/services/po-theme/enum/po-theme-type.enum.d.ts +25 -0
  22. package/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.d.ts +116 -0
  23. package/lib/services/po-theme/helpers/po-theme-light-defaults.constant.d.ts +41 -0
  24. package/lib/services/po-theme/helpers/po-theme-poui.constant.d.ts +11 -0
  25. package/lib/services/po-theme/index.d.ts +9 -0
  26. package/lib/services/po-theme/interfaces/po-theme-color.interface.d.ts +374 -0
  27. package/lib/services/po-theme/interfaces/po-theme-tokens.interface.d.ts +61 -0
  28. package/lib/services/po-theme/interfaces/po-theme.interface.d.ts +28 -0
  29. package/lib/services/po-theme/po-theme.module.d.ts +9 -0
  30. package/lib/services/po-theme/po-theme.service.d.ts +129 -0
  31. package/lib/services/services.module.d.ts +2 -1
  32. package/package.json +4 -4
  33. package/po-ui-ng-components-17.9.0.tgz +0 -0
  34. package/schematics/ng-add/index.js +1 -1
  35. package/schematics/ng-update/v14/index.js +1 -1
  36. package/schematics/ng-update/v15/index.js +1 -1
  37. package/schematics/ng-update/v16/index.js +1 -1
  38. package/schematics/ng-update/v17/index.js +1 -1
  39. package/schematics/ng-update/v2/index.js +1 -1
  40. package/schematics/ng-update/v3/index.js +1 -1
  41. package/schematics/ng-update/v4/index.js +1 -1
  42. package/schematics/ng-update/v5/index.js +1 -1
  43. package/schematics/ng-update/v6/index.js +1 -1
  44. package/po-ui-ng-components-17.7.0.tgz +0 -0
@@ -159,6 +159,18 @@ export class PoTableBaseComponent {
159
159
  * @default `true`
160
160
  */
161
161
  hideBatchActions = true;
162
+ /**
163
+ * @optional
164
+ *
165
+ * @description
166
+ *
167
+ * Habilita ou desabilita a quebra automática de texto. Quando ativada, o texto que excede
168
+ * o espaço disponível é transferido para a próxima linha em pontos apropriados para uma
169
+ * leitura clara.
170
+ *
171
+ * @default `false`
172
+ */
173
+ textWrap = false;
162
174
  /**
163
175
  * @optional
164
176
  *
@@ -1143,7 +1155,7 @@ export class PoTableBaseComponent {
1143
1155
  });
1144
1156
  }
1145
1157
  static ɵfac = function PoTableBaseComponent_Factory(t) { return new (t || PoTableBaseComponent)(i0.ɵɵdirectiveInject(i1.PoDateService), i0.ɵɵdirectiveInject(i2.PoLanguageService), i0.ɵɵdirectiveInject(i3.PoTableService)); };
1146
- static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoTableBaseComponent, inputs: { hideColumnsManager: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-columns-manager", "hideColumnsManager", convertToBoolean], hideBatchActions: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-batch-actions", "hideBatchActions", convertToBoolean], hideActionFixedColumns: [i0.ɵɵInputFlags.None, "p-hide-action-fixed-columns", "hideActionFixedColumns"], hideTableSearch: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-table-search", "hideTableSearch", convertToBoolean], autoCollapse: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-auto-collapse", "autoCollapse", convertToBoolean], loadingShowMore: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-loading-show-more", "loadingShowMore", convertToBoolean], sort: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-sort", "sort", convertToBoolean], showMoreDisabled: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-show-more-disabled", "showMoreDisabled", convertToBoolean], striped: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-striped", "striped", convertToBoolean], hideSelectAll: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-select-all", "hideSelectAll", convertToBoolean], singleSelect: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-single-select", "singleSelect", convertToBoolean], selectableEntireLine: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-selectable-entire-line", "selectableEntireLine", convertToBoolean], actionRight: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-actions-right", "actionRight", convertToBoolean], maxColumns: [i0.ɵɵInputFlags.None, "p-max-columns", "maxColumns"], filterType: [i0.ɵɵInputFlags.None, "p-filter-type", "filterType"], items: [i0.ɵɵInputFlags.None, "p-items", "items"], columns: [i0.ɵɵInputFlags.None, "p-columns", "columns"], container: [i0.ɵɵInputFlags.None, "p-container", "container"], paramDeleteApi: [i0.ɵɵInputFlags.None, "p-param-delete-api", "paramDeleteApi"], height: [i0.ɵɵInputFlags.None, "p-height", "height"], hideDetail: [i0.ɵɵInputFlags.None, "p-hide-detail", "hideDetail"], literals: [i0.ɵɵInputFlags.None, "p-literals", "literals"], loading: [i0.ɵɵInputFlags.None, "p-loading", "loading"], actions: [i0.ɵɵInputFlags.None, "p-actions", "actions"], selectable: [i0.ɵɵInputFlags.None, "p-selectable", "selectable"], infiniteScroll: [i0.ɵɵInputFlags.None, "p-infinite-scroll", "infiniteScroll"], infiniteScrollDistance: [i0.ɵɵInputFlags.None, "p-infinite-scroll-distance", "infiniteScrollDistance"], serviceApi: [i0.ɵɵInputFlags.None, "p-service-api", "serviceApi"], serviceDeleteApi: [i0.ɵɵInputFlags.None, "p-service-delete", "serviceDeleteApi"], spacing: [i0.ɵɵInputFlags.None, "p-spacing", "spacing"], filteredColumns: [i0.ɵɵInputFlags.None, "p-filtered-columns", "filteredColumns"], draggable: [i0.ɵɵInputFlags.None, "p-draggable", "draggable"] }, outputs: { allSelected: "p-all-selected", allUnselected: "p-all-unselected", collapsed: "p-collapsed", expanded: "p-expanded", eventDelete: "p-delete-items", selected: "p-selected", showMore: "p-show-more", sortBy: "p-sort-by", unselected: "p-unselected", changeVisibleColumns: "p-change-visible-columns", columnRestoreManager: "p-restore-column-manager" }, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature] });
1158
+ static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoTableBaseComponent, inputs: { hideColumnsManager: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-columns-manager", "hideColumnsManager", convertToBoolean], hideBatchActions: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-batch-actions", "hideBatchActions", convertToBoolean], textWrap: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-text-wrap", "textWrap", convertToBoolean], hideActionFixedColumns: [i0.ɵɵInputFlags.None, "p-hide-action-fixed-columns", "hideActionFixedColumns"], hideTableSearch: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-table-search", "hideTableSearch", convertToBoolean], autoCollapse: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-auto-collapse", "autoCollapse", convertToBoolean], loadingShowMore: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-loading-show-more", "loadingShowMore", convertToBoolean], sort: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-sort", "sort", convertToBoolean], showMoreDisabled: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-show-more-disabled", "showMoreDisabled", convertToBoolean], striped: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-striped", "striped", convertToBoolean], hideSelectAll: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-select-all", "hideSelectAll", convertToBoolean], singleSelect: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-single-select", "singleSelect", convertToBoolean], selectableEntireLine: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-selectable-entire-line", "selectableEntireLine", convertToBoolean], actionRight: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-actions-right", "actionRight", convertToBoolean], maxColumns: [i0.ɵɵInputFlags.None, "p-max-columns", "maxColumns"], filterType: [i0.ɵɵInputFlags.None, "p-filter-type", "filterType"], items: [i0.ɵɵInputFlags.None, "p-items", "items"], columns: [i0.ɵɵInputFlags.None, "p-columns", "columns"], container: [i0.ɵɵInputFlags.None, "p-container", "container"], paramDeleteApi: [i0.ɵɵInputFlags.None, "p-param-delete-api", "paramDeleteApi"], height: [i0.ɵɵInputFlags.None, "p-height", "height"], hideDetail: [i0.ɵɵInputFlags.None, "p-hide-detail", "hideDetail"], literals: [i0.ɵɵInputFlags.None, "p-literals", "literals"], loading: [i0.ɵɵInputFlags.None, "p-loading", "loading"], actions: [i0.ɵɵInputFlags.None, "p-actions", "actions"], selectable: [i0.ɵɵInputFlags.None, "p-selectable", "selectable"], infiniteScroll: [i0.ɵɵInputFlags.None, "p-infinite-scroll", "infiniteScroll"], infiniteScrollDistance: [i0.ɵɵInputFlags.None, "p-infinite-scroll-distance", "infiniteScrollDistance"], serviceApi: [i0.ɵɵInputFlags.None, "p-service-api", "serviceApi"], serviceDeleteApi: [i0.ɵɵInputFlags.None, "p-service-delete", "serviceDeleteApi"], spacing: [i0.ɵɵInputFlags.None, "p-spacing", "spacing"], filteredColumns: [i0.ɵɵInputFlags.None, "p-filtered-columns", "filteredColumns"], draggable: [i0.ɵɵInputFlags.None, "p-draggable", "draggable"] }, outputs: { allSelected: "p-all-selected", allUnselected: "p-all-unselected", collapsed: "p-collapsed", expanded: "p-expanded", eventDelete: "p-delete-items", selected: "p-selected", showMore: "p-show-more", sortBy: "p-sort-by", unselected: "p-unselected", changeVisibleColumns: "p-change-visible-columns", columnRestoreManager: "p-restore-column-manager" }, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature] });
1147
1159
  }
1148
1160
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoTableBaseComponent, [{
1149
1161
  type: Directive
@@ -1153,6 +1165,9 @@ export class PoTableBaseComponent {
1153
1165
  }], hideBatchActions: [{
1154
1166
  type: Input,
1155
1167
  args: [{ alias: 'p-hide-batch-actions', transform: convertToBoolean }]
1168
+ }], textWrap: [{
1169
+ type: Input,
1170
+ args: [{ alias: 'p-text-wrap', transform: convertToBoolean }]
1156
1171
  }], hideActionFixedColumns: [{
1157
1172
  type: Input,
1158
1173
  args: ['p-hide-action-fixed-columns']
@@ -1277,4 +1292,4 @@ export class PoTableBaseComponent {
1277
1292
  type: Input,
1278
1293
  args: ['p-draggable']
1279
1294
  }] }); })();
1280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tdGFibGUvcG8tdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSTVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQVdyRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLEVBQUUsRUFBbUI7UUFDbkIsU0FBUyxFQUFFLHlCQUF5QjtRQUNwQyxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsYUFBYSxFQUFFLGdCQUFnQjtRQUMvQixlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLFlBQVksRUFBRSxnQkFBZ0I7UUFDOUIsbUJBQW1CLEVBQUUsdUJBQXVCO1FBQzVDLGdCQUFnQixFQUFFLG1CQUFtQjtRQUNyQyxjQUFjLEVBQUUsaUJBQWlCO1FBQ2pDLFVBQVUsRUFBRSx5Q0FBeUM7UUFDckQsTUFBTSxFQUFFLFFBQVE7UUFDaEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsZ0JBQWdCLEVBQUUsNEJBQTRCO1FBQzlDLGNBQWMsRUFBRSxzREFBc0Q7S0FDdkU7SUFDRCxFQUFFLEVBQW1CO1FBQ25CLFNBQVMsRUFBRSx1QkFBdUI7UUFDbEMsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixNQUFNLEVBQUUsOEJBQThCO1FBQ3RDLE9BQU8sRUFBRSx5QkFBeUI7UUFDbEMsYUFBYSxFQUFFLHlCQUF5QjtRQUN4QyxlQUFlLEVBQUUsdUJBQXVCO1FBQ3hDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsWUFBWSxFQUFFLHVCQUF1QjtRQUNyQyxtQkFBbUIsRUFBRSx3QkFBd0I7UUFDN0MsZ0JBQWdCLEVBQUUsb0JBQW9CO1FBQ3RDLGNBQWMsRUFBRSxvQkFBb0I7UUFDcEMsVUFBVSxFQUFFLDBDQUEwQztRQUN0RCxNQUFNLEVBQUUsVUFBVTtRQUNsQixNQUFNLEVBQUUsUUFBUTtRQUNoQixnQkFBZ0IsRUFBRSxnQ0FBZ0M7UUFDbEQsY0FBYyxFQUFFLDJEQUEyRDtLQUM1RTtJQUNELEVBQUUsRUFBbUI7UUFDbkIsU0FBUyxFQUFFLDhCQUE4QjtRQUN6QyxNQUFNLEVBQUUsd0JBQXdCO1FBQ2hDLGVBQWUsRUFBRSx3QkFBd0I7UUFDekMsTUFBTSxFQUFFLHlCQUF5QjtRQUNqQyxPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLGFBQWEsRUFBRSxvQkFBb0I7UUFDbkMsV0FBVyxFQUFFLFlBQVk7UUFDekIsWUFBWSxFQUFFLDBCQUEwQjtRQUN4QyxtQkFBbUIsRUFBRSxzQkFBc0I7UUFDM0MsZ0JBQWdCLEVBQUUsa0JBQWtCO1FBQ3BDLGNBQWMsRUFBRSx3QkFBd0I7UUFDeEMsVUFBVSxFQUFFLHFDQUFxQztRQUNqRCxNQUFNLEVBQUUsVUFBVTtRQUNsQixNQUFNLEVBQUUsU0FBUztRQUNqQixnQkFBZ0IsRUFBRSw2QkFBNkI7UUFDL0MsY0FBYyxFQUFFLHlEQUF5RDtLQUMxRTtJQUNELEVBQUUsRUFBbUI7UUFDbkIsU0FBUyxFQUFFLHlCQUF5QjtRQUNwQyxNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLE1BQU0sRUFBRSx5QkFBeUI7UUFDakMsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQixhQUFhLEVBQUUsb0JBQW9CO1FBQ25DLGVBQWUsRUFBRSxzQkFBc0I7UUFDdkMsV0FBVyxFQUFFLFVBQVU7UUFDdkIsWUFBWSxFQUFFLFVBQVU7UUFDeEIsbUJBQW1CLEVBQUUsMkJBQTJCO1FBQ2hELGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxjQUFjLEVBQUUsa0JBQWtCO1FBQ2xDLFVBQVUsRUFBRSwrQ0FBK0M7UUFDM0QsTUFBTSxFQUFFLFFBQVE7UUFDaEIsTUFBTSxFQUFFLFNBQVM7UUFDakIsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLGNBQWMsRUFBRSwwREFBMEQ7S0FDM0U7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBRUgsTUFBTSxPQUFnQixvQkFBb0I7SUFvVjlCO0lBRUE7SUFyVlY7Ozs7Ozs7O09BUUc7SUFDc0Usa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBQzdHOzs7Ozs7OztPQVFHO0lBQ29FLGdCQUFnQixHQUFZLElBQUksQ0FBQztJQUV4Rzs7Ozs7Ozs7T0FRRztJQUNILElBQTBDLHNCQUFzQixDQUFDLElBQWE7UUFDNUUsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDbUUsZUFBZSxHQUFZLElBQUksQ0FBQztJQUV0Rzs7Ozs7Ozs7T0FRRztJQUMrRCxZQUFZLEdBQVksS0FBSyxDQUFDO0lBRWhHOzs7Ozs7OztPQVFHO0lBQ21FLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDdkc7Ozs7Ozs7OztPQVNHO0lBQ3NELElBQUksR0FBWSxLQUFLLENBQUM7SUFFL0U7Ozs7OztPQU1HO0lBQ29FLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUV6Rzs7Ozs7OztPQU9HO0lBQ3lELE9BQU8sR0FBWSxLQUFLLENBQUM7SUFFckY7Ozs7Ozs7O09BUUc7SUFDaUUsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUVuRzs7Ozs7O09BTUc7SUFDK0QsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUVoRzs7Ozs7Ozs7T0FRRztJQUN3RSxvQkFBb0IsR0FBWSxJQUFJLENBQUM7SUFFaEg7Ozs7Ozs7O09BUUc7SUFDK0QsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUUvRjs7Ozs7Ozs7OztPQVVHO0lBQ3FCLFVBQVUsQ0FBVTtJQUU1Qzs7Ozs7Ozs7Ozs7T0FXRztJQUNxQixVQUFVLEdBQXVCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztJQUV2Rjs7Ozs7T0FLRztJQUN1QixXQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFbkY7Ozs7O09BS0c7SUFDeUIsYUFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBRXZGOzs7Ozs7OztPQVFHO0lBQ29CLFNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUU5RTs7Ozs7Ozs7T0FRRztJQUNtQixRQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFNUU7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDdUIsV0FBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBRW5GOzs7Ozs7T0FNRztJQUNtQixRQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFNUU7Ozs7Ozs7Ozs7OztPQVlHO0lBQ29CLFFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUFFekc7Ozs7Ozs7Ozs7O09BV0c7SUFDa0IsTUFBTSxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQUVyRzs7Ozs7T0FLRztJQUNxQixVQUFVLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFaEY7Ozs7Ozs7O09BUUc7SUFDaUMsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFFN0Y7Ozs7Ozs7O09BUUc7SUFDaUMsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFFN0YscUJBQXFCLENBQVU7SUFDL0Isa0JBQWtCLENBQWdCO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsV0FBVyxHQUF5QixFQUFFLENBQUM7SUFDdkMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixZQUFZLEdBQUcsRUFBRSxRQUFRLEVBQWlCLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEUsZUFBZSxHQUF5QixFQUFFLENBQUM7SUFDM0MsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNULFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxVQUFVLEdBQWEsS0FBSyxDQUFDO0lBQzdCLGNBQWMsQ0FBdUI7SUFDckMsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLGFBQWEsR0FBZSxFQUFFLENBQUM7SUFDL0IsWUFBWSxDQUFLO0lBQ2pCLGFBQWEsR0FBZSxFQUFFLENBQUM7SUFDL0IsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQ3JCLHFCQUFxQixHQUFZLEtBQUssQ0FBQztJQUN2QyxRQUFRLEdBQXlCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztJQUM3RCxnQkFBZ0IsQ0FBZ0I7SUFDaEMsUUFBUSxHQUEwQixFQUFFLENBQUM7SUFDckMsUUFBUSxHQUF5QixFQUFFLENBQUM7SUFDcEMsVUFBVSxDQUFVO0lBQ3BCLFlBQVksR0FBVyxxQkFBcUIsQ0FBQztJQUM3QyxPQUFPLENBQVU7SUFDakIsV0FBVyxHQUFhLEtBQUssQ0FBQztJQUM5QixNQUFNLENBQXVCO0lBQzdCLFNBQVMsQ0FBa0I7SUFDM0IsUUFBUSxHQUFhLEtBQUssQ0FBQztJQUMzQixXQUFXLENBQVc7SUFDdEIsUUFBUSxHQUFXLGVBQWUsQ0FBQztJQUNuQyxXQUFXLENBQVM7SUFDcEIsaUJBQWlCLENBQVM7SUFDMUIsMEJBQTBCLENBQWU7SUFDekMsU0FBUyxDQUFvQjtJQUM3Qix1QkFBdUIsR0FBWSxHQUFHLENBQUM7SUFDdkMsZUFBZSxHQUFhLEtBQUssQ0FBQztJQUNsQyxVQUFVLEdBQWEsS0FBSyxDQUFDO0lBQzdCLHVCQUF1QixHQUFhLEtBQUssQ0FBQztJQUVsRCxZQUNVLE1BQXFCLEVBQzdCLGVBQWtDLEVBQzFCLGNBQThCO1FBRjlCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFFckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBRXRDLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBc0IsS0FBSyxDQUFDLEtBQWlCO1FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDdEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDakQ7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVoRSw4REFBOEQ7UUFDOUQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBd0IsT0FBTyxDQUFDLE9BQTZCO1FBQzNELE1BQU0scUJBQXFCLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDL0UsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztTQUMvQjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUU5QixJQUFJLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkQ7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQTBCLFNBQVMsQ0FBQyxLQUFhO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUFpQyxjQUFjLENBQUMsS0FBYTtRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDekYsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBdUIsTUFBTSxDQUFDLE1BQWM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUE0QixVQUFVLENBQUMsVUFBbUI7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWdERztJQUNILElBQXlCLFFBQVEsQ0FBQyxLQUFzQjtRQUN0RCxJQUFJLEtBQUssWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsRUFBRTtZQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHO2dCQUNmLEdBQUcsc0JBQXNCLENBQUMsZUFBZSxDQUFDO2dCQUMxQyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLEdBQUcsS0FBSzthQUNULENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUF3QixPQUFPLENBQUMsT0FBZ0I7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsSUFBd0IsT0FBTyxDQUFDLE9BQTZCO1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsSUFBMkIsVUFBVSxDQUFDLEtBQWM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBUSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILElBQWdDLGNBQWMsQ0FBQyxLQUFjO1FBQzNELElBQUksQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNEOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUF5QyxzQkFBc0IsQ0FBQyxLQUFhO1FBQzNFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F5Qkc7SUFDSCxJQUE0QixVQUFVLENBQUMsT0FBZTtRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUErQixnQkFBZ0IsQ0FBQyxPQUFlO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxJQUF3QixPQUFPLENBQUMsS0FBMkI7UUFDekQsSUFBSSxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQWlDLGVBQWUsQ0FBQyxNQUFxQjtRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNFLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLFVBQVUsR0FBRztZQUNqQixRQUFRO1lBQ1IsUUFBUTtZQUNSLFNBQVM7WUFDVCxNQUFNO1lBQ04sTUFBTTtZQUNOLFVBQVU7WUFDVixVQUFVO1lBQ1YsVUFBVTtZQUNWLE1BQU07WUFDTixPQUFPO1lBQ1AsTUFBTTtZQUNOLGNBQWM7WUFDZCxnQkFBZ0I7U0FDakIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sQ0FDTCxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQ2hILENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUM7YUFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQVksUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztJQUMxRyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUEwQixTQUFTLENBQUMsU0FBa0I7UUFDcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtRQUVELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBRWpDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFRO1FBQ2hCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRS9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDdEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDdkIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVE7UUFDbkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBUTtRQUN0QixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFFekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBcUI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDdkUsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFMUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVsSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFFNUIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBZ0Q7UUFDL0QsTUFBTSxjQUFjLEdBQStCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDBCQUEwQixDQUFDLElBQXdCO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQTJDO1FBQ3hELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsTUFBcUIsRUFBRSxTQUFrQixFQUFFLElBQWlCO1FBQ3BFLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxJQUFJLEVBQUU7WUFDUixTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDNUM7YUFBTTtZQUNMLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ3hFO1FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQVUsRUFBRSxDQUM3QyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUM3RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQVM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixPQUFPLElBQUk7YUFDUixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUM7YUFDNUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFUyxhQUFhLENBQUMsYUFBMkIsRUFBRSxZQUFxQjtRQUN4RSxNQUFNLFVBQVUsR0FBRyxPQUFPLGFBQWEsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsRixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUVuRSxHQUFHLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztJQUNqQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBb0M7UUFDM0QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBZ0IsRUFBRSxHQUFHO1FBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQVE7UUFDL0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxTQUFrQixFQUFFLElBQVM7UUFDdkQsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQVE7UUFDL0IsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVqQyxPQUFPLFFBQVEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDN0YsQ0FBQztJQUVELDREQUE0RDtJQUNwRCxxQkFBcUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGdEQUFnRDtJQUN4QyxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxnQ0FBZ0M7SUFDeEIsa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxlQUFlLENBQUMsS0FBaUI7UUFDdkMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUM7UUFDckYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRTVDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFFaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBZ0IsRUFBRSxHQUFHO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO2dCQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDeEcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3RHLElBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckgsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUFlLEVBQUUsTUFBd0I7UUFDMUQsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBZ0Q7UUFDeEUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRTNDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUV6RCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN4QixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDM0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuQztTQUNGO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUEwQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7UUFDakUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxLQUFLLHFCQUFxQixDQUFDLFVBQVUsRUFBRTtZQUM3QyxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzlCO1FBRUQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBZTtRQUN6QyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMvQixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNuQjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhFQXRuQ21CLG9CQUFvQjs2REFBcEIsb0JBQW9CLDZIQVVhLGdCQUFnQiw4R0FVbEIsZ0JBQWdCLG9OQStCakIsZ0JBQWdCLGlHQVdwQixnQkFBZ0IsMkdBV1osZ0JBQWdCLHdFQVc3QixnQkFBZ0IsOEdBU0YsZ0JBQWdCLGlGQVUzQixnQkFBZ0IscUdBV1IsZ0JBQWdCLGlHQVNsQixnQkFBZ0IsMEhBV1AsZ0JBQWdCLCtGQVd6QixnQkFBZ0I7O2lGQWpKMUMsb0JBQW9CO2NBRHpDLFNBQVM7MkdBV2lFLGtCQUFrQjtrQkFBMUYsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFVQSxnQkFBZ0I7a0JBQXRGLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBVzNCLHNCQUFzQjtrQkFBL0QsS0FBSzttQkFBQyw2QkFBNkI7WUFvQmtDLGVBQWU7a0JBQXBGLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBV0YsWUFBWTtrQkFBN0UsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFXTSxlQUFlO2tCQUFwRixLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQVdYLElBQUk7a0JBQTVELEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQVNnQixnQkFBZ0I7a0JBQXRGLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBVVQsT0FBTztrQkFBbEUsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBV1UsYUFBYTtrQkFBaEYsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFTQSxZQUFZO2tCQUE3RSxLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQVdXLG9CQUFvQjtrQkFBOUYsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFXUCxXQUFXO2tCQUE1RSxLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQWF4QyxVQUFVO2tCQUFqQyxLQUFLO21CQUFDLGVBQWU7WUFjRSxVQUFVO2tCQUFqQyxLQUFLO21CQUFDLGVBQWU7WUFRSSxXQUFXO2tCQUFwQyxNQUFNO21CQUFDLGdCQUFnQjtZQVFJLGFBQWE7a0JBQXhDLE1BQU07bUJBQUMsa0JBQWtCO1lBV0gsU0FBUztrQkFBL0IsTUFBTTttQkFBQyxhQUFhO1lBV0MsUUFBUTtrQkFBN0IsTUFBTTttQkFBQyxZQUFZO1lBbUJNLFdBQVc7a0JBQXBDLE1BQU07bUJBQUMsZ0JBQWdCO1lBU0YsUUFBUTtrQkFBN0IsTUFBTTttQkFBQyxZQUFZO1lBZUcsUUFBUTtrQkFBOUIsTUFBTTttQkFBQyxhQUFhO1lBY0EsTUFBTTtrQkFBMUIsTUFBTTttQkFBQyxXQUFXO1lBUUssVUFBVTtrQkFBakMsTUFBTTttQkFBQyxjQUFjO1lBV2Msb0JBQW9CO2tCQUF2RCxNQUFNO21CQUFDLDBCQUEwQjtZQVdFLG9CQUFvQjtrQkFBdkQsTUFBTTttQkFBQywwQkFBMEI7WUF3RFosS0FBSztrQkFBMUIsS0FBSzttQkFBQyxTQUFTO1lBaUNRLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXFDUSxTQUFTO2tCQUFsQyxLQUFLO21CQUFDLGFBQWE7WUFtQmEsY0FBYztrQkFBOUMsS0FBSzttQkFBQyxvQkFBb0I7WUFpQkosTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVO1lBaUJXLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXlERyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUF3QkssT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBc0JNLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXVCUyxVQUFVO2tCQUFwQyxLQUFLO21CQUFDLGNBQWM7WUFxQlcsY0FBYztrQkFBN0MsS0FBSzttQkFBQyxtQkFBbUI7WUFrQmUsc0JBQXNCO2tCQUE5RCxLQUFLO21CQUFDLDRCQUE0QjtZQWtDUCxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUF5QlMsZ0JBQWdCO2tCQUE5QyxLQUFLO21CQUFDLGtCQUFrQjtZQXNCRCxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUFxQmUsZUFBZTtrQkFBL0MsS0FBSzttQkFBQyxvQkFBb0I7WUFnRUQsU0FBUztrQkFBbEMsS0FBSzttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIsIGNvbnZlcnRUb0Jvb2xlYW4sIGlzVHlwZW9mLCBzb3J0VmFsdWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvU2VhcmNoRmlsdGVyTW9kZSB9IGZyb20gJy4uL3BvLXNlYXJjaC9lbnVtL3BvLXNlYXJjaC1maWx0ZXItbW9kZS5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB9IGZyb20gJy4vZW51bXMvcG8tdGFibGUtY29sdW1uLXNvcnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5TcGFjaW5nIH0gZnJvbSAnLi9lbnVtcy9wby10YWJsZS1zcGFjaW5nLmVudW0nO1xuaW1wb3J0IHsgUG9UYWJsZUFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5Tb3J0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi1zb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUZpbHRlcmVkSXRlbXNQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtZmlsdGVyZWQtaXRlbXMtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVSZXNwb25zZUFwaSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1yZXNwb25zZS1hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby10YWJsZS5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXNUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVDb250YWluZXIgPSBbJ2JvcmRlcicsICdzaGFkb3cnXTtcbmV4cG9ydCBjb25zdCBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdCA9ICdib3JkZXInO1xuZXhwb3J0IGNvbnN0IHBvVGFibGVQYXJhbURlbGV0ZUFwaSA9ICdpZCc7XG5cbmV4cG9ydCBjb25zdCBwb1RhYmxlTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnQ29sdW1ucyBhcmUgbm90IGRlZmluZWQnLFxuICAgIG5vRGF0YTogJ05vIGRhdGEgZm91bmQnLFxuICAgIG5vSXRlbTogJ05vIHNlbGVjdGVkIGl0ZW0nLFxuICAgIG9uZUl0ZW06ICcxIHNlbGVjdGVkIGl0ZW0nLFxuICAgIG11bHRpcGxlSXRlbXM6ICdzZWxlY3RlZCBpdGVtcycsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAnTm8gdmlzaWJsZSBjb2x1bW4nLFxuICAgIGxvYWRpbmdEYXRhOiAnTG9hZGluZycsXG4gICAgbG9hZE1vcmVEYXRhOiAnTG9hZCBtb3JlIGRhdGEnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdTZWUgY29tcGxldGUgc3VidGl0bGUnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdDb21wbGV0ZSBzdWJ0aXRsZScsXG4gICAgY29sdW1uc01hbmFnZXI6ICdDb2x1bW5zIG1hbmFnZXInLFxuICAgIGJvZHlEZWxldGU6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICBkZWxldGVTdWNjZXNzZnVsOiAnSXRlbXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHknLFxuICAgIGRlbGV0ZUFwaUVycm9yOiAnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcidcbiAgfSxcbiAgZXM6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ0NvbHVtbmFzIG5vIGRlZmluaWRhcycsXG4gICAgbm9EYXRhOiAnRGF0b3Mgbm8gZW5jb250cmFkb3MnLFxuICAgIG5vSXRlbTogJ05pbmfDum4gZWxlbWVudG8gc2VsZWNjaW9uYWRvJyxcbiAgICBvbmVJdGVtOiAnMSBlbGVtZW50byBzZWxlY2Npb25hZG8nLFxuICAgIG11bHRpcGxlSXRlbXM6ICdlbGVtZW50b3Mgc2VsZWNjaW9uYWRvcycsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAnU2luIGNvbHVtbmFzIHZpc2libGVzJyxcbiAgICBsb2FkaW5nRGF0YTogJ0NhcmdhbmRvIGRhdG9zJyxcbiAgICBsb2FkTW9yZURhdGE6ICdDYXJnYXIgbcOhcyByZXN1bHRhZG9zJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAnVmVyIHN1YnRpdHVsbyBjb21wbGV0bycsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ1N1YnRpdHVsbyBjb21wbGV0bycsXG4gICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbnRlIGRlIGNvbHVtbmEnLFxuICAgIGJvZHlEZWxldGU6ICfCv1JlYWxtZW50ZSBkZXNlYSBlbGltaW5hciBlc3RlIGVsZW1lbnRvPycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIGRlbGV0ZTogJ0JvcnJhcicsXG4gICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0VsZW1lbnRvcyBlbGltaW5hZG9zIGNvbiDDqXhpdG8nLFxuICAgIGRlbGV0ZUFwaUVycm9yOiAnT2N1cnJpw7MgdW4gZXJyb3IgaW5lc3BlcmFkbywgaW50w6ludGFsbyBkZSBudWV2byBtw6FzIHRhcmRlJ1xuICB9LFxuICBwdDogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyxcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdOZW5odW1hIGNvbHVuYSB2aXPDrXZlbCcsXG4gICAgbm9JdGVtOiAnTmVuaHVtIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgIG9uZUl0ZW06ICcxIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgIG11bHRpcGxlSXRlbXM6ICdpdGVucyBzZWxlY2lvbmFkb3MnLFxuICAgIGxvYWRpbmdEYXRhOiAnQ2FycmVnYW5kbycsXG4gICAgbG9hZE1vcmVEYXRhOiAnQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAnVmVyIGxlZ2VuZGEgY29tcGxldGEnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdMZWdlbmRhIGNvbXBsZXRhJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVuY2lhZG9yIGRlIGNvbHVuYXMnLFxuICAgIGJvZHlEZWxldGU6ICdEZXNlamEgcmVhbG1lbnRlIGV4Y2x1aXIgZXNzZSBpdGVtPycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIGRlbGV0ZTogJ0V4Y2x1aXInLFxuICAgIGRlbGV0ZVN1Y2Nlc3NmdWw6ICdJdGVucyByZW1vdmlkb3MgY29tIHN1Y2Vzc28nLFxuICAgIGRlbGV0ZUFwaUVycm9yOiAnT2NvcnJldSB1bSBlcnJvIGluZXNwZXJhZG8sIHRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlISdcbiAgfSxcbiAgcnU6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ9Cd0LXRgiDQvtC/0YDQtdC00LXQu9C10L3QuNGPINGB0YLQvtC70LHRhtCwJyxcbiAgICBub0RhdGE6ICfQlNCw0L3QvdGL0LUg0L3QtSDQvdCw0LnQtNC10L3RiycsXG4gICAgbm9JdGVtOiAn0J3QtdGCINCy0YvQsdGA0LDQvdC90L7Qs9C+INGN0LvQtdC80LXQvdGC0LAnLFxuICAgIG9uZUl0ZW06ICcxINGN0LvQtdC80LXQvdGCINCy0YvQsdGA0LDQvScsXG4gICAgbXVsdGlwbGVJdGVtczogJ9Cy0YvQsdGA0LDQvdC90YvQtSDRjdC70LXQvNC10L3RgtGLJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICfQvdC10YIg0LLQuNC00LjQvNGL0YUg0YHRgtC+0LvQsdGG0L7QsicsXG4gICAgbG9hZGluZ0RhdGE6ICfQl9Cw0LPRgNGD0LfQutCwJyxcbiAgICBsb2FkTW9yZURhdGE6ICfQl9Cw0LPRgNGD0LfQutCwJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAn0J/QvtGB0LzQvtGC0YDQtdGC0Ywg0L/QvtC70L3Ri9C5INGB0YPQsdGC0LjRgtGAJyxcbiAgICBjb21wbGV0ZVN1YnRpdGxlOiAn0J/QvtC70L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QuicsXG4gICAgY29sdW1uc01hbmFnZXI6ICfQvNC10L3QtdC00LbQtdGAINC60L7Qu9C+0L3QvtC6JyxcbiAgICBib2R5RGVsZXRlOiAn0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtC+0YIg0Y3Qu9C10LzQtdC90YI/JyxcbiAgICBjYW5jZWw6ICfQntGC0LzQtdC90LAnLFxuICAgIGRlbGV0ZTogJ9Cj0LTQsNC70LjRgtGMJyxcbiAgICBkZWxldGVTdWNjZXNzZnVsOiAn0K3Qu9C10LzQtdC90YLRiyDRg9GB0L/QtdGI0L3QviDRg9C00LDQu9C10L3RiycsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICfQn9GA0L7QuNC30L7RiNC70LAg0L3QtdC/0YDQtdC00LLQuNC00LXQvdC90LDRjyDQvtGI0LjQsdC60LAsINC/0L7QstGC0L7RgNC40YLQtSDQv9C+0L/Ri9GC0LrRgyDQv9C+0LfQttC1J1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEVzdGUgY29tcG9uZW50ZSBkZSB0YWJlbGEgw6kgdXRpbGl6YWRvIHBhcmEgZXhpYmnDp8OjbyBkZSBkYWRvcyBjb20gZGlmZXJlbnRlcyB0aXBvcyBjb21vIHBvciBleGVtcGxvIHRleHRvcywgZGF0YSwgaG9yYXMgZSBuw7ptZXJvcyBjb21cbiAqIGZvcm1hdG8gcGVyc29uYWxpemFkby5cbiAqXG4gKiBUYW1iw6ltIMOpIHBvc3NpdmVsIGNyaWFyIHRhYmVsYXMgY29tIG9yZGVuYcOnw6NvIGRlIGRhZG9zLCBsaW5oYXMgY29tIGRldGFsaGVzLCBjb2x1bmEgcGFyYSBzZWxlw6fDo28gZGUgbGluaGFzLCBjb2x1bmEgY29tIGHDp8O1ZXMgZSB0YW1iw6ltXG4gKiBjYXJyZWdhbWVudG8gcG9yIGRlbWFuZGEgYXRyYXbDqXMgZG8gYm90w6NvICoqQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zKiouXG4gKlxuICogPiBBcyBsaW5oYXMgZGUgZGV0YWxoZXMgcG9kZW0gdGFtYsOpbSBzZXIgY3VzdG9taXphZGFzIGF0cmF2w6lzIGRvIFtgcC10YWJsZS1yb3ctdGVtcGxhdGVgXSgvZG9jdW1lbnRhdGlvbi9wby10YWJsZS1yb3ctdGVtcGxhdGUpLlxuICpcbiAqID4gQXMgY29sdW5hcyBwb2RlbSBzZXIgY3VzdG9taXphZGFzIGF0cmF2w6lzIGRvcyB0ZW1wbGF0ZXMgW2BwLXRhYmxlLWNvbHVtbi10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLWNvbHVtbi10ZW1wbGF0ZSlcbiAqIGUgW2BwLXRhYmxlLWNlbGwtdGVtcGxhdGVgXSgvZG9jdW1lbnRhdGlvbi9wby10YWJsZS1jZWxsLXRlbXBsYXRlKS5cbiAqXG4gKiBPIGNvbXBvbmVudGUgcGVybWl0ZSBnZXJlbmNpYXIgYSBleGliacOnw6NvIGRhcyBjb2x1bmFzIGRpbmFtaWNhbWVudGUuIEVzdGEgZnVuY2lvbmFsaWRhZGUgcG9kZSBzZXIgYWNlc3NhZGEgYXRyYXbDqXMgZG8gw61jb25lIGRlIGVuZ3JlbmFnZW1cbiAqIG5vIGNhbnRvIHN1cGVyaW9yIGRpcmVpdG8gZG8gY2FiZcOnYWxobyBkYSB0YWJlbGEuXG4gKlxuICogQ2FzbyBhIGxhcmd1cmEgZGUgdG9kYXMgYXMgY29sdW5hcyBmb3JlbSBkZWZpbmlkYXMgZSBvIHRvdGFsIHVsdHJhcGFzc2FyIG8gdGFtYW5obyB0YWJlbGEsIHNlcsOhIGV4aWJpZG8gdW0gKnNjcm9sbCogbmEgaG9yaXpvbnRhbCBwYXJhIGFcbiAqIGNvbXBsZXRhIHZpc3VhbGl6YcOnw6NvIGRvcyBkYWRvcy5cbiAqXG4gKiAjIyMjIFRva2VucyBjdXN0b21pesOhdmVpc1xuICpcbiAqIMOJIHBvc3PDrXZlbCBhbHRlcmFyIG8gZXN0aWxvIGRvIGNvbXBvbmVudGUgdXNhbmRvIG9zIHNlZ3VpbnRlcyB0b2tlbnMgKENTUyk6XG4gKlxuICogPiBQYXJhIG1haW9yZXMgaW5mb3JtYcOnw7VlcywgYWNlc3NlIG8gZ3VpYSBbUGVyc29uYWxpemFuZG8gbyBUZW1hIFBhZHLDo28gY29tIFRva2VucyBDU1NdKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL3RoZW1lLWN1c3RvbWl6YXRpb24pLlxuICpcbiAqIHwgUHJvcHJpZWRhZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmnDp8OjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmFsb3IgUGFkcsOjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqRGVmYXVsdCBWYWx1ZXMqKiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC1mYW1pbHlgICAgICAgICAgICAgICAgICAgICAgICAgfCBGYW3DrWxpYSB0aXBvZ3LDoWZpY2EgdXNhZGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtZmFtaWx5LXRoZW1lKWAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtY29sb3JgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0wMClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIGRhIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstOTUpYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLXN0cmlwZWQtY29sb3JgICAgICAgICAgICB8IENvciBkbyBiYWNrZ3JvdW5kIHF1YW5kbyBzdHJpcGVkICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMDUpYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWxpbmVgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRhcyBsaW5oYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1taWQtNDApYCAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipIb3ZlcioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1ob3ZlcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1ob3ZlcilgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtY29sb3ItaG92ZXJgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYnJhbmQtMDEtbGlnaHRlcilgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipGb2N1c2VkKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1vdXRsaW5lLWNvbG9yLWZvY3VzZWRgICAgICAgICAgICAgICB8IENvciBkbyBvdXRsaW5lIGRvIGVzdGFkbyBkZSBmb2N1cyAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1mb2N1cylgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRGlzYWJsZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZGlzYWJsZWRgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLW1pZC00MClgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkhlYWRsaW5lKiogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtY29sb3ItaGVhZGxpbmVgICZuYnNwOyAgIHwgQ29yIGRvIGNhYmXDp2FsaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMTApYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWZvbnQtd2VpZ2h0LWhlYWRsaW5lYCAgICAgICAgICAgICAgIHwgUGVzbyBkYSBmb250ZSBkbyBjYWJlw6dhbGhvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpYCAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqU2VsZWN0ZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1zZWxlY3RlZGAmbmJzcDsgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gZGUgc2VsZWNpb25hZG8gICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodGVzdClgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkFjdGl2ZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWFjdGl2ZWRgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRvIHRleHRvIG5vIGVzdGFkbyBkZSBzZWxlY2lvbmFkbyAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1kYXJrLTkwKWAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1hY3RpdmVkYCAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gZGUgc2VsZWNpb25hZG8gICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodClgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9UYWJsZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcywgcmVzcG9uc8OhdmVsIHBlbGEgZGVmaW5pw6fDo28gZGUgcXVhaXMgY29sdW5hcyBzZXLDo28gZXhpYmlkYXMsIHNlamEgZXNjb25kaWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1jb2x1bW5zLW1hbmFnZXInLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZUNvbHVtbnNNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIGFzIGHDp8O1ZXMgZW0gbG90ZSwgcmVzcG9uc8OhdmVsIHBvciBleGNsdWlyIGUgZXhpYmlyIGEgcXVhbnRpZGFkZSBkZSBpdGVucywgc2VqYW0gZXNjb25kaWRhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1iYXRjaC1hY3Rpb25zJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGhpZGVCYXRjaEFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIGFzIGHDp8O1ZXMgcGFyYSBmaXhhciB1bWEgY29sdW5hIGRhIHRhYmVsYSBzZWphbSBlc2NvbmRpZGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1hY3Rpb24tZml4ZWQtY29sdW1ucycpIHNldCBoaWRlQWN0aW9uRml4ZWRDb2x1bW5zKGhpZGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoaGlkZSkge1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5yZW1vdmVQcm9wZXJ0eUZpeGVkKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICAgIHRoaXMuX2hpZGVBY3Rpb25GaXhlZENvbHVtbnMgPSBoaWRlO1xuICB9XG5cbiAgZ2V0IGhpZGVBY3Rpb25GaXhlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVBY3Rpb25GaXhlZENvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHF1ZSBvIGNhbXBvIGRlIHBlc3F1aXNhIHNlamEgZXNjb25kaWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLXRhYmxlLXNlYXJjaCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBoaWRlVGFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgZmVjaGFyIHVtIGRldGFsaGUgb3Ugcm93IHRlbXBsYXRlIGF1dG9tYXRpY2FtZW50ZSwgYW8gYWJyaXIgb3V0cm8gaXRlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8tY29sbGFwc2UnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0NvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgc2VqYSBhZGljaW9uYWRvIG8gZXN0YWRvIGRlIGNhcnJlZ2FtZW50byBubyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWxvYWRpbmctc2hvdy1tb3JlJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGxvYWRpbmdTaG93TW9yZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBlbSB0b2RhcyBhcyBjb2x1bmFzIGEgb3DDp8OjbyBkZSBvcmRlbmHDp8OjbyBkZSBkYWRvcy4gQ2FzbyBhIGNvbHVuYSBzZWphIGRvIHRpcG8gJ2RhdGEnIG91ICdkYXRlVGltZScgYVxuICAgKiBtZXNtYSBkZXZlIHJlc3BlaXRhciBvcyB0aXBvcyBkZSBlbnRyYWRhIGRlZmluaWRvcyBwYXJhIHF1ZSBzZWphbSBvcmRlbmFkYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zb3J0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIHRvcm5hIGhhYmlsaXRhZG8gbyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXNob3ctbW9yZS1kaXNhYmxlZCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBzaG93TW9yZURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvdSBkZXNhYmlsaXRhIG8gZXN0aWxvIGxpc3RyYWRvIGRhIHRhYmVsYSAoYHN0cmlwZWRgKS5cbiAgICogPiBSZWNvbWVuZGFkbyBwYXJhIHRhYmVsYXMgY29tIG1haW9yIG7Dum1lcm8gZGUgZGFkb3MsIGZhY2lsaXRhbmRvIGEgc3VhIHZpc3VhbGl6YcOnw6NvIG5hIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXN0cmlwZWQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc3RyaXBlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXNjb25kZSBvICpjaGVja2JveCogcGFyYSBzZWxlw6fDo28gZGUgdG9kYXMgYXMgbGluaGFzLlxuICAgKlxuICAgKiA+IFNlbXByZSByZWNlYmVyw6EgKnRydWUqIGNhc28gYSBzZWxlw6fDo28gZGUgYXBlbmFzIHVtYSBsaW5oYSBlc3RlamEgYXRpdmEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLXNlbGVjdC1hbGwnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZVNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBzb21lbnRlIHVtYSBsaW5oYSBkYSB0YWJlbGEgcG9kZSBzZXIgc2VsZWNpb25hZGEuXG4gICAqXG4gICAqID4gRXN0YSBkZWZpbmnDp8OjbyBuw6NvIHNlIGFwbGljYSBhb3MgaXRlbnMgZmlsaG9zLCBvcyBtZXNtb3MgcG9zc3VlbSBjb21wb3J0YW1lbnRvIGluZGVwZW5kZW50ZSBkbyBpdGVtIHBhaS5cbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zaW5nbGUtc2VsZWN0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNpbmdsZVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBzZWxlY2lvbmFyIHVtIGl0ZW0gZGEgdGFiZWxhIGNsaWNhbmRvIG5hIGxpbmhhLlxuICAgKlxuICAgKiA+IENhc28gaGFqYSBuZWNlc3NpZGFkZSBkZSBzZWxlY2lvbmFyIG8gaXRlbSBhcGVuYXMgdmlhIHJhZGlvIG91IGNoZWNrYm94LCBkZXZlLXNlIGRlZmluaXIgZXN0YSBwcm9wcmllZGFkZSBjb21vIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXNlbGVjdGFibGUtZW50aXJlLWxpbmUnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc2VsZWN0YWJsZUVudGlyZUxpbmU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBjb2x1bmEgZGUgYcOnw7VlcyBmaWNhcsOhIG5vIGxhZG8gZGlyZWl0byBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hY3Rpb25zLXJpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGFjdGlvblJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHVtYSBxdWFudGlkYWRlIG3DoXhpbWEgZGUgY29sdW5hcyBxdWUgc2Vyw6NvIGV4aWJpZGFzIG5hIHRhYmVsYS5cbiAgICpcbiAgICogUXVhbmRvIGNoZWdhciBubyB2YWxvciBpbmZvcm1hZG8sIGFzIGNvbHVuYXMgcXVlIG7Do28gZXN0aXZlcmVtIHNlbGVjaW9uYWRhcyBmaWNhcsOjb1xuICAgKiBkZXNhYmlsaXRhZGFzIGUgY2FzbyBob3V2ZXIgbWFpcyBjb2x1bmFzIHZpc8OtdmVpcyBkbyBxdWUgbyBwZXJtaXRpZG8sIGFzIGV4Y2VkZW50ZXNcbiAgICogc2Vyw6NvIGlnbm9yYWRhcyBwb3Igb3JkZW0gZGUgcG9zacOnw6NvLlxuICAgKi9cbiAgQElucHV0KCdwLW1heC1jb2x1bW5zJykgbWF4Q29sdW1ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBtb2RvIGRlIHBlc3F1aXNhIHV0aWxpemFkbyBubyBjYW1wbyBkZSBidXNjYSwgcXVhbmRvIGhhYmlsaXRhZG8uXG4gICAqIFZhbG9yZXMgZGVmaW5pZG9zIG5vIGVudW06IFBvU2VhcmNoRmlsdGVyTW9kZVxuICAgKiA+IE9iczogQSBwZXNxdWlzYSDDqSByZWFsaXphZGEgZXhjbHVzaXZhbWVudGUgbm9zIGRhZG9zIGxvY2Fpcywgb3Ugc2VqYSwgYXF1ZWxlcyBxdWUgZm9yYW1cbiAgICogPiByZW5kZXJpemFkb3MgbmEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgc3RhcnRzV2l0aGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItdHlwZScpIGZpbHRlclR5cGU6IFBvU2VhcmNoRmlsdGVyTW9kZSA9IFBvU2VhcmNoRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gcXVhbmRvIHRvZGFzIGFzIGxpbmhhcyBzw6NvIHNlbGVjaW9uYWRhcyBwb3IgbWVpbyBkbyAqY2hlY2tib3gqIHF1ZSBzZWxlY2lvbmEgdG9kYXMgYXMgbGluaGFzLlxuICAgKi9cbiAgQE91dHB1dCgncC1hbGwtc2VsZWN0ZWQnKSBhbGxTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZXhlY3V0YWRvIHF1YW5kbyBhIHNlbGXDp8OjbyBkYXMgbGluaGFzIMOpIGRlc21hcmNhZGEgcG9yIG1laW8gZG8gKmNoZWNrYm94KiBxdWUgc2VsZWNpb25hIHRvZGFzIGFzIGxpbmhhcy5cbiAgICovXG4gIEBPdXRwdXQoJ3AtYWxsLXVuc2VsZWN0ZWQnKSBhbGxVbnNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gY29sYXBzYXIgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqXG4gICAqID4gQ29tbyBwYXLDom1ldHJvIG8gY29tcG9uZW50ZSBlbnZpYSBvIGl0ZW0gY29sYXBzYWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1jb2xsYXBzZWQnKSBjb2xsYXBzZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBleHBhbmRpciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICpcbiAgICogPiBDb21vIHBhcsOibWV0cm8gbyBjb21wb25lbnRlIGVudmlhIG8gaXRlbSBleHBhbmRpZG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWV4cGFuZGVkJykgZXhwYW5kZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhcMOzcyBvIG3DqXRvZG8gZGUgZXhjbHVzw6NvIHNlciBmaW5hbGl6YWRvLlxuICAgKlxuICAgKiBgYGBcbiAgICo8cG8tdGFibGVcbiAgICogIChwLWRlbGV0ZS1pdGVtcyk9XCJpdGVtcyA9ICRldmVudFwiXG4gICAqID5cbiAgICo8L3BvLXRhYmxlPlxuICAgKiBgYGBcbiAgICpcbiAgICpcbiAgICogPiBDb21vIHBhcsOibWV0cm8gbyBjb21wb25lbnRlIGVudmlhIGEgbGlzdGEgYXR1YWxpemFkYSwgc2VtIG9zIGl0ZW5zIGV4Y2x1w61kb3MuXG4gICAqL1xuICBAT3V0cHV0KCdwLWRlbGV0ZS1pdGVtcycpIGV2ZW50RGVsZXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gc2VsZWNpb25hciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2VsZWN0ZWQnKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZWNlYmUgdW1hIGHDp8OjbyBkZSBjbGlxdWUgcGFyYSBvIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLCBjYXNvIG5lbmh1bWEgYcOnw6NvIGZvciBkZWZpbmlkYSBvIG1lc21vXG4gICAqIG7Do28gw6kgdmlzw612ZWwuXG4gICAqXG4gICAqIFJlY2ViZSB1bSBvYmpldG8gYHsgY29sdW1uLCB0eXBlIH1gIG9uZGU6XG4gICAqXG4gICAqIC0gY29sdW1uIChgUG9UYWJsZUNvbHVtbmApOiBvYmpldG8gZGEgY29sdW5hIHF1ZSBlc3TDoSBvcmRlbmFkYS5cbiAgICogLSB0eXBlIChgUG9UYWJsZUNvbHVtblNvcnRUeXBlYCk6IHRpcG8gZGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBAT3V0cHV0KCdwLXNob3ctbW9yZScpIHNob3dNb3JlOiBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIG9yZGVuYXIgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIFJlY2ViZSB1bSBvYmpldG8gYHsgY29sdW1uLCB0eXBlIH1gIG9uZGU6XG4gICAqXG4gICAqIC0gY29sdW1uIChgUG9UYWJsZUNvbHVtbmApOiBvYmpldG8gZGEgY29sdW5hIHF1ZSBmb2kgY2xpY2FkYS9vcmRlbmFkYS5cbiAgICogLSB0eXBlIChgUG9UYWJsZUNvbHVtblNvcnRUeXBlYCk6IHRpcG8gZGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBAT3V0cHV0KCdwLXNvcnQtYnknKSBzb3J0Qnk6IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gZGVzbWFyY2FyIGEgc2VsZcOnw6NvIGRlIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKi9cbiAgQE91dHB1dCgncC11bnNlbGVjdGVkJykgdW5zZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBhZ2Ugc2xpZGUgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyB2aXPDrXZlaXMgYXR1YWxpemFkYXMuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gY2xpY2FyIG5vIGJvdMOjbyBkZSByZXN0YXVyYXIgcGFkcsOjbyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyBjb25maWd1cmFkYXMgaW5pY2lhbG1lbnRlLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLXJlc3RvcmUtY29sdW1uLW1hbmFnZXInKSBjb2x1bW5SZXN0b3JlTWFuYWdlciA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U3RyaW5nPj4oKTtcblxuICBhbGxDb2x1bW5zV2lkdGhQaXhlbHM6IGJvb2xlYW47XG4gIGNvbHVtbk1hc3RlckRldGFpbDogUG9UYWJsZUNvbHVtbjtcbiAgaGFzTWFpbkNvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWFpbkNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG4gIHNlbGVjdEFsbCA9IGZhbHNlO1xuICBzb3J0ZWRDb2x1bW4gPSB7IHByb3BlcnR5OiA8UG9UYWJsZUNvbHVtbj5udWxsLCBhc2NlbmRpbmc6IHRydWUgfTtcbiAgc3VidGl0bGVDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwYWdlID0gMTtcbiAgcGFnZVNpemUgPSAxMDtcbiAgaGFzU2VydmljZT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5pdGlhbENvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICBzaG93QmF0Y2hBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1zU2VsZWN0ZWQ6IEFycmF5PGFueT4gPSBbXTtcbiAgcGFyYW1zRmlsdGVyOiB7fTtcbiAgZmlsdGVyZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBmaXhlZExheW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxWaXNpYmxlQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zcGFjaW5nOiBQb1RhYmxlQ29sdW1uU3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgcHJpdmF0ZSBfZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIF9hY3Rpb25zPzogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY29udGFpbmVyPzogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJhbURlbGV0ZTogc3RyaW5nID0gcG9UYWJsZVBhcmFtRGVsZXRlQXBpO1xuICBwcml2YXRlIF9oZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgX2hpZGVEZXRhaWw/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2l0ZW1zOiBBcnJheTxQb1RhYmxlQ29sdW1uPjtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscztcbiAgcHJpdmF0ZSBfbG9hZGluZz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2VsZWN0YWJsZT86IGJvb2xlYW47XG4gIHByaXZhdGUgbGFuZ3VhZ2U6IHN0cmluZyA9IHBvTG9jYWxlRGVmYXVsdDtcbiAgcHJpdmF0ZSBfc2VydmljZUFwaTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXJ2aWNlRGVsZXRlQXBpOiBzdHJpbmc7XG4gIHByaXZhdGUgcG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzb3J0U3RvcmU6IFBvVGFibGVDb2x1bW5Tb3J0O1xuICBwcml2YXRlIF9pbmZpbml0ZVNjcm9sbERpc3RhbmNlPzogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIF9pbmZpbml0ZVNjcm9sbD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZHJhZ2dhYmxlPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9oaWRlQWN0aW9uRml4ZWRDb2x1bW5zPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9EYXRlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1RhYmxlU2VydmljZTogUG9UYWJsZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBTZSBmYWxzbywgc2Vyw6EgaW5pY2lhbGl6YWRvIGNvbW8gdW0gKmFycmF5KiB2YXppby5cbiAgICovXG4gIEBJbnB1dCgncC1pdGVtcycpIHNldCBpdGVtcyhpdGVtczogQXJyYXk8YW55Pikge1xuICAgIGlmICh0aGlzLmhlaWdodCkge1xuICAgICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IFsuLi5pdGVtc10gOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGl0ZW1zIDogW107XG4gICAgfVxuXG4gICAgLy8gd2hlbiBoYXZlbid0IGl0ZW1zLCBzZWxlY3RBbGwgc2hvdWxkIGJlIHVuY2hlY2tlZC5cbiAgICBpZiAoIXRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oYXNDb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdldERlZmF1bHRDb2x1bW5zKGl0ZW1zWzBdKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5oZWlnaHQgPyBbLi4udGhpcy5pdGVtc10gOiB0aGlzLml0ZW1zO1xuXG4gICAgLy8gdGltZW91dCBuZWNlc3PDoXJpbyBwYXJhIG9zIGl0ZW5zIHNlcmVtIHJlZmxldGlkb3MgbmEgdGFiZWxhXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrSW5maW5pdGVTY3JvbGwoKSk7XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGFzIGNvbHVuYXMgZGEgdGFiZWxhLCBkZXZlIHJlY2ViZXIgdW0gKmFycmF5KiBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9UYWJsZUNvbHVtbmAuXG4gICAqIFBvciBwYWRyw6NvIHJlY2ViZXLDoSBjb21vIHZhbG9yIGEgcHJpbWVpcmEgY29sdW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBDYXNvIG7Do28gZW5jb250cmUgdmFsb3IsIGEgbWVuc2FnZW0gJ05lbmh1bWEgZGVmaW5pw6fDo28gZGUgY29sdW5hcycgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1jb2x1bW5zJykgc2V0IGNvbHVtbnMoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBjb25zdCBoYXNDb2x1bW5zV2l0aFZpc2libGUgPSBjb2x1bW5zPy5maW5kKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKHRoaXMuaW5pdGlhbENvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbml0aWFsQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgfVxuXG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnMgfHwgW107XG5cbiAgICBpZiAoaGFzQ29sdW1uc1dpdGhWaXNpYmxlICYmICF0aGlzLmluaXRpYWxWaXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy5pbml0aWFsVmlzaWJsZUNvbHVtbnMgPSB0cnVlO1xuICAgICAgdGhpcy52ZXJpZnlJbnRlcmFjdGl2ZUNvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2V0Q29sdW1uTGluaygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNJdGVtcykge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZUNvbHVtbnMoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgdW0gY29udG9ybm8gYXJyZWRvbmRhZG8gYW8gYHBvLXRhYmxlYCwgYXMgb3DDp8O1ZXMgc8OjbzpcbiAgICogLSBgYm9yZGVyYDogY29tIGJvcmRhcy9saW5oYXMuXG4gICAqIC0gYHNoYWRvd2A6IGNvbSBzb21icmFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgYm9yZGVyYFxuICAgKi9cbiAgQElucHV0KCdwLWNvbnRhaW5lcicpIHNldCBjb250YWluZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IHBvVGFibGVDb250YWluZXIuaW5jbHVkZXModmFsdWUpID8gdmFsdWUgOiBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdDtcbiAgfVxuXG4gIGdldCBjb250YWluZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgbyBwYXLDom1ldHJvIGEgc2VyIGVudmlhZG8gcGFyYSBhIHJlcXVpc2nDp8OjbyBkZSBERUxFVEUuXG4gICAqXG4gICAqIMOJIG5lY2Vzc8OhcmlvIGEgdXRpbGl6YcOnw6NvIGRhIHByb3ByaWVkYWRlIGBwLXNlcnZpY2UtZGVsZXRlYCBlbSBjb25qdW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYGlkYFxuICAgKi9cbiAgQElucHV0KCdwLXBhcmFtLWRlbGV0ZS1hcGknKSBzZXQgcGFyYW1EZWxldGVBcGkodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BhcmFtRGVsZXRlID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogcG9UYWJsZVBhcmFtRGVsZXRlQXBpO1xuICB9XG5cbiAgZ2V0IHBhcmFtRGVsZXRlQXBpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtRGVsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgYWx0dXJhIGRhIHRhYmVsYSBlbSAqcGl4ZWxzKiBlIGZpeGEgbyBjYWJlw6dhbGhvLlxuICAgKlxuICAgKiBBbyB1dGlsaXphciBlc3NhIHByb3ByaWVkYWRlIHNlcsOhIGluc2VyaWRvIG8gYHZpcnR1YWwtc2Nyb2xsYCBuYSB0YWJlbGEgbWVsaG9yYW5kbyBhIHBlcmZvcm1hbmNlLlxuICAgKi9cbiAgQElucHV0KCdwLWhlaWdodCcpIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBhIHZpc3VhbGl6YcOnw6NvIGRhIGxpc3RhIGRlIGRldGFsaGVzIGRlIGNhZGEgbGluaGEgZGEgY29sdW5hLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1kZXRhaWwnKSBzZXQgaGlkZURldGFpbChoaWRlRGV0YWlsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZURldGFpbCA9IGhpZGVEZXRhaWwgIT0gbnVsbCAmJiBoaWRlRGV0YWlsLnRvU3RyaW5nKCkgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oaGlkZURldGFpbCk7XG4gIH1cblxuICBnZXQgaGlkZURldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZURldGFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby10YWJsZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscyA9IHtcbiAgICogICAgbm9Db2x1bW5zOiAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyxcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAqICAgIG5vVmlzaWJsZUNvbHVtbjogJ05lbmh1bWEgY29sdW5hIHZpc8OtdmVsJyxcbiAgICogICAgbm9JdGVtOiAnTmVuaHVtIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgKiAgICBvbmVJdGVtOiAnMSBpdGVtIHNlbGVjaW9uYWRvJyxcbiAgICogICAgbXVsdGlwbGVJdGVtczogJ2l0ZW5zIHNlbGVjaW9uYWRvcycsXG4gICAqICAgIGxvYWRpbmdEYXRhOiAnQ2FycmVnYW5kbycsXG4gICAqICAgIGxvYWRNb3JlRGF0YTogJ0NhcnJlZ2FyIG1haXMgcmVzdWx0YWRvcycsXG4gICAqICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAqICAgIGNvbXBsZXRlU3VidGl0bGU6ICdMZWdlbmRhIGNvbXBsZXRhJyxcbiAgICogICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbmNpYWRvciBkZSBjb2x1bmFzJyxcbiAgICogICAgYm9keURlbGV0ZTogJ0Rlc2VqYSByZWFsbWVudGUgZXhjbHVpciBlc3NlIGl0ZW0/JyxcbiAgICogICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgKiAgICBkZWxldGU6ICdFeGNsdWlyJyxcbiAgICogICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0l0ZW5zIHJlbW92aWRvcyBjb20gc3VjZXNzbycsXG4gICAqICAgIGRlbGV0ZUFwaUVycm9yOiAnT2NvcnJldSB1bSBlcnJvIGluZXNwZXJhZG8sIHRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlIScsXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9UYWJsZUxpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdTZW0gZGFkb3MnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby10YWJsZVxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tdGFibGU+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9UYWJsZUxpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEJsb3F1ZWlhIGEgaW50ZXJhw6fDo28gZG8gdXN1w6FyaW8gY29tIG9zIGRhZG9zIGRhIF90YWJsZV8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkaW5nJykgc2V0IGxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSBjb252ZXJ0VG9Cb29sZWFuKGxvYWRpbmcpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGxpc3RhIGRlIGHDp8O1ZXMuXG4gICAqXG4gICAqIFF1YW5kbyBob3V2ZXIgYXBlbmFzIHVtYSBhw6fDo28gZGVmaW5pZGEgZWxhIHNlcsOhIGV4aWJpZGEgZGlyZXRhbWVudGUgbmEgY29sdW5hLCBjYXNvIGNvbnRyw6FyaW8sIG8gY29tcG9uZW50ZVxuICAgKiBzZSBlbmNhcnJlZ2EgZGUgYWdydXDDoS1sYXMgZXhpYmluZG8gbyDDrWNvbmUgWyoqcG8taWNvbi1tb3JlKipdKC9ndWlkZXMvaWNvbnMpIHF1ZSBsaXN0YXLDoSBhcyBhw6fDtWVzIGFvIHNlciBjbGljYWRvLlxuICAgKlxuICAgKiAqKkEgY29sdW5hIGRlIGHDp8O1ZXMgbsOjbyBzZXLDoSBleGliaWRhIHF1YW5kbzoqKlxuICAgKiAgLSBhIGxpc3RhIGNvbnRlciB2YWxvcmVzIGludsOhbGlkb3Mgb3UgaW5kZWZpbmlkb3MuXG4gICAqICAtIHRlbmhhIHVtYSDDum5pY2EgYcOnw6NvIGUgYSBtZXNtYSBuw6NvIGZvciB2aXPDrXZlbC5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnMoYWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gYWN0aW9ucztcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBsaW5oYXMgbmEgdGFiZWxhIGUsIGNhc28gYSBwcm9wcmllZGFkZSBgcC1zaW5nbGUtc2VsZWN0YCBlc3RlamEgZGVmaW5pZGEgc2Vyw6EgcG9zc8OtdmVsXG4gICAqIHNlbGVjaW9uYXIgYXBlbmFzIHVtYSDDum5pY2EgbGluaGEuXG4gICAqXG4gICAqICoqSW1wb3J0YW50ZToqKlxuICAgKiAgLSBBcyBsaW5oYXMgZGUgZGV0YWxoZSBkZWZpbmlkYXMgZW0gYFBvVGFibGVEZXRhaWxgIHBvc3N1ZW0gY29tcG9ydGFtZW50byBpbmRlcGVuZGVudGUgZGEgbGluaGEgbWVzdHJlO1xuICAgKiAgLSBDYWRhIGxpbmhhIHBvc3N1aSBwb3IgcGFkcsOjbyBhIHByb3ByaWVkYWRlIGRpbsOibWljYSBgJHNlbGVjdGVkYCwgbmEgcXVhbCDDqSBwb3Nzw612ZWwgdmFsaWRhciBzZSBhIGxpbmhhXG4gICAqIGVzdMOhIHNlbGVjaW9uYWRhLCBwb3IgZXhlbXBsbzogYGl0ZW0uJHNlbGVjdGVkYCBvdSBgaXRlbVsnJHNlbGVjdGVkJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc2VsZWN0YWJsZScpIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IDxhbnk+dmFsdWUgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBhdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIGEgdGFiZWxhIGUgbyBib3TDo28gXCJDYXJyZWdhciBNYWlzXCIgZGVpeGFyw6EgZGUgc2VyIGV4aWJpZG8uIEFvIGNoZWdhciBubyBmaW0gZGEgdGFiZWxhXG4gICAqIGV4ZWN1dGFyw6EgYSBmdW7Dp8OjbyBgcC1zaG93LW1vcmVgLlxuICAgKlxuICAgKiAqKlJlZ3JhcyBkZSB1dGlsaXphw6fDo286KipcbiAgICogIC0gTyBzY3JvbGwgaW5maW5pdG8gc8OzIGZ1bmNpb25hIHBhcmEgdGFiZWxhcyBxdWUgdXRpbGl6YW0gYSBwcm9wcmllZGFkZSBgcC1oZWlnaHRgIGUgcXVlIHBvc3N1ZW0gbyBzY3JvbGwgasOhIG5hIGNhcmdhIGluaWNpYWwgZG9zIGRhZG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgc2V0IGluZmluaXRlU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlICYmIHRoaXMuaGVpZ2h0ID4gMCk7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsO1xuICB9XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIHBlcmNlbnR1YWwgbmVjZXNzw6FyaW8gcGFyYSBkaXNwYXJhciBvIGV2ZW50byBgcC1zaG93LW1vcmVgLCBxdWUgw6kgcmVzcG9uc8OhdmVsIHBvciBjYXJyZWdhciBtYWlzIGRhZG9zIG5hIHRhYmVsYS4gQ2FzbyBvIHZhbG9yIGluZm9ybWFkbyBzZWphIG1haW9yIHF1ZSAxMDAgb3UgbWVub3JcbiAgICogcXVlIDAsIG8gdmFsb3IgcGFkcsOjbyBzZXLDoSAxMDAlXG4gICAqXG4gICAqICoqRXhlbXBsb3M6KipcbiAgICogIC0gcC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UgPSA4MDogUXVhbmRvIGF0aW5naXIgODAlICBkbyBzY3JvbGwgZGEgdGFiZWxhLCBvIGBwLXNob3ctbW9yZWAgc2Vyw6EgZGlzcGFyYWRvLlxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZScpIHNldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlID0gdmFsdWUgPiAxMDAgfHwgdmFsdWUgPCAwID8gMTAwIDogdmFsdWU7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFVSTCBkYSBBUEkgcmVzcG9uc8OhdmVsIHBvciByZXRvcm5hciBvcyByZWdpc3Ryb3MuXG4gICAqXG4gICAqIEFvIHJlYWxpemFyIGEgYnVzY2EgZGUgbWFpcyByZWdpc3Ryb3MgdmlhIHBhZ2luYcOnw6NvIChDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MpLCBzZXLDoSBlbnZpYWRvIG9zIHBhcsOibWV0cm9zIGBwYWdlYCBlIGBwYWdlU2l6ZWAsIGNvbmZvcm1lIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MTBcbiAgICogYGBgXG4gICAqXG4gICAqIENhc28gdXRpbGl6YXIgb3JkZW5hw6fDo28sIGEgY29sdW5hIG9yZGVuYWRhIHNlcsOhIGVudmlhZGEgYXRyYXbDqXMgZG8gcGFyw6JtZXRybyBgb3JkZXJgLCBwb3IgZXhlbXBsbzpcbiAgICogLSBDb2x1bmEgZGVjcmVzY2VudGU6XG4gICAqIGBgYFxuICAgKiAgdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMCZvcmRlcj0tbmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBDb2x1bmEgYXNjZW5kZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm9yZGVyPW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqID4gRXN0YSBVUkwgZGV2ZSByZXRvcm5hciBlIHJlY2ViZXIgb3MgZGFkb3Mgbm8gcGFkcsOjbyBkZSBbQVBJIGRvIFBPIFVJXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpLlxuICAgKi9cbiAgQElucHV0KCdwLXNlcnZpY2UtYXBpJykgc2V0IHNlcnZpY2VBcGkoc2VydmljZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VydmljZUFwaSA9IHNlcnZpY2U7XG4gICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuc2VydmljZUFwaSwgJ0dFVCcpO1xuICAgIHRoaXMuaGFzU2VydmljZSA9ICEhc2VydmljZTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhdGhpcy5oYXNTZXJ2aWNlO1xuICAgIHRoaXMucGFnZSA9IDE7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0YSgpO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2VBcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VBcGk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBVUkwgZGEgQVBJIHJlc3BvbnPDoXZlbCBwb3IgZXhjbHVpciBvcyByZWdpc3Ryb3MuXG4gICAqXG4gICAqIEFvIHNlbGVjaW9uYXIgbyBib3TDo28gZGUgZXhjbHVpciBpdGVucywgZXNzYSB1cmwgc2Vyw6EgZXhlY3V0YWRhIHV0aWxpemFuZG8gbyBwYXLDom1ldHJvIGVudmlhZG8gbmEgcHJvcHJpZWRhZGUgYHAtcGFyYW0tZGVsZXRlLWFwaWAuXG4gICAqIENhc28gZWxhIG7Do28gc2VqYSB1dGlsaXphZGEsIG8gcGFyw6JtZXRybyBwYWRyw6NvIGEgc2VyIGVudmlhZG8gc2Vyw6EgYGlkYC5cbiAgICpcbiAgICogPiBFc3RhIFVSTCBkZXZlIHJldG9ybmFyIGUgcmVjZWJlciBvcyBkYWRvcyBubyBwYWRyw6NvIGRlIFtBUEkgZG8gUE8gVUldKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkuXG4gICAqL1xuICBASW5wdXQoJ3Atc2VydmljZS1kZWxldGUnKSBzZXQgc2VydmljZURlbGV0ZUFwaShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXJ2aWNlRGVsZXRlQXBpID0gc2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5zZXJ2aWNlRGVsZXRlQXBpLCAnREVMRVRFJyk7XG4gIH1cblxuICBnZXQgc2VydmljZURlbGV0ZUFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZURlbGV0ZUFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFJlc3BvbnPDoXZlbCBwb3IgYXBsaWNhciBlc3Bhw6dhbWVudG8gbmFzIGNvbHVuYXMuXG4gICAqXG4gICAqIERldmUgcmVjZWJlciB1bSBkb3MgdmFsb3JlcyBkbyBlbnVtIGBQb1RhYmxlQ29sdW1uU3BhY2luZ2AuXG4gICAqXG4gICAqIFZhbG9yIGBzbWFsbGAgc8OzIGZ1bmNpb25hIGVtIHRhYmVsYXMgbsOjbyBpbnRlcmF0aXZhcy4gQ2FzbyBzZWphIHNldGFkbyBjb20gYHNtYWxsYCBlIGEgdGFiZWxhIHNlamEgaW50ZXJhdGl2YSwgbyB2YWxvciBzZXLDoSByZXRvcm5hZG8gcGFyYSBgbWVkaXVtYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYG1lZGl1bWBcbiAgICovXG4gIEBJbnB1dCgncC1zcGFjaW5nJykgc2V0IHNwYWNpbmcodmFsdWU6IFBvVGFibGVDb2x1bW5TcGFjaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAnc21hbGwnIHx8IHZhbHVlID09PSAnbWVkaXVtJyB8fCB2YWx1ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgdGhpcy5fc3BhY2luZyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zcGFjaW5nID0gUG9UYWJsZUNvbHVtblNwYWNpbmcuTWVkaXVtO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGFzIGNvbHVuYXMgcXVlIHNlcsOjbyBmaWx0cmFkYXMgbm8gY2FtcG8gZGUgcGVzcXVpc2EuXG4gICAqIEFjZWl0YSB1bSBhcnJheSBkZSBzdHJpbmdzLCByZXByZXNlbnRhbmRvIGFzIGNvbHVuYXMgZXNwZWPDrWZpY2FzIHF1ZSBzZXLDo28gY29uc2lkZXJhZGFzIG5hIGZpbHRyYWdlbS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXJlZC1jb2x1bW5zJykgc2V0IGZpbHRlcmVkQ29sdW1ucyh2YWx1ZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9maWx0ZXJlZENvbHVtbnMgPSB2YWx1ZXM7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRDb2x1bW5zKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgfVxuXG4gIGdldCBuYW1lQ29sdW1uRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA/IHRoaXMuY29sdW1uTWFzdGVyRGV0YWlsLnByb3BlcnR5IDogbnVsbDtcbiAgfVxuXG4gIGdldCB2YWxpZENvbHVtbnMoKSB7XG4gICAgY29uc3QgdHlwZXNWYWxpZCA9IFtcbiAgICAgICdzdHJpbmcnLFxuICAgICAgJ251bWJlcicsXG4gICAgICAnYm9vbGVhbicsXG4gICAgICAnZGF0ZScsXG4gICAgICAndGltZScsXG4gICAgICAnZGF0ZVRpbWUnLFxuICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICdzdWJ0aXRsZScsXG4gICAgICAnbGluaycsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2ljb24nLFxuICAgICAgJ2NlbGxUZW1wbGF0ZScsXG4gICAgICAnY29sdW1uVGVtcGxhdGUnXG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gIWNvbC50eXBlIHx8IHR5cGVzVmFsaWQuaW5jbHVkZXMoY29sLnR5cGUpKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3Rpb25zICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hY3Rpb25zICYmIHRoaXMuYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbiAmJiBhY3Rpb24udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLmxhYmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNvcnRUeXBlKCk6IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyA/IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5Bc2NlbmRpbmcgOiBQb1RhYmxlQ29sdW1uU29ydFR5cGUuRGVzY2VuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG8gbW9kbyBkcmFnIGFuZCBkcm9wIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kcmFnZ2FibGUnKSBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYWdnYWJsZSA9IGRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcmFnZ2FibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYWdnYWJsZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0IHx8IHRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZVNlbGVjdEFsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKHRoaXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXMuaGVpZ2h0IHx8IGNoYW5nZXMuaXRlbXMpICYmIHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlSGVhZGVyV2lkdGgoKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTaXplTG9hZGluZygpO1xuICB9XG5cbiAgc2VsZWN0QWxsUm93cygpIHtcbiAgICBpZiAoIXRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSAhdGhpcy5zZWxlY3RBbGw7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS4kc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEFsbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmVtaXRTZWxlY3RBbGxFdmVudHModGhpcy5zZWxlY3RBbGwsIFsuLi50aGlzLml0ZW1zXSk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2VsZWN0ZWQgPSAhcm93LiRzZWxlY3RlZDtcblxuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhyb3cpO1xuXG4gICAgdGhpcy5jb25maWdBZnRlclNlbGVjdFJvdyh0aGlzLml0ZW1zLCByb3cpO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRMaXN0KCk7XG4gIH1cblxuICBoYXNTZWxlY3RhYmxlUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlRW50aXJlTGluZTtcbiAgfVxuXG4gIHNlbGVjdERldGFpbFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhyb3cpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRMaXN0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLiRzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENsYXNzQ29sb3Iocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmNvbG9yID8gYHBvLXRleHQtJHt0aGlzLmdldENvbHVtbkNvbG9yKHJvdywgY29sdW1uKX1gIDogJyc7XG4gIH1cblxuICB0b2dnbGVEZXRhaWwocm93OiBhbnkpIHtcbiAgICBjb25zdCByb3dTaG93RGV0YWlsID0gcm93LiRzaG93RGV0YWlsO1xuICAgIGlmICh0aGlzLmF1dG9Db2xsYXBzZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUFsbEl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RldGFpbChyb3csICFyb3dTaG93RGV0YWlsKTtcbiAgICB0aGlzLmVtaXRFeHBhbmRFdmVudHMocm93KTtcbiAgfVxuXG4gIHRvZ2dsZVJvd0FjdGlvbihyb3c6IGFueSkge1xuICAgIGNvbnN0IHRvZ2dsZVNob3dBY3Rpb24gPSByb3cuJHNob3dBY3Rpb247XG5cbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS4kc2hvd0FjdGlvbikge1xuICAgICAgICBpdGVtLiRzaG93QWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcm93LiRzaG93QWN0aW9uID0gIXRvZ2dsZVNob3dBY3Rpb247XG4gIH1cblxuICBzb3J0Q29sdW1uKGNvbHVtbjogUG9UYWJsZUNvbHVtbikge1xuICAgIGlmICghdGhpcy5zb3J0IHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJyB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4uYXNjZW5kaW5nID0gdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHkgPT09IGNvbHVtbiA/ICF0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgOiB0cnVlO1xuXG4gICAgdGhpcy5zb3J0QXJyYXkoY29sdW1uLCB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcpO1xuICAgIHRoaXMuc29ydEJ5LmVtaXQoeyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfSk7XG4gICAgaWYgKHRoaXMuaGFzU2VydmljZSAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydFN0b3JlID0geyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSA9IGNvbHVtbjtcbiAgfVxuXG4gIG9uU2hvd01vcmUoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5ID8geyBjb2x1bW46IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5LCB0eXBlOiB0aGlzLnNvcnRUeXBlIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5oYXNTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnBhZ2UrKztcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IHRydWU7XG5cbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmdldEZpbHRlcmVkSXRlbXMoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtcywgLi4uZGF0YS5pdGVtc107XG4gICAgICAgIHRoaXMuc2hvd01vcmVEaXNhYmxlZCA9ICFkYXRhLmhhc05leHQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TW9yZS5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pOiBPYnNlcnZhYmxlPFBvVGFibGVSZXNwb25zZUFwaT4ge1xuICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1zOiBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyA9IHRoaXMuZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMucG9UYWJsZVNlcnZpY2UuZ2V0RmlsdGVyZWRJdGVtcyhmaWx0ZXJlZFBhcmFtcyk7XG4gIH1cblxuICBzZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhOiBQb1RhYmxlUmVzcG9uc2VBcGkpIHtcbiAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcyB8fCBbXTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhZGF0YS5oYXNOZXh0O1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZURhdGEocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBRdWVyeVBhcmFtc1R5cGUgfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1NlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnBhcmFtc0ZpbHRlciA9IHBhcmFtcztcbiAgICAgIHRoaXMuZ2V0RmlsdGVyZWRJdGVtcyhwYXJhbXMpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5zZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRBcnJheShjb2x1bW46IFBvVGFibGVDb2x1bW4sIGFzY2VuZGluZzogYm9vbGVhbiwgaXRlbT86IEFycmF5PGFueT4pIHtcbiAgICBsZXQgaXRlbXNMaXN0O1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpdGVtc0xpc3QgPSB0aGlzLmhlaWdodCA/IFsuLi5pdGVtXSA6IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zTGlzdCA9IHRoaXMuaGVpZ2h0ID8gWy4uLnRoaXMuZmlsdGVyZWRJdGVtc10gOiB0aGlzLmZpbHRlcmVkSXRlbXM7XG4gICAgfVxuICAgIGl0ZW1zTGlzdC5zb3J0KChsZWZ0U2lkZSwgcmlnaHRTaWRlKTogbnVtYmVyID0+XG4gICAgICBzb3J0VmFsdWVzKGxlZnRTaWRlW2NvbHVtbi5wcm9wZXJ0eV0sIHJpZ2h0U2lkZVtjb2x1bW4ucHJvcGVydHldLCBhc2NlbmRpbmcpXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtc0xpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdENvbHVtbnMoaXRlbTogYW55KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xuXG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHR5cGVvZiBpdGVtW2tleV0gIT09ICdvYmplY3QnKVxuICAgICAgLm1hcChrZXkgPT4gKHsgbGFiZWw6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpLCBwcm9wZXJ0eToga2V5IH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93RGV0YWlsKHJvd0lkZW50aWZpZXI6IGFueSB8IG51bWJlciwgaXNTaG93RGV0YWlsOiBib29sZWFuKSB7XG4gICAgY29uc3QgaXNSb3dJbmRleCA9IHR5cGVvZiByb3dJZGVudGlmaWVyID09PSAnbnVtYmVyJyAmJiB0aGlzLml0ZW1zW3Jvd0lkZW50aWZpZXJdO1xuXG4gICAgY29uc3Qgcm93ID0gaXNSb3dJbmRleCA/IHRoaXMuaXRlbXNbcm93SWRlbnRpZmllcl0gOiByb3dJZGVudGlmaWVyO1xuXG4gICAgcm93LiRzaG93RGV0YWlsID0gaXNTaG93RGV0YWlsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUFsbEl0ZW1zKGl0ZW1zOiBBcnJheTx7IFtrZXk6IHN0cmluZ106IGFueSB9Pikge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0uJHNob3dEZXRhaWwpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93RGV0YWlsKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbWl0RXhwYW5kRXZlbnRzKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnQWZ0ZXJTZWxlY3RSb3cocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0KSB7XG4gICAgICB0aGlzLnVuc2VsZWN0T3RoZXJSb3dzKHJvd3MsIHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMuaXNFdmVyeVNlbGVjdGVkKHJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV4cGFuZEV2ZW50cyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2hvd0RldGFpbCA/IHRoaXMuZXhwYW5kZWQuZW1pdChyb3cpIDogdGhpcy5jb2xsYXBzZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0QWxsRXZlbnRzKHNlbGVjdEFsbDogYm9vbGVhbiwgcm93czogYW55KSB7XG4gICAgc2VsZWN0QWxsID8gdGhpcy5hbGxTZWxlY3RlZC5lbWl0KHJvd3MpIDogdGhpcy5hbGxVbnNlbGVjdGVkLmVtaXQocm93cyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RFdmVudHMocm93OiBhbnkpIHtcbiAgICByb3cuJHNlbGVjdGVkID8gdGhpcy5zZWxlY3RlZC5lbWl0KHJvdykgOiB0aGlzLnVuc2VsZWN0ZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5Db2xvcihyb3csIGNvbHVtbikge1xuICAgIGNvbnN0IGNvbHVtbkNvbG9yID0gY29sdW1uLmNvbG9yO1xuXG4gICAgcmV0dXJuIGlzVHlwZW9mKGNvbHVtbkNvbG9yLCAnZnVuY3Rpb24nKSA/IGNvbHVtbkNvbG9yKHJvdywgY29sdW1uLnByb3BlcnR5KSA6IGNvbHVtbkNvbG9yO1xuICB9XG5cbiAgLy8gUmV0b3JuYSBhIGNvbHVuYSBkYSBsaXN0YSBkZSBjb2x1bmFzIHF1ZSDDqSBkbyB0aXBvIGRldGFpbFxuICBwcml2YXRlIGdldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC50eXBlID09PSAnZGV0YWlsJyk7XG4gIH1cblxuICAvLyBDb2x1bmFzIHF1ZSBzw6NvIGluc2VyaWRhcyBubyA8aGVhZD4gZGEgdGFiZWxhXG4gIHByaXZhdGUgZ2V0TWFpbkNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgYXMgY29sdW5hcyBjb20gc3RhdHVzXG4gIHByaXZhdGUgZ2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudHlwZSA9PT0gJ3N1YnRpdGxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRXZlcnlTZWxlY3RlZChpdGVtczogQXJyYXk8YW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlID0gaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCB8fCBpdGVtLiRzZWxlY3RlZCA9PT0gbnVsbDtcbiAgICBjb25zdCBldmVyeUNoZWNrZWQgPSBpdGVtID0+IGl0ZW0uJHNlbGVjdGVkO1xuXG4gICAgaWYgKGl0ZW1zLmV2ZXJ5KGV2ZXJ5Q2hlY2tlZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpdGVtcy5zb21lKHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXRNYWluQ29sdW1ucygpO1xuICAgIHRoaXMuc2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gICAgdGhpcy5zZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgICB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5MaW5rKCkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uWyd0eXBlJ10gPT09ICdsaW5rJyAmJiAhY29sdW1uWydsaW5rJ10pIHtcbiAgICAgICAgY29sdW1uWydsaW5rJ10gPSAnbGluayc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA9IHRoaXMuZ2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gIH1cblxuICBwcml2YXRlIHNldE1haW5Db2x1bW5zKCkge1xuICAgIHRoaXMubWFpbkNvbHVtbnMgPSB0aGlzLmdldE1haW5Db2x1bW5zKCk7XG5cbiAgICB0aGlzLmhhc01haW5Db2x1bW5zID0gISF0aGlzLm1haW5Db2x1bW5zLmxlbmd0aDtcblxuICAgIHRoaXMuYWxsQ29sdW1uc1dpZHRoUGl4ZWxzID0gdGhpcy52ZXJpZnlXaWR0aENvbHVtbnNQaXhlbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc3VidGl0bGVDb2x1bW5zID0gdGhpcy5nZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zZWxlY3RPdGhlclJvd3Mocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgcm93cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0gIT09IHJvdykge1xuICAgICAgICBpdGVtLiRzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlJbnRlcmFjdGl2ZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgaGFzTGlua09yRGV0YWlsID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnbGluaycgfHwgY29sdW1uLnR5cGUgPT09ICdkZXRhaWwnKTtcbiAgICBpZiAodGhpcy5zcGFjaW5nID09PSAnc21hbGwnICYmICh0aGlzLnNlbGVjdGFibGUgfHwgaGFzTGlua09yRGV0YWlsIHx8IHRoaXMudmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMCkpIHtcbiAgICAgIHRoaXMuc3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVdpZHRoQ29sdW1uc1BpeGVscygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNNYWluQ29sdW1ucyA/IHRoaXMubWFpbkNvbHVtbnMuZXZlcnkoY29sdW1uID0+IGNvbHVtbi53aWR0aCAmJiBjb2x1bW4ud2lkdGguaW5jbHVkZXMoJ3B4JykpIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldFNlcnZpY2Uoc2VydmljZTogc3RyaW5nLCBtZXRob2Q6ICdHRVQnIHwgJ0RFTEVURScpIHtcbiAgICBpZiAoc2VydmljZSAmJiBpc1R5cGVvZihzZXJ2aWNlLCAnc3RyaW5nJykpIHtcbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2Uuc2V0VXJsKHNlcnZpY2UsIG1ldGhvZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJlZFBhcmFtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pIHtcbiAgICBjb25zdCB7IHBhZ2UsIHBhZ2VTaXplLCBzb3J0U3RvcmUgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBmaWx0ZXJlZFBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5nZXRPcmRlclBhcmFtKHNvcnRTdG9yZSk7XG4gICAgY29uc3QgcGFyYW1zID0geyBwYWdlLCBwYWdlU2l6ZSwgb3JkZXIsIC4uLnF1ZXJ5UGFyYW1zIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMpIHtcbiAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbHRlcmVkUGFyYW1zW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlclBhcmFtKHNvcnQ6IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB0eXBlIH0gPSBzb3J0O1xuXG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUG9UYWJsZUNvbHVtblNvcnRUeXBlLkRlc2NlbmRpbmcpIHtcbiAgICAgIHJldHVybiBgLSR7Y29sdW1uLnByb3BlcnR5fWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2NvbHVtbi5wcm9wZXJ0eX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZpeGVkKGFycjogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBhcnIubWFwKG9iaiA9PiB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KCdmaXhlZCcpKSB7XG4gICAgICAgIG9iai5maXhlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcihoZWlnaHQpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGVja0luZmluaXRlU2Nyb2xsKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZVNpemVMb2FkaW5nKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZUhlYWRlcldpZHRoKCk7XG59XG4iXX0=
1295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tdGFibGUvcG8tdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSTVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQVdyRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLEVBQUUsRUFBbUI7UUFDbkIsU0FBUyxFQUFFLHlCQUF5QjtRQUNwQyxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsYUFBYSxFQUFFLGdCQUFnQjtRQUMvQixlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLFlBQVksRUFBRSxnQkFBZ0I7UUFD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QUFLO21CQUFDLFVBQVU7WUFpQlcsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBeURHLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQXdCSyxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUFzQk0sT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBdUJTLFVBQVU7a0JBQXBDLEtBQUs7bUJBQUMsY0FBYztZQXFCVyxjQUFjO2tCQUE3QyxLQUFLO21CQUFDLG1CQUFtQjtZQWtCZSxzQkFBc0I7a0JBQTlELEtBQUs7bUJBQUMsNEJBQTRCO1lBa0NQLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXlCUyxnQkFBZ0I7a0JBQTlDLEtBQUs7bUJBQUMsa0JBQWtCO1lBc0JELE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXFCZSxlQUFlO2tCQUEvQyxLQUFLO21CQUFDLG9CQUFvQjtZQWdFRCxTQUFTO2tCQUFsQyxLQUFLO21CQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBQb0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciwgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YsIHNvcnRWYWx1ZXMgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9TZWFyY2hGaWx0ZXJNb2RlIH0gZnJvbSAnLi4vcG8tc2VhcmNoL2VudW0vcG8tc2VhcmNoLWZpbHRlci1tb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNvcnRUeXBlIH0gZnJvbSAnLi9lbnVtcy9wby10YWJsZS1jb2x1bW4tc29ydC10eXBlLmVudW0nO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNwYWNpbmcgfSBmcm9tICcuL2VudW1zL3BvLXRhYmxlLXNwYWNpbmcuZW51bSc7XG5pbXBvcnQgeyBQb1RhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNvcnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW4gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1maWx0ZXJlZC1pdGVtcy1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVMaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZVJlc3BvbnNlQXBpIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLXJlc3BvbnNlLWFwaS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLXRhYmxlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBRdWVyeVBhcmFtc1R5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgcG9UYWJsZUNvbnRhaW5lciA9IFsnYm9yZGVyJywgJ3NoYWRvdyddO1xuZXhwb3J0IGNvbnN0IHBvVGFibGVDb250YWluZXJEZWZhdWx0ID0gJ2JvcmRlcic7XG5leHBvcnQgY29uc3QgcG9UYWJsZVBhcmFtRGVsZXRlQXBpID0gJ2lkJztcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVMaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICdDb2x1bW5zIGFyZSBub3QgZGVmaW5lZCcsXG4gICAgbm9EYXRhOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgbm9JdGVtOiAnTm8gc2VsZWN0ZWQgaXRlbScsXG4gICAgb25lSXRlbTogJzEgc2VsZWN0ZWQgaXRlbScsXG4gICAgbXVsdGlwbGVJdGVtczogJ3NlbGVjdGVkIGl0ZW1zJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdObyB2aXNpYmxlIGNvbHVtbicsXG4gICAgbG9hZGluZ0RhdGE6ICdMb2FkaW5nJyxcbiAgICBsb2FkTW9yZURhdGE6ICdMb2FkIG1vcmUgZGF0YScsXG4gICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ1NlZSBjb21wbGV0ZSBzdWJ0aXRsZScsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ0NvbXBsZXRlIHN1YnRpdGxlJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0NvbHVtbnMgbWFuYWdlcicsXG4gICAgYm9keURlbGV0ZTogJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBpdGVtPycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgIGRlbGV0ZVN1Y2Nlc3NmdWw6ICdJdGVtcyByZW1vdmVkIHN1Y2Nlc3NmdWxseScsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyJ1xuICB9LFxuICBlczogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnQ29sdW1uYXMgbm8gZGVmaW5pZGFzJyxcbiAgICBub0RhdGE6ICdEYXRvcyBubyBlbmNvbnRyYWRvcycsXG4gICAgbm9JdGVtOiAnTmluZ8O6biBlbGVtZW50byBzZWxlY2Npb25hZG8nLFxuICAgIG9uZUl0ZW06ICcxIGVsZW1lbnRvIHNlbGVjY2lvbmFkbycsXG4gICAgbXVsdGlwbGVJdGVtczogJ2VsZW1lbnRvcyBzZWxlY2Npb25hZG9zJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdTaW4gY29sdW1uYXMgdmlzaWJsZXMnLFxuICAgIGxvYWRpbmdEYXRhOiAnQ2FyZ2FuZG8gZGF0b3MnLFxuICAgIGxvYWRNb3JlRGF0YTogJ0NhcmdhciBtw6FzIHJlc3VsdGFkb3MnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgc3VidGl0dWxvIGNvbXBsZXRvJyxcbiAgICBjb21wbGV0ZVN1YnRpdGxlOiAnU3VidGl0dWxvIGNvbXBsZXRvJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVudGUgZGUgY29sdW1uYScsXG4gICAgYm9keURlbGV0ZTogJ8K/UmVhbG1lbnRlIGRlc2VhIGVsaW1pbmFyIGVzdGUgZWxlbWVudG8/JyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgZGVsZXRlOiAnQm9ycmFyJyxcbiAgICBkZWxldGVTdWNjZXNzZnVsOiAnRWxlbWVudG9zIGVsaW1pbmFkb3MgY29uIMOpeGl0bycsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICdPY3VycmnDsyB1biBlcnJvciBpbmVzcGVyYWRvLCBpbnTDqW50YWxvIGRlIG51ZXZvIG3DoXMgdGFyZGUnXG4gIH0sXG4gIHB0OiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICdOZW5odW1hIGRlZmluacOnw6NvIGRlIGNvbHVuYXMnLFxuICAgIG5vRGF0YTogJ05lbmh1bSBkYWRvIGVuY29udHJhZG8nLFxuICAgIG5vVmlzaWJsZUNvbHVtbjogJ05lbmh1bWEgY29sdW5hIHZpc8OtdmVsJyxcbiAgICBub0l0ZW06ICdOZW5odW0gaXRlbSBzZWxlY2lvbmFkbycsXG4gICAgb25lSXRlbTogJzEgaXRlbSBzZWxlY2lvbmFkbycsXG4gICAgbXVsdGlwbGVJdGVtczogJ2l0ZW5zIHNlbGVjaW9uYWRvcycsXG4gICAgbG9hZGluZ0RhdGE6ICdDYXJyZWdhbmRvJyxcbiAgICBsb2FkTW9yZURhdGE6ICdDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ0xlZ2VuZGEgY29tcGxldGEnLFxuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW5jaWFkb3IgZGUgY29sdW5hcycsXG4gICAgYm9keURlbGV0ZTogJ0Rlc2VqYSByZWFsbWVudGUgZXhjbHVpciBlc3NlIGl0ZW0/JyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgZGVsZXRlOiAnRXhjbHVpcicsXG4gICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0l0ZW5zIHJlbW92aWRvcyBjb20gc3VjZXNzbycsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICdPY29ycmV1IHVtIGVycm8gaW5lc3BlcmFkbywgdGVudGUgbm92YW1lbnRlIG1haXMgdGFyZGUhJ1xuICB9LFxuICBydTogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAn0J3QtdGCINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0YHRgtC+0LvQsdGG0LAnLFxuICAgIG5vRGF0YTogJ9CU0LDQvdC90YvQtSDQvdC1INC90LDQudC00LXQvdGLJyxcbiAgICBub0l0ZW06ICfQndC10YIg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCcsXG4gICAgb25lSXRlbTogJzEg0Y3Qu9C10LzQtdC90YIg0LLRi9Cx0YDQsNC9JyxcbiAgICBtdWx0aXBsZUl0ZW1zOiAn0LLRi9Cx0YDQsNC90L3Ri9C1INGN0LvQtdC80LXQvdGC0YsnLFxuICAgIG5vVmlzaWJsZUNvbHVtbjogJ9C90LXRgiDQstC40LTQuNC80YvRhSDRgdGC0L7Qu9Cx0YbQvtCyJyxcbiAgICBsb2FkaW5nRGF0YTogJ9CX0LDQs9GA0YPQt9C60LAnLFxuICAgIGxvYWRNb3JlRGF0YTogJ9CX0LDQs9GA0YPQt9C60LAnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICfQn9C+0YHQvNC+0YLRgNC10YLRjCDQv9C+0LvQvdGL0Lkg0YHRg9Cx0YLQuNGC0YAnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICfQn9C+0LvQvdGL0Lkg0LfQsNCz0L7Qu9C+0LLQvtC6JyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ9C80LXQvdC10LTQttC10YAg0LrQvtC70L7QvdC+0LonLFxuICAgIGJvZHlEZWxldGU6ICfQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0L7RgiDRjdC70LXQvNC10L3Rgj8nLFxuICAgIGNhbmNlbDogJ9Ce0YLQvNC10L3QsCcsXG4gICAgZGVsZXRlOiAn0KPQtNCw0LvQuNGC0YwnLFxuICAgIGRlbGV0ZVN1Y2Nlc3NmdWw6ICfQrdC70LXQvNC10L3RgtGLINGD0YHQv9C10YjQvdC+INGD0LTQsNC70LXQvdGLJyxcbiAgICBkZWxldGVBcGlFcnJvcjogJ9Cf0YDQvtC40LfQvtGI0LvQsCDQvdC10L/RgNC10LTQstC40LTQtdC90L3QsNGPINC+0YjQuNCx0LrQsCwg0L/QvtCy0YLQvtGA0LjRgtC1INC/0L7Qv9GL0YLQutGDINC/0L7Qt9C20LUnXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIGRlIHRhYmVsYSDDqSB1dGlsaXphZG8gcGFyYSBleGliacOnw6NvIGRlIGRhZG9zIGNvbSBkaWZlcmVudGVzIHRpcG9zIGNvbW8gcG9yIGV4ZW1wbG8gdGV4dG9zLCBkYXRhLCBob3JhcyBlIG7Dum1lcm9zIGNvbVxuICogZm9ybWF0byBwZXJzb25hbGl6YWRvLlxuICpcbiAqIFRhbWLDqW0gw6kgcG9zc2l2ZWwgY3JpYXIgdGFiZWxhcyBjb20gb3JkZW5hw6fDo28gZGUgZGFkb3MsIGxpbmhhcyBjb20gZGV0YWxoZXMsIGNvbHVuYSBwYXJhIHNlbGXDp8OjbyBkZSBsaW5oYXMsIGNvbHVuYSBjb20gYcOnw7VlcyBlIHRhbWLDqW1cbiAqIGNhcnJlZ2FtZW50byBwb3IgZGVtYW5kYSBhdHJhdsOpcyBkbyBib3TDo28gKipDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MqKi5cbiAqXG4gKiA+IEFzIGxpbmhhcyBkZSBkZXRhbGhlcyBwb2RlbSB0YW1iw6ltIHNlciBjdXN0b21pemFkYXMgYXRyYXbDqXMgZG8gW2BwLXRhYmxlLXJvdy10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLXJvdy10ZW1wbGF0ZSkuXG4gKlxuICogPiBBcyBjb2x1bmFzIHBvZGVtIHNlciBjdXN0b21pemFkYXMgYXRyYXbDqXMgZG9zIHRlbXBsYXRlcyBbYHAtdGFibGUtY29sdW1uLXRlbXBsYXRlYF0oL2RvY3VtZW50YXRpb24vcG8tdGFibGUtY29sdW1uLXRlbXBsYXRlKVxuICogZSBbYHAtdGFibGUtY2VsbC10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLWNlbGwtdGVtcGxhdGUpLlxuICpcbiAqIE8gY29tcG9uZW50ZSBwZXJtaXRlIGdlcmVuY2lhciBhIGV4aWJpw6fDo28gZGFzIGNvbHVuYXMgZGluYW1pY2FtZW50ZS4gRXN0YSBmdW5jaW9uYWxpZGFkZSBwb2RlIHNlciBhY2Vzc2FkYSBhdHJhdsOpcyBkbyDDrWNvbmUgZGUgZW5ncmVuYWdlbVxuICogbm8gY2FudG8gc3VwZXJpb3IgZGlyZWl0byBkbyBjYWJlw6dhbGhvIGRhIHRhYmVsYS5cbiAqXG4gKiBDYXNvIGEgbGFyZ3VyYSBkZSB0b2RhcyBhcyBjb2x1bmFzIGZvcmVtIGRlZmluaWRhcyBlIG8gdG90YWwgdWx0cmFwYXNzYXIgbyB0YW1hbmhvIHRhYmVsYSwgc2Vyw6EgZXhpYmlkbyB1bSAqc2Nyb2xsKiBuYSBob3Jpem9udGFsIHBhcmEgYVxuICogY29tcGxldGEgdmlzdWFsaXphw6fDo28gZG9zIGRhZG9zLlxuICpcbiAqICMjIyMgVG9rZW5zIGN1c3RvbWl6w6F2ZWlzXG4gKlxuICogw4kgcG9zc8OtdmVsIGFsdGVyYXIgbyBlc3RpbG8gZG8gY29tcG9uZW50ZSB1c2FuZG8gb3Mgc2VndWludGVzIHRva2VucyAoQ1NTKTpcbiAqXG4gKiA+IFBhcmEgbWFpb3JlcyBpbmZvcm1hw6fDtWVzLCBhY2Vzc2UgbyBndWlhIFtQZXJzb25hbGl6YW5kbyBvIFRlbWEgUGFkcsOjbyBjb20gVG9rZW5zIENTU10oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvdGhlbWUtY3VzdG9taXphdGlvbikuXG4gKlxuICogfCBQcm9wcmllZGFkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyacOnw6NvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBWYWxvciBQYWRyw6NvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipEZWZhdWx0IFZhbHVlcyoqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1mb250LWZhbWlseWAgICAgICAgICAgICAgICAgICAgICAgICB8IEZhbcOtbGlhIHRpcG9ncsOhZmljYSB1c2FkYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tZm9udC1mYW1pbHktdGhlbWUpYCAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvcmAgICAgICAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWxpZ2h0LTAwKWAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgZGEgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtZGFyay05NSlgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtc3RyaXBlZC1jb2xvcmAgICAgICAgICAgIHwgQ29yIGRvIGJhY2tncm91bmQgcXVhbmRvIHN0cmlwZWQgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0wNSlgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItbGluZWAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgZGFzIGxpbmhhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLW1pZC00MClgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkhvdmVyKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWhvdmVyYCAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIHByaW5jaXBhbCBubyBlc3RhZG8gaG92ZXIgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWhvdmVyKWAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1ob3ZlcmAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gaG92ZXIgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodGVyKWAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkZvY3VzZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLW91dGxpbmUtY29sb3ItZm9jdXNlZGAgICAgICAgICAgICAgIHwgQ29yIGRvIG91dGxpbmUgZG8gZXN0YWRvIGRlIGZvY3VzICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWZvY3VzKWAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipEaXNhYmxlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1kaXNhYmxlZGAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbWlkLTQwKWAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqSGVhZGxpbmUqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1oZWFkbGluZWAgJm5ic3A7ICAgfCBDb3IgZG8gY2FiZcOnYWxobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0xMClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC13ZWlnaHQtaGVhZGxpbmVgICAgICAgICAgICAgICAgfCBQZXNvIGRhIGZvbnRlIGRvIGNhYmXDp2FsaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tZm9udC13ZWlnaHQtYm9sZClgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipTZWxlY3RlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLWNvbG9yLXNlbGVjdGVkYCZuYnNwOyAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBkZSBzZWxlY2lvbmFkbyAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWJyYW5kLTAxLWxpZ2h0ZXN0KWAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqQWN0aXZlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItYWN0aXZlZGAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgZG8gdGV4dG8gbm8gZXN0YWRvIGRlIHNlbGVjaW9uYWRvICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstOTApYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZWRgICAgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBkZSBzZWxlY2lvbmFkbyAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWJyYW5kLTAxLWxpZ2h0KWAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb1RhYmxlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLCByZXNwb25zw6F2ZWwgcGVsYSBkZWZpbmnDp8OjbyBkZSBxdWFpcyBjb2x1bmFzIHNlcsOjbyBleGliaWRhcywgc2VqYSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLWNvbHVtbnMtbWFuYWdlcicsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBoaWRlQ29sdW1uc01hbmFnZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgYXMgYcOnw7VlcyBlbSBsb3RlLCByZXNwb25zw6F2ZWwgcG9yIGV4Y2x1aXIgZSBleGliaXIgYSBxdWFudGlkYWRlIGRlIGl0ZW5zLCBzZWphbSBlc2NvbmRpZGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLWJhdGNoLWFjdGlvbnMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZUJhdGNoQWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBhIHF1ZWJyYSBhdXRvbcOhdGljYSBkZSB0ZXh0by4gUXVhbmRvIGF0aXZhZGEsIG8gdGV4dG8gcXVlIGV4Y2VkZVxuICAgKiBvIGVzcGHDp28gZGlzcG9uw612ZWwgw6kgdHJhbnNmZXJpZG8gcGFyYSBhIHByw7N4aW1hIGxpbmhhIGVtIHBvbnRvcyBhcHJvcHJpYWRvcyBwYXJhIHVtYVxuICAgKiBsZWl0dXJhIGNsYXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtdGV4dC13cmFwJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHRleHRXcmFwPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIGFzIGHDp8O1ZXMgcGFyYSBmaXhhciB1bWEgY29sdW5hIGRhIHRhYmVsYSBzZWphbSBlc2NvbmRpZGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1hY3Rpb24tZml4ZWQtY29sdW1ucycpIHNldCBoaWRlQWN0aW9uRml4ZWRDb2x1bW5zKGhpZGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoaGlkZSkge1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5yZW1vdmVQcm9wZXJ0eUZpeGVkKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICAgIHRoaXMuX2hpZGVBY3Rpb25GaXhlZENvbHVtbnMgPSBoaWRlO1xuICB9XG5cbiAgZ2V0IGhpZGVBY3Rpb25GaXhlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVBY3Rpb25GaXhlZENvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHF1ZSBvIGNhbXBvIGRlIHBlc3F1aXNhIHNlamEgZXNjb25kaWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLXRhYmxlLXNlYXJjaCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBoaWRlVGFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgZmVjaGFyIHVtIGRldGFsaGUgb3Ugcm93IHRlbXBsYXRlIGF1dG9tYXRpY2FtZW50ZSwgYW8gYWJyaXIgb3V0cm8gaXRlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8tY29sbGFwc2UnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0NvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgc2VqYSBhZGljaW9uYWRvIG8gZXN0YWRvIGRlIGNhcnJlZ2FtZW50byBubyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWxvYWRpbmctc2hvdy1tb3JlJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGxvYWRpbmdTaG93TW9yZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBlbSB0b2RhcyBhcyBjb2x1bmFzIGEgb3DDp8OjbyBkZSBvcmRlbmHDp8OjbyBkZSBkYWRvcy4gQ2FzbyBhIGNvbHVuYSBzZWphIGRvIHRpcG8gJ2RhdGEnIG91ICdkYXRlVGltZScgYVxuICAgKiBtZXNtYSBkZXZlIHJlc3BlaXRhciBvcyB0aXBvcyBkZSBlbnRyYWRhIGRlZmluaWRvcyBwYXJhIHF1ZSBzZWphbSBvcmRlbmFkYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zb3J0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIHRvcm5hIGhhYmlsaXRhZG8gbyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXNob3ctbW9yZS1kaXNhYmxlZCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBzaG93TW9yZURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvdSBkZXNhYmlsaXRhIG8gZXN0aWxvIGxpc3RyYWRvIGRhIHRhYmVsYSAoYHN0cmlwZWRgKS5cbiAgICogPiBSZWNvbWVuZGFkbyBwYXJhIHRhYmVsYXMgY29tIG1haW9yIG7Dum1lcm8gZGUgZGFkb3MsIGZhY2lsaXRhbmRvIGEgc3VhIHZpc3VhbGl6YcOnw6NvIG5hIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXN0cmlwZWQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc3RyaXBlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXNjb25kZSBvICpjaGVja2JveCogcGFyYSBzZWxlw6fDo28gZGUgdG9kYXMgYXMgbGluaGFzLlxuICAgKlxuICAgKiA+IFNlbXByZSByZWNlYmVyw6EgKnRydWUqIGNhc28gYSBzZWxlw6fDo28gZGUgYXBlbmFzIHVtYSBsaW5oYSBlc3RlamEgYXRpdmEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLXNlbGVjdC1hbGwnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZVNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBzb21lbnRlIHVtYSBsaW5oYSBkYSB0YWJlbGEgcG9kZSBzZXIgc2VsZWNpb25hZGEuXG4gICAqXG4gICAqID4gRXN0YSBkZWZpbmnDp8OjbyBuw6NvIHNlIGFwbGljYSBhb3MgaXRlbnMgZmlsaG9zLCBvcyBtZXNtb3MgcG9zc3VlbSBjb21wb3J0YW1lbnRvIGluZGVwZW5kZW50ZSBkbyBpdGVtIHBhaS5cbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zaW5nbGUtc2VsZWN0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNpbmdsZVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBzZWxlY2lvbmFyIHVtIGl0ZW0gZGEgdGFiZWxhIGNsaWNhbmRvIG5hIGxpbmhhLlxuICAgKlxuICAgKiA+IENhc28gaGFqYSBuZWNlc3NpZGFkZSBkZSBzZWxlY2lvbmFyIG8gaXRlbSBhcGVuYXMgdmlhIHJhZGlvIG91IGNoZWNrYm94LCBkZXZlLXNlIGRlZmluaXIgZXN0YSBwcm9wcmllZGFkZSBjb21vIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXNlbGVjdGFibGUtZW50aXJlLWxpbmUnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc2VsZWN0YWJsZUVudGlyZUxpbmU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBjb2x1bmEgZGUgYcOnw7VlcyBmaWNhcsOhIG5vIGxhZG8gZGlyZWl0byBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hY3Rpb25zLXJpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGFjdGlvblJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHVtYSBxdWFudGlkYWRlIG3DoXhpbWEgZGUgY29sdW5hcyBxdWUgc2Vyw6NvIGV4aWJpZGFzIG5hIHRhYmVsYS5cbiAgICpcbiAgICogUXVhbmRvIGNoZWdhciBubyB2YWxvciBpbmZvcm1hZG8sIGFzIGNvbHVuYXMgcXVlIG7Do28gZXN0aXZlcmVtIHNlbGVjaW9uYWRhcyBmaWNhcsOjb1xuICAgKiBkZXNhYmlsaXRhZGFzIGUgY2FzbyBob3V2ZXIgbWFpcyBjb2x1bmFzIHZpc8OtdmVpcyBkbyBxdWUgbyBwZXJtaXRpZG8sIGFzIGV4Y2VkZW50ZXNcbiAgICogc2Vyw6NvIGlnbm9yYWRhcyBwb3Igb3JkZW0gZGUgcG9zacOnw6NvLlxuICAgKi9cbiAgQElucHV0KCdwLW1heC1jb2x1bW5zJykgbWF4Q29sdW1ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBtb2RvIGRlIHBlc3F1aXNhIHV0aWxpemFkbyBubyBjYW1wbyBkZSBidXNjYSwgcXVhbmRvIGhhYmlsaXRhZG8uXG4gICAqIFZhbG9yZXMgZGVmaW5pZG9zIG5vIGVudW06IFBvU2VhcmNoRmlsdGVyTW9kZVxuICAgKiA+IE9iczogQSBwZXNxdWlzYSDDqSByZWFsaXphZGEgZXhjbHVzaXZhbWVudGUgbm9zIGRhZG9zIGxvY2Fpcywgb3Ugc2VqYSwgYXF1ZWxlcyBxdWUgZm9yYW1cbiAgICogPiByZW5kZXJpemFkb3MgbmEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgc3RhcnRzV2l0aGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItdHlwZScpIGZpbHRlclR5cGU6IFBvU2VhcmNoRmlsdGVyTW9kZSA9IFBvU2VhcmNoRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gcXVhbmRvIHRvZGFzIGFzIGxpbmhhcyBzw6NvIHNlbGVjaW9uYWRhcyBwb3IgbWVpbyBkbyAqY2hlY2tib3gqIHF1ZSBzZWxlY2lvbmEgdG9kYXMgYXMgbGluaGFzLlxuICAgKi9cbiAgQE91dHB1dCgncC1hbGwtc2VsZWN0ZWQnKSBhbGxTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZXhlY3V0YWRvIHF1YW5kbyBhIHNlbGXDp8OjbyBkYXMgbGluaGFzIMOpIGRlc21hcmNhZGEgcG9yIG1laW8gZG8gKmNoZWNrYm94KiBxdWUgc2VsZWNpb25hIHRvZGFzIGFzIGxpbmhhcy5cbiAgICovXG4gIEBPdXRwdXQoJ3AtYWxsLXVuc2VsZWN0ZWQnKSBhbGxVbnNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gY29sYXBzYXIgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqXG4gICAqID4gQ29tbyBwYXLDom1ldHJvIG8gY29tcG9uZW50ZSBlbnZpYSBvIGl0ZW0gY29sYXBzYWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1jb2xsYXBzZWQnKSBjb2xsYXBzZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBleHBhbmRpciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICpcbiAgICogPiBDb21vIHBhcsOibWV0cm8gbyBjb21wb25lbnRlIGVudmlhIG8gaXRlbSBleHBhbmRpZG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWV4cGFuZGVkJykgZXhwYW5kZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhcMOzcyBvIG3DqXRvZG8gZGUgZXhjbHVzw6NvIHNlciBmaW5hbGl6YWRvLlxuICAgKlxuICAgKiBgYGBcbiAgICo8cG8tdGFibGVcbiAgICogIChwLWRlbGV0ZS1pdGVtcyk9XCJpdGVtcyA9ICRldmVudFwiXG4gICAqID5cbiAgICo8L3BvLXRhYmxlPlxuICAgKiBgYGBcbiAgICpcbiAgICpcbiAgICogPiBDb21vIHBhcsOibWV0cm8gbyBjb21wb25lbnRlIGVudmlhIGEgbGlzdGEgYXR1YWxpemFkYSwgc2VtIG9zIGl0ZW5zIGV4Y2x1w61kb3MuXG4gICAqL1xuICBAT3V0cHV0KCdwLWRlbGV0ZS1pdGVtcycpIGV2ZW50RGVsZXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gc2VsZWNpb25hciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2VsZWN0ZWQnKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZWNlYmUgdW1hIGHDp8OjbyBkZSBjbGlxdWUgcGFyYSBvIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLCBjYXNvIG5lbmh1bWEgYcOnw6NvIGZvciBkZWZpbmlkYSBvIG1lc21vXG4gICAqIG7Do28gw6kgdmlzw612ZWwuXG4gICAqXG4gICAqIFJlY2ViZSB1bSBvYmpldG8gYHsgY29sdW1uLCB0eXBlIH1gIG9uZGU6XG4gICAqXG4gICAqIC0gY29sdW1uIChgUG9UYWJsZUNvbHVtbmApOiBvYmpldG8gZGEgY29sdW5hIHF1ZSBlc3TDoSBvcmRlbmFkYS5cbiAgICogLSB0eXBlIChgUG9UYWJsZUNvbHVtblNvcnRUeXBlYCk6IHRpcG8gZGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBAT3V0cHV0KCdwLXNob3ctbW9yZScpIHNob3dNb3JlOiBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIG9yZGVuYXIgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIFJlY2ViZSB1bSBvYmpldG8gYHsgY29sdW1uLCB0eXBlIH1gIG9uZGU6XG4gICAqXG4gICAqIC0gY29sdW1uIChgUG9UYWJsZUNvbHVtbmApOiBvYmpldG8gZGEgY29sdW5hIHF1ZSBmb2kgY2xpY2FkYS9vcmRlbmFkYS5cbiAgICogLSB0eXBlIChgUG9UYWJsZUNvbHVtblNvcnRUeXBlYCk6IHRpcG8gZGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBAT3V0cHV0KCdwLXNvcnQtYnknKSBzb3J0Qnk6IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gZGVzbWFyY2FyIGEgc2VsZcOnw6NvIGRlIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKi9cbiAgQE91dHB1dCgncC11bnNlbGVjdGVkJykgdW5zZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBhZ2Ugc2xpZGUgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyB2aXPDrXZlaXMgYXR1YWxpemFkYXMuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gY2xpY2FyIG5vIGJvdMOjbyBkZSByZXN0YXVyYXIgcGFkcsOjbyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyBjb25maWd1cmFkYXMgaW5pY2lhbG1lbnRlLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLXJlc3RvcmUtY29sdW1uLW1hbmFnZXInKSBjb2x1bW5SZXN0b3JlTWFuYWdlciA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U3RyaW5nPj4oKTtcblxuICBhbGxDb2x1bW5zV2lkdGhQaXhlbHM6IGJvb2xlYW47XG4gIGNvbHVtbk1hc3RlckRldGFpbDogUG9UYWJsZUNvbHVtbjtcbiAgaGFzTWFpbkNvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWFpbkNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG4gIHNlbGVjdEFsbCA9IGZhbHNlO1xuICBzb3J0ZWRDb2x1bW4gPSB7IHByb3BlcnR5OiA8UG9UYWJsZUNvbHVtbj5udWxsLCBhc2NlbmRpbmc6IHRydWUgfTtcbiAgc3VidGl0bGVDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwYWdlID0gMTtcbiAgcGFnZVNpemUgPSAxMDtcbiAgaGFzU2VydmljZT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5pdGlhbENvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICBzaG93QmF0Y2hBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1zU2VsZWN0ZWQ6IEFycmF5PGFueT4gPSBbXTtcbiAgcGFyYW1zRmlsdGVyOiB7fTtcbiAgZmlsdGVyZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBmaXhlZExheW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxWaXNpYmxlQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zcGFjaW5nOiBQb1RhYmxlQ29sdW1uU3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgcHJpdmF0ZSBfZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIF9hY3Rpb25zPzogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY29udGFpbmVyPzogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJhbURlbGV0ZTogc3RyaW5nID0gcG9UYWJsZVBhcmFtRGVsZXRlQXBpO1xuICBwcml2YXRlIF9oZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgX2hpZGVEZXRhaWw/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2l0ZW1zOiBBcnJheTxQb1RhYmxlQ29sdW1uPjtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscztcbiAgcHJpdmF0ZSBfbG9hZGluZz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2VsZWN0YWJsZT86IGJvb2xlYW47XG4gIHByaXZhdGUgbGFuZ3VhZ2U6IHN0cmluZyA9IHBvTG9jYWxlRGVmYXVsdDtcbiAgcHJpdmF0ZSBfc2VydmljZUFwaTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXJ2aWNlRGVsZXRlQXBpOiBzdHJpbmc7XG4gIHByaXZhdGUgcG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzb3J0U3RvcmU6IFBvVGFibGVDb2x1bW5Tb3J0O1xuICBwcml2YXRlIF9pbmZpbml0ZVNjcm9sbERpc3RhbmNlPzogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIF9pbmZpbml0ZVNjcm9sbD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZHJhZ2dhYmxlPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9oaWRlQWN0aW9uRml4ZWRDb2x1bW5zPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9EYXRlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1RhYmxlU2VydmljZTogUG9UYWJsZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBTZSBmYWxzbywgc2Vyw6EgaW5pY2lhbGl6YWRvIGNvbW8gdW0gKmFycmF5KiB2YXppby5cbiAgICovXG4gIEBJbnB1dCgncC1pdGVtcycpIHNldCBpdGVtcyhpdGVtczogQXJyYXk8YW55Pikge1xuICAgIGlmICh0aGlzLmhlaWdodCkge1xuICAgICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IFsuLi5pdGVtc10gOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGl0ZW1zIDogW107XG4gICAgfVxuXG4gICAgLy8gd2hlbiBoYXZlbid0IGl0ZW1zLCBzZWxlY3RBbGwgc2hvdWxkIGJlIHVuY2hlY2tlZC5cbiAgICBpZiAoIXRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oYXNDb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdldERlZmF1bHRDb2x1bW5zKGl0ZW1zWzBdKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5oZWlnaHQgPyBbLi4udGhpcy5pdGVtc10gOiB0aGlzLml0ZW1zO1xuXG4gICAgLy8gdGltZW91dCBuZWNlc3PDoXJpbyBwYXJhIG9zIGl0ZW5zIHNlcmVtIHJlZmxldGlkb3MgbmEgdGFiZWxhXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrSW5maW5pdGVTY3JvbGwoKSk7XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGFzIGNvbHVuYXMgZGEgdGFiZWxhLCBkZXZlIHJlY2ViZXIgdW0gKmFycmF5KiBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9UYWJsZUNvbHVtbmAuXG4gICAqIFBvciBwYWRyw6NvIHJlY2ViZXLDoSBjb21vIHZhbG9yIGEgcHJpbWVpcmEgY29sdW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBDYXNvIG7Do28gZW5jb250cmUgdmFsb3IsIGEgbWVuc2FnZW0gJ05lbmh1bWEgZGVmaW5pw6fDo28gZGUgY29sdW5hcycgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1jb2x1bW5zJykgc2V0IGNvbHVtbnMoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBjb25zdCBoYXNDb2x1bW5zV2l0aFZpc2libGUgPSBjb2x1bW5zPy5maW5kKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKHRoaXMuaW5pdGlhbENvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbml0aWFsQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgfVxuXG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnMgfHwgW107XG5cbiAgICBpZiAoaGFzQ29sdW1uc1dpdGhWaXNpYmxlICYmICF0aGlzLmluaXRpYWxWaXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy5pbml0aWFsVmlzaWJsZUNvbHVtbnMgPSB0cnVlO1xuICAgICAgdGhpcy52ZXJpZnlJbnRlcmFjdGl2ZUNvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2V0Q29sdW1uTGluaygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNJdGVtcykge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZUNvbHVtbnMoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgdW0gY29udG9ybm8gYXJyZWRvbmRhZG8gYW8gYHBvLXRhYmxlYCwgYXMgb3DDp8O1ZXMgc8OjbzpcbiAgICogLSBgYm9yZGVyYDogY29tIGJvcmRhcy9saW5oYXMuXG4gICAqIC0gYHNoYWRvd2A6IGNvbSBzb21icmFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgYm9yZGVyYFxuICAgKi9cbiAgQElucHV0KCdwLWNvbnRhaW5lcicpIHNldCBjb250YWluZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IHBvVGFibGVDb250YWluZXIuaW5jbHVkZXModmFsdWUpID8gdmFsdWUgOiBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdDtcbiAgfVxuXG4gIGdldCBjb250YWluZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgbyBwYXLDom1ldHJvIGEgc2VyIGVudmlhZG8gcGFyYSBhIHJlcXVpc2nDp8OjbyBkZSBERUxFVEUuXG4gICAqXG4gICAqIMOJIG5lY2Vzc8OhcmlvIGEgdXRpbGl6YcOnw6NvIGRhIHByb3ByaWVkYWRlIGBwLXNlcnZpY2UtZGVsZXRlYCBlbSBjb25qdW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYGlkYFxuICAgKi9cbiAgQElucHV0KCdwLXBhcmFtLWRlbGV0ZS1hcGknKSBzZXQgcGFyYW1EZWxldGVBcGkodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BhcmFtRGVsZXRlID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogcG9UYWJsZVBhcmFtRGVsZXRlQXBpO1xuICB9XG5cbiAgZ2V0IHBhcmFtRGVsZXRlQXBpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtRGVsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgYWx0dXJhIGRhIHRhYmVsYSBlbSAqcGl4ZWxzKiBlIGZpeGEgbyBjYWJlw6dhbGhvLlxuICAgKlxuICAgKiBBbyB1dGlsaXphciBlc3NhIHByb3ByaWVkYWRlIHNlcsOhIGluc2VyaWRvIG8gYHZpcnR1YWwtc2Nyb2xsYCBuYSB0YWJlbGEgbWVsaG9yYW5kbyBhIHBlcmZvcm1hbmNlLlxuICAgKi9cbiAgQElucHV0KCdwLWhlaWdodCcpIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBhIHZpc3VhbGl6YcOnw6NvIGRhIGxpc3RhIGRlIGRldGFsaGVzIGRlIGNhZGEgbGluaGEgZGEgY29sdW5hLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1kZXRhaWwnKSBzZXQgaGlkZURldGFpbChoaWRlRGV0YWlsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZURldGFpbCA9IGhpZGVEZXRhaWwgIT0gbnVsbCAmJiBoaWRlRGV0YWlsLnRvU3RyaW5nKCkgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oaGlkZURldGFpbCk7XG4gIH1cblxuICBnZXQgaGlkZURldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZURldGFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby10YWJsZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscyA9IHtcbiAgICogICAgbm9Db2x1bW5zOiAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyxcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAqICAgIG5vVmlzaWJsZUNvbHVtbjogJ05lbmh1bWEgY29sdW5hIHZpc8OtdmVsJyxcbiAgICogICAgbm9JdGVtOiAnTmVuaHVtIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgKiAgICBvbmVJdGVtOiAnMSBpdGVtIHNlbGVjaW9uYWRvJyxcbiAgICogICAgbXVsdGlwbGVJdGVtczogJ2l0ZW5zIHNlbGVjaW9uYWRvcycsXG4gICAqICAgIGxvYWRpbmdEYXRhOiAnQ2FycmVnYW5kbycsXG4gICAqICAgIGxvYWRNb3JlRGF0YTogJ0NhcnJlZ2FyIG1haXMgcmVzdWx0YWRvcycsXG4gICAqICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAqICAgIGNvbXBsZXRlU3VidGl0bGU6ICdMZWdlbmRhIGNvbXBsZXRhJyxcbiAgICogICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbmNpYWRvciBkZSBjb2x1bmFzJyxcbiAgICogICAgYm9keURlbGV0ZTogJ0Rlc2VqYSByZWFsbWVudGUgZXhjbHVpciBlc3NlIGl0ZW0/JyxcbiAgICogICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgKiAgICBkZWxldGU6ICdFeGNsdWlyJyxcbiAgICogICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0l0ZW5zIHJlbW92aWRvcyBjb20gc3VjZXNzbycsXG4gICAqICAgIGRlbGV0ZUFwaUVycm9yOiAnT2NvcnJldSB1bSBlcnJvIGluZXNwZXJhZG8sIHRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlIScsXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9UYWJsZUxpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdTZW0gZGFkb3MnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby10YWJsZVxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tdGFibGU+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9UYWJsZUxpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEJsb3F1ZWlhIGEgaW50ZXJhw6fDo28gZG8gdXN1w6FyaW8gY29tIG9zIGRhZG9zIGRhIF90YWJsZV8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkaW5nJykgc2V0IGxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSBjb252ZXJ0VG9Cb29sZWFuKGxvYWRpbmcpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGxpc3RhIGRlIGHDp8O1ZXMuXG4gICAqXG4gICAqIFF1YW5kbyBob3V2ZXIgYXBlbmFzIHVtYSBhw6fDo28gZGVmaW5pZGEgZWxhIHNlcsOhIGV4aWJpZGEgZGlyZXRhbWVudGUgbmEgY29sdW5hLCBjYXNvIGNvbnRyw6FyaW8sIG8gY29tcG9uZW50ZVxuICAgKiBzZSBlbmNhcnJlZ2EgZGUgYWdydXDDoS1sYXMgZXhpYmluZG8gbyDDrWNvbmUgWyoqcG8taWNvbi1tb3JlKipdKC9ndWlkZXMvaWNvbnMpIHF1ZSBsaXN0YXLDoSBhcyBhw6fDtWVzIGFvIHNlciBjbGljYWRvLlxuICAgKlxuICAgKiAqKkEgY29sdW5hIGRlIGHDp8O1ZXMgbsOjbyBzZXLDoSBleGliaWRhIHF1YW5kbzoqKlxuICAgKiAgLSBhIGxpc3RhIGNvbnRlciB2YWxvcmVzIGludsOhbGlkb3Mgb3UgaW5kZWZpbmlkb3MuXG4gICAqICAtIHRlbmhhIHVtYSDDum5pY2EgYcOnw6NvIGUgYSBtZXNtYSBuw6NvIGZvciB2aXPDrXZlbC5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnMoYWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gYWN0aW9ucztcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBsaW5oYXMgbmEgdGFiZWxhIGUsIGNhc28gYSBwcm9wcmllZGFkZSBgcC1zaW5nbGUtc2VsZWN0YCBlc3RlamEgZGVmaW5pZGEgc2Vyw6EgcG9zc8OtdmVsXG4gICAqIHNlbGVjaW9uYXIgYXBlbmFzIHVtYSDDum5pY2EgbGluaGEuXG4gICAqXG4gICAqICoqSW1wb3J0YW50ZToqKlxuICAgKiAgLSBBcyBsaW5oYXMgZGUgZGV0YWxoZSBkZWZpbmlkYXMgZW0gYFBvVGFibGVEZXRhaWxgIHBvc3N1ZW0gY29tcG9ydGFtZW50byBpbmRlcGVuZGVudGUgZGEgbGluaGEgbWVzdHJlO1xuICAgKiAgLSBDYWRhIGxpbmhhIHBvc3N1aSBwb3IgcGFkcsOjbyBhIHByb3ByaWVkYWRlIGRpbsOibWljYSBgJHNlbGVjdGVkYCwgbmEgcXVhbCDDqSBwb3Nzw612ZWwgdmFsaWRhciBzZSBhIGxpbmhhXG4gICAqIGVzdMOhIHNlbGVjaW9uYWRhLCBwb3IgZXhlbXBsbzogYGl0ZW0uJHNlbGVjdGVkYCBvdSBgaXRlbVsnJHNlbGVjdGVkJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc2VsZWN0YWJsZScpIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IDxhbnk+dmFsdWUgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBhdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIGEgdGFiZWxhIGUgbyBib3TDo28gXCJDYXJyZWdhciBNYWlzXCIgZGVpeGFyw6EgZGUgc2VyIGV4aWJpZG8uIEFvIGNoZWdhciBubyBmaW0gZGEgdGFiZWxhXG4gICAqIGV4ZWN1dGFyw6EgYSBmdW7Dp8OjbyBgcC1zaG93LW1vcmVgLlxuICAgKlxuICAgKiAqKlJlZ3JhcyBkZSB1dGlsaXphw6fDo286KipcbiAgICogIC0gTyBzY3JvbGwgaW5maW5pdG8gc8OzIGZ1bmNpb25hIHBhcmEgdGFiZWxhcyBxdWUgdXRpbGl6YW0gYSBwcm9wcmllZGFkZSBgcC1oZWlnaHRgIGUgcXVlIHBvc3N1ZW0gbyBzY3JvbGwgasOhIG5hIGNhcmdhIGluaWNpYWwgZG9zIGRhZG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgc2V0IGluZmluaXRlU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlICYmIHRoaXMuaGVpZ2h0ID4gMCk7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsO1xuICB9XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIHBlcmNlbnR1YWwgbmVjZXNzw6FyaW8gcGFyYSBkaXNwYXJhciBvIGV2ZW50byBgcC1zaG93LW1vcmVgLCBxdWUgw6kgcmVzcG9uc8OhdmVsIHBvciBjYXJyZWdhciBtYWlzIGRhZG9zIG5hIHRhYmVsYS4gQ2FzbyBvIHZhbG9yIGluZm9ybWFkbyBzZWphIG1haW9yIHF1ZSAxMDAgb3UgbWVub3JcbiAgICogcXVlIDAsIG8gdmFsb3IgcGFkcsOjbyBzZXLDoSAxMDAlXG4gICAqXG4gICAqICoqRXhlbXBsb3M6KipcbiAgICogIC0gcC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UgPSA4MDogUXVhbmRvIGF0aW5naXIgODAlICBkbyBzY3JvbGwgZGEgdGFiZWxhLCBvIGBwLXNob3ctbW9yZWAgc2Vyw6EgZGlzcGFyYWRvLlxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZScpIHNldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlID0gdmFsdWUgPiAxMDAgfHwgdmFsdWUgPCAwID8gMTAwIDogdmFsdWU7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFVSTCBkYSBBUEkgcmVzcG9uc8OhdmVsIHBvciByZXRvcm5hciBvcyByZWdpc3Ryb3MuXG4gICAqXG4gICAqIEFvIHJlYWxpemFyIGEgYnVzY2EgZGUgbWFpcyByZWdpc3Ryb3MgdmlhIHBhZ2luYcOnw6NvIChDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MpLCBzZXLDoSBlbnZpYWRvIG9zIHBhcsOibWV0cm9zIGBwYWdlYCBlIGBwYWdlU2l6ZWAsIGNvbmZvcm1lIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MTBcbiAgICogYGBgXG4gICAqXG4gICAqIENhc28gdXRpbGl6YXIgb3JkZW5hw6fDo28sIGEgY29sdW5hIG9yZGVuYWRhIHNlcsOhIGVudmlhZGEgYXRyYXbDqXMgZG8gcGFyw6JtZXRybyBgb3JkZXJgLCBwb3IgZXhlbXBsbzpcbiAgICogLSBDb2x1bmEgZGVjcmVzY2VudGU6XG4gICAqIGBgYFxuICAgKiAgdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMCZvcmRlcj0tbmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBDb2x1bmEgYXNjZW5kZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm9yZGVyPW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqID4gRXN0YSBVUkwgZGV2ZSByZXRvcm5hciBlIHJlY2ViZXIgb3MgZGFkb3Mgbm8gcGFkcsOjbyBkZSBbQVBJIGRvIFBPIFVJXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpLlxuICAgKi9cbiAgQElucHV0KCdwLXNlcnZpY2UtYXBpJykgc2V0IHNlcnZpY2VBcGkoc2VydmljZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VydmljZUFwaSA9IHNlcnZpY2U7XG4gICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuc2VydmljZUFwaSwgJ0dFVCcpO1xuICAgIHRoaXMuaGFzU2VydmljZSA9ICEhc2VydmljZTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhdGhpcy5oYXNTZXJ2aWNlO1xuICAgIHRoaXMucGFnZSA9IDE7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0YSgpO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2VBcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VBcGk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBVUkwgZGEgQVBJIHJlc3BvbnPDoXZlbCBwb3IgZXhjbHVpciBvcyByZWdpc3Ryb3MuXG4gICAqXG4gICAqIEFvIHNlbGVjaW9uYXIgbyBib3TDo28gZGUgZXhjbHVpciBpdGVucywgZXNzYSB1cmwgc2Vyw6EgZXhlY3V0YWRhIHV0aWxpemFuZG8gbyBwYXLDom1ldHJvIGVudmlhZG8gbmEgcHJvcHJpZWRhZGUgYHAtcGFyYW0tZGVsZXRlLWFwaWAuXG4gICAqIENhc28gZWxhIG7Do28gc2VqYSB1dGlsaXphZGEsIG8gcGFyw6JtZXRybyBwYWRyw6NvIGEgc2VyIGVudmlhZG8gc2Vyw6EgYGlkYC5cbiAgICpcbiAgICogPiBFc3RhIFVSTCBkZXZlIHJldG9ybmFyIGUgcmVjZWJlciBvcyBkYWRvcyBubyBwYWRyw6NvIGRlIFtBUEkgZG8gUE8gVUldKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkuXG4gICAqL1xuICBASW5wdXQoJ3Atc2VydmljZS1kZWxldGUnKSBzZXQgc2VydmljZURlbGV0ZUFwaShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXJ2aWNlRGVsZXRlQXBpID0gc2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5zZXJ2aWNlRGVsZXRlQXBpLCAnREVMRVRFJyk7XG4gIH1cblxuICBnZXQgc2VydmljZURlbGV0ZUFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZURlbGV0ZUFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFJlc3BvbnPDoXZlbCBwb3IgYXBsaWNhciBlc3Bhw6dhbWVudG8gbmFzIGNvbHVuYXMuXG4gICAqXG4gICAqIERldmUgcmVjZWJlciB1bSBkb3MgdmFsb3JlcyBkbyBlbnVtIGBQb1RhYmxlQ29sdW1uU3BhY2luZ2AuXG4gICAqXG4gICAqIFZhbG9yIGBzbWFsbGAgc8OzIGZ1bmNpb25hIGVtIHRhYmVsYXMgbsOjbyBpbnRlcmF0aXZhcy4gQ2FzbyBzZWphIHNldGFkbyBjb20gYHNtYWxsYCBlIGEgdGFiZWxhIHNlamEgaW50ZXJhdGl2YSwgbyB2YWxvciBzZXLDoSByZXRvcm5hZG8gcGFyYSBgbWVkaXVtYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYG1lZGl1bWBcbiAgICovXG4gIEBJbnB1dCgncC1zcGFjaW5nJykgc2V0IHNwYWNpbmcodmFsdWU6IFBvVGFibGVDb2x1bW5TcGFjaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAnc21hbGwnIHx8IHZhbHVlID09PSAnbWVkaXVtJyB8fCB2YWx1ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgdGhpcy5fc3BhY2luZyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zcGFjaW5nID0gUG9UYWJsZUNvbHVtblNwYWNpbmcuTWVkaXVtO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGFzIGNvbHVuYXMgcXVlIHNlcsOjbyBmaWx0cmFkYXMgbm8gY2FtcG8gZGUgcGVzcXVpc2EuXG4gICAqIEFjZWl0YSB1bSBhcnJheSBkZSBzdHJpbmdzLCByZXByZXNlbnRhbmRvIGFzIGNvbHVuYXMgZXNwZWPDrWZpY2FzIHF1ZSBzZXLDo28gY29uc2lkZXJhZGFzIG5hIGZpbHRyYWdlbS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXJlZC1jb2x1bW5zJykgc2V0IGZpbHRlcmVkQ29sdW1ucyh2YWx1ZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9maWx0ZXJlZENvbHVtbnMgPSB2YWx1ZXM7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRDb2x1bW5zKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgfVxuXG4gIGdldCBuYW1lQ29sdW1uRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA/IHRoaXMuY29sdW1uTWFzdGVyRGV0YWlsLnByb3BlcnR5IDogbnVsbDtcbiAgfVxuXG4gIGdldCB2YWxpZENvbHVtbnMoKSB7XG4gICAgY29uc3QgdHlwZXNWYWxpZCA9IFtcbiAgICAgICdzdHJpbmcnLFxuICAgICAgJ251bWJlcicsXG4gICAgICAnYm9vbGVhbicsXG4gICAgICAnZGF0ZScsXG4gICAgICAndGltZScsXG4gICAgICAnZGF0ZVRpbWUnLFxuICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICdzdWJ0aXRsZScsXG4gICAgICAnbGluaycsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2ljb24nLFxuICAgICAgJ2NlbGxUZW1wbGF0ZScsXG4gICAgICAnY29sdW1uVGVtcGxhdGUnXG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gIWNvbC50eXBlIHx8IHR5cGVzVmFsaWQuaW5jbHVkZXMoY29sLnR5cGUpKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3Rpb25zICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hY3Rpb25zICYmIHRoaXMuYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbiAmJiBhY3Rpb24udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLmxhYmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNvcnRUeXBlKCk6IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyA/IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5Bc2NlbmRpbmcgOiBQb1RhYmxlQ29sdW1uU29ydFR5cGUuRGVzY2VuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG8gbW9kbyBkcmFnIGFuZCBkcm9wIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kcmFnZ2FibGUnKSBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYWdnYWJsZSA9IGRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcmFnZ2FibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYWdnYWJsZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0IHx8IHRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZVNlbGVjdEFsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKHRoaXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXMuaGVpZ2h0IHx8IGNoYW5nZXMuaXRlbXMpICYmIHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlSGVhZGVyV2lkdGgoKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTaXplTG9hZGluZygpO1xuICB9XG5cbiAgc2VsZWN0QWxsUm93cygpIHtcbiAgICBpZiAoIXRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSAhdGhpcy5zZWxlY3RBbGw7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS4kc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEFsbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmVtaXRTZWxlY3RBbGxFdmVudHModGhpcy5zZWxlY3RBbGwsIFsuLi50aGlzLml0ZW1zXSk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2VsZWN0ZWQgPSAhcm93LiRzZWxlY3RlZDtcblxuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhyb3cpO1xuXG4gICAgdGhpcy5jb25maWdBZnRlclNlbGVjdFJvdyh0aGlzLml0ZW1zLCByb3cpO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRMaXN0KCk7XG4gIH1cblxuICBoYXNTZWxlY3RhYmxlUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlRW50aXJlTGluZTtcbiAgfVxuXG4gIHNlbGVjdERldGFpbFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhyb3cpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRMaXN0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLiRzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENsYXNzQ29sb3Iocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmNvbG9yID8gYHBvLXRleHQtJHt0aGlzLmdldENvbHVtbkNvbG9yKHJvdywgY29sdW1uKX1gIDogJyc7XG4gIH1cblxuICB0b2dnbGVEZXRhaWwocm93OiBhbnkpIHtcbiAgICBjb25zdCByb3dTaG93RGV0YWlsID0gcm93LiRzaG93RGV0YWlsO1xuICAgIGlmICh0aGlzLmF1dG9Db2xsYXBzZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUFsbEl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RldGFpbChyb3csICFyb3dTaG93RGV0YWlsKTtcbiAgICB0aGlzLmVtaXRFeHBhbmRFdmVudHMocm93KTtcbiAgfVxuXG4gIHRvZ2dsZVJvd0FjdGlvbihyb3c6IGFueSkge1xuICAgIGNvbnN0IHRvZ2dsZVNob3dBY3Rpb24gPSByb3cuJHNob3dBY3Rpb247XG5cbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS4kc2hvd0FjdGlvbikge1xuICAgICAgICBpdGVtLiRzaG93QWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcm93LiRzaG93QWN0aW9uID0gIXRvZ2dsZVNob3dBY3Rpb247XG4gIH1cblxuICBzb3J0Q29sdW1uKGNvbHVtbjogUG9UYWJsZUNvbHVtbikge1xuICAgIGlmICghdGhpcy5zb3J0IHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJyB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4uYXNjZW5kaW5nID0gdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHkgPT09IGNvbHVtbiA/ICF0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgOiB0cnVlO1xuXG4gICAgdGhpcy5zb3J0QXJyYXkoY29sdW1uLCB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcpO1xuICAgIHRoaXMuc29ydEJ5LmVtaXQoeyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfSk7XG4gICAgaWYgKHRoaXMuaGFzU2VydmljZSAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydFN0b3JlID0geyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSA9IGNvbHVtbjtcbiAgfVxuXG4gIG9uU2hvd01vcmUoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5ID8geyBjb2x1bW46IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5LCB0eXBlOiB0aGlzLnNvcnRUeXBlIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5oYXNTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnBhZ2UrKztcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IHRydWU7XG5cbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmdldEZpbHRlcmVkSXRlbXMoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtcywgLi4uZGF0YS5pdGVtc107XG4gICAgICAgIHRoaXMuc2hvd01vcmVEaXNhYmxlZCA9ICFkYXRhLmhhc05leHQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TW9yZS5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pOiBPYnNlcnZhYmxlPFBvVGFibGVSZXNwb25zZUFwaT4ge1xuICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1zOiBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyA9IHRoaXMuZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMucG9UYWJsZVNlcnZpY2UuZ2V0RmlsdGVyZWRJdGVtcyhmaWx0ZXJlZFBhcmFtcyk7XG4gIH1cblxuICBzZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhOiBQb1RhYmxlUmVzcG9uc2VBcGkpIHtcbiAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcyB8fCBbXTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhZGF0YS5oYXNOZXh0O1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZURhdGEocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBRdWVyeVBhcmFtc1R5cGUgfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1NlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnBhcmFtc0ZpbHRlciA9IHBhcmFtcztcbiAgICAgIHRoaXMuZ2V0RmlsdGVyZWRJdGVtcyhwYXJhbXMpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5zZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRBcnJheShjb2x1bW46IFBvVGFibGVDb2x1bW4sIGFzY2VuZGluZzogYm9vbGVhbiwgaXRlbT86IEFycmF5PGFueT4pIHtcbiAgICBsZXQgaXRlbXNMaXN0O1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpdGVtc0xpc3QgPSB0aGlzLmhlaWdodCA/IFsuLi5pdGVtXSA6IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zTGlzdCA9IHRoaXMuaGVpZ2h0ID8gWy4uLnRoaXMuZmlsdGVyZWRJdGVtc10gOiB0aGlzLmZpbHRlcmVkSXRlbXM7XG4gICAgfVxuICAgIGl0ZW1zTGlzdC5zb3J0KChsZWZ0U2lkZSwgcmlnaHRTaWRlKTogbnVtYmVyID0+XG4gICAgICBzb3J0VmFsdWVzKGxlZnRTaWRlW2NvbHVtbi5wcm9wZXJ0eV0sIHJpZ2h0U2lkZVtjb2x1bW4ucHJvcGVydHldLCBhc2NlbmRpbmcpXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtc0xpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdENvbHVtbnMoaXRlbTogYW55KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xuXG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHR5cGVvZiBpdGVtW2tleV0gIT09ICdvYmplY3QnKVxuICAgICAgLm1hcChrZXkgPT4gKHsgbGFiZWw6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpLCBwcm9wZXJ0eToga2V5IH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93RGV0YWlsKHJvd0lkZW50aWZpZXI6IGFueSB8IG51bWJlciwgaXNTaG93RGV0YWlsOiBib29sZWFuKSB7XG4gICAgY29uc3QgaXNSb3dJbmRleCA9IHR5cGVvZiByb3dJZGVudGlmaWVyID09PSAnbnVtYmVyJyAmJiB0aGlzLml0ZW1zW3Jvd0lkZW50aWZpZXJdO1xuXG4gICAgY29uc3Qgcm93ID0gaXNSb3dJbmRleCA/IHRoaXMuaXRlbXNbcm93SWRlbnRpZmllcl0gOiByb3dJZGVudGlmaWVyO1xuXG4gICAgcm93LiRzaG93RGV0YWlsID0gaXNTaG93RGV0YWlsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUFsbEl0ZW1zKGl0ZW1zOiBBcnJheTx7IFtrZXk6IHN0cmluZ106IGFueSB9Pikge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0uJHNob3dEZXRhaWwpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93RGV0YWlsKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbWl0RXhwYW5kRXZlbnRzKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnQWZ0ZXJTZWxlY3RSb3cocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0KSB7XG4gICAgICB0aGlzLnVuc2VsZWN0T3RoZXJSb3dzKHJvd3MsIHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMuaXNFdmVyeVNlbGVjdGVkKHJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV4cGFuZEV2ZW50cyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2hvd0RldGFpbCA/IHRoaXMuZXhwYW5kZWQuZW1pdChyb3cpIDogdGhpcy5jb2xsYXBzZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0QWxsRXZlbnRzKHNlbGVjdEFsbDogYm9vbGVhbiwgcm93czogYW55KSB7XG4gICAgc2VsZWN0QWxsID8gdGhpcy5hbGxTZWxlY3RlZC5lbWl0KHJvd3MpIDogdGhpcy5hbGxVbnNlbGVjdGVkLmVtaXQocm93cyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RFdmVudHMocm93OiBhbnkpIHtcbiAgICByb3cuJHNlbGVjdGVkID8gdGhpcy5zZWxlY3RlZC5lbWl0KHJvdykgOiB0aGlzLnVuc2VsZWN0ZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5Db2xvcihyb3csIGNvbHVtbikge1xuICAgIGNvbnN0IGNvbHVtbkNvbG9yID0gY29sdW1uLmNvbG9yO1xuXG4gICAgcmV0dXJuIGlzVHlwZW9mKGNvbHVtbkNvbG9yLCAnZnVuY3Rpb24nKSA/IGNvbHVtbkNvbG9yKHJvdywgY29sdW1uLnByb3BlcnR5KSA6IGNvbHVtbkNvbG9yO1xuICB9XG5cbiAgLy8gUmV0b3JuYSBhIGNvbHVuYSBkYSBsaXN0YSBkZSBjb2x1bmFzIHF1ZSDDqSBkbyB0aXBvIGRldGFpbFxuICBwcml2YXRlIGdldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC50eXBlID09PSAnZGV0YWlsJyk7XG4gIH1cblxuICAvLyBDb2x1bmFzIHF1ZSBzw6NvIGluc2VyaWRhcyBubyA8aGVhZD4gZGEgdGFiZWxhXG4gIHByaXZhdGUgZ2V0TWFpbkNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgYXMgY29sdW5hcyBjb20gc3RhdHVzXG4gIHByaXZhdGUgZ2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudHlwZSA9PT0gJ3N1YnRpdGxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRXZlcnlTZWxlY3RlZChpdGVtczogQXJyYXk8YW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlID0gaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCB8fCBpdGVtLiRzZWxlY3RlZCA9PT0gbnVsbDtcbiAgICBjb25zdCBldmVyeUNoZWNrZWQgPSBpdGVtID0+IGl0ZW0uJHNlbGVjdGVkO1xuXG4gICAgaWYgKGl0ZW1zLmV2ZXJ5KGV2ZXJ5Q2hlY2tlZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpdGVtcy5zb21lKHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXRNYWluQ29sdW1ucygpO1xuICAgIHRoaXMuc2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gICAgdGhpcy5zZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgICB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5MaW5rKCkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uWyd0eXBlJ10gPT09ICdsaW5rJyAmJiAhY29sdW1uWydsaW5rJ10pIHtcbiAgICAgICAgY29sdW1uWydsaW5rJ10gPSAnbGluayc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA9IHRoaXMuZ2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gIH1cblxuICBwcml2YXRlIHNldE1haW5Db2x1bW5zKCkge1xuICAgIHRoaXMubWFpbkNvbHVtbnMgPSB0aGlzLmdldE1haW5Db2x1bW5zKCk7XG5cbiAgICB0aGlzLmhhc01haW5Db2x1bW5zID0gISF0aGlzLm1haW5Db2x1bW5zLmxlbmd0aDtcblxuICAgIHRoaXMuYWxsQ29sdW1uc1dpZHRoUGl4ZWxzID0gdGhpcy52ZXJpZnlXaWR0aENvbHVtbnNQaXhlbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc3VidGl0bGVDb2x1bW5zID0gdGhpcy5nZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zZWxlY3RPdGhlclJvd3Mocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgcm93cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0gIT09IHJvdykge1xuICAgICAgICBpdGVtLiRzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlJbnRlcmFjdGl2ZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgaGFzTGlua09yRGV0YWlsID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnbGluaycgfHwgY29sdW1uLnR5cGUgPT09ICdkZXRhaWwnKTtcbiAgICBpZiAodGhpcy5zcGFjaW5nID09PSAnc21hbGwnICYmICh0aGlzLnNlbGVjdGFibGUgfHwgaGFzTGlua09yRGV0YWlsIHx8IHRoaXMudmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMCkpIHtcbiAgICAgIHRoaXMuc3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVdpZHRoQ29sdW1uc1BpeGVscygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNNYWluQ29sdW1ucyA/IHRoaXMubWFpbkNvbHVtbnMuZXZlcnkoY29sdW1uID0+IGNvbHVtbi53aWR0aCAmJiBjb2x1bW4ud2lkdGguaW5jbHVkZXMoJ3B4JykpIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldFNlcnZpY2Uoc2VydmljZTogc3RyaW5nLCBtZXRob2Q6ICdHRVQnIHwgJ0RFTEVURScpIHtcbiAgICBpZiAoc2VydmljZSAmJiBpc1R5cGVvZihzZXJ2aWNlLCAnc3RyaW5nJykpIHtcbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2Uuc2V0VXJsKHNlcnZpY2UsIG1ldGhvZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJlZFBhcmFtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pIHtcbiAgICBjb25zdCB7IHBhZ2UsIHBhZ2VTaXplLCBzb3J0U3RvcmUgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBmaWx0ZXJlZFBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5nZXRPcmRlclBhcmFtKHNvcnRTdG9yZSk7XG4gICAgY29uc3QgcGFyYW1zID0geyBwYWdlLCBwYWdlU2l6ZSwgb3JkZXIsIC4uLnF1ZXJ5UGFyYW1zIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMpIHtcbiAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbHRlcmVkUGFyYW1zW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlclBhcmFtKHNvcnQ6IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB0eXBlIH0gPSBzb3J0O1xuXG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUG9UYWJsZUNvbHVtblNvcnRUeXBlLkRlc2NlbmRpbmcpIHtcbiAgICAgIHJldHVybiBgLSR7Y29sdW1uLnByb3BlcnR5fWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2NvbHVtbi5wcm9wZXJ0eX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZpeGVkKGFycjogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBhcnIubWFwKG9iaiA9PiB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KCdmaXhlZCcpKSB7XG4gICAgICAgIG9iai5maXhlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcihoZWlnaHQpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGVja0luZmluaXRlU2Nyb2xsKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZVNpemVMb2FkaW5nKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZUhlYWRlcldpZHRoKCk7XG59XG4iXX0=
@@ -16,27 +16,26 @@ function PoTableColumnLabelComponent_po_tag_0_Template(rf, ctx) { if (rf & 1) {
16
16
  * Componente para a criação da representação da legenda, em formato de texto .
17
17
  */
18
18
  export class PoTableColumnLabelComponent {
19
- hasLabel = false;
20
19
  value;
21
20
  ngOnInit() {
22
21
  this.checkValueHasLabel();
23
22
  }
24
23
  checkValueHasLabel() {
25
- this.hasLabel = this.value?.label?.trim() ? true : false;
24
+ return this.value?.label?.trim() ? true : false;
26
25
  }
27
26
  static ɵfac = function PoTableColumnLabelComponent_Factory(t) { return new (t || PoTableColumnLabelComponent)(); };
28
27
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoTableColumnLabelComponent, selectors: [["po-table-column-label"]], inputs: { value: [i0.ɵɵInputFlags.None, "p-value", "value"] }, decls: 1, vars: 1, consts: [[3, "p-color", "p-value", "p-text-color", "p-icon", "p-type", 4, "ngIf"], [3, "p-color", "p-value", "p-text-color", "p-icon", "p-type"]], template: function PoTableColumnLabelComponent_Template(rf, ctx) { if (rf & 1) {
29
28
  i0.ɵɵtemplate(0, PoTableColumnLabelComponent_po_tag_0_Template, 1, 5, "po-tag", 0);
30
29
  } if (rf & 2) {
31
- i0.ɵɵproperty("ngIf", ctx.hasLabel);
30
+ i0.ɵɵproperty("ngIf", ctx.checkValueHasLabel());
32
31
  } }, dependencies: [i1.NgIf, i2.PoTagComponent], encapsulation: 2, changeDetection: 0 });
33
32
  }
34
33
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoTableColumnLabelComponent, [{
35
34
  type: Component,
36
- args: [{ selector: 'po-table-column-label', changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-tag\n *ngIf=\"hasLabel\"\n [p-color]=\"value?.color\"\n [p-value]=\"value?.label\"\n [p-text-color]=\"value?.textColor\"\n [p-icon]=\"value?.icon\"\n [p-type]=\"value?.type\"\n>\n</po-tag>\n" }]
35
+ args: [{ selector: 'po-table-column-label', changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-tag\n *ngIf=\"checkValueHasLabel()\"\n [p-color]=\"value?.color\"\n [p-value]=\"value?.label\"\n [p-text-color]=\"value?.textColor\"\n [p-icon]=\"value?.icon\"\n [p-type]=\"value?.type\"\n>\n</po-tag>\n" }]
37
36
  }], null, { value: [{
38
37
  type: Input,
39
38
  args: ['p-value']
40
39
  }] }); })();
41
40
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoTableColumnLabelComponent, { className: "PoTableColumnLabelComponent", filePath: "lib/components/po-table/po-table-column-label/po-table-column-label.component.ts", lineNumber: 18 }); })();
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbGFiZWwvcG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbGFiZWwvcG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztJQ0FsRiw0QkFRUzs7O0lBTlAsMEVBQXdCLDZEQUFBLHNFQUFBLDJEQUFBLDJEQUFBOztBREUxQjs7Ozs7O0dBTUc7QUFPSCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFUixLQUFLLENBQXFCO0lBRTVDLFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNELENBQUM7cUZBWFUsMkJBQTJCOzZEQUEzQiwyQkFBMkI7WUNqQnhDLGtGQVFTOztZQVBOLG1DQUFjOzs7aUZEZ0JKLDJCQUEyQjtjQUx2QyxTQUFTOzJCQUNFLHVCQUF1QixtQkFFaEIsdUJBQXVCLENBQUMsTUFBTTtnQkFLN0IsS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTOztrRkFITCwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBvVGFibGVDb2x1bW5MYWJlbCB9IGZyb20gJy4vcG8tdGFibGUtY29sdW1uLWxhYmVsLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRvY3NQcml2YXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ29tcG9uZW50ZSBwYXJhIGEgY3JpYcOnw6NvIGRhIHJlcHJlc2VudGHDp8OjbyBkYSBsZWdlbmRhLCBlbSBmb3JtYXRvIGRlIHRleHRvIC5cbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby10YWJsZS1jb2x1bW4tbGFiZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9UYWJsZUNvbHVtbkxhYmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaGFzTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoJ3AtdmFsdWUnKSB2YWx1ZTogUG9UYWJsZUNvbHVtbkxhYmVsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tWYWx1ZUhhc0xhYmVsKCk7XG4gIH1cblxuICBjaGVja1ZhbHVlSGFzTGFiZWwoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNMYWJlbCA9IHRoaXMudmFsdWU/LmxhYmVsPy50cmltKCkgPyB0cnVlIDogZmFsc2U7XG4gIH1cbn1cbiIsIjxwby10YWdcbiAgKm5nSWY9XCJoYXNMYWJlbFwiXG4gIFtwLWNvbG9yXT1cInZhbHVlPy5jb2xvclwiXG4gIFtwLXZhbHVlXT1cInZhbHVlPy5sYWJlbFwiXG4gIFtwLXRleHQtY29sb3JdPVwidmFsdWU/LnRleHRDb2xvclwiXG4gIFtwLWljb25dPVwidmFsdWU/Lmljb25cIlxuICBbcC10eXBlXT1cInZhbHVlPy50eXBlXCJcbj5cbjwvcG8tdGFnPlxuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbGFiZWwvcG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbGFiZWwvcG8tdGFibGUtY29sdW1uLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztJQ0FsRiw0QkFRUzs7O0lBTlAsMEVBQXdCLDZEQUFBLHNFQUFBLDJEQUFBLDJEQUFBOztBREUxQjs7Ozs7O0dBTUc7QUFPSCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3BCLEtBQUssQ0FBcUI7SUFFNUMsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDbEQsQ0FBQztxRkFUVSwyQkFBMkI7NkRBQTNCLDJCQUEyQjtZQ2pCeEMsa0ZBUVM7O1lBUE4sK0NBQTBCOzs7aUZEZ0JoQiwyQkFBMkI7Y0FMdkMsU0FBUzsyQkFDRSx1QkFBdUIsbUJBRWhCLHVCQUF1QixDQUFDLE1BQU07Z0JBRzdCLEtBQUs7a0JBQXRCLEtBQUs7bUJBQUMsU0FBUzs7a0ZBREwsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uTGFiZWwgfSBmcm9tICcuL3BvLXRhYmxlLWNvbHVtbi1sYWJlbC5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEBkb2NzUHJpdmF0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIENvbXBvbmVudGUgcGFyYSBhIGNyaWHDp8OjbyBkYSByZXByZXNlbnRhw6fDo28gZGEgbGVnZW5kYSwgZW0gZm9ybWF0byBkZSB0ZXh0byAuXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tdGFibGUtY29sdW1uLWxhYmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXRhYmxlLWNvbHVtbi1sYWJlbC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBvVGFibGVDb2x1bW5MYWJlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgncC12YWx1ZScpIHZhbHVlOiBQb1RhYmxlQ29sdW1uTGFiZWw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1ZhbHVlSGFzTGFiZWwoKTtcbiAgfVxuXG4gIGNoZWNrVmFsdWVIYXNMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZT8ubGFiZWw/LnRyaW0oKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuIiwiPHBvLXRhZ1xuICAqbmdJZj1cImNoZWNrVmFsdWVIYXNMYWJlbCgpXCJcbiAgW3AtY29sb3JdPVwidmFsdWU/LmNvbG9yXCJcbiAgW3AtdmFsdWVdPVwidmFsdWU/LmxhYmVsXCJcbiAgW3AtdGV4dC1jb2xvcl09XCJ2YWx1ZT8udGV4dENvbG9yXCJcbiAgW3AtaWNvbl09XCJ2YWx1ZT8uaWNvblwiXG4gIFtwLXR5cGVdPVwidmFsdWU/LnR5cGVcIlxuPlxuPC9wby10YWc+XG4iXX0=