@fundamental-ngx/platform 0.44.0-rc.6 → 0.44.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 (58) hide show
  1. package/esm2022/action-bar/action-bar.component.mjs +3 -3
  2. package/esm2022/button/button.component.mjs +4 -3
  3. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -2
  4. package/esm2022/feed-input/feed-input.component.mjs +3 -2
  5. package/esm2022/form/checkbox/checkbox.component.mjs +6 -5
  6. package/esm2022/form/checkbox-group/checkbox-group.component.mjs +3 -3
  7. package/esm2022/form/date-picker/date-picker.component.mjs +7 -6
  8. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +6 -5
  9. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +3 -2
  10. package/esm2022/form/form-group/form-field/form-field.component.mjs +4 -3
  11. package/esm2022/form/form-group/form-group.component.mjs +3 -3
  12. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
  13. package/esm2022/form/platform-file-uploader/platform-file-uploader.component.mjs +4 -3
  14. package/esm2022/form/radio-group/radio/radio.component.mjs +4 -3
  15. package/esm2022/form/select/commons/base-select.mjs +3 -3
  16. package/esm2022/form/select/select/select.component.mjs +4 -4
  17. package/esm2022/form/text-area/text-area.component.mjs +4 -4
  18. package/esm2022/form/time-picker/time-picker.component.mjs +3 -2
  19. package/esm2022/list/base-list-item.mjs +5 -5
  20. package/esm2022/page-footer/page-footer.component.mjs +3 -2
  21. package/esm2022/search-field/search-field.component.mjs +4 -4
  22. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +7 -6
  23. package/esm2022/thumbnail/thumbnail-details/thumbnail-details.component.mjs +3 -2
  24. package/esm2022/thumbnail/thumbnail-image/thumbnail-image.component.mjs +3 -3
  25. package/esm2022/thumbnail/thumbnail.component.mjs +3 -3
  26. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +5 -5
  27. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +4 -3
  28. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -2
  29. package/esm2022/value-help-dialog/components/value-help-dialog-search/value-help-dialog-search.component.mjs +3 -2
  30. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +5 -5
  31. package/fesm2022/fundamental-ngx-platform-action-bar.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-platform-action-bar.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-button.mjs +3 -3
  34. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -1
  36. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -1
  38. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-platform-form.mjs +31 -30
  40. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-platform-list.mjs +4 -4
  42. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +2 -1
  44. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-platform-search-field.mjs +3 -3
  46. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +7 -7
  48. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs +4 -4
  50. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +11 -10
  52. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +9 -8
  54. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  55. package/fundamental-ngx-platform-v0.44.0.tgz +0 -0
  56. package/package.json +4 -4
  57. package/schematics/ng-add/index.js +1 -1
  58. package/fundamental-ngx-platform-v0.44.0-rc.6.tgz +0 -0
@@ -21,7 +21,7 @@ import { ControlContainer, FormGroup, NgForm } from '@angular/forms';
21
21
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
22
22
  import { debounceTime, takeUntil } from 'rxjs/operators';
23
23
  import { Subject, Subscription } from 'rxjs';
24
- import { resizeObservable } from '@fundamental-ngx/cdk/utils';
24
+ import { resizeObservable, warnOnce } from '@fundamental-ngx/cdk/utils';
25
25
  import { FormGroupContainer } from '@fundamental-ngx/platform/shared';
26
26
  import { FieldGroup, getField, getFormField, isFieldChild, isFieldGroupChild, isFieldGroupWrapperChild } from '../form-helpers';
27
27
  import { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';
@@ -127,7 +127,7 @@ export class FormGroupComponent {
127
127
  */
128
128
  set labelLayout(value) {
129
129
  if (isDevMode()) {
130
- console.warn('LabelLayout input property is deprecated. Please use labelColumnLayout, fieldColumnLayout and gapColumnLayout properties instead');
130
+ warnOnce('LabelLayout input property is deprecated. Please use labelColumnLayout, fieldColumnLayout and gapColumnLayout properties instead');
131
131
  }
132
132
  this._labelLayout = value;
133
133
  this.labelColumnLayout =
@@ -555,4 +555,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
555
555
  type: ContentChildren,
556
556
  args: [FORM_GROUP_CHILD_FIELD_TOKEN, { descendants: true }]
557
557
  }] } });
