@libs-ui/components-list 0.2.313-0 → 0.2.315-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.
@@ -328,38 +328,72 @@ export class LibsUiComponentsListComponent {
328
328
  if (!configInput) {
329
329
  return {};
330
330
  }
331
- const serviceOther = configInput.httpRequestData?.()?.serviceOther;
332
- const serviceOtherRequestAllIdSelectOrUnSelect = configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.()?.serviceOther;
333
- if (serviceOther) {
331
+ const objectInstance = configInput.httpRequestData?.()?.objectInstance;
332
+ const serviceClass = configInput.httpRequestData?.()?.serviceClass;
333
+ const serviceOtherRequestAllIdSelectOrUnSelect = configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.()?.objectInstance;
334
+ const serviceClassRequestAllIdSelectOrUnSelect = configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.()?.serviceClass;
335
+ if (objectInstance) {
334
336
  configInput.httpRequestData?.update((current) => {
335
- delete current.serviceOther;
337
+ delete current.objectInstance;
338
+ return current;
339
+ });
340
+ }
341
+ if (serviceClass) {
342
+ configInput.httpRequestData?.update((current) => {
343
+ delete current.serviceClass;
336
344
  return current;
337
345
  });
338
346
  }
339
347
  if (serviceOtherRequestAllIdSelectOrUnSelect) {
340
348
  configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.update((current) => {
341
- delete current.serviceOther;
349
+ delete current.objectInstance;
350
+ return current;
351
+ });
352
+ }
353
+ if (serviceClassRequestAllIdSelectOrUnSelect) {
354
+ configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.update((current) => {
355
+ delete current.serviceClass;
342
356
  return current;
343
357
  });
344
358
  }
345
359
  const config = cloneDeep(configInput);
346
- if (serviceOther && config.httpRequestData) {
360
+ if (objectInstance && config.httpRequestData) {
361
+ config.httpRequestData.update((current) => {
362
+ current.objectInstance = objectInstance;
363
+ return current;
364
+ });
365
+ configInput.httpRequestData?.update((current) => {
366
+ current.objectInstance = objectInstance;
367
+ return current;
368
+ });
369
+ }
370
+ if (serviceClass && config.httpRequestData) {
347
371
  config.httpRequestData.update((current) => {
348
- current.serviceOther = serviceOther;
372
+ current.serviceClass = serviceClass;
349
373
  return current;
350
374
  });
351
375
  configInput.httpRequestData?.update((current) => {
352
- current.serviceOther = serviceOther;
376
+ current.serviceClass = serviceClass;
377
+ return current;
378
+ });
379
+ }
380
+ if (serviceClassRequestAllIdSelectOrUnSelect && config.configTemplateCheckbox) {
381
+ config.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.update((current) => {
382
+ current.serviceClass = serviceClassRequestAllIdSelectOrUnSelect;
383
+ return current;
384
+ });
385
+ configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.update((current) => {
386
+ current.serviceClass = serviceClassRequestAllIdSelectOrUnSelect;
353
387
  return current;
354
388
  });
355
389
  }
356
390
  if (serviceOtherRequestAllIdSelectOrUnSelect && config.configTemplateCheckbox) {
357
391
  config.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.update((current) => {
358
- current.serviceOther = serviceOther;
392
+ current.objectInstance = objectInstance;
359
393
  return current;
360
394
  });
361
395
  configInput.configTemplateCheckbox?.()?.httpRequestAllIdSelectOrUnSelect?.update((current) => {
362
- current.serviceOther = serviceOther;
396
+ current.objectInstance = objectInstance;
363
397
  return current;
364
398
  });
365
399
  }
@@ -383,4 +417,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
383
417
  type: Component,
384
418
  args: [{ selector: 'libs_ui-components-list', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TranslateModule, LibsUiComponentsLabelComponent, LibsUiComponentsInputsSearchComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsButtonComponent], template: "<div\n #listViewContainer\n class=\"flex flex-col\"\n [class.w-full]=\"!maxItemShow()\"\n [class.h-full]=\"!maxItemShow()\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || loading() || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\" />\n }\n @if (!hiddenInputSearch()) {\n <libs_ui-components-inputs-search\n [searchConfig]=\"searchConfig()\"\n [class.px-[12px]]=\"searchPadding()\"\n [class]=\"searchConfig().classCoverInputSearch\"\n [disable]=\"disable() || loading() || false\"\n (outSearch)=\"handlerSearch($event)\"\n (outFunctionsControl)=\"handlerFunctionControlInputSearch($event)\" />\n }\n @if (config()?.configDescriptionGroup?.(); as description) {\n <div [class]=\"description?.classInclude\">\n <libs_ui-components-popover [config]=\"description?.tooltipDescription()\">\n <div [class]=\"description?.classTextDescriptionInclude\">{{ description.textDescription }}</div>\n </libs_ui-components-popover>\n </div>\n }\n @if (!hiddenInputSearch() && hasDivider() && (!config()?.ignoreShowDataWhenNotSearch || keySearchStore())) {\n <div\n class=\"libs-ui-border-top-general {{ dividerClassInclude() ? dividerClassInclude() : '' }}\"\n [class.libs-ui-divider-default]=\"!!searchPadding() && !dividerClassInclude()\"></div>\n }\n <div class=\"flex flex-col {{ config()?.ignoreShowDataWhenNotSearch && keySearchStore() && !config()?.ignoreFixHeightShowDataWhenNotSearch ? 'h-[353px]' : 'h-full' }}\">\n <div\n #contentContainer\n class=\"w-full h-full {{ backgroundListCustom() }}\"\n [class.libs-ui-disable]=\"disable() && disableLabel()\"\n [class.pointer-events-none]=\"disable() && disableLabel()\"></div>\n\n @for (buttonOther of buttonsOther(); track $index) {\n <div\n class=\"bg-[#ffffff] libs-ui-border-top-general\"\n [class.rounded-b-[4px]]=\"$last && !hasButtonUnSelectOption()\">\n <libs_ui-components-buttons-button\n [type]=\"buttonOther.type || 'button-link-primary'\"\n [label]=\"buttonOther.label || ' '\"\n [classIconLeft]=\"(buttonOther.classIconLeft || '') + ' flex mr-[8px] text-[16px]'\"\n classInclude=\"w-full text-left rounded-0 {{ buttonOther.classInclude ? buttonOther.classInclude : '' }}\"\n classLabel=\"libs-ui-font-h5r whitespace-normal\"\n [disable]=\"buttonOther.disable || disable() || loading() || false\"\n (outClick)=\"handlerClickButtonOther(buttonOther)\" />\n </div>\n }\n @if (hasButtonUnSelectOption()) {\n <div class=\"bg-[#ffffff] rounded-b-[4px] libs-ui-border-top-general\">\n <libs_ui-components-buttons-button\n label=\"i18n_unselect_option\"\n type=\"button-link-danger-high\"\n classIconLeft=\"flex mr-[8px] libs-ui-icon-close\"\n classInclude=\"w-full text-left rounded-0\"\n classLabel=\"libs-ui-font-h5r whitespace-normal\"\n [disable]=\"disableButtonUnSelectOption() || disable() || loading() || false\"\n (outClick)=\"handlerRemoveKeySelected()\" />\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\" />\n }\n</div>\n\n<ng-template #templateValidate>\n @if (isErrorRequired()) {\n <div\n [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span\n class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID | translate: validRequired()?.interpolateParams\"></span>\n </div>\n }\n</ng-template>\n", styles: [":host{background-color:#fff}:host ::ng-deep .libs-ui-list-highlight-text-search{background-color:#ffdb80;border-radius:2px;display:inline-block;overflow:unset}.libs-ui-divider-default{width:calc(100% - 24px);margin:12px auto 0}\n"] }]
385
419
  }], ctorParameters: () => [] });
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUF5QixNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDck0sT0FBTyxFQUFXLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckcsT0FBTyxFQUFzQixxQ0FBcUMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTlHLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBYyxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBY3ZFLE1BQU0sT0FBTyw2QkFBNkI7SUFD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WUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBM1pVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLCsxTEM1QjFDLDQ5SkEyR0EsK1JEakZZLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLDhCQUE4Qiw0cUJBQUUscUNBQXFDLG9WQUFFLGdDQUFnQyxvZ0JBQUUsc0NBQXNDOzs0RkFFakwsNkJBQTZCO2tCQVR6QyxTQUFTOytCQUVFLHlCQUF5QixjQUd2QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsOEJBQThCLEVBQUUscUNBQXFDLEVBQUUsZ0NBQWdDLEVBQUUsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgZWZmZWN0LCBFZmZlY3RSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQnV0dG9uLCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1pbnB1dCc7XG5pbXBvcnQgeyBJSW5wdXRTZWFyY2hDb25maWcsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1zZWFyY2gnO1xuaW1wb3J0IHsgSVZhbGlkUmVxdWlyZWQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZCc7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgSVBhZ2luZywgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBpc0VtcHR5LCBpc0VxdWFsLCBpc05pbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0Q29tcG9uZW50QnlUeXBlLCBpbml0Q29uZmlnIH0gZnJvbSAnLi9kZWZpbmVzL2xpc3QuZGVmaW5lJztcbmltcG9ydCB7IElEYXRhVXBkYXRlVG9TdG9yZSwgSUxpc3RDb25maWdJdGVtLCBJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSB9IGZyb20gJy4vaW50ZXJmYWNlcy9kYXRhLWVtaXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tICcuL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1NlYXJjaENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgPSBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEO1xuICBwcm90ZWN0ZWQgZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgaXNFcnJvclJlcXVpcmVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQga2V5U2VhcmNoU3RvcmUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgb25EZXN0cm95OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblNlYXJjaDogU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblJlZnJlc2g6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uU2V0SGlkZGVuSXRlbUJ5S2V5OiBTdWJqZWN0PEFycmF5PHVua25vd24+PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXA6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uUmVtb3ZlSXRlbXM6IFN1YmplY3Q8QXJyYXk8dW5rbm93bj4+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblVwZGF0ZURhdGE6IFN1YmplY3Q8SURhdGFVcGRhdGVUb1N0b3JlPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgY2xlYW5VcEVmZmVjdCE6IEVmZmVjdFJlZjtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0PjtcbiAgcHJpdmF0ZSBjb25maWdEYXRhID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4oe1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBjb25maWdUZW1wbGF0ZVRleHQ6IHNpZ25hbCh7XG4gICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgIGdldFZhbHVlOiAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmxhYmVsIHx8IGl0ZW0ubmFtZTtcbiAgICAgIH0sXG4gICAgfSksXG4gIH0pO1xuICBwcml2YXRlIGdyb3VwTXVsdGlLZXlTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoID0gc2lnbmFsPElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaGlkZGVuSW5wdXRTZWFyY2ggPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGRyb3Bkb3duVGFiS2V5QWN0aXZlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBrZXlTZWFyY2ggPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHBhZGRpbmdMZWZ0SXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0PElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZCwgSUxpc3RDb25maWdJdGVtIHwgdW5kZWZpbmVkPih0aGlzLmNvbmZpZ0RhdGEoKSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdGhpcy5jb25maWdEYXRhKCkgfSk7XG4gIHJlYWRvbmx5IGF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGlzU2VhcmNoT25saW5lID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBzZWFyY2hDb25maWcgPSBpbnB1dDxJSW5wdXRTZWFyY2hDb25maWcsIElJbnB1dFNlYXJjaENvbmZpZyB8IHVuZGVmaW5lZD4oe30sIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHt9IH0pO1xuICByZWFkb25seSBzZWFyY2hQYWRkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGl2aWRlckNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaGFzRGl2aWRlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBidXR0b25zT3RoZXIgPSBpbnB1dDxBcnJheTxJQnV0dG9uPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaGFzQnV0dG9uVW5TZWxlY3RPcHRpb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBiYWNrZ3JvdW5kTGlzdEN1c3RvbSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignYmctWyNmZmZmZmZdJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ2JnLVsjZmZmZmZmXScgfSk7XG4gIHJlYWRvbmx5IG1heEl0ZW1TaG93ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IG11bHRpS2V5U2VsZWN0ZWQgPSBpbnB1dDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgLy8gbMawdSDDvSBraGkgc+G7rSBk4bulbmcgbGlzdHZpZXdcbiAgcmVhZG9ubHkga2V5c0Rpc2FibGVJdGVtID0gaW5wdXQ8QXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGtow7RuZyBkw7luZyBnacOhIHRy4buLIG7DoHkga+G6v3QgaOG7o3AgduG7m2kgdGVtcGxhdGUgY2hlY2tib3ggY8OzIGNvbmZpZyBjaOG7qWEgY29uZmlnQ2hlY2tib3hDaGVja0FsbFxuICByZWFkb25seSBrZXlzSGlkZGVuSXRlbSA9IGlucHV0PEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgZm9jdXNJbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHNraXBGb2N1c0lucHV0V2hlbktleVNlYXJjaFN0b3JlVW5kZWZpbmVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0ID0gaW5wdXQ8KCgpID0+IEFycmF5PGFueT4pIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SVZhbGlkUmVxdWlyZWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHNob3dWYWxpZGF0ZUJvdHRvbSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbG9hZGluZ0ljb25TaXplID0gaW5wdXQ8J2xhcmdlJyB8ICdtZWRpdW0nIHwgJ3NtYWxsJyB8ICdzbWFsbGVyJyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHJlc2V0S2V5V2hlblNlbGVjdEFsbEtleURyb3Bkb3duID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQ2xhc3NEaXNhYmxlRGVmYXVsdFdoZW5Vc2VLZXlzRGlzYWJsZUl0ZW0gPSBpbnB1dDxib29sZWFuPigpOyAvLyBi4buPIGNo4bq/IMSR4buZIGRpc2FibGUgaXRlbSB0csOqbiBodG1sIMSR4buDIGRpc2FibGUgdOG7q25nIHBo4bqnbiB0cm9uZyByb3dzXG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0U2VsZWN0S2V5ID0gb3V0cHV0PElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQ+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNo4buNbiAxXG4gIHJlYWRvbmx5IG91dFNlbGVjdE11bHRpS2V5ID0gb3V0cHV0PElMaXN0RGF0YUVtaXRNdWx0aUtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgY2hvIHBow6lwIGNo4buNbiBuaGnhu4F1LlxuICByZWFkb25seSBvdXRVblNlbGVjdE11bHRpS2V5ID0gb3V0cHV0PEFycmF5PHVua25vd24+PigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uT3RoZXIgPSBvdXRwdXQ8SUJ1dHRvbj4oKTtcbiAgcmVhZG9ubHkgb3V0RmllbGRLZXkgPSBvdXRwdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VWaWV3ID0gb3V0cHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IG91dEtleVNlYXJjaCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRpbmcgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3ZlciA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRMb2FkSXRlbXNDb21wbGV0ZSA9IG91dHB1dDx7IGl0ZW1zOiBBcnJheTxhbnk+OyBwYWdpbmc/OiBJUGFnaW5nIH0+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcm90ZWN0ZWQgbGlzdFZpZXdFbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdsaXN0Vmlld0NvbnRhaW5lcicpO1xuICBwcm90ZWN0ZWQgY29udGVudEVsZW1lbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRlbnRDb250YWluZXInKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsZWFuVXBFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmtleVNlYXJjaCgpO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5rZXlTZWFyY2hTdG9yZSgpID09PSB0aGlzLmtleVNlYXJjaCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5U2VhcmNoU3RvcmUuc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5vblNlYXJjaC5uZXh0KHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGtleXNEaXNhYmxlSXRlbSA9IHRoaXMua2V5c0Rpc2FibGVJdGVtKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKGtleXNEaXNhYmxlSXRlbSkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uc2V0SW5wdXQoJ2tleXNEaXNhYmxlSXRlbScsIGtleXNEaXNhYmxlSXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGtleXNIaWRkZW5JdGVtID0gdGhpcy5rZXlzSGlkZGVuSXRlbSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChrZXlzSGlkZGVuSXRlbSkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uc2V0SW5wdXQoJ2tleXNIaWRkZW5JdGVtJywga2V5c0hpZGRlbkl0ZW0pO1xuICAgICAgICAgIHRoaXMub25TZXRIaWRkZW5JdGVtQnlLZXkubmV4dChrZXlzSGlkZGVuSXRlbSBhcyBBcnJheTx1bmtub3duPik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRpc2FibGUgPSB0aGlzLmRpc2FibGUoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwoZGlzYWJsZSkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uc2V0SW5wdXQoJ2Rpc2FibGUnLCBkaXNhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5U2VsZWN0ZWQgPSB0aGlzLmtleVNlbGVjdGVkKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKGtleVNlbGVjdGVkKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dCgna2V5U2VsZWN0ZWQnLCBrZXlTZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IG9sZE11bHRpS2V5U2VsZWN0ZWQgPSB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbXVsdGlLZXlTZWxlY3RlZCA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpO1xuICAgICAgaWYgKGlzRXF1YWwob2xkTXVsdGlLZXlTZWxlY3RlZCwgbXVsdGlLZXlTZWxlY3RlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb2xkTXVsdGlLZXlTZWxlY3RlZCA9IG11bHRpS2V5U2VsZWN0ZWQ7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKG11bHRpS2V5U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/LnNldElucHV0KCdtdWx0aUtleVNlbGVjdGVkJywgbXVsdGlLZXlTZWxlY3RlZCk7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YSgpPy50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5kcm9wZG93blRhYktleUFjdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgICBpZiAodGhpcy5rZXlTZWFyY2goKSkge1xuICAgICAgdGhpcy5rZXlTZWFyY2hTdG9yZS5zZXQodGhpcy5rZXlTZWFyY2goKSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWdEYXRhLnNldCh0aGlzLmNsb25lQ29uZmlnKGNvbmZpZykpO1xuICAgIH1cbiAgICBpbml0Q29uZmlnKHRoaXMuY29uZmlnRGF0YSgpKTtcbiAgICBjb25zdCBjb21wQ2xhc3MgPSBnZXRDb21wb25lbnRCeVR5cGUodGhpcy5jb25maWdEYXRhKCkudHlwZSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcENsYXNzKTtcblxuICAgIHRpbWVyKDApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9FbGVtZW50KHRoaXMuY29tcG9uZW50UmVmLCB0aGlzLmNvbnRlbnRFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uU2V0SGlkZGVuSXRlbUJ5S2V5JywgdGhpcy5vblNldEhpZGRlbkl0ZW1CeUtleSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NvbmZpZycsIHRoaXMuY29uZmlnRGF0YSgpKTtcblxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZygpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2VhcmNoQ29uZmlnJywgdGhpcy5zZWFyY2hDb25maWcoKSk7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdvblNlYXJjaCcsIHRoaXMub25TZWFyY2gpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdvblJlZnJlc2gnLCB0aGlzLm9uUmVmcmVzaCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uVXBkYXRlRGF0YScsIHRoaXMub25VcGRhdGVEYXRhKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5U2VhcmNoJywgdGhpcy5rZXlTZWFyY2hTdG9yZSgpID8/ICcnKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZHJvcGRvd25UYWJLZXlBY3RpdmUnLCB0aGlzLmRyb3Bkb3duVGFiS2V5QWN0aXZlKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdjbGlja0V4YWN0bHknLCB0aGlzLmNsaWNrRXhhY3RseSgpIHx8IGZhbHNlKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZGlzYWJsZScsIHRoaXMuZGlzYWJsZSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUnLCB0aGlzLmF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdwYWRkaW5nTGVmdEl0ZW0nLCB0aGlzLnBhZGRpbmdMZWZ0SXRlbSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgncmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24nLCB0aGlzLnJlc2V0S2V5V2hlblNlbGVjdEFsbEtleURyb3Bkb3duKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbScsIHRoaXMuaWdub3JlQ2xhc3NEaXNhYmxlRGVmYXVsdFdoZW5Vc2VLZXlzRGlzYWJsZUl0ZW0oKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Z1bmN0aW9uR2V0SXRlbXNBdXRvQWRkTGlzdCcsIHRoaXMuZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0KCkpO1xuICAgIGlmICh0aGlzLm1heEl0ZW1TaG93KCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdtYXhJdGVtU2hvdycsIHRoaXMubWF4SXRlbVNob3coKSk7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlTZWxlY3RlZCcsIHRoaXMua2V5U2VsZWN0ZWQoKSk7XG4gICAgaWYgKHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbXVsdGlLZXlTZWxlY3RlZCcsIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleXNEaXNhYmxlSXRlbScsIHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgfHwgW10pO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlzSGlkZGVuSXRlbScsIHRoaXMua2V5c0hpZGRlbkl0ZW0oKSB8fCBbXSk7XG4gICAgaWYgKCFpc05pbCh0aGlzLmtleVNlbGVjdGVkKCkpIHx8IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uLnNldChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdvblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cCcsIHRoaXMub25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXApO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdvblJlbW92ZUl0ZW1zJywgdGhpcy5vblJlbW92ZUl0ZW1zKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnekluZGV4JywgdGhpcy56SW5kZXgoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2lzU2VhcmNoT25saW5lJywgdGhpcy5pc1NlYXJjaE9ubGluZSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZGlzYWJsZUxhYmVsJywgdGhpcy5kaXNhYmxlTGFiZWwoKSB8fCBmYWxzZSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xvYWRpbmdJY29uU2l6ZScsIHRoaXMubG9hZGluZ0ljb25TaXplKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCd0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YScsIHRoaXMudGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSk7XG4gICAgbGV0IGtleVNlYXJjaCA9ICcnO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgIGluc3RhbmNlLm91dENoYW5nZVZpZXcuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm91dENoYW5nZVZpZXcuZW1pdChkYXRhKTtcblxuICAgICAgaWYgKHRoaXMuc2tpcEZvY3VzSW5wdXRXaGVuS2V5U2VhcmNoU3RvcmVVbmRlZmluZWQoKSAmJiBpc05pbCh0aGlzLmtleVNlYXJjaFN0b3JlKCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvY3VzSW5wdXRTZWFyY2goKSAmJiB0aGlzLmtleVNlYXJjaFN0b3JlKCkgIT09IGtleVNlYXJjaCkge1xuICAgICAgICBrZXlTZWFyY2ggPSB0aGlzLmtleVNlYXJjaFN0b3JlKCkgfHwgJyc7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXRTZWFyY2goKT8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vdXRTZWxlY3RLZXkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbi5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gICAgfSk7XG4gICAgaW5zdGFuY2Uub3V0RmllbGRLZXkuc3Vic2NyaWJlKChmaWVsZEtleT86IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5vdXRGaWVsZEtleS5lbWl0KGZpZWxkS2V5KTtcbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vdXRMb2FkaW5nLnN1YnNjcmliZSgobG9hZGluZzogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChsb2FkaW5nKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KGxvYWRpbmcpO1xuICAgIH0pO1xuICAgIGluc3RhbmNlLm91dExvYWRJdGVtc0NvbXBsZXRlLnN1YnNjcmliZSgoZXZlbnQ6IHsgaXRlbXM6IEFycmF5PGFueT47IHBhZ2luZz86IElQYWdpbmcgfSkgPT4ge1xuICAgICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KGV2ZW50KTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcoKSAmJiB0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQgJiYgdGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVUZXh0Py4oKT8uYWN0aW9uU29ydCkge1xuICAgICAgaW5zdGFuY2Uub3V0U29ydFNpbmdsZVNlbGVjdC5zdWJzY3JpYmUoKGl0ZW1Tb3J0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dCAmJiBjb25maWcuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmFjdGlvblNvcnQpIHtcbiAgICAgICAgICBjb25maWcuY29uZmlnVGVtcGxhdGVUZXh0KCk/Lml0ZW1Tb3J0Py5zZXQoaXRlbVNvcnQpO1xuICAgICAgICAgIGNvbmZpZy5jb25maWdUZW1wbGF0ZVRleHQoKT8uYWN0aW9uU29ydD8uKGl0ZW1Tb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGluc3RhbmNlLm91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyLnN1YnNjcmliZSgoZmxhZzogSUZsYWdNb3VzZSkgPT4ge1xuICAgICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGZsYWcpO1xuICAgIH0pO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbmZpZ0RhdGEoKT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAndGV4dCcgfHwgdHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnN0YW5jZS5vdXRTZWxlY3RNdWx0aUtleS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uLnNldChmYWxzZSk7XG4gICAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICB0aGlzLmdyb3VwTXVsdGlLZXlTZWxlY3RlZC5zZXQoZGF0YS5rZXlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMuY2hlY2tJc1ZhbGlkLmJpbmQodGhpcyksXG4gICAgICByZWZyZXNoOiB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0S2V5U2VsZWN0ZWQ6IHRoaXMuaGFuZGxlclJlbW92ZUtleVNlbGVjdGVkLmJpbmQodGhpcyksXG4gICAgICBnZXRSZWN0TGlzdFZpZXc6IGFzeW5jICgpID0+IHRoaXMubGlzdFZpZXdFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICByZW1vdmVJdGVtczogYXN5bmMgKGtleXMpID0+IHRoaXMub25SZW1vdmVJdGVtcy5uZXh0KGtleXMpLFxuICAgICAgdXBkYXRlRGF0YTogYXN5bmMgKGRhdGEpID0+IHRoaXMub25VcGRhdGVEYXRhLm5leHQoZGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VhcmNoKGtleVNlYXJjaDogc3RyaW5nKSB7XG4gICAgdGhpcy5rZXlTZWFyY2hTdG9yZS5zZXQoa2V5U2VhcmNoKTtcbiAgICB0aGlzLm9uU2VhcmNoLm5leHQoa2V5U2VhcmNoKTtcbiAgICB0aGlzLm91dEtleVNlYXJjaC5lbWl0KGtleVNlYXJjaCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclJlbW92ZUtleVNlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlTZWxlY3RlZCcsICcnKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbXVsdGlLZXlTZWxlY3RlZCcsIHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KHRydWUpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnRGF0YSgpPy50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICB0aGlzLm9uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwLm5leHQoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcihidXR0b246IElCdXR0b24pIHtcbiAgICB0aGlzLm91dENsaWNrQnV0dG9uT3RoZXIuZW1pdChidXR0b24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaChldmVudDogSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoLnNldChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMudmFsaWRSZXF1aXJlZCgpIHx8ICF0aGlzLmNvbmZpZygpPy50eXBlIHx8ICF0aGlzLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaXNFcnJvclJlcXVpcmVkLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWcoKT8udHlwZTtcbiAgICBsZXQgaGFzS2V5ID0gIWlzRW1wdHkodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubXVsdGlLZXlTZWxlY3RlZCgpKTtcblxuICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBoYXNLZXkgPSAhaXNFbXB0eSh0aGlzLmdyb3VwTXVsdGlLZXlTZWxlY3RlZCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0JyB8fCB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBoYXNLZXkgPSAhaXNOaWwodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5U2VsZWN0ZWQoKSk7XG4gICAgfVxuICAgIHRoaXMuaXNFcnJvclJlcXVpcmVkLnNldCghaGFzS2V5KTtcblxuICAgIHJldHVybiBoYXNLZXk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuc2V0KHRoaXMuY2xvbmVDb25maWcoY29uZmlnKSk7XG4gICAgICB0aGlzLm9uUmVmcmVzaC5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb25lQ29uZmlnKGNvbmZpZ0lucHV0OiBJTGlzdENvbmZpZ0l0ZW0pOiBJTGlzdENvbmZpZ0l0ZW0ge1xuICAgIGlmICghY29uZmlnSW5wdXQpIHtcbiAgICAgIHJldHVybiB7fSBhcyBhbnk7XG4gICAgfVxuICAgIGNvbnN0IHNlcnZpY2VPdGhlciA9IGNvbmZpZ0lucHV0Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VPdGhlcjtcbiAgICBjb25zdCBzZXJ2aWNlT3RoZXJSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0ID0gY29uZmlnSW5wdXQuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py4oKT8uc2VydmljZU90aGVyO1xuXG4gICAgaWYgKHNlcnZpY2VPdGhlcikge1xuICAgICAgY29uZmlnSW5wdXQuaHR0cFJlcXVlc3REYXRhPy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuc2VydmljZU90aGVyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VPdGhlclJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgIGNvbmZpZ0lucHV0LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50LnNlcnZpY2VPdGhlcjtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBjbG9uZURlZXAoY29uZmlnSW5wdXQpIGFzIElMaXN0Q29uZmlnSXRlbTtcblxuICAgIGlmIChzZXJ2aWNlT3RoZXIgJiYgY29uZmlnLmh0dHBSZXF1ZXN0RGF0YSkge1xuICAgICAgY29uZmlnLmh0dHBSZXF1ZXN0RGF0YS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5zZXJ2aWNlT3RoZXIgPSBzZXJ2aWNlT3RoZXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgY29uZmlnSW5wdXQuaHR0cFJlcXVlc3REYXRhPy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5zZXJ2aWNlT3RoZXIgPSBzZXJ2aWNlT3RoZXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2VydmljZU90aGVyUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCAmJiBjb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveCkge1xuICAgICAgY29uZmlnLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQuc2VydmljZU90aGVyID0gc2VydmljZU90aGVyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjb25maWdJbnB1dC5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q/LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50LnNlcnZpY2VPdGhlciA9IHNlcnZpY2VPdGhlcjtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFuVXBFZmZlY3QuZGVzdHJveSgpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmNvbXBvbmVudFJlZik7XG4gICAgdGhpcy5vblJlZnJlc2guY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblNldEhpZGRlbkl0ZW1CeUtleS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjbGlzdFZpZXdDb250YWluZXJcbiAgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCJcbiAgW2NsYXNzLnctZnVsbF09XCIhbWF4SXRlbVNob3coKVwiXG4gIFtjbGFzcy5oLWZ1bGxdPVwiIW1heEl0ZW1TaG93KClcIj5cbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBsb2FkaW5nKCkgfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKVwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgfVxuXG4gIEBpZiAoIXNob3dWYWxpZGF0ZUJvdHRvbSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlVmFsaWRhdGVcIiAvPlxuICB9XG4gIEBpZiAoIWhpZGRlbklucHV0U2VhcmNoKCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1zZWFyY2hcbiAgICAgIFtzZWFyY2hDb25maWddPVwic2VhcmNoQ29uZmlnKClcIlxuICAgICAgW2NsYXNzLnB4LVsxMnB4XV09XCJzZWFyY2hQYWRkaW5nKClcIlxuICAgICAgW2NsYXNzXT1cInNlYXJjaENvbmZpZygpLmNsYXNzQ292ZXJJbnB1dFNlYXJjaFwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgbG9hZGluZygpIHx8IGZhbHNlXCJcbiAgICAgIChvdXRTZWFyY2gpPVwiaGFuZGxlclNlYXJjaCgkZXZlbnQpXCJcbiAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaCgkZXZlbnQpXCIgLz5cbiAgfVxuICBAaWYgKGNvbmZpZygpPy5jb25maWdEZXNjcmlwdGlvbkdyb3VwPy4oKTsgYXMgZGVzY3JpcHRpb24pIHtcbiAgICA8ZGl2IFtjbGFzc109XCJkZXNjcmlwdGlvbj8uY2xhc3NJbmNsdWRlXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJkZXNjcmlwdGlvbj8udG9vbHRpcERlc2NyaXB0aW9uKClcIj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiZGVzY3JpcHRpb24/LmNsYXNzVGV4dERlc2NyaXB0aW9uSW5jbHVkZVwiPnt7IGRlc2NyaXB0aW9uLnRleHREZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKCFoaWRkZW5JbnB1dFNlYXJjaCgpICYmIGhhc0RpdmlkZXIoKSAmJiAoIWNvbmZpZygpPy5pZ25vcmVTaG93RGF0YVdoZW5Ob3RTZWFyY2ggfHwga2V5U2VhcmNoU3RvcmUoKSkpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpYnMtdWktYm9yZGVyLXRvcC1nZW5lcmFsIHt7IGRpdmlkZXJDbGFzc0luY2x1ZGUoKSA/IGRpdmlkZXJDbGFzc0luY2x1ZGUoKSA6ICcnIH19XCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWRpdmlkZXItZGVmYXVsdF09XCIhIXNlYXJjaFBhZGRpbmcoKSAmJiAhZGl2aWRlckNsYXNzSW5jbHVkZSgpXCI+PC9kaXY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wge3sgY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCAmJiBrZXlTZWFyY2hTdG9yZSgpICYmICFjb25maWcoKT8uaWdub3JlRml4SGVpZ2h0U2hvd0RhdGFXaGVuTm90U2VhcmNoID8gJ2gtWzM1M3B4XScgOiAnaC1mdWxsJyB9fVwiPlxuICAgIDxkaXZcbiAgICAgICNjb250ZW50Q29udGFpbmVyXG4gICAgICBjbGFzcz1cInctZnVsbCBoLWZ1bGwge3sgYmFja2dyb3VuZExpc3RDdXN0b20oKSB9fVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSAmJiBkaXNhYmxlTGFiZWwoKVwiXG4gICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJkaXNhYmxlKCkgJiYgZGlzYWJsZUxhYmVsKClcIj48L2Rpdj5cblxuICAgIEBmb3IgKGJ1dHRvbk90aGVyIG9mIGJ1dHRvbnNPdGhlcigpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJiZy1bI2ZmZmZmZl0gbGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWxcIlxuICAgICAgICBbY2xhc3Mucm91bmRlZC1iLVs0cHhdXT1cIiRsYXN0ICYmICFoYXNCdXR0b25VblNlbGVjdE9wdGlvbigpXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCJidXR0b25PdGhlci50eXBlIHx8ICdidXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbk90aGVyLmxhYmVsIHx8ICcgJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiKGJ1dHRvbk90aGVyLmNsYXNzSWNvbkxlZnQgfHwgJycpICsgJyBmbGV4IG1yLVs4cHhdIHRleHQtWzE2cHhdJ1wiXG4gICAgICAgICAgY2xhc3NJbmNsdWRlPVwidy1mdWxsIHRleHQtbGVmdCByb3VuZGVkLTAge3sgYnV0dG9uT3RoZXIuY2xhc3NJbmNsdWRlID8gYnV0dG9uT3RoZXIuY2xhc3NJbmNsdWRlIDogJycgfX1cIlxuICAgICAgICAgIGNsYXNzTGFiZWw9XCJsaWJzLXVpLWZvbnQtaDVyIHdoaXRlc3BhY2Utbm9ybWFsXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b25PdGhlci5kaXNhYmxlIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcihidXR0b25PdGhlcilcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImJnLVsjZmZmZmZmXSByb3VuZGVkLWItWzRweF0gbGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWxcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIGxhYmVsPVwiaTE4bl91bnNlbGVjdF9vcHRpb25cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b24tbGluay1kYW5nZXItaGlnaFwiXG4gICAgICAgICAgY2xhc3NJY29uTGVmdD1cImZsZXggbXItWzhweF0gbGlicy11aS1pY29uLWNsb3NlXCJcbiAgICAgICAgICBjbGFzc0luY2x1ZGU9XCJ3LWZ1bGwgdGV4dC1sZWZ0IHJvdW5kZWQtMFwiXG4gICAgICAgICAgY2xhc3NMYWJlbD1cImxpYnMtdWktZm9udC1oNXIgd2hpdGVzcGFjZS1ub3JtYWxcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbigpIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlS2V5U2VsZWN0ZWQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKHNob3dWYWxpZGF0ZUJvdHRvbSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlVmFsaWRhdGVcIiAvPlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVZhbGlkYXRlPlxuICBAaWYgKGlzRXJyb3JSZXF1aXJlZCgpKSB7XG4gICAgPGRpdlxuICAgICAgW2NsYXNzLm1iLVs4cHhdXT1cIiFzaG93VmFsaWRhdGVCb3R0b20oKVwiXG4gICAgICBbY2xhc3MubXQtWzhweF1dPVwic2hvd1ZhbGlkYXRlQm90dG9tKClcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibGlicy11aS10ZXh0LWVycm9yIGxpYnMtdWktZm9udC1oN3JcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIHwgdHJhbnNsYXRlOiB2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUF5QixNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDck0sT0FBTyxFQUFXLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckcsT0FBTyxFQUFzQixxQ0FBcUMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTlHLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBYyxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBY3ZFLE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsbUJBQW1CO0lBQ0EseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsMkJBQTJCLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ3BELGVBQWUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDekMsT0FBTyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNqQyxjQUFjLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUV6RCxTQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekMsUUFBUSxHQUFnQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ3RELFNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxvQkFBb0IsR0FBNEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5RCw2QkFBNkIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM3RCxhQUFhLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7SUFDdkQsWUFBWSxHQUFnQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFELGFBQWEsQ0FBYTtJQUUxQixZQUFZLENBQWdFO0lBQzVFLFVBQVUsR0FBRyxNQUFNLENBQWtCO1FBQzNDLElBQUksRUFBRSxNQUFNO1FBQ1osa0JBQWtCLEVBQUUsTUFBTSxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pDLENBQUM7U0FDRixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0sscUJBQXFCLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQztJQUNuRCwwQkFBMEIsR0FBRyxNQUFNLENBQXlDLFNBQVMsQ0FBQyxDQUFDO0lBRS9GLGdCQUFnQjtJQUNQLGlCQUFpQixHQUFHLEtBQUssQ0FBK0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RyxvQkFBb0IsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN2QyxTQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDNUIsZUFBZSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxLQUFLLENBQTJELElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEosc0NBQXNDLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRS9ELGNBQWMsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNsQyxPQUFPLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDM0IsWUFBWSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ2hDLFdBQVcsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUM5QixZQUFZLEdBQUcsS0FBSyxDQUFxRCxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BILGFBQWEsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNqQyxtQkFBbUIsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN0QyxVQUFVLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2xDLFlBQVksR0FBRyxLQUFLLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBQzVELHVCQUF1QixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzNDLFlBQVksR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNoQyxvQkFBb0IsR0FBRyxLQUFLLENBQTZCLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDNUgsV0FBVyxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQzlCLFdBQVcsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUMvQixnQkFBZ0IsR0FBRyxLQUFLLENBQTZCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0lBQzlGLGVBQWUsR0FBRyxLQUFLLENBQTZCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkZBQTZGO0lBQzdKLGNBQWMsR0FBRyxLQUFLLENBQTZCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkZBQTZGO0lBQzVKLGdCQUFnQixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ3BDLHlDQUF5QyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzdELDJCQUEyQixHQUFHLEtBQUssQ0FBaUMsU0FBUyxDQUFDLENBQUM7SUFDL0UsYUFBYSxHQUFHLEtBQUssQ0FBNkIsU0FBUyxDQUFDLENBQUM7SUFDN0Qsa0JBQWtCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDdEMsTUFBTSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3pCLGVBQWUsR0FBRyxLQUFLLENBQXVELFNBQVMsQ0FBQyxDQUFDO0lBQ3pGLHVCQUF1QixHQUFHLEtBQUssQ0FBNkMsU0FBUyxDQUFDLENBQUM7SUFDdkYsZ0NBQWdDLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDcEQsK0NBQStDLEdBQUcsS0FBSyxFQUFXLENBQUMsQ0FBQyxtRUFBbUU7SUFFaEosaUJBQWlCO0lBQ1IsWUFBWSxHQUFHLE1BQU0sRUFBZ0MsQ0FBQyxDQUFDLDBCQUEwQjtJQUNqRixpQkFBaUIsR0FBRyxNQUFNLEVBQXFDLENBQUMsQ0FBQyx3Q0FBd0M7SUFDekcsbUJBQW1CLEdBQUcsTUFBTSxFQUFrQixDQUFDLENBQUMsd0NBQXdDO0lBQ3hGLG1CQUFtQixHQUFHLE1BQU0sRUFBVyxDQUFDO0lBQ3hDLFdBQVcsR0FBRyxNQUFNLEVBQXNCLENBQUM7SUFDM0MsYUFBYSxHQUFHLE1BQU0sRUFBYyxDQUFDO0lBQ3JDLFlBQVksR0FBRyxNQUFNLEVBQVUsQ0FBQztJQUNoQyxVQUFVLEdBQUcsTUFBTSxFQUFXLENBQUM7SUFDL0IsbUJBQW1CLEdBQUcsTUFBTSxFQUE2QixDQUFDO0lBQzFELDZCQUE2QixHQUFHLE1BQU0sRUFBYyxDQUFDO0lBQ3JELG9CQUFvQixHQUFHLE1BQU0sRUFBMkMsQ0FBQztJQUVsRixnQkFBZ0I7SUFDTixrQkFBa0IsR0FBRyxTQUFTLENBQWEsbUJBQW1CLENBQUMsQ0FBQztJQUNoRSxpQkFBaUIsR0FBRyxTQUFTLENBQWEsa0JBQWtCLENBQUMsQ0FBQztJQUV4RSxpQkFBaUI7SUFDVCx1QkFBdUIsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUV4RTtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztvQkFDL0MsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMvQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7b0JBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBZ0MsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE9BQU87WUFDVCxDQUFDO1lBQ0QsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUM7WUFDdkMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFDbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUN4QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBGLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGlEQUFpRCxFQUFFLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxDQUFDLENBQUM7UUFDdEksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQztRQUM5RixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUU1QyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlCLElBQUksSUFBSSxDQUFDLHlDQUF5QyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JGLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25FLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFpQixFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUE4QyxFQUFFLEVBQUU7WUFDekYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzVHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7b0JBQ25GLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3JELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsUUFBUSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQWdCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQztRQUVyQyxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO0lBQ2YsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTztZQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxRCxlQUFlLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUU7WUFDN0YsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxRCxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3pELENBQUM7SUFDSixDQUFDO0lBRVMsYUFBYSxDQUFDLFNBQWlCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFUyxLQUFLLENBQUMsd0JBQXdCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxNQUFlO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLGlDQUFpQyxDQUFDLEtBQWlDO1FBQzNFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNsRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVoQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ2pDLElBQUksTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVyRSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNyQixNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU87UUFDbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsV0FBNEI7UUFDOUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sRUFBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUM7UUFDdkUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDO1FBQ25FLE1BQU0sd0NBQXdDLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxFQUFFLEVBQUUsY0FBYyxDQUFDO1FBQzlJLE1BQU0sd0NBQXdDLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDO1FBRTVJLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsV0FBVyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDOUMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDO2dCQUU5QixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFdBQVcsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFFNUIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSx3Q0FBd0MsRUFBRSxDQUFDO1lBQzdDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNGLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFFOUIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSx3Q0FBd0MsRUFBRSxDQUFDO1lBQzdDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNGLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFFNUIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBb0IsQ0FBQztRQUV6RCxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDeEMsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7Z0JBRXhDLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBRUgsV0FBVyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDOUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7Z0JBRXhDLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN4QyxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztnQkFFcEMsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxXQUFXLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM5QyxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztnQkFFcEMsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSx3Q0FBd0MsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5RSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN0RixPQUFPLENBQUMsWUFBWSxHQUFHLHdDQUF3QyxDQUFDO2dCQUVoRSxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNGLE9BQU8sQ0FBQyxZQUFZLEdBQUcsd0NBQXdDLENBQUM7Z0JBRWhFLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksd0NBQXdDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUUsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdEYsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7Z0JBRXhDLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDM0YsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7Z0JBRXhDLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F4Y1UsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsKzFMQzVCMUMsNDlKQTJHQSwrUkRqRlksZ0JBQWdCLG1KQUFFLGVBQWUsNEZBQUUsOEJBQThCLDRxQkFBRSxxQ0FBcUMsb1ZBQUUsZ0NBQWdDLG9nQkFBRSxzQ0FBc0M7OzRGQUVqTCw2QkFBNkI7a0JBVHpDLFNBQVM7K0JBRUUseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxxQ0FBcUMsRUFBRSxnQ0FBZ0MsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBlZmZlY3QsIEVmZmVjdFJlZiwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCdXR0b24sIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZywgTGlic1VpQ29tcG9uZW50c0lucHV0c1NlYXJjaENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCc7XG5pbXBvcnQgeyBJVmFsaWRSZXF1aXJlZCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJUGFnaW5nLCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIGlzRW1wdHksIGlzRXF1YWwsIGlzTmlsIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRDb21wb25lbnRCeVR5cGUsIGluaXRDb25maWcgfSBmcm9tICcuL2RlZmluZXMvbGlzdC5kZWZpbmUnO1xuaW1wb3J0IHsgSURhdGFVcGRhdGVUb1N0b3JlLCBJTGlzdENvbmZpZ0l0ZW0sIElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSUxpc3REYXRhRW1pdEtleSwgSUxpc3REYXRhRW1pdE11bHRpS2V5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RhdGEtZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCB9IGZyb20gJy4vdGVtcGxhdGVzL3RlbXBsYXRlcy5jb21wb25lbnQuYWJzdHJhY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXQsIFRyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzU2VhcmNoQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCA9IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gIHByb3RlY3RlZCBkaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBpc0Vycm9yUmVxdWlyZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBrZXlTZWFyY2hTdG9yZSA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uU2VhcmNoOiBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uUmVmcmVzaDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25TZXRIaWRkZW5JdGVtQnlLZXk6IFN1YmplY3Q8QXJyYXk8dW5rbm93bj4+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25SZW1vdmVJdGVtczogU3ViamVjdDxBcnJheTx1bmtub3duPj4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uVXBkYXRlRGF0YTogU3ViamVjdDxJRGF0YVVwZGF0ZVRvU3RvcmU+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBjbGVhblVwRWZmZWN0ITogRWZmZWN0UmVmO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3Q+O1xuICBwcml2YXRlIGNvbmZpZ0RhdGEgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPih7XG4gICAgdHlwZTogJ3RleHQnLFxuICAgIGNvbmZpZ1RlbXBsYXRlVGV4dDogc2lnbmFsKHtcbiAgICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgICAgZ2V0VmFsdWU6IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwgfHwgaXRlbS5uYW1lO1xuICAgICAgfSxcbiAgICB9KSxcbiAgfSk7XG4gIHByaXZhdGUgZ3JvdXBNdWx0aUtleVNlbGVjdGVkID0gc2lnbmFsPEFycmF5PHVua25vd24+PihbXSk7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sSW5wdXRTZWFyY2ggPSBzaWduYWw8SUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBoaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZHJvcGRvd25UYWJLZXlBY3RpdmUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGtleVNlYXJjaCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcGFkZGluZ0xlZnRJdGVtID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8SUxpc3RDb25maWdJdGVtIHwgdW5kZWZpbmVkLCBJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHRoaXMuY29uZmlnRGF0YSgpLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0aGlzLmNvbmZpZ0RhdGEoKSB9KTtcbiAgcmVhZG9ubHkgYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaXNTZWFyY2hPbmxpbmUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IHNlYXJjaENvbmZpZyA9IGlucHV0PElJbnB1dFNlYXJjaENvbmZpZywgSUlucHV0U2VhcmNoQ29uZmlnIHwgdW5kZWZpbmVkPih7fSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwge30gfSk7XG4gIHJlYWRvbmx5IHNlYXJjaFBhZGRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXZpZGVyQ2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNEaXZpZGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGJ1dHRvbnNPdGhlciA9IGlucHV0PEFycmF5PElCdXR0b24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBoYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRMaXN0Q3VzdG9tID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdiZy1bI2ZmZmZmZl0nLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnYmctWyNmZmZmZmZdJyB9KTtcbiAgcmVhZG9ubHkgbWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gaW5wdXQ8dW5rbm93bj4oKTtcbiAgcmVhZG9ubHkgbXVsdGlLZXlTZWxlY3RlZCA9IGlucHV0PEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpOyAvLyBsxrB1IMO9IGtoaSBz4butIGThu6VuZyBsaXN0dmlld1xuICByZWFkb25seSBrZXlzRGlzYWJsZUl0ZW0gPSBpbnB1dDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgLy8ga2jDtG5nIGTDuW5nIGdpw6EgdHLhu4sgbsOgeSBr4bq/dCBo4bujcCB24bubaSB0ZW1wbGF0ZSBjaGVja2JveCBjw7MgY29uZmlnIGNo4bupYSBjb25maWdDaGVja2JveENoZWNrQWxsXG4gIHJlYWRvbmx5IGtleXNIaWRkZW5JdGVtID0gaW5wdXQ8QXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGtow7RuZyBkw7luZyBnacOhIHRy4buLIG7DoHkga+G6v3QgaOG7o3AgduG7m2kgdGVtcGxhdGUgY2hlY2tib3ggY8OzIGNvbmZpZyBjaOG7qWEgY29uZmlnQ2hlY2tib3hDaGVja0FsbFxuICByZWFkb25seSBmb2N1c0lucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc2tpcEZvY3VzSW5wdXRXaGVuS2V5U2VhcmNoU3RvcmVVbmRlZmluZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3QgPSBpbnB1dDwoKCkgPT4gQXJyYXk8YW55PikgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd1ZhbGlkYXRlQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBsb2FkaW5nSWNvblNpemUgPSBpbnB1dDwnbGFyZ2UnIHwgJ21lZGl1bScgfCAnc21hbGwnIHwgJ3NtYWxsZXInIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIGLhu48gY2jhur8gxJHhu5kgZGlzYWJsZSBpdGVtIHRyw6puIGh0bWwgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgY2jhu41uIDFcbiAgcmVhZG9ubHkgb3V0U2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkPigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dFVuU2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8QXJyYXk8dW5rbm93bj4+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNobyBwaMOpcCBjaOG7jW4gbmhp4buBdS5cbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b25PdGhlciA9IG91dHB1dDxJQnV0dG9uPigpO1xuICByZWFkb25seSBvdXRGaWVsZEtleSA9IG91dHB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZpZXcgPSBvdXRwdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgb3V0S2V5U2VhcmNoID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0TG9hZGluZyA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRJdGVtc0NvbXBsZXRlID0gb3V0cHV0PHsgaXRlbXM6IEFycmF5PGFueT47IHBhZ2luZz86IElQYWdpbmcgfT4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCBsaXN0Vmlld0VsZW1lbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2xpc3RWaWV3Q29udGFpbmVyJyk7XG4gIHByb3RlY3RlZCBjb250ZW50RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGVudENvbnRhaW5lcicpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYW5VcEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMua2V5U2VhcmNoKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmtleVNlYXJjaFN0b3JlKCkgPT09IHRoaXMua2V5U2VhcmNoKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZXlTZWFyY2hTdG9yZS5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoLm5leHQodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5c0Rpc2FibGVJdGVtID0gdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwoa2V5c0Rpc2FibGVJdGVtKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dCgna2V5c0Rpc2FibGVJdGVtJywga2V5c0Rpc2FibGVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5c0hpZGRlbkl0ZW0gPSB0aGlzLmtleXNIaWRkZW5JdGVtKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKGtleXNIaWRkZW5JdGVtKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dCgna2V5c0hpZGRlbkl0ZW0nLCBrZXlzSGlkZGVuSXRlbSk7XG4gICAgICAgICAgdGhpcy5vblNldEhpZGRlbkl0ZW1CeUtleS5uZXh0KGtleXNIaWRkZW5JdGVtIGFzIEFycmF5PHVua25vd24+KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZGlzYWJsZSA9IHRoaXMuZGlzYWJsZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChkaXNhYmxlKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dCgnZGlzYWJsZScsIGRpc2FibGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBrZXlTZWxlY3RlZCA9IHRoaXMua2V5U2VsZWN0ZWQoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwoa2V5U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/LnNldElucHV0KCdrZXlTZWxlY3RlZCcsIGtleVNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgb2xkTXVsdGlLZXlTZWxlY3RlZCA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBtdWx0aUtleVNlbGVjdGVkID0gdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk7XG4gICAgICBpZiAoaXNFcXVhbChvbGRNdWx0aUtleVNlbGVjdGVkLCBtdWx0aUtleVNlbGVjdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvbGRNdWx0aUtleVNlbGVjdGVkID0gbXVsdGlLZXlTZWxlY3RlZDtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwobXVsdGlLZXlTZWxlY3RlZCkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uc2V0SW5wdXQoJ211bHRpS2V5U2VsZWN0ZWQnLCBtdWx0aUtleVNlbGVjdGVkKTtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdEYXRhKCk/LnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAubmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duVGFiS2V5QWN0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgIGlmICh0aGlzLmtleVNlYXJjaCgpKSB7XG4gICAgICB0aGlzLmtleVNlYXJjaFN0b3JlLnNldCh0aGlzLmtleVNlYXJjaCgpKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuc2V0KHRoaXMuY2xvbmVDb25maWcoY29uZmlnKSk7XG4gICAgfVxuICAgIGluaXRDb25maWcodGhpcy5jb25maWdEYXRhKCkpO1xuICAgIGNvbnN0IGNvbXBDbGFzcyA9IGdldENvbXBvbmVudEJ5VHlwZSh0aGlzLmNvbmZpZ0RhdGEoKS50eXBlKTtcblxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wQ2xhc3MpO1xuXG4gICAgdGltZXIoMClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0VsZW1lbnQodGhpcy5jb21wb25lbnRSZWYsIHRoaXMuY29udGVudEVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25TZXRIaWRkZW5JdGVtQnlLZXknLCB0aGlzLm9uU2V0SGlkZGVuSXRlbUJ5S2V5KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnY29uZmlnJywgdGhpcy5jb25maWdEYXRhKCkpO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlnKCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdzZWFyY2hDb25maWcnLCB0aGlzLnNlYXJjaENvbmZpZygpKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uU2VhcmNoJywgdGhpcy5vblNlYXJjaCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uUmVmcmVzaCcsIHRoaXMub25SZWZyZXNoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25VcGRhdGVEYXRhJywgdGhpcy5vblVwZGF0ZURhdGEpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlTZWFyY2gnLCB0aGlzLmtleVNlYXJjaFN0b3JlKCkgPz8gJycpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkcm9wZG93blRhYktleUFjdGl2ZScsIHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NsaWNrRXhhY3RseScsIHRoaXMuY2xpY2tFeGFjdGx5KCkgfHwgZmFsc2UpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkaXNhYmxlJywgdGhpcy5kaXNhYmxlKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdhdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZScsIHRoaXMuYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BhZGRpbmdMZWZ0SXRlbScsIHRoaXMucGFkZGluZ0xlZnRJdGVtKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdyZXNldEtleVdoZW5TZWxlY3RBbGxLZXlEcm9wZG93bicsIHRoaXMucmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24oKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2lnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtJywgdGhpcy5pZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0JywgdGhpcy5mdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3QoKSk7XG4gICAgaWYgKHRoaXMubWF4SXRlbVNob3coKSkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ21heEl0ZW1TaG93JywgdGhpcy5tYXhJdGVtU2hvdygpKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleVNlbGVjdGVkJywgdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdtdWx0aUtleVNlbGVjdGVkJywgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5c0Rpc2FibGVJdGVtJywgdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKSB8fCBbXSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleXNIaWRkZW5JdGVtJywgdGhpcy5rZXlzSGlkZGVuSXRlbSgpIHx8IFtdKTtcbiAgICBpZiAoIWlzTmlsKHRoaXMua2V5U2VsZWN0ZWQoKSkgfHwgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwJywgdGhpcy5vblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uUmVtb3ZlSXRlbXMnLCB0aGlzLm9uUmVtb3ZlSXRlbXMpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCd6SW5kZXgnLCB0aGlzLnpJbmRleCgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaXNTZWFyY2hPbmxpbmUnLCB0aGlzLmlzU2VhcmNoT25saW5lKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkaXNhYmxlTGFiZWwnLCB0aGlzLmRpc2FibGVMYWJlbCgpIHx8IGZhbHNlKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbG9hZGluZ0ljb25TaXplJywgdGhpcy5sb2FkaW5nSWNvblNpemUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3RlbXBsYXRlUmVmU2VhcmNoTm9EYXRhJywgdGhpcy50ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpKTtcbiAgICBsZXQga2V5U2VhcmNoID0gJyc7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgaW5zdGFuY2Uub3V0Q2hhbmdlVmlldy5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMub3V0Q2hhbmdlVmlldy5lbWl0KGRhdGEpO1xuXG4gICAgICBpZiAodGhpcy5za2lwRm9jdXNJbnB1dFdoZW5LZXlTZWFyY2hTdG9yZVVuZGVmaW5lZCgpICYmIGlzTmlsKHRoaXMua2V5U2VhcmNoU3RvcmUoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9jdXNJbnB1dFNlYXJjaCgpICYmIHRoaXMua2V5U2VhcmNoU3RvcmUoKSAhPT0ga2V5U2VhcmNoKSB7XG4gICAgICAgIGtleVNlYXJjaCA9IHRoaXMua2V5U2VhcmNoU3RvcmUoKSB8fCAnJztcbiAgICAgICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaCgpPy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGluc3RhbmNlLm91dFNlbGVjdEtleS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KGRhdGEpO1xuICAgICAgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vdXRGaWVsZEtleS5zdWJzY3JpYmUoKGZpZWxkS2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLm91dEZpZWxkS2V5LmVtaXQoZmllbGRLZXkpO1xuICAgIH0pO1xuICAgIGluc3RhbmNlLm91dExvYWRpbmcuc3Vic2NyaWJlKChsb2FkaW5nOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGxvYWRpbmcpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQobG9hZGluZyk7XG4gICAgfSk7XG4gICAgaW5zdGFuY2Uub3V0TG9hZEl0ZW1zQ29tcGxldGUuc3Vic2NyaWJlKChldmVudDogeyBpdGVtczogQXJyYXk8YW55PjsgcGFnaW5nPzogSVBhZ2luZyB9KSA9PiB7XG4gICAgICB0aGlzLm91dExvYWRJdGVtc0NvbXBsZXRlLmVtaXQoZXZlbnQpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbmZpZygpICYmIHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlVGV4dCAmJiB0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQ/LigpPy5hY3Rpb25Tb3J0KSB7XG4gICAgICBpbnN0YW5jZS5vdXRTb3J0U2luZ2xlU2VsZWN0LnN1YnNjcmliZSgoaXRlbVNvcnQpID0+IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY29uZmlnVGVtcGxhdGVUZXh0ICYmIGNvbmZpZy5jb25maWdUZW1wbGF0ZVRleHQoKT8uYWN0aW9uU29ydCkge1xuICAgICAgICAgIGNvbmZpZy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LnNldChpdGVtU29ydCk7XG4gICAgICAgICAgY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5hY3Rpb25Tb3J0Py4oaXRlbVNvcnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaW5zdGFuY2Uub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIuc3Vic2NyaWJlKChmbGFnOiBJRmxhZ01vdXNlKSA9PiB7XG4gICAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyLmVtaXQoZmxhZyk7XG4gICAgfSk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnRGF0YSgpPy50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0JyB8fCB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluc3RhbmNlLm91dFNlbGVjdE11bHRpS2V5LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KGZhbHNlKTtcbiAgICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBNdWx0aUtleVNlbGVjdGVkLnNldChkYXRhLmtleXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KGRhdGEpO1xuICAgICAgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy5jaGVja0lzVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIHJlZnJlc2g6IHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRLZXlTZWxlY3RlZDogdGhpcy5oYW5kbGVyUmVtb3ZlS2V5U2VsZWN0ZWQuYmluZCh0aGlzKSxcbiAgICAgIGdldFJlY3RMaXN0VmlldzogYXN5bmMgKCkgPT4gdGhpcy5saXN0Vmlld0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHJlbW92ZUl0ZW1zOiBhc3luYyAoa2V5cykgPT4gdGhpcy5vblJlbW92ZUl0ZW1zLm5leHQoa2V5cyksXG4gICAgICB1cGRhdGVEYXRhOiBhc3luYyAoZGF0YSkgPT4gdGhpcy5vblVwZGF0ZURhdGEubmV4dChkYXRhKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWFyY2goa2V5U2VhcmNoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmtleVNlYXJjaFN0b3JlLnNldChrZXlTZWFyY2gpO1xuICAgIHRoaXMub25TZWFyY2gubmV4dChrZXlTZWFyY2gpO1xuICAgIHRoaXMub3V0S2V5U2VhcmNoLmVtaXQoa2V5U2VhcmNoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVtb3ZlS2V5U2VsZWN0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleVNlbGVjdGVkJywgJycpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdtdWx0aUtleVNlbGVjdGVkJywgdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbi5zZXQodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5jb25maWdEYXRhKCk/LnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgIHRoaXMub25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAubmV4dCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNoZWNrSXNWYWxpZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbk90aGVyKGJ1dHRvbjogSUJ1dHRvbikge1xuICAgIHRoaXMub3V0Q2xpY2tCdXR0b25PdGhlci5lbWl0KGJ1dHRvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoKGV2ZW50OiBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXRTZWFyY2guc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy52YWxpZFJlcXVpcmVkKCkgfHwgIXRoaXMuY29uZmlnKCk/LnR5cGUgfHwgIXRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pc0Vycm9yUmVxdWlyZWQuc2V0KGZhbHNlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbmZpZygpPy50eXBlO1xuICAgIGxldCBoYXNLZXkgPSAhaXNFbXB0eSh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5tdWx0aUtleVNlbGVjdGVkKCkpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgIGhhc0tleSA9ICFpc0VtcHR5KHRoaXMuZ3JvdXBNdWx0aUtleVNlbGVjdGVkKCkpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnIHx8IHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgIGhhc0tleSA9ICFpc05pbCh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5rZXlTZWxlY3RlZCgpKTtcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yUmVxdWlyZWQuc2V0KCFoYXNLZXkpO1xuXG4gICAgcmV0dXJuIGhhc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnRGF0YS5zZXQodGhpcy5jbG9uZUNvbmZpZyhjb25maWcpKTtcbiAgICAgIHRoaXMub25SZWZyZXNoLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVDb25maWcoY29uZmlnSW5wdXQ6IElMaXN0Q29uZmlnSXRlbSk6IElMaXN0Q29uZmlnSXRlbSB7XG4gICAgaWYgKCFjb25maWdJbnB1dCkge1xuICAgICAgcmV0dXJuIHt9IGFzIGFueTtcbiAgICB9XG4gICAgY29uc3Qgb2JqZWN0SW5zdGFuY2UgPSBjb25maWdJbnB1dC5odHRwUmVxdWVzdERhdGE/LigpPy5vYmplY3RJbnN0YW5jZTtcbiAgICBjb25zdCBzZXJ2aWNlQ2xhc3MgPSBjb25maWdJbnB1dC5odHRwUmVxdWVzdERhdGE/LigpPy5zZXJ2aWNlQ2xhc3M7XG4gICAgY29uc3Qgc2VydmljZU90aGVyUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCA9IGNvbmZpZ0lucHV0LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCk/Lm9iamVjdEluc3RhbmNlO1xuICAgIGNvbnN0IHNlcnZpY2VDbGFzc1JlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QgPSBjb25maWdJbnB1dC5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q/LigpPy5zZXJ2aWNlQ2xhc3M7XG5cbiAgICBpZiAob2JqZWN0SW5zdGFuY2UpIHtcbiAgICAgIGNvbmZpZ0lucHV0Lmh0dHBSZXF1ZXN0RGF0YT8udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50Lm9iamVjdEluc3RhbmNlO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VDbGFzcykge1xuICAgICAgY29uZmlnSW5wdXQuaHR0cFJlcXVlc3REYXRhPy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuc2VydmljZUNsYXNzO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VPdGhlclJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgIGNvbmZpZ0lucHV0LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50Lm9iamVjdEluc3RhbmNlO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VDbGFzc1JlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgIGNvbmZpZ0lucHV0LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50LnNlcnZpY2VDbGFzcztcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IGNsb25lRGVlcChjb25maWdJbnB1dCkgYXMgSUxpc3RDb25maWdJdGVtO1xuXG4gICAgaWYgKG9iamVjdEluc3RhbmNlICYmIGNvbmZpZy5odHRwUmVxdWVzdERhdGEpIHtcbiAgICAgIGNvbmZpZy5odHRwUmVxdWVzdERhdGEudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQub2JqZWN0SW5zdGFuY2UgPSBvYmplY3RJbnN0YW5jZTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25maWdJbnB1dC5odHRwUmVxdWVzdERhdGE/LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50Lm9iamVjdEluc3RhbmNlID0gb2JqZWN0SW5zdGFuY2U7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2VydmljZUNsYXNzICYmIGNvbmZpZy5odHRwUmVxdWVzdERhdGEpIHtcbiAgICAgIGNvbmZpZy5odHRwUmVxdWVzdERhdGEudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQuc2VydmljZUNsYXNzID0gc2VydmljZUNsYXNzO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjb25maWdJbnB1dC5odHRwUmVxdWVzdERhdGE/LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50LnNlcnZpY2VDbGFzcyA9IHNlcnZpY2VDbGFzcztcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlQ2xhc3NSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0ICYmIGNvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KSB7XG4gICAgICBjb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5zZXJ2aWNlQ2xhc3MgPSBzZXJ2aWNlQ2xhc3NSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjb25maWdJbnB1dC5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q/LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50LnNlcnZpY2VDbGFzcyA9IHNlcnZpY2VDbGFzc1JlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2VydmljZU90aGVyUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCAmJiBjb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveCkge1xuICAgICAgY29uZmlnLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQub2JqZWN0SW5zdGFuY2UgPSBvYmplY3RJbnN0YW5jZTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgY29uZmlnSW5wdXQuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5vYmplY3RJbnN0YW5jZSA9IG9iamVjdEluc3RhbmNlO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYW5VcEVmZmVjdC5kZXN0cm95KCk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuY29tcG9uZW50UmVmKTtcbiAgICB0aGlzLm9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25TZWFyY2guY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2V0SGlkZGVuSXRlbUJ5S2V5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8ZGl2XG4gICNsaXN0Vmlld0NvbnRhaW5lclxuICBjbGFzcz1cImZsZXggZmxleC1jb2xcIlxuICBbY2xhc3Mudy1mdWxsXT1cIiFtYXhJdGVtU2hvdygpXCJcbiAgW2NsYXNzLmgtZnVsbF09XCIhbWF4SXRlbVNob3coKVwiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbFxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlIHx8IGxvYWRpbmcoKSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG5cbiAgQGlmICghc2hvd1ZhbGlkYXRlQm90dG9tKCkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVWYWxpZGF0ZVwiIC8+XG4gIH1cbiAgQGlmICghaGlkZGVuSW5wdXRTZWFyY2goKSkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXNlYXJjaFxuICAgICAgW3NlYXJjaENvbmZpZ109XCJzZWFyY2hDb25maWcoKVwiXG4gICAgICBbY2xhc3MucHgtWzEycHhdXT1cInNlYXJjaFBhZGRpbmcoKVwiXG4gICAgICBbY2xhc3NdPVwic2VhcmNoQ29uZmlnKCkuY2xhc3NDb3ZlcklucHV0U2VhcmNoXCJcbiAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgKG91dFNlYXJjaCk9XCJoYW5kbGVyU2VhcmNoKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoKCRldmVudClcIiAvPlxuICB9XG4gIEBpZiAoY29uZmlnKCk/LmNvbmZpZ0Rlc2NyaXB0aW9uR3JvdXA/LigpOyBhcyBkZXNjcmlwdGlvbikge1xuICAgIDxkaXYgW2NsYXNzXT1cImRlc2NyaXB0aW9uPy5jbGFzc0luY2x1ZGVcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cImRlc2NyaXB0aW9uPy50b29sdGlwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJkZXNjcmlwdGlvbj8uY2xhc3NUZXh0RGVzY3JpcHRpb25JbmNsdWRlXCI+e3sgZGVzY3JpcHRpb24udGV4dERlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoIWhpZGRlbklucHV0U2VhcmNoKCkgJiYgaGFzRGl2aWRlcigpICYmICghY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCB8fCBrZXlTZWFyY2hTdG9yZSgpKSkge1xuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWwge3sgZGl2aWRlckNsYXNzSW5jbHVkZSgpID8gZGl2aWRlckNsYXNzSW5jbHVkZSgpIDogJycgfX1cIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGl2aWRlci1kZWZhdWx0XT1cIiEhc2VhcmNoUGFkZGluZygpICYmICFkaXZpZGVyQ2xhc3NJbmNsdWRlKClcIj48L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB7eyBjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoICYmIGtleVNlYXJjaFN0b3JlKCkgJiYgIWNvbmZpZygpPy5pZ25vcmVGaXhIZWlnaHRTaG93RGF0YVdoZW5Ob3RTZWFyY2ggPyAnaC1bMzUzcHhdJyA6ICdoLWZ1bGwnIH19XCI+XG4gICAgPGRpdlxuICAgICAgI2NvbnRlbnRDb250YWluZXJcbiAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCB7eyBiYWNrZ3JvdW5kTGlzdEN1c3RvbSgpIH19XCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpICYmIGRpc2FibGVMYWJlbCgpXCJcbiAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGUoKSAmJiBkaXNhYmxlTGFiZWwoKVwiPjwvZGl2PlxuXG4gICAgQGZvciAoYnV0dG9uT3RoZXIgb2YgYnV0dG9uc090aGVyKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJnLVsjZmZmZmZmXSBsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbFwiXG4gICAgICAgIFtjbGFzcy5yb3VuZGVkLWItWzRweF1dPVwiJGxhc3QgJiYgIWhhc0J1dHRvblVuU2VsZWN0T3B0aW9uKClcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbk90aGVyLnR5cGUgfHwgJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uT3RoZXIubGFiZWwgfHwgJyAnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCIoYnV0dG9uT3RoZXIuY2xhc3NJY29uTGVmdCB8fCAnJykgKyAnIGZsZXggbXItWzhweF0gdGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBjbGFzc0luY2x1ZGU9XCJ3LWZ1bGwgdGV4dC1sZWZ0IHJvdW5kZWQtMCB7eyBidXR0b25PdGhlci5jbGFzc0luY2x1ZGUgPyBidXR0b25PdGhlci5jbGFzc0luY2x1ZGUgOiAnJyB9fVwiXG4gICAgICAgICAgY2xhc3NMYWJlbD1cImxpYnMtdWktZm9udC1oNXIgd2hpdGVzcGFjZS1ub3JtYWxcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbk90aGVyLmRpc2FibGUgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmcoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbk90aGVyKGJ1dHRvbk90aGVyKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChoYXNCdXR0b25VblNlbGVjdE9wdGlvbigpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYmctWyNmZmZmZmZdIHJvdW5kZWQtYi1bNHB4XSBsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbFwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgbGFiZWw9XCJpMThuX3Vuc2VsZWN0X29wdGlvblwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvbi1saW5rLWRhbmdlci1oaWdoXCJcbiAgICAgICAgICBjbGFzc0ljb25MZWZ0PVwiZmxleCBtci1bOHB4XSBsaWJzLXVpLWljb24tY2xvc2VcIlxuICAgICAgICAgIGNsYXNzSW5jbHVkZT1cInctZnVsbCB0ZXh0LWxlZnQgcm91bmRlZC0wXCJcbiAgICAgICAgICBjbGFzc0xhYmVsPVwibGlicy11aS1mb250LWg1ciB3aGl0ZXNwYWNlLW5vcm1hbFwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uKCkgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmcoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZW1vdmVLZXlTZWxlY3RlZCgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAoc2hvd1ZhbGlkYXRlQm90dG9tKCkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVWYWxpZGF0ZVwiIC8+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlVmFsaWRhdGU+XG4gIEBpZiAoaXNFcnJvclJlcXVpcmVkKCkpIHtcbiAgICA8ZGl2XG4gICAgICBbY2xhc3MubWItWzhweF1dPVwiIXNob3dWYWxpZGF0ZUJvdHRvbSgpXCJcbiAgICAgIFtjbGFzcy5tdC1bOHB4XV09XCJzaG93VmFsaWRhdGVCb3R0b20oKVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXRleHQtZXJyb3IgbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwidmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgfCB0cmFuc2xhdGU6IHZhbGlkUmVxdWlyZWQoKT8uaW50ZXJwb2xhdGVQYXJhbXNcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=