558
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1ncm91cC9mb3JtLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUlULFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFJSCxrQkFBa0IsRUFNckIsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQyxPQUFPLEVBR0gsVUFBVSxFQUNWLFFBQVEsRUFDUixZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDM0IsTUFBTSxpQkFBaUIs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SUFBSTtzQkFESCxLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFzQkYsa0JBQWtCO3NCQURyQixLQUFLO2dCQW9CTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQVlOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixPQUFPO3NCQURWLEtBQUs7Z0JBYU4sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSzs7UUFPTiwrREFBK0Q7UUFDL0QsUUFBUTtzQkFGUCxNQUFNO2dCQVFQLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUt6QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLOUIsZ0JBQWdCO3NCQUR2QixlQUFlO3VCQUFDLHVCQUF1QjtnQkFzQjlCLGlCQUFpQjtzQkFEMUIsZUFBZTt1QkFBQyw0QkFBbUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBGLiBLb2xhclxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqXG4gKi9cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIGlzRGV2TW9kZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUHJvdmlkZXIsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHJlc2l6ZU9ic2VydmFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIENvbHVtbkxheW91dCxcbiAgICBGaWVsZEhpbnRPcHRpb25zLFxuICAgIEZvcm1GaWVsZEdyb3VwLFxuICAgIEZvcm1Hcm91cENvbnRhaW5lcixcbiAgICBIaW50SW5wdXQsXG4gICAgSGludE9wdGlvbnMsXG4gICAgSGludFBsYWNlbWVudCxcbiAgICBMYWJlbExheW91dCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgRmllbGQsXG4gICAgRmllbGRDb2x1bW4sXG4gICAgRmllbGRHcm91cCxcbiAgICBnZXRGaWVsZCxcbiAgICBnZXRGb3JtRmllbGQsXG4gICAgaXNGaWVsZENoaWxkLFxuICAgIGlzRmllbGRHcm91cENoaWxkLFxuICAgIGlzRmllbGRHcm91cFdyYXBwZXJDaGlsZFxufSBmcm9tICcuLi9mb3JtLWhlbHBlcnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtZXJyb3IvZm9ybS1maWVsZC1lcnJvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRGVmYXVsdEdhcExheW91dCxcbiAgICBEZWZhdWx0SG9yaXpvbnRhbEZpZWxkTGF5b3V0LFxuICAgIERlZmF1bHRIb3Jpem9udGFsTGFiZWxMYXlvdXQsXG4gICAgRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQsXG4gICAgRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQsXG4gICAgRk9STV9HUk9VUF9DSElMRF9GSUVMRF9UT0tFTlxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUNvbHVtbkNsYXNzLCBub3JtYWxpemVDb2x1bW5MYXlvdXQgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTGF5b3V0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZm9ybS1maWVsZC1sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBGRFBfRk9STV9GSUVMRF9ISU5UX09QVElPTlNfREVGQVVMVCB9IGZyb20gJy4vZmRwLWZvcm0udG9rZW5zJztcbmltcG9ydCB7IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMsIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcblxuZXhwb3J0IGNvbnN0IGZvcm1Hcm91cFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUdyb3VwQ29tcG9uZW50KVxufTtcblxudHlwZSBGb3JtR3JvdXBGaWVsZCA9IChGb3JtRmllbGQgfCBGb3JtRmllbGRHcm91cCkgJiB7IGhpbnRPcHRpb25zPzogSGludE9wdGlvbnMgfTtcblxubGV0IGZvcm1Hcm91cFVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKlxuICogRm9ybUdyb3VwIHJlcHJlc2VudCBoaWdoIG9yZGVyIGNvbnRhaW5lciBhZ2dyZWdhdGluZyBGb3JtRmllbGRzIGFuZCBhYmlsaXR5IHRvIGRpc3RyaWJ1dGUgdGhlc2VcbiAqIGZpZWxkcyBpbnRvIGNvbHVtbnMuIEl0IG1haW5seSBoaWRlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgd2UgbmVlZCB0byBkZWFsIHdpdGggZXZlcnlcbiAqIHRpbWUgd2UgYXJlIGJ1aWxkaW5nIGEgZm9ybS4gV2UgaGF2ZSBpbnB1dCBmaWVsZHMgLCBlcnJvciBtYW5hZ2VtZW50cywgZGlmZmVyZW50IHN0YXRlcyxcbiAqIGhpbnRzIGFuZCBtYW55IG1vcmUuXG4gKlxuICogV2VsbCBiZWhhdmVkIGZvcm0gdGhhdCBoYXMgaW5mb3JtYXRpb24gc2lkZSBieSBzaWRlIGluIG11bHRpcGxlXG4gKiBjb2x1bW5zIG5lZWRzIHRvIGFsc28ga25vdyBob3cgdG8gbWVyZ2UgcHJvcGVybHkuXG4gKlxuICogSnVzdCB0byBnZXQgdGhlIGlkZWEgYWJvdXQgdGhlIHN0cnVjdHVyZSB3aXRob3V0IGFjdHVhbCBpbnB1dCBjb21wb25lbnRzIGluc2lkZVxuICpcbiAqIGBgYGh0bWxcbiAqIDxmZHAtZm9ybS1ncm91cCBbaGludFBsYWNlbWVudF09XCInaW5saW5lJ1wiIGNvbHVtbkxheW91dD1cIlhMMi1MMi1NMS1TMVwiPlxuICogICAgPGZkcC1mb3JtLWZpZWxkIFtpZF09XCInRmllbGQgQSdcIiBbcmFua109XCIxMFwiIGNvbHVtbj1cIjFcIj5cbiAqICAgIDwvZmRwLWZvcm0tZmllbGQ+XG4gKlxuICogICAgPGZkcC1mb3JtLWZpZWxkIFtpZF09XCInRmllbGQgQidcIiBbcmFua109XCIzMFwiIGNvbHVtbj1cIjFcIj5cbiAqICAgIDwvZmRwLWZvcm0tZmllbGQ+XG4gKlxuICogICAgPGZkcC1mb3JtLWZpZWxkIFtpZF09XCInRmllbGQgQydcIiAgW3JhbmtdPVwiMjBcIiBjb2x1bW49XCIxXCI+XG4gKiAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICpcbiAqICAgIDxmZHAtZm9ybS1maWVsZCBbaWRdPVwiRmllbGQgRFwiICBbcmFua109XCIyMFwiIGNvbHVtbj1cIjJcIj5cbiAqICAgIDwvZmRwLWZvcm0tZmllbGQ+XG4gKlxuICpcbiAqICAgIDxmZHAtZm9ybS1maWVsZCBbaWRdPVwiJ0ZpZWxkIEUnXCIgW3JhbmtdPVwiMzBcIiBjb2x1bW49XCIyXCI+XG4gKiAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICogPC9mZHAtZm9ybS1ncm91cD5cblxuICpcbiAqIGBgYGBcbiAqXG4gKlxuICogV2hpY2ggY2FuIGJlIHRyYW5zbGF0ZWQgbGlrZSB0aGlzXG4gKiBbRmllbGQgQV0gLSBGaXJzdCBjb2x1bW4sIHJhbmsgMTBcbiAqIFtGaWVsZCBCXSAtIEZpcnN0IGNvbHVtbiwgcmFuayAzMFxuICogW0ZpZWxkIENdIC0gRmlyc3QgY29sdW1uLCByYW5rIDIwXG4gKiBbRmllbGQgRF0gLSBTZWNvbmQgY29sdW1uLCByYW5rIDIwXG4gKiBbRmllbGQgRV0gLSBTZWNvbmQgY29sdW1uLCByYW5rIDMwXG4gKlxuICogV2hhdCB3ZSBleHBlY3QgdGhhdCBpdCBjcmVhdGVzIGZvbGxvd2luZyBmb3JtIHdpdGggdHdvIGNvbHVtbiBsYXlvdXQ6XG4gKiBbRmllbGQgQV0gICAgICBbRmllbGQgRF1cbiAqIFtGaWVsZCBDXSAgICAgIFtGaWVsZCBFXVxuICogW0ZpZWxkIEJdXG4gKlxuICogWW91IGNhbiBzZWUgYWxsIGlzIHNvcnRlZCBhY2NvcmRpbmdseSBieSByYW5rIChDIGdvZXMgYmVmb3JlIEIpLlxuICpcbiAqIFdoZW4geW91IG1vdmUgaW50byBzbWFsbGVyIGRldmljZSBhbmQgYWxsIGlzIG1lcmdlZCBpbnRvIG9uZSBjb2x1bW5zIHRoZSBuYWl2ZSBzb2x1dGlvbiB3b3VsZCBiZTpcbiAqXG4gKiBbRmllbGQgQV1cbiAqIFtGaWVsZCBDXVxuICogW0ZpZWxkIEJdXG4gKiBbRmllbGQgRF1cbiAqIFtGaWVsZCBFXVxuICpcbiAqIFRoZSBmaWVsZHMgbmVlZHMgdG8gcmVzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIHRoZWlyIG9yaWdpbmFsIHBvc2l0aW9uaW5nLiBXaGVuIEZpZWxkIEQgd2FzIG9uIHRoZVxuICogdG9wIHdoeSB3ZSBzaG91bGQgbW92ZSBpdCB0byB0aGUgYm90dG9tPyBUaGUgbW9yZSBjb3JyZWN0IHNvbHV0aW9uIHNob3VsZCBiZSBmb2xsb3dpbmcuXG4gKlxuICogW0ZpZWxkIEFdXG4gKiBbRmllbGQgRF1cbiAqIFtGaWVsZCBDXVxuICogW0ZpZWxkIEVdXG4gKiBbRmllbGQgQl1cbiAqXG4gKiBGaWVsZHMgbmljZWx5IG1lcmdlIHRvZ2V0aGVyLiB0aGV5IGRvbid0IHdyYXAuXG4gKlxuICpcbiAqIEJlc2lkZXMgdGhpcyBsYXlvdXQgc3VwcG9ydCBpdCBhbHNvIHdyYXBzIGZvcm0gZnVuY3Rpb25hbGl0eSBhbmQgaXQgY2FuIHdvcmsgd2l0aCBGb3JtR3JvdXAuXG4gKiBZb3UgY2FuIGFsc28gZGVjaWRlIGlmIHlvdSB3YW50IHlvdXIgZm9ybSB3aXRoIDxmb3JtPiBlbGVtZW50IG9yIHdpdGhvdXQgaXQuXG4gKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZm9ybS1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICdmb3JtLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtmb3JtR3JvdXBQcm92aWRlciwgRm9ybUZpZWxkTGF5b3V0U2VydmljZSwgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtR3JvdXBDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIEZvcm1Hcm91cENvbnRhaW5lciwgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICAgIC8qKiBJZCBmb3IgdGhlIGZvcm0gZ3JvdXAgZWxlbWVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSBgZmRwLWZvcm0tZ3JvdXAtJHtmb3JtR3JvdXBVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogTmFtZSBwcm9wZXJ0eSB0byBiZSBzZXQgb24gYSBmb3JtLiBXaWxsIGJlIHVzZWQgaWYgYHVzZUZvcm1gIGlzIHNldCB0byB0cnVlICovXG4gICAgQElucHV0KClcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogSW5kaWNhdGVzIGlmIGdyb3VwIGlzIGVkaXRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBlZGl0YWJsZSA9IHRydWU7XG5cbiAgICAvKiogSW5kaWNhdGVzIHdoZW4gbGFiZWxzIHNob3VsZCBub3QgYmUgZGlzcGxheWVkICovXG4gICAgQElucHV0KClcbiAgICBub0xhYmVsTGF5b3V0ID0gZmFsc2U7XG5cbiAgICAvKiogVXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRm9ybSBncm91cCBoaW50IG9wdGlvbnNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpbnQ6IEhpbnRJbnB1dDtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGxhYmVsQ29sdW1uTGF5b3V0LCBmaWVsZENvbHVtbkxheW91dCBhbmQgZ2FwQ29sdW1uTGF5b3V0IHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBEZWZpbmVzIGZvcm0gZmllbGQgbGFiZWwgcGxhY2VtZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsTGF5b3V0KHZhbHVlOiBMYWJlbExheW91dCkge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnTGFiZWxMYXlvdXQgaW5wdXQgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBsYWJlbENvbHVtbkxheW91dCwgZmllbGRDb2x1bW5MYXlvdXQgYW5kIGdhcENvbHVtbkxheW91dCBwcm9wZXJ0aWVzIGluc3RlYWQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhYmVsTGF5b3V0ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5sYWJlbENvbHVtbkxheW91dCA9XG4gICAgICAgICAgICB0aGlzLl9sYWJlbExheW91dCA9PT0gJ2hvcml6b250YWwnID8gRGVmYXVsdEhvcml6b250YWxMYWJlbExheW91dCA6IERlZmF1bHRWZXJ0aWNhbExhYmVsTGF5b3V0O1xuICAgICAgICB0aGlzLmZpZWxkQ29sdW1uTGF5b3V0ID1cbiAgICAgICAgICAgIHRoaXMuX2xhYmVsTGF5b3V0ID09PSAnaG9yaXpvbnRhbCcgPyBEZWZhdWx0SG9yaXpvbnRhbEZpZWxkTGF5b3V0IDogRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG4gICAgfVxuICAgIGdldCBsYWJlbExheW91dCgpOiBMYWJlbExheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbExheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGNvbHVtbiBsYXlvdXQgZm9yIGlubGluZSBpdGVtcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpbmxpbmVDb2x1bW5MYXlvdXQodmFsdWU6IENvbHVtbkxheW91dCkge1xuICAgICAgICB0aGlzLl9pbmxpbmVDb2x1bW5MYXlvdXQgPSBub3JtYWxpemVDb2x1bW5MYXlvdXQodmFsdWUpO1xuICAgICAgICB0aGlzLl91cGRhdGVJbmxpbmVDb2x1bW5MYXlvdXQoKTtcbiAgICB9XG5cbiAgICBnZXQgaW5saW5lQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5saW5lQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5saW5lQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGxhYmVsJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0SG9yaXpvbnRhbExhYmVsTGF5b3V0O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBmaWVsZCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWVsZENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdEhvcml6b250YWxGaWVsZExheW91dDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZ2FwIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dCA9IERlZmF1bHRHYXBMYXlvdXQ7XG5cbiAgICAvKiogQW5ndWxhciBGb3JtR3JvdXAgd2hlcmUgYWxsIHVuZGVybHlpbmcgY29udHJvbHMgd2lsbCBiZSBhdHRhY2hlZCB0by4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgLyoqIFRoaXMgaXMgcmF0aGVyIHNpbXBsZSBmb3Igbm93IGp1c3QgdG8gaGF2ZSBzb21lIFNlY3Rpb24gVGl0bGUgaWYgbmVlZGVkICovXG4gICAgQElucHV0KClcbiAgICB0b3BUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEZvcm0ncyBtYWluIHRpdGxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFpblRpdGxlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaGlkZSBmb3JtJ3MgbWFpbiB0aXRsZS4gRGVmYXVsdCBpcyBmYWxzZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVNYWluVEl0bGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbnQgd2F5IHRvIGluaXRpYWxpemUgaW50ZXJuYWwgRm9ybUNvbnRyb2xzIGZyb20gb2JqZWN0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBvYmplY3Q6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0aW9ucyB0ZW1wbGF0ZSByZWZlcmVuY2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGp1c3QgaGVyZSB0byBzdXBwb3J0IHNldmVyYWwgd2F5cyB0byBwYXNzIHRyYW5zbGF0aW9uLlxuICAgICAqXG4gICAgICogT25lIHdheSBpcyB0byBwcm92aWRlIG5nLXRlbXBsYXRlICNpMThuIGluc2lkZSB0aGUgZm9ybS1ncm91cCB0YWcgYW5kIHRoZSBvdGhlciBvbmVcbiAgICAgKiBzb21lIGdsb2JhbCBvbmUgYXMgYmluZGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaTE4U3RyaW5nczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHdyYXAgYWxsIHRoZSBwcm92aWRlZCBjb250ZW50IGluIGEgYDxmb3JtPmAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB1c2VGb3JtKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fdXNlRm9ybSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB1c2VGb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlRm9ybTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjb2x1bW4gbGF5b3V0IGluIHRoZSBmb3JtYXQgYFhMbi1Mbi1Nbi1TbmAgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggc2l6ZS5cbiAgICAgKiBlZzogWEwyLUwyLU0yLVMxIHdvdWxkIGNyZWF0ZSAyLWNvbHVtbiBsYXlvdXRzIGZvciBYTCwgTCwgYW5kIE0gc2l6ZXMgYW5kIHNpbmdsZS1jb2x1bW4gbGF5b3V0IGZvciBTIHNpemUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5MYXlvdXQ6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogV2hldGhlciBhbGwgZm9ybSBpdGVtcyBzaG91bGQgaGF2ZSBpZGVudGljYWwgbGF5b3V0IHByb3ZpZGVkIGZvciBmb3JtIGdyb3VwICovXG4gICAgQElucHV0KClcbiAgICB1bmlmaWVkTGF5b3V0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIG9uU3VibWl0IGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25TdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBOYXRpdmUgZm9ybSBlbGVtZW50LiBBdmFpbGFibGUgd2l0aCBgW3VzZUZvcm1dPVwidHJ1ZVwiYCBpbnB1dCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCduYXRpdmVGb3JtJywgeyByZWFkOiBOZ0Zvcm0gfSlcbiAgICBuYXRpdmVGb3JtOiBOZ0Zvcm07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2kxOG4nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGkxOFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlczogUXVlcnlMaXN0PEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEtlZXAgdHJhY2sgb2YgYWRkZWQgZm9ybSBmaWVsZHMgY2hpbGRyZW4gaW4gY29ycmVjdCBvcmRlci5cbiAgICAgKlxuICAgICAqIFNpbmNlIFwiZGVzY2VuZGFudHM6IHRydWVcIiBpbmNsdWRlcyBmaWVsZHMgb2YgbmVzdGVkIGZvcm0gZ3JvdXAgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIFdlIGFyZSBmb3JjZWQgdG8gdXNlIFwiQ29udGVudENoaWxkcmVuXCIgc28gRm9ybUZpZWxkIGNoaWxkcmVuIGNhbiBiZSB1c2VkXG4gICAgICogd2l0aCBvcHRpb25hbCByZW5kZXJpbmcgKG5nSWYpIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEZvcm0gZmllbGRzIHdpdGhpbiB0aGUgZm9ybUdyb3VwIGlzIGRyaXZlbiBieSBtdWx0aS16b25lIGxheW91dCBzdXBwb3J0LiBXZSBuZWVkIHRvIGJlXG4gICAgICogYWJsZSB0byBhZGQgbnVtYmVyIG9mIEZvcm1GaWVsZHMsIGFuZCBiYXNlZCBvbiBnaXZlbiBjb25maWd1cmF0aW9uICh6b25lLCByYW5rKSByZW5kZXIgdGhlbVxuICAgICAqIHVuZGVyIGNvcnJlY3Qgem9uZSAgKHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCkuXG4gICAgICpcbiAgICAgKiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGluY2x1ZGUgY29udGVudCBhbmQgdGhlbiB0cnkgdG8gc29tZWhvdyBwb3NpdGlvbiBpdCBhcyBpdFxuICAgICAqIHdvdWxkIGxlYWQgdG8gdGhlIFVJIHdoZXJlIHVzZXIgY2FuIHNlZSBlbGVtZW50aW5nIG1vdmluZyBhcyB5b3UgdHJ5IHRvIHBvc2l0aW9uIGl0LlxuICAgICAqXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGT1JNX0dST1VQX0NISUxEX0ZJRUxEX1RPS0VOIGFzIGFueSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBmb3JtR3JvdXBDaGlsZHJlbjogUXVlcnlMaXN0PEZvcm1Hcm91cEZpZWxkPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIExpc3Qgb2YgZGlyZWN0IEZkcEZvcm1Hcm91cCdzIGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogU2luY2UgXCJmb3JtR3JvdXBDaGlsZHJlblwiIHVzZXMgXCJ7IGRlc2NlbmRhbnRzOiB0cnVlIH1cIiBvcHRpb24gdGhhdCBtZWFuc1xuICAgICAqIFwiZm9ybUdyb3VwQ2hpbGRyZW5cIiB3aWxsIGtlZXAgdHJhY2sgb2YgbmVzdGVkIEZkcEZvcm1Hcm91cCBmaWVsZHMgYXMgd2VsbC5cbiAgICAgKiBUaGlzIGxpc3QgcmVsaWVzIG9uIHRoZSBpbmplY3Rpb24gbWVjaGFuaXNtIHNvIG5lc3RlZCBGZHBGb3JtR3JvdXAncyBmaWVsZHMvZmllbGRHcm91cHNcbiAgICAgKiB3aWxsIGJlIG9taXR0ZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbjogQXJyYXk8Rm9ybUdyb3VwRmllbGQ+ID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHhsQ29sdW1uc051bWJlcjogbnVtYmVyO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGdDb2x1bW5zTnVtYmVyOiBudW1iZXI7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtZENvbHVtbnNOdW1iZXI6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VyIHJlc3BvbnNpdmUgbGF5b3V0XG4gICAgICovXG4gICAgeGxDb2w6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYWNrZWQgZmllbGRzIHdoaWNoIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqL1xuICAgIGZvcm1Sb3dzOiB7IFtrZXk6IG51bWJlcl06IEZpZWxkQ29sdW1uIHwgRmllbGRHcm91cCB9ID0ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oaW50T3B0aW9uczogSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VzZUZvcm0gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hpbnRQbGFjZW1lbnQ6IEhpbnRQbGFjZW1lbnQgPSAncmlnaHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbExheW91dDogTGFiZWxMYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIHJlYWRvbmx5IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIEBJbmplY3QoRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQpIHByaXZhdGUgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9uc1xuICAgICkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IDxGb3JtR3JvdXA+KHRoaXMuZm9ybUNvbnRhaW5lciA/IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sIDogbmV3IEZvcm1Hcm91cCh7fSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdzdHJpbmcnIHx8IHRoaXMuaGludCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5oaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5oaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUlubGluZUNvbHVtbkxheW91dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmkxOFN0cmluZ3MgPSB0aGlzLmkxOFN0cmluZ3MgPyB0aGlzLmkxOFN0cmluZ3MgOiB0aGlzLmkxOFRlbXBsYXRlO1xuXG4gICAgICAgIHRoaXMuX3NldFVzZXJMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRmllbGRCeUNvbHVtbigpO1xuICAgICAgICB0aGlzLl91cGRhdGVGb3JtRmllbGRzUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1Hcm91cENoaWxkcmVuKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkZvcm1GaWVsZENvbHVtbkNoYW5nZSgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pMThTdHJpbmdzID0gdGhpcy5pMThTdHJpbmdzID8gdGhpcy5pMThTdHJpbmdzIDogdGhpcy5pMThUZW1wbGF0ZTtcblxuICAgICAgICB0aGlzLl9zZXRVc2VyTGF5b3V0KCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUZpZWxkQnlDb2x1bW4oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRm9ybUZpZWxkc1Byb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Gb3JtR3JvdXBDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Gb3JtRmllbGRDb2x1bW5DaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5fdHJhY2tGb3JtR3JvdXBSZXNpemUoKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhZGRGb3JtRmllbGQoZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCk6IHZvaWQge1xuICAgICAgICAvLyBJdCdzIG5lZWRlZCB0byBzZXQgZGVmYXVsdCBGb3JtRmllbGQgcHJvcGVydGllc1xuICAgICAgICAvLyBvbiBlYXJseSBzdGFnZSBvdGhlcndpc2UgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgICAgLy8gd2lsbCBiZSB0aHJvd24gb24gRm9ybUZpZWxkIGxldmVsIChlLmcuIGkxOHN0cmluZyBhcmUgbm90IGRlZmluZWQpXG4gICAgICAgIHRoaXMuX3VwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZm9ybUZpZWxkKTtcbiAgICAgICAgLy8ga2VlcCB0cmFjayBvZiBkaXJlY3RseSByZWdpc3RlcmVkIGNoaWxkcmVuXG4gICAgICAgIHRoaXMuX2FkZERpcmVjdEZvcm1Hcm91cENoaWxkKGZvcm1GaWVsZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVGb3JtRmllbGQoZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVEaXJlY3RGb3JtR3JvdXBDaGlsZChmb3JtRmllbGQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYWRkRm9ybUZpZWxkR3JvdXAoZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZERpcmVjdEZvcm1Hcm91cENoaWxkKGZvcm1GaWVsZEdyb3VwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZUZvcm1GaWVsZEdyb3VwKGZvcm1GaWVsZEdyb3VwOiBGb3JtRmllbGRHcm91cCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVEaXJlY3RGb3JtR3JvdXBDaGlsZChmb3JtRmllbGRHcm91cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhZGRGb3JtQ29udHJvbChuYW1lOiBzdHJpbmcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKG5hbWUsIGNvbnRyb2wpO1xuICAgICAgICAvLyBsZXR0aW5nIGNvbnRyb2wgdG8gc2V0IHZhbHVlLiB3aGVuIHByb3ZpZGVkIHZhbHVlIGlzICdmYWxzZScuXG4gICAgICAgIGlmICh0aGlzLm9iamVjdCkge1xuICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHRoaXMub2JqZWN0W25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlRm9ybUNvbnRyb2wobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wobmFtZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRyYWNrQnlGaWVsZE5hbWUoaW5kZXg6IG51bWJlciwgZmllbGQ6IEZpZWxkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkID8gZmllbGQubmFtZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWydmZC1jb250YWluZXInLCB0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiB1c2VkIGZvciB0ZW1wbGF0ZSBzaWRlIFR5cGUgY29ycmVjdGlvbiAqL1xuICAgICRmaWVsZEdyb3VwID0gKGY6IGFueSk6IEZpZWxkR3JvdXAgPT4gZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Gb3JtR3JvdXBDaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVGaWVsZEJ5Q29sdW1uKCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Gb3JtRmllbGRDb2x1bW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ2hpbGRyZW4uZm9yRWFjaCgoZmllbGQ6IEZvcm1Hcm91cEZpZWxkKSA9PlxuICAgICAgICAgICAgKDxGb3JtRmllbGRDb21wb25lbnQ+ZmllbGQpLm9uQ29sdW1uQ2hhbmdlPy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpZWxkQnlDb2x1bW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFzc2lnbiBhIGZpZWxkcyBvciBmaWVsZCBncm91cCB0byBzcGVjaWZpZWQgY29sdW1ucyB3aXRoIHJhbmsuXG4gICAgICogaWYgYGNvbHVtbkxheW91dFR5cGVgIGlzIGdpdmVuIGEgZmllbGRzIHdpdGhvdXQgY29sdW1uIHByb3BlcnR5IHdpbGwgc2V0IG9uIGxhc3QgY29sdW1uLlxuICAgICAqIE90aGVyd2lzZSB0aGUgZmllbGRzIHNldCAxIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVGaWVsZEJ5Q29sdW1uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLl9nZXRGb3JtR3JvdXBDaGlsZHJlbigpO1xuICAgICAgICBjb25zdCByb3dzOiB7IFtrZXk6IG51bWJlcl06IEZpZWxkQ29sdW1uIHwgRmllbGRHcm91cCB9ID0ge307XG4gICAgICAgIGxldCByb3dOdW1iZXIgPSAwO1xuICAgICAgICBsZXQgY29sdW1uczogRmllbGRDb2x1bW4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGlzRmllbGRDaGlsZChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZpZWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSB0aGlzLl92YWxpZGF0ZUZpZWxkQ29sdW1uKGNoaWxkLmNvbHVtbik7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbnNbY29sdW1uTnVtYmVyXSkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW2NvbHVtbk51bWJlcl0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5OdW1iZXJdLnB1c2goZmllbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNGaWVsZEdyb3VwQ2hpbGQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cENvbHVtbnM6IEZpZWxkQ29sdW1uID0ge307XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd051bWJlcl0gPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0ge307XG4gICAgICAgICAgICAgICAgICAgIHJvd051bWJlcisrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRzID0gY2hpbGQuZmllbGRzLm1hcCgoZmllbGQpID0+IGdldEZpZWxkKGZpZWxkKSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBGaWVsZHMuZm9yRWFjaCgoZ3JvdXBGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSB0aGlzLl92YWxpZGF0ZUZpZWxkQ29sdW1uKGdyb3VwRmllbGQuY29sdW1uKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkR3JvdXBDb2x1bW5zW2NvbHVtbk51bWJlcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkR3JvdXBDb2x1bW5zW2NvbHVtbk51bWJlcl0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwQ29sdW1uc1tjb2x1bW5OdW1iZXJdLnB1c2goZ3JvdXBGaWVsZCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByb3dzW3Jvd051bWJlcl0gPSBuZXcgRmllbGRHcm91cChjaGlsZC5sYWJlbCwgZmllbGRHcm91cENvbHVtbnMsIGNoaWxkLmhpbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICByb3dOdW1iZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb3dzW3Jvd051bWJlcl0gPSBjb2x1bW5zO1xuICAgICAgICB0aGlzLmZvcm1Sb3dzID0gcm93cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBWYWxpZGF0ZSBjb2x1bW4gbnVtYmVyICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVGaWVsZENvbHVtbihjb2x1bW5OdW1iZXI6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxheW91dCAmJiBjb2x1bW5OdW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihjb2x1bW5OdW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBhIHZhbGlkIGNvbHVtbiBudW1iZXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbk51bWJlciA+IHRoaXMueGxDb2x1bW5zTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW5zIGNhbm5vdCBiZSBtb3JlIHRoYW4gJHt0aGlzLnhsQ29sdW1uc051bWJlcn1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbk51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnhsQ29sdW1uc051bWJlcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUZvcm1GaWVsZHNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRGb3JtR3JvdXBDaGlsZHJlbigpLmZvckVhY2goKGZvcm1GaWVsZDogRm9ybUdyb3VwRmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ZpZWxkQ2hpbGQoZm9ybUZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRmllbGRHcm91cENoaWxkKGZvcm1GaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB0aGlzLl91cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGdldEZvcm1GaWVsZChmaWVsZCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhc3Mgc29tZSBnbG9iYWwgcHJvcGVydGllcyB0byBlYWNoIGZpZWxkLiBFdmVuIGZvcm1Hcm91cCBjbmEgYmUgaW5qZWN0IGRpcmVjdGx5IGluc2lkZSBmb3JtXG4gICAgICogZmllbGQgd2UgYXJlIHVzaW5nIGhlcmUgYSBzZXR0ZXIgbWV0aG9kIHRvIGluaXRpYWxpemUgdGhlXG4gICAgICpcbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudW5pZmllZExheW91dCkge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmhpbnRQbGFjZW1lbnQgPSB0aGlzLl9oaW50UGxhY2VtZW50O1xuICAgICAgICAgICAgZm9ybUZpZWxkLmVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZTtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5ub0xhYmVsTGF5b3V0ID0gdGhpcy5ub0xhYmVsTGF5b3V0O1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZC5zZXREZWZhdWx0Q29sdW1uTGF5b3V0KCk7XG4gICAgICAgIGZvcm1GaWVsZC5pMThTdHJpbmdzID0gZm9ybUZpZWxkLmkxOFN0cmluZ3MgPyBmb3JtRmllbGQuaTE4U3RyaW5ncyA6IHRoaXMuaTE4U3RyaW5ncztcbiAgICAgICAgZm9ybUZpZWxkLnNldEVycm9yRGlyZWN0aXZlcyh0aGlzLl9lcnJvckRpcmVjdGl2ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBpZiBgY29sdW1uTGF5b3V0VHlwZWAgaXMgZ2l2ZW4sIHNldCB0aG9zZSBjb2x1bW4gbGF5b3V0cyBhcHByb3ByaWF0ZWx5LiBPdGhlcndpc2UsIGEgbGF5b3V0IHdpbGwgc2V0IG9uIDEgY29sdW1uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0VXNlckxheW91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGF5b3V0KSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRDb2x1bW5OdW1iZXJzKHRoaXMuY29sdW1uTGF5b3V0KTtcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLnhsQ29sdW1uc051bWJlcikgfHwgaXNOYU4odGhpcy5sZ0NvbHVtbnNOdW1iZXIpIHx8IGlzTmFOKHRoaXMubWRDb2x1bW5zTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgYSB2YWxpZCBudW1iZXIgZm9yIGNvbHVtbnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnhsQ29sdW1uc051bWJlciA+IDEyIHx8IHRoaXMubGdDb2x1bW5zTnVtYmVyID4gMTIgfHwgdGhpcy5tZENvbHVtbnNOdW1iZXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgbW9yZSB0aGFuIDEyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsZ0NvbHVtbnMgPSAxMiAvIHRoaXMubGdDb2x1bW5zTnVtYmVyO1xuICAgICAgICAgICAgY29uc3QgbWRDb2x1bW5zID0gMTIgLyB0aGlzLm1kQ29sdW1uc051bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IHhsQ29sdW1ucyA9IDEyIC8gdGhpcy54bENvbHVtbnNOdW1iZXI7XG5cbiAgICAgICAgICAgIC8vIGZvciBgbGdgIHNpbmdsZS1jb2x1bW4gbGF5b3V0LCBTdHlsZXMgZG9lcyBub3QgdXNlIGFueSBjbGFzcywgYW5kIHByb3ZpZGluZyBgZmQtY29sLWxnLS0xMmAgaGFzIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyB0aGVyZWZvcmUsIHdlIHJlbW92ZSB0aGUgbGcgY2xhc3MgZm9yIHNpbmdsZS1jb2x1bW4gbGF5b3V0XG4gICAgICAgICAgICBpZiAobGdDb2x1bW5zID09PSAxMikge1xuICAgICAgICAgICAgICAgIHRoaXMueGxDb2wgPSBgZmQtY29sLXhsLS0ke3hsQ29sdW1uc30gZmQtY29sLW1kLS0ke21kQ29sdW1uc31gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnhsQ29sID0gYGZkLWNvbC14bC0tJHt4bENvbHVtbnN9IGZkLWNvbC1tZC0tJHttZENvbHVtbnN9IGZkLWNvbC1sZy0tJHtsZ0NvbHVtbnN9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGxDb2wgPSBgZmQtY29sLXhsLS0xMiBmZC1jb2wtbWQtLTEyIGZkLWNvbC1sZy0tMTJgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDb2x1bW5OdW1iZXJzKGxheW91dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IFt4bCwgbGcsIG1kXSA9IGxheW91dC5zcGxpdCgnLScpO1xuICAgICAgICB0aGlzLnhsQ29sdW1uc051bWJlciA9IHBhcnNlSW50KHhsLnNsaWNlKDIsIHhsLmxlbmd0aCksIDEwKTtcbiAgICAgICAgdGhpcy5sZ0NvbHVtbnNOdW1iZXIgPSBwYXJzZUludChsZy5zbGljZSgxLCBsZy5sZW5ndGgpLCAxMCk7XG4gICAgICAgIHRoaXMubWRDb2x1bW5zTnVtYmVyID0gcGFyc2VJbnQobWQuc2xpY2UoMSwgbWQubGVuZ3RoKSwgMTApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkRGlyZWN0Rm9ybUdyb3VwQ2hpbGQoY2hpbGQ6IEZvcm1Hcm91cEZpZWxkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbi5pbmRleE9mKGNoaWxkKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRGlyZWN0Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVEaXJlY3RGb3JtR3JvdXBDaGlsZChjaGlsZDogUGxhdGZvcm1Gb3JtRmllbGQgfCBGb3JtRmllbGRHcm91cCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbiA9IHRoaXMuX2Zvcm1Hcm91cERpcmVjdENoaWxkcmVuLmZpbHRlcigoX2NoaWxkKSA9PiBfY2hpbGQgIT09IGNoaWxkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IGRpcmVjdCBmb3JtIGdyb3VwIGNoaWxkcmVuIGluIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEZvcm1Hcm91cENoaWxkcmVuKCk6IEZvcm1Hcm91cEZpZWxkW10ge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZm9ybUdyb3VwQ2hpbGRyZW5cbiAgICAgICAgICAgIC50b0FycmF5KClcbiAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiAoaXNGaWVsZEdyb3VwV3JhcHBlckNoaWxkKGNoaWxkKSA/IGNoaWxkLmZpZWxkUmVuZGVyZXIgOiBjaGlsZCkpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiB0aGlzLl9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbi5pbmNsdWRlcyhjaGlsZCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlSW5saW5lQ29sdW1uTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5pbmxpbmVDb2x1bW5MYXlvdXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYXZlIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBoZXJlIGluIG9yZGVyIHRvIHJlLWNoZWNrIGNvbnRlbnRzXG4gICAgICogaW5zaWRlIFwiRm9ybUZpZWxkLnJlbmRlcmVyXCIgdGVtcGxhdGUgZXZlcnkgdGltZSBjb21wb25lbnQncyBkaW1lbnNpb25zIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF90cmFja0Zvcm1Hcm91cFJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8Zm9ybSAjbmF0aXZlRm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQuZW1pdCgkZXZlbnQpXCIgKm5nSWY9XCJ1c2VGb3JtOyBlbHNlIGJvZHlcIiBbaWRdPVwiaWRcIiBbbmFtZV09XCJuYW1lXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlcIj48L25nLWNvbnRhaW5lcj5cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNib2R5PlxuICAgIDwhLS0gIFJlbmRlciBmaWVsZHMgYW5kIGZpZWxkIGdyb3VwcyB3aXRoIGFzc2lnbmVkIGNvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkc1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWVsZHM+XG4gICAgPGRpdiAqbmdJZj1cIm1haW5UaXRsZSAmJiAhaGlkZU1haW5USXRsZVwiIGNsYXNzPVwiZmQtZm9ybS1oZWFkZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1haW5UaXRsZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jb250YWluZXIgZmQtZm9ybS1sYXlvdXQtZ3JpZC1jb250YWluZXJcIlxuICAgICAgICBbY2xhc3MuaXMtY29tcGFjdF09XCJjb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQgfCBhc3luY1wiXG4gICAgPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZm9ybVJvd3MgfCBrZXl2YWx1ZTsgdHJhY2tCeTogdHJhY2tCeUZuXCIgY2xhc3M9XCJmZC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGRzIG9mIGNvbHVtbiB8IGZpZWxkR3JvdXBSb3dWYWx1ZSB8IGtleXZhbHVlOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNvbCBmZC1mb3JtLWdyb3VwXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwieGxDb2xcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1yb3dcIiAqbmdJZj1cIiRmaWVsZEdyb3VwKGNvbHVtbi52YWx1ZSkgYXMgdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhbHVlLmxhYmVsXCIgZmRwLWZvcm0tZ3JvdXAtaGVhZGVyIFtmaWVsZEdyb3VwXT1cImluZGV4ID09PSAwID8gdmFsdWUgOiBudWxsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzLnZhbHVlOyB0cmFja0J5OiB0cmFja0J5RmllbGROYW1lXCIgY2xhc3M9XCJmZC1yb3cgZmQtZm9ybS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2xcIiBbY2xhc3NdPVwiX2lubGluZUNvbHVtbkxheW91dENsYXNzXCIgW3N0eWxlLm9yZGVyXT1cImZpZWxkLnJhbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZD8ucmVuZGVyZXIgfHwgbnVsbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRm9yIG5lc3RlZCBmb3JtLWdyb3VwIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmRwLWZvcm0tZ3JvdXBcIj48L25nLWNvbnRlbnQ+XG5cbjxuZy10ZW1wbGF0ZSAjbWFpblRpdGxlVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9oaW50T3B0aW9ucz8uY29udGVudCAmJiBfaGludE9wdGlvbnMucG9zaXRpb24gPT09ICdiZWZvcmUnXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaW50VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGg1IGNsYXNzPVwiZmQtZm9ybS1oZWFkZXJfX3RleHRcIj5cbiAgICAgICAge3sgbWFpblRpdGxlIH19XG4gICAgPC9oNT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaGludE9wdGlvbnM/LmNvbnRlbnQgJiYgX2hpbnRPcHRpb25zLnBvc2l0aW9uID09PSAnYWZ0ZXInXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaW50VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNoaW50VGVtcGxhdGU+XG4gICAgICAgIDxzcGFuIGZkLWxpbmsgW3VuZGVjb3JhdGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cIl9oaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiX2hpbnRPcHRpb25zLmdseXBoXCJcbiAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIl9oaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cIl9oaW50T3B0aW9ucy50cmlnZ2VyIHx8IFtdXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgPjwvZmQtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
558
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1ncm91cC9mb3JtLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUlULFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RSxPQUFPLEVBSUgsa0JBQWtCLEVBTXJCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUdILFVBQVUsRUFDVixRQUFRLEVBQ1IsWUFBWSxFQUNaLFlBQVksRUFDWixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQzNCLE1B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SUFBSTtzQkFESCxLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFzQkYsa0JBQWtCO3NCQURyQixLQUFLO2dCQW9CTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQVlOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixPQUFPO3NCQURWLEtBQUs7Z0JBYU4sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSzs7UUFPTiwrREFBK0Q7UUFDL0QsUUFBUTtzQkFGUCxNQUFNO2dCQVFQLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUt6QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLOUIsZ0JBQWdCO3NCQUR2QixlQUFlO3VCQUFDLHVCQUF1QjtnQkFzQjlCLGlCQUFpQjtzQkFEMUIsZUFBZTt1QkFBQyw0QkFBbUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBGLiBLb2xhclxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqXG4gKi9cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIGlzRGV2TW9kZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUHJvdmlkZXIsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHJlc2l6ZU9ic2VydmFibGUsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5MYXlvdXQsXG4gICAgRmllbGRIaW50T3B0aW9ucyxcbiAgICBGb3JtRmllbGRHcm91cCxcbiAgICBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgSGludElucHV0LFxuICAgIEhpbnRPcHRpb25zLFxuICAgIEhpbnRQbGFjZW1lbnQsXG4gICAgTGFiZWxMYXlvdXQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIEZpZWxkLFxuICAgIEZpZWxkQ29sdW1uLFxuICAgIEZpZWxkR3JvdXAsXG4gICAgZ2V0RmllbGQsXG4gICAgZ2V0Rm9ybUZpZWxkLFxuICAgIGlzRmllbGRDaGlsZCxcbiAgICBpc0ZpZWxkR3JvdXBDaGlsZCxcbiAgICBpc0ZpZWxkR3JvdXBXcmFwcGVyQ2hpbGRcbn0gZnJvbSAnLi4vZm9ybS1oZWxwZXJzJztcbmltcG9ydCB7IEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIERlZmF1bHRHYXBMYXlvdXQsXG4gICAgRGVmYXVsdEhvcml6b250YWxGaWVsZExheW91dCxcbiAgICBEZWZhdWx0SG9yaXpvbnRhbExhYmVsTGF5b3V0LFxuICAgIERlZmF1bHRWZXJ0aWNhbEZpZWxkTGF5b3V0LFxuICAgIERlZmF1bHRWZXJ0aWNhbExhYmVsTGF5b3V0LFxuICAgIEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU5cbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb2x1bW5DbGFzcywgbm9ybWFsaXplQ29sdW1uTGF5b3V0IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IEZvcm1GaWVsZExheW91dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0tZmllbGQtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQgfSBmcm9tICcuL2ZkcC1mb3JtLnRva2Vucyc7XG5pbXBvcnQgeyBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzLCBDb250ZW50RGVuc2l0eU9ic2VydmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5cbmV4cG9ydCBjb25zdCBmb3JtR3JvdXBQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogRm9ybUdyb3VwQ29udGFpbmVyLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1Hcm91cENvbXBvbmVudClcbn07XG5cbnR5cGUgRm9ybUdyb3VwRmllbGQgPSAoRm9ybUZpZWxkIHwgRm9ybUZpZWxkR3JvdXApICYgeyBoaW50T3B0aW9ucz86IEhpbnRPcHRpb25zIH07XG5cbmxldCBmb3JtR3JvdXBVbmlxdWVJZCA9IDA7XG5cbi8qKlxuICpcbiAqIEZvcm1Hcm91cCByZXByZXNlbnQgaGlnaCBvcmRlciBjb250YWluZXIgYWdncmVnYXRpbmcgRm9ybUZpZWxkcyBhbmQgYWJpbGl0eSB0byBkaXN0cmlidXRlIHRoZXNlXG4gKiBmaWVsZHMgaW50byBjb2x1bW5zLiBJdCBtYWlubHkgaGlkZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IHdlIG5lZWQgdG8gZGVhbCB3aXRoIGV2ZXJ5XG4gKiB0aW1lIHdlIGFyZSBidWlsZGluZyBhIGZvcm0uIFdlIGhhdmUgaW5wdXQgZmllbGRzICwgZXJyb3IgbWFuYWdlbWVudHMsIGRpZmZlcmVudCBzdGF0ZXMsXG4gKiBoaW50cyBhbmQgbWFueSBtb3JlLlxuICpcbiAqIFdlbGwgYmVoYXZlZCBmb3JtIHRoYXQgaGFzIGluZm9ybWF0aW9uIHNpZGUgYnkgc2lkZSBpbiBtdWx0aXBsZVxuICogY29sdW1ucyBuZWVkcyB0byBhbHNvIGtub3cgaG93IHRvIG1lcmdlIHByb3Blcmx5LlxuICpcbiAqIEp1c3QgdG8gZ2V0IHRoZSBpZGVhIGFib3V0IHRoZSBzdHJ1Y3R1cmUgd2l0aG91dCBhY3R1YWwgaW5wdXQgY29tcG9uZW50cyBpbnNpZGVcbiAqXG4gKiBgYGBodG1sXG4gKiA8ZmRwLWZvcm0tZ3JvdXAgW2hpbnRQbGFjZW1lbnRdPVwiJ2lubGluZSdcIiBjb2x1bW5MYXlvdXQ9XCJYTDItTDItTTEtUzFcIj5cbiAqICAgIDxmZHAtZm9ybS1maWVsZCBbaWRdPVwiJ0ZpZWxkIEEnXCIgW3JhbmtdPVwiMTBcIiBjb2x1bW49XCIxXCI+XG4gKiAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICpcbiAqICAgIDxmZHAtZm9ybS1maWVsZCBbaWRdPVwiJ0ZpZWxkIEInXCIgW3JhbmtdPVwiMzBcIiBjb2x1bW49XCIxXCI+XG4gKiAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICpcbiAqICAgIDxmZHAtZm9ybS1maWVsZCBbaWRdPVwiJ0ZpZWxkIEMnXCIgIFtyYW5rXT1cIjIwXCIgY29sdW1uPVwiMVwiPlxuICogICAgPC9mZHAtZm9ybS1maWVsZD5cbiAqXG4gKiAgICA8ZmRwLWZvcm0tZmllbGQgW2lkXT1cIkZpZWxkIERcIiAgW3JhbmtdPVwiMjBcIiBjb2x1bW49XCIyXCI+XG4gKiAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICpcbiAqXG4gKiAgICA8ZmRwLWZvcm0tZmllbGQgW2lkXT1cIidGaWVsZCBFJ1wiIFtyYW5rXT1cIjMwXCIgY29sdW1uPVwiMlwiPlxuICogICAgPC9mZHAtZm9ybS1maWVsZD5cbiAqIDwvZmRwLWZvcm0tZ3JvdXA+XG5cbiAqXG4gKiBgYGBgXG4gKlxuICpcbiAqIFdoaWNoIGNhbiBiZSB0cmFuc2xhdGVkIGxpa2UgdGhpc1xuICogW0ZpZWxkIEFdIC0gRmlyc3QgY29sdW1uLCByYW5rIDEwXG4gKiBbRmllbGQgQl0gLSBGaXJzdCBjb2x1bW4sIHJhbmsgMzBcbiAqIFtGaWVsZCBDXSAtIEZpcnN0IGNvbHVtbiwgcmFuayAyMFxuICogW0ZpZWxkIERdIC0gU2Vjb25kIGNvbHVtbiwgcmFuayAyMFxuICogW0ZpZWxkIEVdIC0gU2Vjb25kIGNvbHVtbiwgcmFuayAzMFxuICpcbiAqIFdoYXQgd2UgZXhwZWN0IHRoYXQgaXQgY3JlYXRlcyBmb2xsb3dpbmcgZm9ybSB3aXRoIHR3byBjb2x1bW4gbGF5b3V0OlxuICogW0ZpZWxkIEFdICAgICAgW0ZpZWxkIERdXG4gKiBbRmllbGQgQ10gICAgICBbRmllbGQgRV1cbiAqIFtGaWVsZCBCXVxuICpcbiAqIFlvdSBjYW4gc2VlIGFsbCBpcyBzb3J0ZWQgYWNjb3JkaW5nbHkgYnkgcmFuayAoQyBnb2VzIGJlZm9yZSBCKS5cbiAqXG4gKiBXaGVuIHlvdSBtb3ZlIGludG8gc21hbGxlciBkZXZpY2UgYW5kIGFsbCBpcyBtZXJnZWQgaW50byBvbmUgY29sdW1ucyB0aGUgbmFpdmUgc29sdXRpb24gd291bGQgYmU6XG4gKlxuICogW0ZpZWxkIEFdXG4gKiBbRmllbGQgQ11cbiAqIFtGaWVsZCBCXVxuICogW0ZpZWxkIERdXG4gKiBbRmllbGQgRV1cbiAqXG4gKiBUaGUgZmllbGRzIG5lZWRzIHRvIHJlc3RydWN0dXJlIGFjY29yZGluZyB0byB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbmluZy4gV2hlbiBGaWVsZCBEIHdhcyBvbiB0aGVcbiAqIHRvcCB3aHkgd2Ugc2hvdWxkIG1vdmUgaXQgdG8gdGhlIGJvdHRvbT8gVGhlIG1vcmUgY29ycmVjdCBzb2x1dGlvbiBzaG91bGQgYmUgZm9sbG93aW5nLlxuICpcbiAqIFtGaWVsZCBBXVxuICogW0ZpZWxkIERdXG4gKiBbRmllbGQgQ11cbiAqIFtGaWVsZCBFXVxuICogW0ZpZWxkIEJdXG4gKlxuICogRmllbGRzIG5pY2VseSBtZXJnZSB0b2dldGhlci4gdGhleSBkb24ndCB3cmFwLlxuICpcbiAqXG4gKiBCZXNpZGVzIHRoaXMgbGF5b3V0IHN1cHBvcnQgaXQgYWxzbyB3cmFwcyBmb3JtIGZ1bmN0aW9uYWxpdHkgYW5kIGl0IGNhbiB3b3JrIHdpdGggRm9ybUdyb3VwLlxuICogWW91IGNhbiBhbHNvIGRlY2lkZSBpZiB5b3Ugd2FudCB5b3VyIGZvcm0gd2l0aCA8Zm9ybT4gZWxlbWVudCBvciB3aXRob3V0IGl0LlxuICpcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWZvcm0tZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnZm9ybS1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbZm9ybUdyb3VwUHJvdmlkZXIsIEZvcm1GaWVsZExheW91dFNlcnZpY2UsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdyb3VwQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBGb3JtR3JvdXBDb250YWluZXIsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgICAvKiogSWQgZm9yIHRoZSBmb3JtIGdyb3VwIGVsZW1lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkID0gYGZkcC1mb3JtLWdyb3VwLSR7Zm9ybUdyb3VwVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIE5hbWUgcHJvcGVydHkgdG8gYmUgc2V0IG9uIGEgZm9ybS4gV2lsbCBiZSB1c2VkIGlmIGB1c2VGb3JtYCBpcyBzZXQgdG8gdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEluZGljYXRlcyBpZiBncm91cCBpcyBlZGl0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZWRpdGFibGUgPSB0cnVlO1xuXG4gICAgLyoqIEluZGljYXRlcyB3aGVuIGxhYmVscyBzaG91bGQgbm90IGJlIGRpc3BsYXllZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9MYWJlbExheW91dCA9IGZhbHNlO1xuXG4gICAgLyoqIFVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEZvcm0gZ3JvdXAgaGludCBvcHRpb25zXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaW50OiBIaW50SW5wdXQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIFVzZSBsYWJlbENvbHVtbkxheW91dCwgZmllbGRDb2x1bW5MYXlvdXQgYW5kIGdhcENvbHVtbkxheW91dCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogRGVmaW5lcyBmb3JtIGZpZWxkIGxhYmVsIHBsYWNlbWVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsYWJlbExheW91dCh2YWx1ZTogTGFiZWxMYXlvdXQpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgICAnTGFiZWxMYXlvdXQgaW5wdXQgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBsYWJlbENvbHVtbkxheW91dCwgZmllbGRDb2x1bW5MYXlvdXQgYW5kIGdhcENvbHVtbkxheW91dCBwcm9wZXJ0aWVzIGluc3RlYWQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhYmVsTGF5b3V0ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5sYWJlbENvbHVtbkxheW91dCA9XG4gICAgICAgICAgICB0aGlzLl9sYWJlbExheW91dCA9PT0gJ2hvcml6b250YWwnID8gRGVmYXVsdEhvcml6b250YWxMYWJlbExheW91dCA6IERlZmF1bHRWZXJ0aWNhbExhYmVsTGF5b3V0O1xuICAgICAgICB0aGlzLmZpZWxkQ29sdW1uTGF5b3V0ID1cbiAgICAgICAgICAgIHRoaXMuX2xhYmVsTGF5b3V0ID09PSAnaG9yaXpvbnRhbCcgPyBEZWZhdWx0SG9yaXpvbnRhbEZpZWxkTGF5b3V0IDogRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG4gICAgfVxuICAgIGdldCBsYWJlbExheW91dCgpOiBMYWJlbExheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbExheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGNvbHVtbiBsYXlvdXQgZm9yIGlubGluZSBpdGVtcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpbmxpbmVDb2x1bW5MYXlvdXQodmFsdWU6IENvbHVtbkxheW91dCkge1xuICAgICAgICB0aGlzLl9pbmxpbmVDb2x1bW5MYXlvdXQgPSBub3JtYWxpemVDb2x1bW5MYXlvdXQodmFsdWUpO1xuICAgICAgICB0aGlzLl91cGRhdGVJbmxpbmVDb2x1bW5MYXlvdXQoKTtcbiAgICB9XG5cbiAgICBnZXQgaW5saW5lQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5saW5lQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5saW5lQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGxhYmVsJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0SG9yaXpvbnRhbExhYmVsTGF5b3V0O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBmaWVsZCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWVsZENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdEhvcml6b250YWxGaWVsZExheW91dDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZ2FwIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dCA9IERlZmF1bHRHYXBMYXlvdXQ7XG5cbiAgICAvKiogQW5ndWxhciBGb3JtR3JvdXAgd2hlcmUgYWxsIHVuZGVybHlpbmcgY29udHJvbHMgd2lsbCBiZSBhdHRhY2hlZCB0by4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgLyoqIFRoaXMgaXMgcmF0aGVyIHNpbXBsZSBmb3Igbm93IGp1c3QgdG8gaGF2ZSBzb21lIFNlY3Rpb24gVGl0bGUgaWYgbmVlZGVkICovXG4gICAgQElucHV0KClcbiAgICB0b3BUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEZvcm0ncyBtYWluIHRpdGxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFpblRpdGxlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaGlkZSBmb3JtJ3MgbWFpbiB0aXRsZS4gRGVmYXVsdCBpcyBmYWxzZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVNYWluVEl0bGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbnQgd2F5IHRvIGluaXRpYWxpemUgaW50ZXJuYWwgRm9ybUNvbnRyb2xzIGZyb20gb2JqZWN0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBvYmplY3Q6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0aW9ucyB0ZW1wbGF0ZSByZWZlcmVuY2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGp1c3QgaGVyZSB0byBzdXBwb3J0IHNldmVyYWwgd2F5cyB0byBwYXNzIHRyYW5zbGF0aW9uLlxuICAgICAqXG4gICAgICogT25lIHdheSBpcyB0byBwcm92aWRlIG5nLXRlbXBsYXRlICNpMThuIGluc2lkZSB0aGUgZm9ybS1ncm91cCB0YWcgYW5kIHRoZSBvdGhlciBvbmVcbiAgICAgKiBzb21lIGdsb2JhbCBvbmUgYXMgYmluZGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaTE4U3RyaW5nczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHdyYXAgYWxsIHRoZSBwcm92aWRlZCBjb250ZW50IGluIGEgYDxmb3JtPmAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB1c2VGb3JtKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fdXNlRm9ybSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB1c2VGb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlRm9ybTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjb2x1bW4gbGF5b3V0IGluIHRoZSBmb3JtYXQgYFhMbi1Mbi1Nbi1TbmAgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggc2l6ZS5cbiAgICAgKiBlZzogWEwyLUwyLU0yLVMxIHdvdWxkIGNyZWF0ZSAyLWNvbHVtbiBsYXlvdXRzIGZvciBYTCwgTCwgYW5kIE0gc2l6ZXMgYW5kIHNpbmdsZS1jb2x1bW4gbGF5b3V0IGZvciBTIHNpemUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5MYXlvdXQ6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogV2hldGhlciBhbGwgZm9ybSBpdGVtcyBzaG91bGQgaGF2ZSBpZGVudGljYWwgbGF5b3V0IHByb3ZpZGVkIGZvciBmb3JtIGdyb3VwICovXG4gICAgQElucHV0KClcbiAgICB1bmlmaWVkTGF5b3V0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIG9uU3VibWl0IGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25TdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBOYXRpdmUgZm9ybSBlbGVtZW50LiBBdmFpbGFibGUgd2l0aCBgW3VzZUZvcm1dPVwidHJ1ZVwiYCBpbnB1dCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCduYXRpdmVGb3JtJywgeyByZWFkOiBOZ0Zvcm0gfSlcbiAgICBuYXRpdmVGb3JtOiBOZ0Zvcm07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2kxOG4nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGkxOFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlczogUXVlcnlMaXN0PEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEtlZXAgdHJhY2sgb2YgYWRkZWQgZm9ybSBmaWVsZHMgY2hpbGRyZW4gaW4gY29ycmVjdCBvcmRlci5cbiAgICAgKlxuICAgICAqIFNpbmNlIFwiZGVzY2VuZGFudHM6IHRydWVcIiBpbmNsdWRlcyBmaWVsZHMgb2YgbmVzdGVkIGZvcm0gZ3JvdXAgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIFdlIGFyZSBmb3JjZWQgdG8gdXNlIFwiQ29udGVudENoaWxkcmVuXCIgc28gRm9ybUZpZWxkIGNoaWxkcmVuIGNhbiBiZSB1c2VkXG4gICAgICogd2l0aCBvcHRpb25hbCByZW5kZXJpbmcgKG5nSWYpIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEZvcm0gZmllbGRzIHdpdGhpbiB0aGUgZm9ybUdyb3VwIGlzIGRyaXZlbiBieSBtdWx0aS16b25lIGxheW91dCBzdXBwb3J0LiBXZSBuZWVkIHRvIGJlXG4gICAgICogYWJsZSB0byBhZGQgbnVtYmVyIG9mIEZvcm1GaWVsZHMsIGFuZCBiYXNlZCBvbiBnaXZlbiBjb25maWd1cmF0aW9uICh6b25lLCByYW5rKSByZW5kZXIgdGhlbVxuICAgICAqIHVuZGVyIGNvcnJlY3Qgem9uZSAgKHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCkuXG4gICAgICpcbiAgICAgKiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGluY2x1ZGUgY29udGVudCBhbmQgdGhlbiB0cnkgdG8gc29tZWhvdyBwb3NpdGlvbiBpdCBhcyBpdFxuICAgICAqIHdvdWxkIGxlYWQgdG8gdGhlIFVJIHdoZXJlIHVzZXIgY2FuIHNlZSBlbGVtZW50aW5nIG1vdmluZyBhcyB5b3UgdHJ5IHRvIHBvc2l0aW9uIGl0LlxuICAgICAqXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGT1JNX0dST1VQX0NISUxEX0ZJRUxEX1RPS0VOIGFzIGFueSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBmb3JtR3JvdXBDaGlsZHJlbjogUXVlcnlMaXN0PEZvcm1Hcm91cEZpZWxkPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIExpc3Qgb2YgZGlyZWN0IEZkcEZvcm1Hcm91cCdzIGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogU2luY2UgXCJmb3JtR3JvdXBDaGlsZHJlblwiIHVzZXMgXCJ7IGRlc2NlbmRhbnRzOiB0cnVlIH1cIiBvcHRpb24gdGhhdCBtZWFuc1xuICAgICAqIFwiZm9ybUdyb3VwQ2hpbGRyZW5cIiB3aWxsIGtlZXAgdHJhY2sgb2YgbmVzdGVkIEZkcEZvcm1Hcm91cCBmaWVsZHMgYXMgd2VsbC5cbiAgICAgKiBUaGlzIGxpc3QgcmVsaWVzIG9uIHRoZSBpbmplY3Rpb24gbWVjaGFuaXNtIHNvIG5lc3RlZCBGZHBGb3JtR3JvdXAncyBmaWVsZHMvZmllbGRHcm91cHNcbiAgICAgKiB3aWxsIGJlIG9taXR0ZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbjogQXJyYXk8Rm9ybUdyb3VwRmllbGQ+ID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHhsQ29sdW1uc051bWJlcjogbnVtYmVyO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGdDb2x1bW5zTnVtYmVyOiBudW1iZXI7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtZENvbHVtbnNOdW1iZXI6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VyIHJlc3BvbnNpdmUgbGF5b3V0XG4gICAgICovXG4gICAgeGxDb2w6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYWNrZWQgZmllbGRzIHdoaWNoIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqL1xuICAgIGZvcm1Sb3dzOiB7IFtrZXk6IG51bWJlcl06IEZpZWxkQ29sdW1uIHwgRmllbGRHcm91cCB9ID0ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oaW50T3B0aW9uczogSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VzZUZvcm0gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hpbnRQbGFjZW1lbnQ6IEhpbnRQbGFjZW1lbnQgPSAncmlnaHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbExheW91dDogTGFiZWxMYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIHJlYWRvbmx5IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIEBJbmplY3QoRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQpIHByaXZhdGUgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9uc1xuICAgICkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IDxGb3JtR3JvdXA+KHRoaXMuZm9ybUNvbnRhaW5lciA/IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sIDogbmV3IEZvcm1Hcm91cCh7fSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdzdHJpbmcnIHx8IHRoaXMuaGludCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5oaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5oaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUlubGluZUNvbHVtbkxheW91dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmkxOFN0cmluZ3MgPSB0aGlzLmkxOFN0cmluZ3MgPyB0aGlzLmkxOFN0cmluZ3MgOiB0aGlzLmkxOFRlbXBsYXRlO1xuXG4gICAgICAgIHRoaXMuX3NldFVzZXJMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRmllbGRCeUNvbHVtbigpO1xuICAgICAgICB0aGlzLl91cGRhdGVGb3JtRmllbGRzUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1Hcm91cENoaWxkcmVuKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkZvcm1GaWVsZENvbHVtbkNoYW5nZSgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pMThTdHJpbmdzID0gdGhpcy5pMThTdHJpbmdzID8gdGhpcy5pMThTdHJpbmdzIDogdGhpcy5pMThUZW1wbGF0ZTtcblxuICAgICAgICB0aGlzLl9zZXRVc2VyTGF5b3V0KCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUZpZWxkQnlDb2x1bW4oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRm9ybUZpZWxkc1Byb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Gb3JtR3JvdXBDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Gb3JtRmllbGRDb2x1bW5DaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5fdHJhY2tGb3JtR3JvdXBSZXNpemUoKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhZGRGb3JtRmllbGQoZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCk6IHZvaWQge1xuICAgICAgICAvLyBJdCdzIG5lZWRlZCB0byBzZXQgZGVmYXVsdCBGb3JtRmllbGQgcHJvcGVydGllc1xuICAgICAgICAvLyBvbiBlYXJseSBzdGFnZSBvdGhlcndpc2UgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgICAgLy8gd2lsbCBiZSB0aHJvd24gb24gRm9ybUZpZWxkIGxldmVsIChlLmcuIGkxOHN0cmluZyBhcmUgbm90IGRlZmluZWQpXG4gICAgICAgIHRoaXMuX3VwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZm9ybUZpZWxkKTtcbiAgICAgICAgLy8ga2VlcCB0cmFjayBvZiBkaXJlY3RseSByZWdpc3RlcmVkIGNoaWxkcmVuXG4gICAgICAgIHRoaXMuX2FkZERpcmVjdEZvcm1Hcm91cENoaWxkKGZvcm1GaWVsZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVGb3JtRmllbGQoZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVEaXJlY3RGb3JtR3JvdXBDaGlsZChmb3JtRmllbGQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYWRkRm9ybUZpZWxkR3JvdXAoZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZERpcmVjdEZvcm1Hcm91cENoaWxkKGZvcm1GaWVsZEdyb3VwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZUZvcm1GaWVsZEdyb3VwKGZvcm1GaWVsZEdyb3VwOiBGb3JtRmllbGRHcm91cCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVEaXJlY3RGb3JtR3JvdXBDaGlsZChmb3JtRmllbGRHcm91cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhZGRGb3JtQ29udHJvbChuYW1lOiBzdHJpbmcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKG5hbWUsIGNvbnRyb2wpO1xuICAgICAgICAvLyBsZXR0aW5nIGNvbnRyb2wgdG8gc2V0IHZhbHVlLiB3aGVuIHByb3ZpZGVkIHZhbHVlIGlzICdmYWxzZScuXG4gICAgICAgIGlmICh0aGlzLm9iamVjdCkge1xuICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHRoaXMub2JqZWN0W25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlRm9ybUNvbnRyb2wobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wobmFtZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRyYWNrQnlGaWVsZE5hbWUoaW5kZXg6IG51bWJlciwgZmllbGQ6IEZpZWxkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkID8gZmllbGQubmFtZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWydmZC1jb250YWluZXInLCB0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiB1c2VkIGZvciB0ZW1wbGF0ZSBzaWRlIFR5cGUgY29ycmVjdGlvbiAqL1xuICAgICRmaWVsZEdyb3VwID0gKGY6IGFueSk6IEZpZWxkR3JvdXAgPT4gZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Gb3JtR3JvdXBDaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVGaWVsZEJ5Q29sdW1uKCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Gb3JtRmllbGRDb2x1bW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ2hpbGRyZW4uZm9yRWFjaCgoZmllbGQ6IEZvcm1Hcm91cEZpZWxkKSA9PlxuICAgICAgICAgICAgKDxGb3JtRmllbGRDb21wb25lbnQ+ZmllbGQpLm9uQ29sdW1uQ2hhbmdlPy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpZWxkQnlDb2x1bW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFzc2lnbiBhIGZpZWxkcyBvciBmaWVsZCBncm91cCB0byBzcGVjaWZpZWQgY29sdW1ucyB3aXRoIHJhbmsuXG4gICAgICogaWYgYGNvbHVtbkxheW91dFR5cGVgIGlzIGdpdmVuIGEgZmllbGRzIHdpdGhvdXQgY29sdW1uIHByb3BlcnR5IHdpbGwgc2V0IG9uIGxhc3QgY29sdW1uLlxuICAgICAqIE90aGVyd2lzZSB0aGUgZmllbGRzIHNldCAxIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVGaWVsZEJ5Q29sdW1uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLl9nZXRGb3JtR3JvdXBDaGlsZHJlbigpO1xuICAgICAgICBjb25zdCByb3dzOiB7IFtrZXk6IG51bWJlcl06IEZpZWxkQ29sdW1uIHwgRmllbGRHcm91cCB9ID0ge307XG4gICAgICAgIGxldCByb3dOdW1iZXIgPSAwO1xuICAgICAgICBsZXQgY29sdW1uczogRmllbGRDb2x1bW4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGlzRmllbGRDaGlsZChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZpZWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSB0aGlzLl92YWxpZGF0ZUZpZWxkQ29sdW1uKGNoaWxkLmNvbHVtbik7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbnNbY29sdW1uTnVtYmVyXSkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW2NvbHVtbk51bWJlcl0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5OdW1iZXJdLnB1c2goZmllbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNGaWVsZEdyb3VwQ2hpbGQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cENvbHVtbnM6IEZpZWxkQ29sdW1uID0ge307XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd051bWJlcl0gPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0ge307XG4gICAgICAgICAgICAgICAgICAgIHJvd051bWJlcisrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRzID0gY2hpbGQuZmllbGRzLm1hcCgoZmllbGQpID0+IGdldEZpZWxkKGZpZWxkKSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBGaWVsZHMuZm9yRWFjaCgoZ3JvdXBGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSB0aGlzLl92YWxpZGF0ZUZpZWxkQ29sdW1uKGdyb3VwRmllbGQuY29sdW1uKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkR3JvdXBDb2x1bW5zW2NvbHVtbk51bWJlcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkR3JvdXBDb2x1bW5zW2NvbHVtbk51bWJlcl0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwQ29sdW1uc1tjb2x1bW5OdW1iZXJdLnB1c2goZ3JvdXBGaWVsZCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByb3dzW3Jvd051bWJlcl0gPSBuZXcgRmllbGRHcm91cChjaGlsZC5sYWJlbCwgZmllbGRHcm91cENvbHVtbnMsIGNoaWxkLmhpbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICByb3dOdW1iZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb3dzW3Jvd051bWJlcl0gPSBjb2x1bW5zO1xuICAgICAgICB0aGlzLmZvcm1Sb3dzID0gcm93cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBWYWxpZGF0ZSBjb2x1bW4gbnVtYmVyICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVGaWVsZENvbHVtbihjb2x1bW5OdW1iZXI6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxheW91dCAmJiBjb2x1bW5OdW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihjb2x1bW5OdW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBhIHZhbGlkIGNvbHVtbiBudW1iZXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbk51bWJlciA+IHRoaXMueGxDb2x1bW5zTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW5zIGNhbm5vdCBiZSBtb3JlIHRoYW4gJHt0aGlzLnhsQ29sdW1uc051bWJlcn1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbk51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnhsQ29sdW1uc051bWJlcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUZvcm1GaWVsZHNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRGb3JtR3JvdXBDaGlsZHJlbigpLmZvckVhY2goKGZvcm1GaWVsZDogRm9ybUdyb3VwRmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ZpZWxkQ2hpbGQoZm9ybUZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRmllbGRHcm91cENoaWxkKGZvcm1GaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB0aGlzLl91cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGdldEZvcm1GaWVsZChmaWVsZCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhc3Mgc29tZSBnbG9iYWwgcHJvcGVydGllcyB0byBlYWNoIGZpZWxkLiBFdmVuIGZvcm1Hcm91cCBjbmEgYmUgaW5qZWN0IGRpcmVjdGx5IGluc2lkZSBmb3JtXG4gICAgICogZmllbGQgd2UgYXJlIHVzaW5nIGhlcmUgYSBzZXR0ZXIgbWV0aG9kIHRvIGluaXRpYWxpemUgdGhlXG4gICAgICpcbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudW5pZmllZExheW91dCkge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmhpbnRQbGFjZW1lbnQgPSB0aGlzLl9oaW50UGxhY2VtZW50O1xuICAgICAgICAgICAgZm9ybUZpZWxkLmVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZTtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5ub0xhYmVsTGF5b3V0ID0gdGhpcy5ub0xhYmVsTGF5b3V0O1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZC5zZXREZWZhdWx0Q29sdW1uTGF5b3V0KCk7XG4gICAgICAgIGZvcm1GaWVsZC5pMThTdHJpbmdzID0gZm9ybUZpZWxkLmkxOFN0cmluZ3MgPyBmb3JtRmllbGQuaTE4U3RyaW5ncyA6IHRoaXMuaTE4U3RyaW5ncztcbiAgICAgICAgZm9ybUZpZWxkLnNldEVycm9yRGlyZWN0aXZlcyh0aGlzLl9lcnJvckRpcmVjdGl2ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBpZiBgY29sdW1uTGF5b3V0VHlwZWAgaXMgZ2l2ZW4sIHNldCB0aG9zZSBjb2x1bW4gbGF5b3V0cyBhcHByb3ByaWF0ZWx5LiBPdGhlcndpc2UsIGEgbGF5b3V0IHdpbGwgc2V0IG9uIDEgY29sdW1uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0VXNlckxheW91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGF5b3V0KSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRDb2x1bW5OdW1iZXJzKHRoaXMuY29sdW1uTGF5b3V0KTtcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLnhsQ29sdW1uc051bWJlcikgfHwgaXNOYU4odGhpcy5sZ0NvbHVtbnNOdW1iZXIpIHx8IGlzTmFOKHRoaXMubWRDb2x1bW5zTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgYSB2YWxpZCBudW1iZXIgZm9yIGNvbHVtbnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnhsQ29sdW1uc051bWJlciA+IDEyIHx8IHRoaXMubGdDb2x1bW5zTnVtYmVyID4gMTIgfHwgdGhpcy5tZENvbHVtbnNOdW1iZXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgbW9yZSB0aGFuIDEyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsZ0NvbHVtbnMgPSAxMiAvIHRoaXMubGdDb2x1bW5zTnVtYmVyO1xuICAgICAgICAgICAgY29uc3QgbWRDb2x1bW5zID0gMTIgLyB0aGlzLm1kQ29sdW1uc051bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IHhsQ29sdW1ucyA9IDEyIC8gdGhpcy54bENvbHVtbnNOdW1iZXI7XG5cbiAgICAgICAgICAgIC8vIGZvciBgbGdgIHNpbmdsZS1jb2x1bW4gbGF5b3V0LCBTdHlsZXMgZG9lcyBub3QgdXNlIGFueSBjbGFzcywgYW5kIHByb3ZpZGluZyBgZmQtY29sLWxnLS0xMmAgaGFzIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyB0aGVyZWZvcmUsIHdlIHJlbW92ZSB0aGUgbGcgY2xhc3MgZm9yIHNpbmdsZS1jb2x1bW4gbGF5b3V0XG4gICAgICAgICAgICBpZiAobGdDb2x1bW5zID09PSAxMikge1xuICAgICAgICAgICAgICAgIHRoaXMueGxDb2wgPSBgZmQtY29sLXhsLS0ke3hsQ29sdW1uc30gZmQtY29sLW1kLS0ke21kQ29sdW1uc31gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnhsQ29sID0gYGZkLWNvbC14bC0tJHt4bENvbHVtbnN9IGZkLWNvbC1tZC0tJHttZENvbHVtbnN9IGZkLWNvbC1sZy0tJHtsZ0NvbHVtbnN9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGxDb2wgPSBgZmQtY29sLXhsLS0xMiBmZC1jb2wtbWQtLTEyIGZkLWNvbC1sZy0tMTJgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDb2x1bW5OdW1iZXJzKGxheW91dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IFt4bCwgbGcsIG1kXSA9IGxheW91dC5zcGxpdCgnLScpO1xuICAgICAgICB0aGlzLnhsQ29sdW1uc051bWJlciA9IHBhcnNlSW50KHhsLnNsaWNlKDIsIHhsLmxlbmd0aCksIDEwKTtcbiAgICAgICAgdGhpcy5sZ0NvbHVtbnNOdW1iZXIgPSBwYXJzZUludChsZy5zbGljZSgxLCBsZy5sZW5ndGgpLCAxMCk7XG4gICAgICAgIHRoaXMubWRDb2x1bW5zTnVtYmVyID0gcGFyc2VJbnQobWQuc2xpY2UoMSwgbWQubGVuZ3RoKSwgMTApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkRGlyZWN0Rm9ybUdyb3VwQ2hpbGQoY2hpbGQ6IEZvcm1Hcm91cEZpZWxkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbi5pbmRleE9mKGNoaWxkKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRGlyZWN0Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVEaXJlY3RGb3JtR3JvdXBDaGlsZChjaGlsZDogUGxhdGZvcm1Gb3JtRmllbGQgfCBGb3JtRmllbGRHcm91cCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbiA9IHRoaXMuX2Zvcm1Hcm91cERpcmVjdENoaWxkcmVuLmZpbHRlcigoX2NoaWxkKSA9PiBfY2hpbGQgIT09IGNoaWxkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IGRpcmVjdCBmb3JtIGdyb3VwIGNoaWxkcmVuIGluIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEZvcm1Hcm91cENoaWxkcmVuKCk6IEZvcm1Hcm91cEZpZWxkW10ge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZm9ybUdyb3VwQ2hpbGRyZW5cbiAgICAgICAgICAgIC50b0FycmF5KClcbiAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiAoaXNGaWVsZEdyb3VwV3JhcHBlckNoaWxkKGNoaWxkKSA/IGNoaWxkLmZpZWxkUmVuZGVyZXIgOiBjaGlsZCkpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiB0aGlzLl9mb3JtR3JvdXBEaXJlY3RDaGlsZHJlbi5pbmNsdWRlcyhjaGlsZCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlSW5saW5lQ29sdW1uTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5pbmxpbmVDb2x1bW5MYXlvdXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYXZlIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBoZXJlIGluIG9yZGVyIHRvIHJlLWNoZWNrIGNvbnRlbnRzXG4gICAgICogaW5zaWRlIFwiRm9ybUZpZWxkLnJlbmRlcmVyXCIgdGVtcGxhdGUgZXZlcnkgdGltZSBjb21wb25lbnQncyBkaW1lbnNpb25zIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF90cmFja0Zvcm1Hcm91cFJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8Zm9ybSAjbmF0aXZlRm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQuZW1pdCgkZXZlbnQpXCIgKm5nSWY9XCJ1c2VGb3JtOyBlbHNlIGJvZHlcIiBbaWRdPVwiaWRcIiBbbmFtZV09XCJuYW1lXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlcIj48L25nLWNvbnRhaW5lcj5cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNib2R5PlxuICAgIDwhLS0gIFJlbmRlciBmaWVsZHMgYW5kIGZpZWxkIGdyb3VwcyB3aXRoIGFzc2lnbmVkIGNvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkc1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWVsZHM+XG4gICAgPGRpdiAqbmdJZj1cIm1haW5UaXRsZSAmJiAhaGlkZU1haW5USXRsZVwiIGNsYXNzPVwiZmQtZm9ybS1oZWFkZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1haW5UaXRsZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jb250YWluZXIgZmQtZm9ybS1sYXlvdXQtZ3JpZC1jb250YWluZXJcIlxuICAgICAgICBbY2xhc3MuaXMtY29tcGFjdF09XCJjb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQgfCBhc3luY1wiXG4gICAgPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZm9ybVJvd3MgfCBrZXl2YWx1ZTsgdHJhY2tCeTogdHJhY2tCeUZuXCIgY2xhc3M9XCJmZC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGRzIG9mIGNvbHVtbiB8IGZpZWxkR3JvdXBSb3dWYWx1ZSB8IGtleXZhbHVlOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNvbCBmZC1mb3JtLWdyb3VwXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwieGxDb2xcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1yb3dcIiAqbmdJZj1cIiRmaWVsZEdyb3VwKGNvbHVtbi52YWx1ZSkgYXMgdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhbHVlLmxhYmVsXCIgZmRwLWZvcm0tZ3JvdXAtaGVhZGVyIFtmaWVsZEdyb3VwXT1cImluZGV4ID09PSAwID8gdmFsdWUgOiBudWxsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzLnZhbHVlOyB0cmFja0J5OiB0cmFja0J5RmllbGROYW1lXCIgY2xhc3M9XCJmZC1yb3cgZmQtZm9ybS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2xcIiBbY2xhc3NdPVwiX2lubGluZUNvbHVtbkxheW91dENsYXNzXCIgW3N0eWxlLm9yZGVyXT1cImZpZWxkLnJhbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZD8ucmVuZGVyZXIgfHwgbnVsbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRm9yIG5lc3RlZCBmb3JtLWdyb3VwIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmRwLWZvcm0tZ3JvdXBcIj48L25nLWNvbnRlbnQ+XG5cbjxuZy10ZW1wbGF0ZSAjbWFpblRpdGxlVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9oaW50T3B0aW9ucz8uY29udGVudCAmJiBfaGludE9wdGlvbnMucG9zaXRpb24gPT09ICdiZWZvcmUnXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaW50VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGg1IGNsYXNzPVwiZmQtZm9ybS1oZWFkZXJfX3RleHRcIj5cbiAgICAgICAge3sgbWFpblRpdGxlIH19XG4gICAgPC9oNT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaGludE9wdGlvbnM/LmNvbnRlbnQgJiYgX2hpbnRPcHRpb25zLnBvc2l0aW9uID09PSAnYWZ0ZXInXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaW50VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNoaW50VGVtcGxhdGU+XG4gICAgICAgIDxzcGFuIGZkLWxpbmsgW3VuZGVjb3JhdGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cIl9oaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiX2hpbnRPcHRpb25zLmdseXBoXCJcbiAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIl9oaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cIl9oaW50T3B0aW9ucy50cmlnZ2VyIHx8IFtdXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgPjwvZmQtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -3,7 +3,7 @@ import { ControlContainer, NgControl, NgForm } from '@angular/forms';
3
3
  import { A, DOWN_ARROW, ENTER, ESCAPE, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
4
4
  import { FD_FORM_FIELD, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';
5
5
  import equal from 'fast-deep-equal';
6
- import { DynamicComponentService, KeyUtil } from '@fundamental-ngx/cdk/utils';
6
+ import { DynamicComponentService, KeyUtil, warnOnce } from '@fundamental-ngx/cdk/utils';
7
7
  import { DialogConfig } from '@fundamental-ngx/core/dialog';
8
8
  import { DATA_PROVIDERS, MultiComboBoxDataSource, PlatformFormField, PlatformFormFieldControl } from '@fundamental-ngx/platform/shared';
9
9
  import { BaseMultiCombobox, MAP_LIMIT } from '../commons/base-multi-combobox';
@@ -57,7 +57,7 @@ export class MultiComboboxComponent extends BaseMultiCombobox {
57
57
  */
58
58
  this._selectedSuggestions = [];
59
59
  if (!deprecationWarningShown && isDevMode()) {
60
- console.warn(`[DEPRECATION] Platform Multi Combobox component is deprecated since v0.39.0. Please migrate to Core's version.`);
60
+ warnOnce(`[DEPRECATION] Platform Multi Combobox component is deprecated since v0.39.0. Please migrate to Core's version.`);
61
61
  deprecationWarningShown = true;
62
62
  }
63
63
  }
@@ -360,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
360
360
  type: ViewChild,
361
361
  args: [TokenizerComponent]
362
362
  }] } });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBRVQsUUFBUSxFQUNSLElBQUksRUFDSixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFDSCxjQUFjLEVBRWQsdUJBQXVCLEVB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Q0ksT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNELCtCQUErQixFQUFFO1NBQ3BDLHNSQVlVLGtCQUFrQix1RUNoRmpDLGc1WEF1U0E7OzJGRGpPYSxzQkFBc0I7a0JBZmxDLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsV0FBVyx3QkFBd0I7NEJBQ25DLEtBQUssRUFBRSxJQUFJO3lCQUNkO3dCQUNELCtCQUErQixFQUFFO3FCQUNwQzs7MEJBeUJJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxRQUFROzswQkFDcEIsUUFBUTs7MEJBQUksUUFBUTs7MEJBQ3BCLFFBQVE7OzBCQUVSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBSWpDLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BELFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUQsTUFBTTsyQkFBQyxTQUFTO2lGQS9CckIscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QjtnQkFLbEMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBS3pCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBLCBET1dOX0FSUk9XLCBFTlRFUiwgRVNDQVBFLCBTUEFDRSwgVEFCLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcblxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsIEtleVV0aWwgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7XG4gICAgREFUQV9QUk9WSURFUlMsXG4gICAgRGF0YVByb3ZpZGVyLFxuICAgIE11bHRpQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIE9wdGlvbkl0ZW0sXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIFNlbGVjdGFibGVPcHRpb25JdGVtXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcblxuaW1wb3J0IHsgQmFzZU11bHRpQ29tYm9ib3gsIE1BUF9MSU1JVCB9IGZyb20gJy4uL2NvbW1vbnMvYmFzZS1tdWx0aS1jb21ib2JveCc7XG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94TW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktY29tYm9ib3gtbW9iaWxlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94LW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1NdWx0aUNvbWJvYm94TW9iaWxlTW9kdWxlIH0gZnJvbSAnLi4vbXVsdGktY29tYm9ib3gtbW9iaWxlL211bHRpLWNvbWJvYm94LW1vYmlsZS5tb2R1bGUnO1xuaW1wb3J0IHsgTVVMVElDT01CT0JPWF9DT01QT05FTlQgfSBmcm9tICcuLi9tdWx0aS1jb21ib2JveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTXVsdGlDb21ib2JveENvbmZpZyB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LmNvbmZpZyc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGVFdmVudCB9IGZyb20gJy4uLy4uL2F1dG8tY29tcGxldGUvYXV0by1jb21wbGV0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVG9rZW5pemVyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcblxubGV0IGRlcHJlY2F0aW9uV2FybmluZ1Nob3duID0gZmFsc2U7XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgY2FuIHdvcmsgd2l0aCBib3RoIHN0cmluZyBwcmltaXRpdmVzIGFzIHdlbGwgYXMgd2l0aCBjb21wbGV4IG9iamVjdHMuIEluIG9yZGVyXG4gKiB0byB1c2Ugb2JqZWN0cyB1c2VyIG11c3QgcHJvdmlkZSBhbiB1bmlxdWUgSUQgdG8gbG9va3Vwa2V5LCB3aGljaCB3aWxsIGJlIHVzZWQgaW4gY29tcGFyaW5nXG4gKiBlYWNoIGl0ZW1zIG9mIGFycmF5LiBJdCBpcyBpbXBvcnRhbnQgdG8gcHJvdmlkZSBsb29rdXBrZXkgdmFsdWUgYXMgdGhlcmUgbWlnaHQgYmUgbXVsdGlwbGVcbiAqIGl0ZW1zIHdpdGggc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQgcHJvcGVydGllcyB3aGljaCBpcyB0byBiZSBkaWZmZXJlbnRseSBpZGVudGlmaWVkIG90aGVyd2lzZVxuICogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIHNhbWUgb2JqZWN0cy5cbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1tdWx0aS1jb21ib2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWNvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tdWx0aS1jb21ib2JveC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0ZPUk1fRklFTERfQ09OVFJPTCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBNdWx0aUNvbWJvYm94Q29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aUNvbWJvYm94Q29tcG9uZW50IGV4dGVuZHMgQmFzZU11bHRpQ29tYm9ib3ggaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbW9iaWxlQ29udHJvbFRlbXBsYXRlJylcbiAgICBtb2JpbGVDb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpXG4gICAgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKFRva2VuaXplckNvbXBvbmVudClcbiAgICBfdG9rZW5pemVyOiBUb2tlbml6ZXJDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBvZiBzZWxlY3RlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zZWxlY3RlZFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcmVhZG9ubHkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHJlYWRvbmx5IG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSByZWFkb25seSBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyxcbiAgICAgICAgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX1BST1ZJREVSUykgcHJpdmF0ZSBfcHJvdmlkZXJzOiBNYXA8c3RyaW5nLCBEYXRhUHJvdmlkZXI8YW55Pj4sXG4gICAgICAgIHJlYWRvbmx5IF9tdWx0aUNvbWJvYm94Q29uZmlnOiBNdWx0aUNvbWJvYm94Q29uZmlnLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEKSBmb3JtRmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRF9DT05UUk9MKSBmb3JtQ29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgICAgICBASW5qZWN0KE1BUF9MSU1JVCkgX21hcExpbWl0OiBudW1iZXIsXG4gICAgICAgIHJlYWRvbmx5IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBjZCxcbiAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICBuZ0NvbnRyb2wsXG4gICAgICAgICAgICBjb250cm9sQ29udGFpbmVyLFxuICAgICAgICAgICAgbmdGb3JtLFxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgX211bHRpQ29tYm9ib3hDb25maWcsXG4gICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICBmb3JtQ29udHJvbCxcbiAgICAgICAgICAgIF9tYXBMaW1pdFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghZGVwcmVjYXRpb25XYXJuaW5nU2hvd24gJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgW0RFUFJFQ0FUSU9OXSBQbGF0Zm9ybSBNdWx0aSBDb21ib2JveCBjb21wb25lbnQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2MC4zOS4wLiBQbGVhc2UgbWlncmF0ZSB0byBDb3JlJ3MgdmVyc2lvbi5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nU2hvd24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlcnMgPSB0aGlzLl9wcm92aWRlcnM/LnNpemUgPT09IDAgPyB0aGlzLl9tdWx0aUNvbWJvYm94Q29uZmlnLnByb3ZpZGVycyA6IHRoaXMuX3Byb3ZpZGVycztcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBib3RoIHByZWZlciBkYXRhU291cmNlXG4gICAgICAgIGlmICghdGhpcy5kYXRhU291cmNlICYmIHRoaXMuZW50aXR5Q2xhc3MgJiYgcHJvdmlkZXJzPy5oYXModGhpcy5lbnRpdHlDbGFzcykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZShwcm92aWRlcnMuZ2V0KHRoaXMuZW50aXR5Q2xhc3MpISk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGVkU3VnZ2VzdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl90b2tlbml6ZXIuX3Nob3dPdmVyZmxvd1BvcG92ZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNlbGVjdGlvbihpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9nZXRUb2tlbkluZGV4QnlJZGxPclZhbHVlKGl0ZW0pO1xuXG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuXG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuXG4gICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzVG9TZWFyY2hGaWVsZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25PcHRpb25DaGVja2JveENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX29uTGlzdEVsZW1lbnRDbGlja2VkKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNvbXBsZXRlVGVybShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoZXZlbnQudGVybSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNlbGVjdGlvbkJ5SW5wdXRUZXh0KHRleHQgPSB0aGlzLmlucHV0VGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZSh0ZXh0KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBzZWxlY3RzIGFsbCBwb3NzaWJsZSBvcHRpb25zLlxuICAgICAqICpzZWxlY3QqIGF0dHJpYnV0ZSDigJMgaWYgKnRydWUqIHNlbGVjdCBhbGwsIGlmICpmYWxzZSogdW5zZWxlY3QgYWxsXG4gICAgICogKi9cbiAgICBoYW5kbGVTZWxlY3RBbGxJdGVtcyhzZWxlY3Q6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLnNlbGVjdGVkID0gc2VsZWN0KSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMgPSBzZWxlY3QgPyBbLi4udGhpcy5fZmxhdFN1Z2dlc3Rpb25zXSA6IFtdO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuYXZpZ2F0ZUJ5VG9rZW5zKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0RPV05fQVJST1csIFVQX0FSUk9XXSkgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5pdGVtcz8uZmlyc3QuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlVG9rZW4odG9rZW46IFNlbGVjdGFibGVPcHRpb25JdGVtLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbkl0ZW0gPSB0aGlzLl9zdWdnZXN0aW9ucy5maW5kKChzKSA9PiBzLnZhbHVlID09PSB0b2tlbi52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb25JdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbihvcHRpb25JdGVtKTtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zID0gdGhpcy5pc0dyb3VwXG4gICAgICAgICAgICA/IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9Hcm91cE9wdGlvbkl0ZW1zKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSlcbiAgICAgICAgICAgIDogdGhpcy5fc3VnZ2VzdGlvbnMuZmlsdGVyKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuc29tZSgoaXRlbSkgPT4gZXF1YWwoaXRlbS52YWx1ZSwgdmFsdWUudmFsdWUpKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaXNMaXN0ID0gISF0YXJnZXQuY2xvc2VzdCgnLmZkcC1tdWx0aS1jb21ib2JveF9fbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgICAgIGlmIChpc0xpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNob3dMaXN0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHNldCBpbnB1dCB0ZXh0IGFzIGl0ZW0gbGFiZWwuXG4gICAgICovXG4gICAgc2V0SW5wdXRUZXh0RnJvbU9wdGlvbkl0ZW0oaXRlbTogT3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IGl0ZW0ubGFiZWw7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dMaXN0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQ/LnNldEl0ZW1BY3RpdmUoaW5kZXggLSAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8uc2V0SXRlbUFjdGl2ZShpbmRleCArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0QWxsSXRlbXMoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0QWxsSXRlbXModHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uT3B0aW9uQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkxpc3RFbGVtZW50Q2xpY2tlZChldmVudCwgaW5kZXgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkT25DbGlja2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZE9uQnV0dG9uQ2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5vblByaW1hcnlCdXR0b25DbGljayh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYXBwbHlpbmcgcmFuZ2Ugc2VsZWN0aW9uLiBOb3RlLCB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGFmdGVyIGNvbWJvYm94IGl0ZW0ncyB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25MaXN0RWxlbWVudENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhdCB0aGlzIHBvaW50LCBzbyBpdCBjYW4gYmUgc2FmZWx5IHVzZWRcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLl9zdWdnZXN0aW9uc1tpbmRleF0uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKGluZGV4LCBldmVudCk7XG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9zdWdnZXN0aW9uc1tpZHhdO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuc2VsZWN0ZWQgIT09IHNlbGVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZpbmcgZnJvbSBcIl9zZWxlY3RlZFN1Z2dlc3Rpb25zXCIgbGlzdFxuICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZVNldC5hZGQoY3VycmVudC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkaW5nIGN1cnJlbnQgaXRlbSB0byBcIl9zZWxlY3RlZFN1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5maWx0ZXIoKHMpID0+ICF0b1JlbW92ZVNldC5oYXMocy52YWx1ZSkpO1xuICAgICAgICAvLyBzZWxlY3RlZCBpdGVtcyBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIG9wdGlvbnNcbiAgICAgICAgY29uc3QgdmFsdWVJbmRleGVzID0gbmV3IE1hcDxhbnksIG51bWJlcj4odGhpcy5fc3VnZ2VzdGlvbnMubWFwKChzLCBpKSA9PiBbcy52YWx1ZSwgaV0pKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5zb3J0KChhLCBiKSA9PiB2YWx1ZUluZGV4ZXMuZ2V0KGEudmFsdWUpISAtIHZhbHVlSW5kZXhlcy5nZXQoYi52YWx1ZSkhKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLm9uUmVzaXplKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplci50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKGJhY2t1cDogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zID0gWy4uLmJhY2t1cF07XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2hvd24kLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNob3dMaXN0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VG9rZW5JbmRleEJ5SWRsT3JWYWx1ZShpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmlkID09PSBpdGVtLmlkIHx8IGVxdWFsKHRva2VuLnZhbHVlLCBpdGVtLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXBBbmRVcGRhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICAvLyBzZXR0aW5nIHZhbHVlLCBpdCB3aWxsIGNhbGwgc2V0VmFsdWUoKVxuICAgICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWRJdGVtcztcblxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb3BhZ2F0ZUNoYW5nZShlbWl0SW5Nb2JpbGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZW1pdEluTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fbWFwQW5kVXBkYXRlTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1VTFRJQ09NQk9CT1hfQ09NUE9ORU5ULCB1c2VWYWx1ZTogdGhpcyB9XSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY01vZHVsZShcbiAgICAgICAgICAgIHsgbGlzdFRlbXBsYXRlOiB0aGlzLmxpc3RUZW1wbGF0ZSwgY29udHJvbFRlbXBsYXRlOiB0aGlzLm1vYmlsZUNvbnRyb2xUZW1wbGF0ZSB9LFxuICAgICAgICAgICAgUGxhdGZvcm1NdWx0aUNvbWJvYm94TW9iaWxlTW9kdWxlLFxuICAgICAgICAgICAgTXVsdGlDb21ib2JveE1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBpbmplY3RvclxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZHAtbXVsdGktY29tYm9ib3hcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiICpuZ0lmPVwibW9iaWxlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAqbmdJZj1cIiFtb2JpbGVcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtcG9wb3Zlci1jdXN0b20tbGlzdCBmZHAtbXVsdGktY29tYm9ib3hfX2xpc3QtY29udGFpbmVyXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJwb3BvdmVyT3BlbkNoYW5nZUhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW3N0eWxlLndpZHRoLiVdPVwiIWF1dG9SZXNpemUgJiYgMTAwXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuICAgICAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgIFtpZF09XCJpZCArICctaW5wdXQtZ3JvdXAtY29udGFpbmVyJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC1tdWx0aS1jb21ib2JveC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIFtidXR0b25dPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtnbHlwaF09XCIhcmVhZG9ubHkgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICcgJ1wiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtpc0V4cGFuZGVkXT1cIiFtb2JpbGUgJiYgaXNPcGVuICYmIF9zdWdnZXN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiYWRkb25JY29uVGl0bGUgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJfYWRkT25DbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiAhaXNPcGVuICYmIG9uUHJpbWFyeUJ1dHRvbkNsaWNrKGZhbHNlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJuYXZpZ2F0ZUJ5VG9rZW5zKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtdG9rZW5pemVyXG4gICAgICAgICAgICAgICAgI3Rva2VuaXplclxuICAgICAgICAgICAgICAgIFtjb21wYWN0Q29sbGFwc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJfc2VsZWN0ZWRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Rva2VuaXplckZvY3VzYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtbXVsdGktY29tYm9ib3gtdG9rZW5pemVyLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgKG1vcmVDbGlja2VkRXZlbnQpPVwibW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXRva2VuXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwicmVtb3ZlVG9rZW4odG9rZW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdG9rZW4gb2YgX3NlbGVjdGVkU3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgdG9rZW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuXG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICNzZWFyY2hJbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgZmRwLWF1dG8tY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwib25Db21wbGV0ZVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIl9zdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gaWQgKyAnLXJlc3VsdCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFRlcm1DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Ub3VjaGVkKCk7IHRva2VuaXplci5fc2hvd0FsbFRva2VucygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiIW1vYmlsZSAmJiBvbkJsdXIoJGV2ZW50KTsgdG9rZW5pemVyLl9oaWRlVG9rZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10b2tlbml6ZXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9mZC10b2tlbml6ZXI+XG4gICAgICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG5cbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZVxuICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGUgJiYgaXNPcGVuID8gZmFsc2UgOiAhIXN0YXRlTWVzc2FnZVwiXG4gICAgICAgICAgICBbdHlwZV09XCJzdGF0ZVwiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cInN0YXRlTWVzc2FnZVwiXG4gICAgICAgID48L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICA8L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlQ29udHJvbFRlbXBsYXRlPlxuICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICBbaWRdPVwiaWQgKyAnLWlucHV0LWdyb3VwLWNvbnRhaW5lcidcIlxuICAgICAgICBjbGFzcz1cImZkcC1tdWx0aS1jb21ib2JveC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBpc09wZW4gJiYgX3N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBmZHAtYXV0by1jb21wbGV0ZVxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwib25Db21wbGV0ZVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJfc3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgW2lucHV0VGV4dF09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/IGlkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoVGVybUNoYW5nZWQoKVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIChibHVyKT1cIiFtb2JpbGUgJiYgb25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBbaGFzTWVzc2FnZV09XCIhIXN0YXRlTWVzc2FnZVwiXG4gICAgICAgIChmb2N1c0VzY2FwZUxpc3QpPVwiaGFuZGxlTGlzdEZvY3VzRXNjYXBlKCRldmVudClcIlxuICAgICAgICBbZHJvcGRvd25Nb2RlXT1cInRydWVcIlxuICAgICAgICBjbGFzcz1cImZkcC1tdWx0aS1jb21ib2JveF9fbGlzdCBmZC1saXN0LS1tdWx0aS1pbnB1dFwiXG4gICAgICAgIFtpZF09XCJpZCArICctcmVzdWx0J1wiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aF09XCIhbW9iaWxlICYmIG1pbldpZHRoICsgJ3B4J1wiXG4gICAgICAgIFtzdHlsZS5tYXhXaWR0aF09XCJhdXRvUmVzaXplICYmIG1heFdpZHRoICsgJ3B4J1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctc2VhcmNoJ1wiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICpuZ0lmPVwic3RhdGVNZXNzYWdlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RhdGVNZXNzYWdlXCJcbiAgICAgICAgICAgIGZkLWxpc3QtbWVzc2FnZVxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgIFt0eXBlXT1cInN0YXRlIHx8ICdkZWZhdWx0J1wiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cInN0YXRlTWVzc2FnZVwiXG4gICAgICAgID48L2xpPlxuXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR3JvdXBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIF9zdWdnZXN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBJdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZkLWxpc3QtaXRlbSBmZC1saXN0LWdyb3VwLWhlYWRlciByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgZ3JvdXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBJdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IGxhYmVsOiBncm91cC5sYWJlbCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbkl0ZW0gb2YgZ3JvdXAuY2hpbGRyZW47IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFtb2JpbGUgJiYgY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlEb3duKT1cIm9uSXRlbUtleURvd25IYW5kbGVyKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiISFvcHRpb25JdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2hlY2tib3hDbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0aW9uKG9wdGlvbkl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbkl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbkl0ZW06IG9wdGlvbkl0ZW0sIGluZGV4OiBpIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzR3JvdXBcIj5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25JdGVtIG9mIF9zdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhbW9iaWxlICYmIG9uT3B0aW9uQ2xpY2tlZCgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAoa2V5RG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiISFvcHRpb25JdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2hlY2tib3hDbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25JdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uSXRlbTogb3B0aW9uSXRlbSwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uSXRlbT1cIm9wdGlvbkl0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiICNsaXN0SXRlbT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwib3B0aW9uSXRlbS5zZWxlY3RlZCAmJiAhIXNlbGVjdGVkSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbkl0ZW0udmFsdWUsIGluZGV4OiBpbmRleCB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShvcHRpb25JdGVtLnNlbGVjdGVkICYmIHNlbGVjdGVkSXRlbVRlbXBsYXRlKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25JdGVtU291cmNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbkl0ZW06IG9wdGlvbkl0ZW0sIGluZGV4OiBpbmRleCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlY29uZGFyeVRleHRTb3VyY2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uSXRlbTogb3B0aW9uSXRlbSB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1vcHRpb25JdGVtPVwib3B0aW9uSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgI29wdGlvbkl0ZW1Tb3VyY2U+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFvcHRpb25JdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm9wdGlvbkl0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJvcHRpb25JdGVtLmxhYmVsIHwgaGlnaGxpZ2h0IDogaW5wdXRUZXh0XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25JdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uSXRlbS52YWx1ZSwgaW5kZXg6IGluZGV4IH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LW9wdGlvbkl0ZW09XCJvcHRpb25JdGVtXCIgI3NlY29uZGFyeVRleHRTb3VyY2U+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTZWNvbmRhcnlUZXh0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2Vjb25kYXJ5SXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cInNlY29uZGFyeVRleHRBbGlnbm1lbnRcIlxuICAgICAgICAgICAgICAgIGZkLWxpc3Qtc2Vjb25kYXJ5XG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwib3B0aW9uSXRlbS5zZWNvbmRhcnlUZXh0XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm9wdGlvbkl0ZW0uc2Vjb25kYXJ5VGV4dCB8IGhpZ2hsaWdodCA6IGlucHV0VGV4dFwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Vjb25kYXJ5SXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2Vjb25kYXJ5SXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbkl0ZW0udmFsdWUgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBRVQsUUFBUSxFQUNSLElBQUksRUFDSixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0gsY0FBYyxFQUVk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Q0ksT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNELCtCQUErQixFQUFFO1NBQ3BDLHNSQVlVLGtCQUFrQix1RUNoRmpDLGc1WEF1U0E7OzJGRGpPYSxzQkFBc0I7a0JBZmxDLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsV0FBVyx3QkFBd0I7NEJBQ25DLEtBQUssRUFBRSxJQUFJO3lCQUNkO3dCQUNELCtCQUErQixFQUFFO3FCQUNwQzs7MEJBeUJJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxRQUFROzswQkFDcEIsUUFBUTs7MEJBQUksUUFBUTs7MEJBQ3BCLFFBQVE7OzBCQUVSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBSWpDLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BELFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUQsTUFBTTsyQkFBQyxTQUFTO2lGQS9CckIscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QjtnQkFLbEMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBS3pCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBLCBET1dOX0FSUk9XLCBFTlRFUiwgRVNDQVBFLCBTUEFDRSwgVEFCLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcblxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsIEtleVV0aWwsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRGlhbG9nQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQge1xuICAgIERBVEFfUFJPVklERVJTLFxuICAgIERhdGFQcm92aWRlcixcbiAgICBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBPcHRpb25JdGVtLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBTZWxlY3RhYmxlT3B0aW9uSXRlbVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5cbmltcG9ydCB7IEJhc2VNdWx0aUNvbWJvYm94LCBNQVBfTElNSVQgfSBmcm9tICcuLi9jb21tb25zL2Jhc2UtbXVsdGktY29tYm9ib3gnO1xuaW1wb3J0IHsgTXVsdGlDb21ib2JveE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LW1vYmlsZS9tdWx0aS1jb21ib2JveC9tdWx0aS1jb21ib2JveC1tb2JpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBsYXRmb3JtTXVsdGlDb21ib2JveE1vYmlsZU1vZHVsZSB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LW1vYmlsZS9tdWx0aS1jb21ib2JveC1tb2JpbGUubW9kdWxlJztcbmltcG9ydCB7IE1VTFRJQ09NQk9CT1hfQ09NUE9ORU5UIH0gZnJvbSAnLi4vbXVsdGktY29tYm9ib3guaW50ZXJmYWNlJztcbmltcG9ydCB7IE11bHRpQ29tYm9ib3hDb25maWcgfSBmcm9tICcuLi9tdWx0aS1jb21ib2JveC5jb25maWcnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlRXZlbnQgfSBmcm9tICcuLi8uLi9hdXRvLWNvbXBsZXRlL2F1dG8tY29tcGxldGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRva2VuaXplckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90b2tlbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbmxldCBkZXByZWNhdGlvbldhcm5pbmdTaG93biA9IGZhbHNlO1xuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGNhbiB3b3JrIHdpdGggYm90aCBzdHJpbmcgcHJpbWl0aXZlcyBhcyB3ZWxsIGFzIHdpdGggY29tcGxleCBvYmplY3RzLiBJbiBvcmRlclxuICogdG8gdXNlIG9iamVjdHMgdXNlciBtdXN0IHByb3ZpZGUgYW4gdW5pcXVlIElEIHRvIGxvb2t1cGtleSwgd2hpY2ggd2lsbCBiZSB1c2VkIGluIGNvbXBhcmluZ1xuICogZWFjaCBpdGVtcyBvZiBhcnJheS4gSXQgaXMgaW1wb3J0YW50IHRvIHByb3ZpZGUgbG9va3Vwa2V5IHZhbHVlIGFzIHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlXG4gKiBpdGVtcyB3aXRoIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50IHByb3BlcnRpZXMgd2hpY2ggaXMgdG8gYmUgZGlmZmVyZW50bHkgaWRlbnRpZmllZCBvdGhlcndpc2VcbiAqIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBzYW1lIG9iamVjdHMuXG4gKi9cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtbXVsdGktY29tYm9ib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbXVsdGktY29tYm9ib3guY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogTXVsdGlDb21ib2JveENvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveENvbXBvbmVudCBleHRlbmRzIEJhc2VNdWx0aUNvbWJvYm94IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ21vYmlsZUNvbnRyb2xUZW1wbGF0ZScpXG4gICAgbW9iaWxlQ29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0VGVtcGxhdGUnKVxuICAgIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChUb2tlbml6ZXJDb21wb25lbnQpXG4gICAgX3Rva2VuaXplcjogVG9rZW5pemVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2Ygc2VsZWN0ZWQgc3VnZ2VzdGlvbnNcbiAgICAgKi9cbiAgICBfc2VsZWN0ZWRTdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSByZWFkb25seSBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcsXG4gICAgICAgIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFUQV9QUk9WSURFUlMpIHByaXZhdGUgX3Byb3ZpZGVyczogTWFwPHN0cmluZywgRGF0YVByb3ZpZGVyPGFueT4+LFxuICAgICAgICByZWFkb25seSBfbXVsdGlDb21ib2JveENvbmZpZzogTXVsdGlDb21ib2JveENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgQEluamVjdChNQVBfTElNSVQpIF9tYXBMaW1pdDogbnVtYmVyLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgY2QsXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgbmdDb250cm9sLFxuICAgICAgICAgICAgY29udHJvbENvbnRhaW5lcixcbiAgICAgICAgICAgIG5nRm9ybSxcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIF9tdWx0aUNvbWJvYm94Q29uZmlnLFxuICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgZm9ybUNvbnRyb2wsXG4gICAgICAgICAgICBfbWFwTGltaXRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uV2FybmluZ1Nob3duICYmIGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgICBgW0RFUFJFQ0FUSU9OXSBQbGF0Zm9ybSBNdWx0aSBDb21ib2JveCBjb21wb25lbnQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2MC4zOS4wLiBQbGVhc2UgbWlncmF0ZSB0byBDb3JlJ3MgdmVyc2lvbi5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nU2hvd24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlcnMgPSB0aGlzLl9wcm92aWRlcnM/LnNpemUgPT09IDAgPyB0aGlzLl9tdWx0aUNvbWJvYm94Q29uZmlnLnByb3ZpZGVycyA6IHRoaXMuX3Byb3ZpZGVycztcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBib3RoIHByZWZlciBkYXRhU291cmNlXG4gICAgICAgIGlmICghdGhpcy5kYXRhU291cmNlICYmIHRoaXMuZW50aXR5Q2xhc3MgJiYgcHJvdmlkZXJzPy5oYXModGhpcy5lbnRpdHlDbGFzcykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZShwcm92aWRlcnMuZ2V0KHRoaXMuZW50aXR5Q2xhc3MpISk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGVkU3VnZ2VzdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl90b2tlbml6ZXIuX3Nob3dPdmVyZmxvd1BvcG92ZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNlbGVjdGlvbihpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9nZXRUb2tlbkluZGV4QnlJZGxPclZhbHVlKGl0ZW0pO1xuXG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuXG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuXG4gICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzVG9TZWFyY2hGaWVsZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25PcHRpb25DaGVja2JveENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX29uTGlzdEVsZW1lbnRDbGlja2VkKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNvbXBsZXRlVGVybShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoZXZlbnQudGVybSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNlbGVjdGlvbkJ5SW5wdXRUZXh0KHRleHQgPSB0aGlzLmlucHV0VGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZSh0ZXh0KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBzZWxlY3RzIGFsbCBwb3NzaWJsZSBvcHRpb25zLlxuICAgICAqICpzZWxlY3QqIGF0dHJpYnV0ZSDigJMgaWYgKnRydWUqIHNlbGVjdCBhbGwsIGlmICpmYWxzZSogdW5zZWxlY3QgYWxsXG4gICAgICogKi9cbiAgICBoYW5kbGVTZWxlY3RBbGxJdGVtcyhzZWxlY3Q6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLnNlbGVjdGVkID0gc2VsZWN0KSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMgPSBzZWxlY3QgPyBbLi4udGhpcy5fZmxhdFN1Z2dlc3Rpb25zXSA6IFtdO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuYXZpZ2F0ZUJ5VG9rZW5zKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0RPV05fQVJST1csIFVQX0FSUk9XXSkgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5pdGVtcz8uZmlyc3QuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlVG9rZW4odG9rZW46IFNlbGVjdGFibGVPcHRpb25JdGVtLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbkl0ZW0gPSB0aGlzLl9zdWdnZXN0aW9ucy5maW5kKChzKSA9PiBzLnZhbHVlID09PSB0b2tlbi52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb25JdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbihvcHRpb25JdGVtKTtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zID0gdGhpcy5pc0dyb3VwXG4gICAgICAgICAgICA/IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9Hcm91cE9wdGlvbkl0ZW1zKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSlcbiAgICAgICAgICAgIDogdGhpcy5fc3VnZ2VzdGlvbnMuZmlsdGVyKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuc29tZSgoaXRlbSkgPT4gZXF1YWwoaXRlbS52YWx1ZSwgdmFsdWUudmFsdWUpKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaXNMaXN0ID0gISF0YXJnZXQuY2xvc2VzdCgnLmZkcC1tdWx0aS1jb21ib2JveF9fbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgICAgIGlmIChpc0xpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNob3dMaXN0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHNldCBpbnB1dCB0ZXh0IGFzIGl0ZW0gbGFiZWwuXG4gICAgICovXG4gICAgc2V0SW5wdXRUZXh0RnJvbU9wdGlvbkl0ZW0oaXRlbTogT3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IGl0ZW0ubGFiZWw7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dMaXN0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQ/LnNldEl0ZW1BY3RpdmUoaW5kZXggLSAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8uc2V0SXRlbUFjdGl2ZShpbmRleCArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0QWxsSXRlbXMoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0QWxsSXRlbXModHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uT3B0aW9uQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkxpc3RFbGVtZW50Q2xpY2tlZChldmVudCwgaW5kZXgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkT25DbGlja2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZE9uQnV0dG9uQ2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5vblByaW1hcnlCdXR0b25DbGljayh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYXBwbHlpbmcgcmFuZ2Ugc2VsZWN0aW9uLiBOb3RlLCB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGFmdGVyIGNvbWJvYm94IGl0ZW0ncyB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25MaXN0RWxlbWVudENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhdCB0aGlzIHBvaW50LCBzbyBpdCBjYW4gYmUgc2FmZWx5IHVzZWRcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLl9zdWdnZXN0aW9uc1tpbmRleF0uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKGluZGV4LCBldmVudCk7XG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9zdWdnZXN0aW9uc1tpZHhdO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuc2VsZWN0ZWQgIT09IHNlbGVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZpbmcgZnJvbSBcIl9zZWxlY3RlZFN1Z2dlc3Rpb25zXCIgbGlzdFxuICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZVNldC5hZGQoY3VycmVudC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkaW5nIGN1cnJlbnQgaXRlbSB0byBcIl9zZWxlY3RlZFN1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5maWx0ZXIoKHMpID0+ICF0b1JlbW92ZVNldC5oYXMocy52YWx1ZSkpO1xuICAgICAgICAvLyBzZWxlY3RlZCBpdGVtcyBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIG9wdGlvbnNcbiAgICAgICAgY29uc3QgdmFsdWVJbmRleGVzID0gbmV3IE1hcDxhbnksIG51bWJlcj4odGhpcy5fc3VnZ2VzdGlvbnMubWFwKChzLCBpKSA9PiBbcy52YWx1ZSwgaV0pKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5zb3J0KChhLCBiKSA9PiB2YWx1ZUluZGV4ZXMuZ2V0KGEudmFsdWUpISAtIHZhbHVlSW5kZXhlcy5nZXQoYi52YWx1ZSkhKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLm9uUmVzaXplKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplci50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKGJhY2t1cDogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zID0gWy4uLmJhY2t1cF07XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2hvd24kLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNob3dMaXN0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VG9rZW5JbmRleEJ5SWRsT3JWYWx1ZShpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmlkID09PSBpdGVtLmlkIHx8IGVxdWFsKHRva2VuLnZhbHVlLCBpdGVtLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXBBbmRVcGRhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICAvLyBzZXR0aW5nIHZhbHVlLCBpdCB3aWxsIGNhbGwgc2V0VmFsdWUoKVxuICAgICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWRJdGVtcztcblxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb3BhZ2F0ZUNoYW5nZShlbWl0SW5Nb2JpbGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZW1pdEluTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fbWFwQW5kVXBkYXRlTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1VTFRJQ09NQk9CT1hfQ09NUE9ORU5ULCB1c2VWYWx1ZTogdGhpcyB9XSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY01vZHVsZShcbiAgICAgICAgICAgIHsgbGlzdFRlbXBsYXRlOiB0aGlzLmxpc3RUZW1wbGF0ZSwgY29udHJvbFRlbXBsYXRlOiB0aGlzLm1vYmlsZUNvbnRyb2xUZW1wbGF0ZSB9LFxuICAgICAgICAgICAgUGxhdGZvcm1NdWx0aUNvbWJvYm94TW9iaWxlTW9kdWxlLFxuICAgICAgICAgICAgTXVsdGlDb21ib2JveE1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBpbmplY3RvclxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZHAtbXVsdGktY29tYm9ib3hcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiICpuZ0lmPVwibW9iaWxlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAqbmdJZj1cIiFtb2JpbGVcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtcG9wb3Zlci1jdXN0b20tbGlzdCBmZHAtbXVsdGktY29tYm9ib3hfX2xpc3QtY29udGFpbmVyXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJwb3BvdmVyT3BlbkNoYW5nZUhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW3N0eWxlLndpZHRoLiVdPVwiIWF1dG9SZXNpemUgJiYgMTAwXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuICAgICAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgIFtpZF09XCJpZCArICctaW5wdXQtZ3JvdXAtY29udGFpbmVyJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC1tdWx0aS1jb21ib2JveC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIFtidXR0b25dPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtnbHlwaF09XCIhcmVhZG9ubHkgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICcgJ1wiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtpc0V4cGFuZGVkXT1cIiFtb2JpbGUgJiYgaXNPcGVuICYmIF9zdWdnZXN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiYWRkb25JY29uVGl0bGUgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJfYWRkT25DbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiAhaXNPcGVuICYmIG9uUHJpbWFyeUJ1dHRvbkNsaWNrKGZhbHNlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJuYXZpZ2F0ZUJ5VG9rZW5zKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtdG9rZW5pemVyXG4gICAgICAgICAgICAgICAgI3Rva2VuaXplclxuICAgICAgICAgICAgICAgIFtjb21wYWN0Q29sbGFwc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJfc2VsZWN0ZWRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Rva2VuaXplckZvY3VzYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtbXVsdGktY29tYm9ib3gtdG9rZW5pemVyLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgKG1vcmVDbGlja2VkRXZlbnQpPVwibW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXRva2VuXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwicmVtb3ZlVG9rZW4odG9rZW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdG9rZW4gb2YgX3NlbGVjdGVkU3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgdG9rZW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuXG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICNzZWFyY2hJbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgZmRwLWF1dG8tY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwib25Db21wbGV0ZVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIl9zdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gaWQgKyAnLXJlc3VsdCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFRlcm1DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Ub3VjaGVkKCk7IHRva2VuaXplci5fc2hvd0FsbFRva2VucygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiIW1vYmlsZSAmJiBvbkJsdXIoJGV2ZW50KTsgdG9rZW5pemVyLl9oaWRlVG9rZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10b2tlbml6ZXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9mZC10b2tlbml6ZXI+XG4gICAgICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG5cbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZVxuICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGUgJiYgaXNPcGVuID8gZmFsc2UgOiAhIXN0YXRlTWVzc2FnZVwiXG4gICAgICAgICAgICBbdHlwZV09XCJzdGF0ZVwiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cInN0YXRlTWVzc2FnZVwiXG4gICAgICAgID48L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICA8L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlQ29udHJvbFRlbXBsYXRlPlxuICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICBbaWRdPVwiaWQgKyAnLWlucHV0LWdyb3VwLWNvbnRhaW5lcidcIlxuICAgICAgICBjbGFzcz1cImZkcC1tdWx0aS1jb21ib2JveC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBpc09wZW4gJiYgX3N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBmZHAtYXV0by1jb21wbGV0ZVxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwib25Db21wbGV0ZVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJfc3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgW2lucHV0VGV4dF09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/IGlkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoVGVybUNoYW5nZWQoKVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIChibHVyKT1cIiFtb2JpbGUgJiYgb25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBbaGFzTWVzc2FnZV09XCIhIXN0YXRlTWVzc2FnZVwiXG4gICAgICAgIChmb2N1c0VzY2FwZUxpc3QpPVwiaGFuZGxlTGlzdEZvY3VzRXNjYXBlKCRldmVudClcIlxuICAgICAgICBbZHJvcGRvd25Nb2RlXT1cInRydWVcIlxuICAgICAgICBjbGFzcz1cImZkcC1tdWx0aS1jb21ib2JveF9fbGlzdCBmZC1saXN0LS1tdWx0aS1pbnB1dFwiXG4gICAgICAgIFtpZF09XCJpZCArICctcmVzdWx0J1wiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aF09XCIhbW9iaWxlICYmIG1pbldpZHRoICsgJ3B4J1wiXG4gICAgICAgIFtzdHlsZS5tYXhXaWR0aF09XCJhdXRvUmVzaXplICYmIG1heFdpZHRoICsgJ3B4J1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctc2VhcmNoJ1wiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICpuZ0lmPVwic3RhdGVNZXNzYWdlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RhdGVNZXNzYWdlXCJcbiAgICAgICAgICAgIGZkLWxpc3QtbWVzc2FnZVxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgIFt0eXBlXT1cInN0YXRlIHx8ICdkZWZhdWx0J1wiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cInN0YXRlTWVzc2FnZVwiXG4gICAgICAgID48L2xpPlxuXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR3JvdXBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIF9zdWdnZXN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBJdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZkLWxpc3QtaXRlbSBmZC1saXN0LWdyb3VwLWhlYWRlciByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgZ3JvdXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBJdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IGxhYmVsOiBncm91cC5sYWJlbCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbkl0ZW0gb2YgZ3JvdXAuY2hpbGRyZW47IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFtb2JpbGUgJiYgY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlEb3duKT1cIm9uSXRlbUtleURvd25IYW5kbGVyKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiISFvcHRpb25JdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2hlY2tib3hDbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0aW9uKG9wdGlvbkl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbkl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbkl0ZW06IG9wdGlvbkl0ZW0sIGluZGV4OiBpIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzR3JvdXBcIj5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25JdGVtIG9mIF9zdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhbW9iaWxlICYmIG9uT3B0aW9uQ2xpY2tlZCgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAoa2V5RG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiISFvcHRpb25JdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2hlY2tib3hDbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25JdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uSXRlbTogb3B0aW9uSXRlbSwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uSXRlbT1cIm9wdGlvbkl0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiICNsaXN0SXRlbT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwib3B0aW9uSXRlbS5zZWxlY3RlZCAmJiAhIXNlbGVjdGVkSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbkl0ZW0udmFsdWUsIGluZGV4OiBpbmRleCB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShvcHRpb25JdGVtLnNlbGVjdGVkICYmIHNlbGVjdGVkSXRlbVRlbXBsYXRlKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25JdGVtU291cmNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbkl0ZW06IG9wdGlvbkl0ZW0sIGluZGV4OiBpbmRleCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlY29uZGFyeVRleHRTb3VyY2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uSXRlbTogb3B0aW9uSXRlbSB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1vcHRpb25JdGVtPVwib3B0aW9uSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgI29wdGlvbkl0ZW1Tb3VyY2U+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFvcHRpb25JdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm9wdGlvbkl0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJvcHRpb25JdGVtLmxhYmVsIHwgaGlnaGxpZ2h0IDogaW5wdXRUZXh0XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25JdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uSXRlbS52YWx1ZSwgaW5kZXg6IGluZGV4IH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LW9wdGlvbkl0ZW09XCJvcHRpb25JdGVtXCIgI3NlY29uZGFyeVRleHRTb3VyY2U+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTZWNvbmRhcnlUZXh0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2Vjb25kYXJ5SXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cInNlY29uZGFyeVRleHRBbGlnbm1lbnRcIlxuICAgICAgICAgICAgICAgIGZkLWxpc3Qtc2Vjb25kYXJ5XG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwib3B0aW9uSXRlbS5zZWNvbmRhcnlUZXh0XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm9wdGlvbkl0ZW0uc2Vjb25kYXJ5VGV4dCB8IGhpZ2hsaWdodCA6IGlucHV0VGV4dFwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Vjb25kYXJ5SXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2Vjb25kYXJ5SXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbkl0ZW0udmFsdWUgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -3,6 +3,7 @@ import { ControlContainer, NgControl, NgForm } from '@angular/forms';
3
3
  import { BaseInput, PlatformFormFieldControl, PlatformFormField } from '@fundamental-ngx/platform/shared';
4
4
  import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
5
5
  import { FD_FORM_FIELD, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';
6
+ import { warnOnce } from '@fundamental-ngx/cdk/utils';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/forms";
8
9
  import * as i2 from "@fundamental-ngx/core/content-density";
@@ -38,13 +39,13 @@ export class PlatformFileUploaderComponent extends BaseInput {
38
39
  * set state of individual checkbox. Used by CBG to set checkbox states */
39
40
  set stateType(state) {
40
41
  if (isDevMode()) {
41
- console.warn('"stateType" is deprecated. Use "state" instead');
42
+ warnOnce('"stateType" is deprecated. Use "state" instead');
42
43
  }
43
44
  super.state = state;
44
45
  }
45
46
  get stateType() {
46
47
  if (isDevMode()) {
47
- console.warn('"stateType" is deprecated. Use "state" instead');
48
+ warnOnce('"stateType" is deprecated. Use "state" instead');
48
49
  }
49
50
  return super.state;
50
51
  }
@@ -156,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
156
157
  }], value: [{
157
158
  type: Input
158
159
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9wbGF0Zm9ybS1maWxlLXVwbG9hZGVyL3BsYXRmb3JtLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vcGxhdGZvcm0tZmlsZS11cGxvYWRlci9wbGF0Zm9ybS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFFVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixRQUFRLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBYyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFHOUYsTUFBTSxPQUFPLDhCQUE4QjtJQUN2Qzs7OztPQUlHO0lBQ0gsWUFDVyxNQUFxQyxFQUNyQyxPQUFlLENBQUMseUJBQXlCOztRQUR6QyxXQUFNLEdBQU4sTUFBTSxDQUErQjtRQUNyQyxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQ3ZCLENBQUM7Q0FDUDtBQUVELE1BQU0sT0FBTyxn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MkZEa0NhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBRVosdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLCtCQUErQixFQUFFLENBQUM7OzBCQW9GekMsUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUNwQixRQUFROzswQkFBSSxRQUFROzswQkFDcEIsUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFDcEQsUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUI7aUZBbkZqRSxXQUFXO3NCQURWLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQU9GLFNBQVM7c0JBRFosS0FBSztnQkFnQk4sZUFBZTtzQkFEZCxNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFnQkgsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCYXNlSW5wdXQsIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCwgUGxhdGZvcm1Gb3JtRmllbGQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRlckludmFsaWRDaGFuZ2VFdmVudCB7XG4gICAgLyoqXG4gICAgICogRmlsZSBVcGxvYWRlciBpbnZhbGlkIGNoYW5nZSBldmVudFxuICAgICAqIEBwYXJhbSBzb3VyY2UgRmlsZSBVcGxvYWRlciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc291cmNlOiBQbGF0Zm9ybUZpbGVVcGxvYWRlckNvbXBvbmVudCxcbiAgICAgICAgcHVibGljIHBheWxvYWQ6IEZpbGVbXSAvLyBDb250YWlucyBzZWxlY3RlZCBpdGVtXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZGVyU2VsZWN0aW9uQ2hhbmdlRXZlbnQge1xuICAgIC8qKlxuICAgICAqIEZpbGUgVXBsb2FkZXIgaW52YWxpZCBjaGFuZ2UgZXZlbnRcbiAgICAgKiBAcGFyYW0gc291cmNlIEZpbGUgVXBsb2FkZXIgY29tcG9uZW50XG4gICAgICogQHBhcmFtIHBheWxvYWQgVmFsdWVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNvdXJjZTogUGxhdGZvcm1GaWxlVXBsb2FkZXJDb21wb25lbnQsXG4gICAgICAgIHB1YmxpYyBwYXlsb2FkOiBGaWxlW10gLy8gQ29udGFpbnMgc2VsZWN0ZWQgaXRlbVxuICAgICkge31cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZmlsZS11cGxvYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BsYXRmb3JtLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV1cbn0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1GaWxlVXBsb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKiBCdXR0b24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgZm9yIGlucHV0IGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25BcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogV2hldGhlciB0aGUgZmlsZSBpbnB1dCBhY2NlcHRzIGRyYWcgYW5kIGRyb3BwZWQgZmlsZXMuICovXG4gICAgQElucHV0KClcbiAgICBkcmFnbmRyb3AgPSB0cnVlO1xuXG4gICAgLyoqIE1heCBmaWxlIHNpemUgaW4gYnl0ZXMgdGhhdCB0aGUgaW5wdXQgd2lsbCBhY2NlcHQuICovXG4gICAgQElucHV0KClcbiAgICBtYXhGaWxlU2l6ZSA9ICcnO1xuXG4gICAgLyoqIE1pbiBmaWxlIHNpemUgaW4gYnl0ZXMgdGhhdCB0aGUgaW5wdXQgd2lsbCBhY2NlcHQuICovXG4gICAgQElucHV0KClcbiAgICBtaW5GaWxlU2l6ZSA9ICcnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGZpbGUgaW5wdXQgc2hvdWxkIGFjY2VwdCBtdWx0aXBsZSBmaWxlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpcGxlID0gdHJ1ZTtcblxuICAgIC8qKiBBY2NlcHRlZCBmaWxlIGV4dGVuc2lvbnMuIEZvcm1hdDogYCcucG5nLC5qcGcnYC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjY2VwdDogc3RyaW5nO1xuXG4gICAgLyoqIFNwZWNpZmllcyBudW1iZXIgb2YgZmlsZXMgdG8gYWxsb3cgdG8gc2VsZWN0ICovXG4gICAgQElucHV0KClcbiAgICBmaWxlTGltaXQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogc2V0IHN0YXRlIG9mIGluZGl2aWR1YWwgY2hlY2tib3guIFVzZWQgYnkgQ0JHIHRvIHNldCBjaGVja2JveCBzdGF0ZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGF0ZVR5cGUoc3RhdGU6IEZvcm1TdGF0ZXMpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1wic3RhdGVUeXBlXCIgaXMgZGVwcmVjYXRlZC4gVXNlIFwic3RhdGVcIiBpbnN0ZWFkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gICAgZ2V0IHN0YXRlVHlwZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1wic3RhdGVUeXBlXCIgaXMgZGVwcmVjYXRlZC4gVXNlIFwic3RhdGVcIiBpbnN0ZWFkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdmFsaWQgZmlsZSBpcyB1cGxvZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbGVVcGxvYWRlclNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8RmlsZVVwbG9hZGVyU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBpbnZhbGlkIGZpbGUgaXMgdXBsb2RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpbnZhbGlkRmlsZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbGVVcGxvYWRlckludmFsaWRDaGFuZ2VFdmVudD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPEZpbGVVcGxvYWRlckludmFsaWRDaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBGaWxlcyB1cGxhZGVkIGhpZGRlbiBmaWVsZCB0byBzdG9yZSBmaWxlIGRhdGEgKi9cbiAgICBmaWxlczogRmlsZVtdO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IEZpbGUpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdmFsdWUgZmlsZSBkYXRhKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRmlsZSkge1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBGaWxlIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcmVhZG9ubHkgY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICBzdXBlcihfY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGUgdmFsaWQgZmlsZSBjaGFuZ2VzIGV2ZW50IGhhbmRsZXIgKi9cbiAgICBoYW5kbGVGaWxlQ2hhbmdlKGZpbGVBcnJheTogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlQXJyYXk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEZpbGVVcGxvYWRlclNlbGVjdGlvbkNoYW5nZUV2ZW50KHRoaXMsIHRoaXMuZmlsZXMpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGludmFsaWQgZmlsZSBjaGFuZ2VzIGV2ZW50IGhhbmRsZXIgKi9cbiAgICBoYW5kbGVJbnZhbGlkRmlsZXMoZmlsZUFycmF5OiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlcyA9IGZpbGVBcnJheTtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRmlsZVVwbG9hZGVySW52YWxpZENoYW5nZUV2ZW50KHRoaXMsIHRoaXMuZmlsZXMpO1xuICAgICAgICB0aGlzLmludmFsaWRGaWxlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cbn1cbiIsIjxmZC1maWxlLXVwbG9hZGVyXG4gICAgW2lkXT1cImlkXCJcbiAgICBbYXJpYUxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2FyaWFMYWJlbGxlZEJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtidXR0b25MYWJlbF09XCJidXR0b25MYWJlbFwiXG4gICAgW2J1dHRvbkFyaWFMYWJlbF09XCJidXR0b25BcmlhTGFiZWxcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgW21heEZpbGVTaXplXT1cIm1heEZpbGVTaXplXCJcbiAgICBbbWluRmlsZVNpemVdPVwibWluRmlsZVNpemVcIlxuICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbd2lkdGhdPVwid2lkdGhcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIChzZWxlY3RlZEludmFsaWRGaWxlcyk9XCJoYW5kbGVJbnZhbGlkRmlsZXMoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGVkRmlsZXNDaGFuZ2VkKT1cImhhbmRsZUZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4+PC9mZC1maWxlLXVwbG9hZGVyPlxuIl19
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9wbGF0Zm9ybS1maWxlLXVwbG9hZGVyL3BsYXRmb3JtLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vcGxhdGZvcm0tZmlsZS11cGxvYWRlci9wbGF0Zm9ybS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFFVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixRQUFRLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBYyxNQUFNLDRCQUE0QixDQUFDO0FBQzlGLE9BQU8sRUFBWSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBRWhFLE1BQU0sT0FBTyw4QkFBOEI7SUFDdkM7Ozs7T0FJRztJQUNILFlBQ1csTUFBcUMsRUFDckMsT0FBZSxDQUFDLHlCQUF5Qjs7UUFEekMsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsWUFBTyxHQUFQ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LENBQUMsaURDbkRsRCx3bUJBbUJBOzsyRkRrQ2EsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLG1CQUFtQixtQkFFWix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsK0JBQStCLEVBQUUsQ0FBQzs7MEJBb0Z6QyxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsUUFBUTs7MEJBQUksUUFBUTs7MEJBQ3BCLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUNwQixRQUFROzswQkFBSSxRQUFROzswQkFBSSxJQUFJOzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUNwRCxRQUFROzswQkFBSSxRQUFROzswQkFBSSxJQUFJOzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQjtpRkFuRmpFLFdBQVc7c0JBRFYsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBT0YsU0FBUztzQkFEWixLQUFLO2dCQWdCTixlQUFlO3NCQURkLE1BQU07Z0JBS1AsaUJBQWlCO3NCQURoQixNQUFNO2dCQWdCSCxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBpc0Rldk1vZGUsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFNraXBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJhc2VJbnB1dCwgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLCBQbGF0Zm9ybUZvcm1GaWVsZCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IE51bGxhYmxlLCB3YXJuT25jZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRlckludmFsaWRDaGFuZ2VFdmVudCB7XG4gICAgLyoqXG4gICAgICogRmlsZSBVcGxvYWRlciBpbnZhbGlkIGNoYW5nZSBldmVudFxuICAgICAqIEBwYXJhbSBzb3VyY2UgRmlsZSBVcGxvYWRlciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc291cmNlOiBQbGF0Zm9ybUZpbGVVcGxvYWRlckNvbXBvbmVudCxcbiAgICAgICAgcHVibGljIHBheWxvYWQ6IEZpbGVbXSAvLyBDb250YWlucyBzZWxlY3RlZCBpdGVtXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZGVyU2VsZWN0aW9uQ2hhbmdlRXZlbnQge1xuICAgIC8qKlxuICAgICAqIEZpbGUgVXBsb2FkZXIgaW52YWxpZCBjaGFuZ2UgZXZlbnRcbiAgICAgKiBAcGFyYW0gc291cmNlIEZpbGUgVXBsb2FkZXIgY29tcG9uZW50XG4gICAgICogQHBhcmFtIHBheWxvYWQgVmFsdWVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNvdXJjZTogUGxhdGZvcm1GaWxlVXBsb2FkZXJDb21wb25lbnQsXG4gICAgICAgIHB1YmxpYyBwYXlsb2FkOiBGaWxlW10gLy8gQ29udGFpbnMgc2VsZWN0ZWQgaXRlbVxuICAgICkge31cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZmlsZS11cGxvYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BsYXRmb3JtLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV1cbn0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1GaWxlVXBsb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKiBCdXR0b24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgZm9yIGlucHV0IGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25BcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogV2hldGhlciB0aGUgZmlsZSBpbnB1dCBhY2NlcHRzIGRyYWcgYW5kIGRyb3BwZWQgZmlsZXMuICovXG4gICAgQElucHV0KClcbiAgICBkcmFnbmRyb3AgPSB0cnVlO1xuXG4gICAgLyoqIE1heCBmaWxlIHNpemUgaW4gYnl0ZXMgdGhhdCB0aGUgaW5wdXQgd2lsbCBhY2NlcHQuICovXG4gICAgQElucHV0KClcbiAgICBtYXhGaWxlU2l6ZSA9ICcnO1xuXG4gICAgLyoqIE1pbiBmaWxlIHNpemUgaW4gYnl0ZXMgdGhhdCB0aGUgaW5wdXQgd2lsbCBhY2NlcHQuICovXG4gICAgQElucHV0KClcbiAgICBtaW5GaWxlU2l6ZSA9ICcnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGZpbGUgaW5wdXQgc2hvdWxkIGFjY2VwdCBtdWx0aXBsZSBmaWxlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpcGxlID0gdHJ1ZTtcblxuICAgIC8qKiBBY2NlcHRlZCBmaWxlIGV4dGVuc2lvbnMuIEZvcm1hdDogYCcucG5nLC5qcGcnYC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjY2VwdDogc3RyaW5nO1xuXG4gICAgLyoqIFNwZWNpZmllcyBudW1iZXIgb2YgZmlsZXMgdG8gYWxsb3cgdG8gc2VsZWN0ICovXG4gICAgQElucHV0KClcbiAgICBmaWxlTGltaXQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogc2V0IHN0YXRlIG9mIGluZGl2aWR1YWwgY2hlY2tib3guIFVzZWQgYnkgQ0JHIHRvIHNldCBjaGVja2JveCBzdGF0ZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGF0ZVR5cGUoc3RhdGU6IEZvcm1TdGF0ZXMpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnXCJzdGF0ZVR5cGVcIiBpcyBkZXByZWNhdGVkLiBVc2UgXCJzdGF0ZVwiIGluc3RlYWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cbiAgICBnZXQgc3RhdGVUeXBlKCk6IEZvcm1TdGF0ZXMge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdcInN0YXRlVHlwZVwiIGlzIGRlcHJlY2F0ZWQuIFVzZSBcInN0YXRlXCIgaW5zdGVhZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5zdGF0ZTtcbiAgICB9XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHZhbGlkIGZpbGUgaXMgdXBsb2RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWxlVXBsb2FkZXJTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPEZpbGVVcGxvYWRlclNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gaW52YWxpZCBmaWxlIGlzIHVwbG9kZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgaW52YWxpZEZpbGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWxlVXBsb2FkZXJJbnZhbGlkQ2hhbmdlRXZlbnQ+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxGaWxlVXBsb2FkZXJJbnZhbGlkQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogRmlsZXMgdXBsYWRlZCBoaWRkZW4gZmllbGQgdG8gc3RvcmUgZmlsZSBkYXRhICovXG4gICAgZmlsZXM6IEZpbGVbXTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2wgVmFsdWUgQWNjZXNzb3JcbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBGaWxlKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHZhbHVlIGZpbGUgZGF0YSovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IEZpbGUpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogRmlsZSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIHJlYWRvbmx5IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2NkLCBlbGVtZW50UmVmLCBuZ0NvbnRyb2wsIGNvbnRyb2xDb250YWluZXIsIG5nRm9ybSwgZm9ybUZpZWxkLCBmb3JtQ29udHJvbCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIHZhbGlkIGZpbGUgY2hhbmdlcyBldmVudCBoYW5kbGVyICovXG4gICAgaGFuZGxlRmlsZUNoYW5nZShmaWxlQXJyYXk6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZUFycmF5O1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBGaWxlVXBsb2FkZXJTZWxlY3Rpb25DaGFuZ2VFdmVudCh0aGlzLCB0aGlzLmZpbGVzKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBpbnZhbGlkIGZpbGUgY2hhbmdlcyBldmVudCBoYW5kbGVyICovXG4gICAgaGFuZGxlSW52YWxpZEZpbGVzKGZpbGVBcnJheTogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlQXJyYXk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEZpbGVVcGxvYWRlckludmFsaWRDaGFuZ2VFdmVudCh0aGlzLCB0aGlzLmZpbGVzKTtcbiAgICAgICAgdGhpcy5pbnZhbGlkRmlsZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG59XG4iLCI8ZmQtZmlsZS11cGxvYWRlclxuICAgIFtpZF09XCJpZFwiXG4gICAgW2FyaWFMYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthcmlhTGFiZWxsZWRCeV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbYnV0dG9uTGFiZWxdPVwiYnV0dG9uTGFiZWxcIlxuICAgIFtidXR0b25BcmlhTGFiZWxdPVwiYnV0dG9uQXJpYUxhYmVsXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgIFttYXhGaWxlU2l6ZV09XCJtYXhGaWxlU2l6ZVwiXG4gICAgW21pbkZpbGVTaXplXT1cIm1pbkZpbGVTaXplXCJcbiAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW3dpZHRoXT1cIndpZHRoXCJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAoc2VsZWN0ZWRJbnZhbGlkRmlsZXMpPVwiaGFuZGxlSW52YWxpZEZpbGVzKCRldmVudClcIlxuICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlZCk9XCJoYW5kbGVGaWxlQ2hhbmdlKCRldmVudClcIlxuPjwvZmQtZmlsZS11cGxvYWRlcj5cbiJdfQ==