fantasy-ngzorro 2.2.5 → 2.2.7
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.
- package/README.md +2 -0
- package/bundles/fantasy-ngzorro.umd.js +5 -2
- package/bundles/fantasy-ngzorro.umd.js.map +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js.map +1 -1
- package/esm2015/hd-filter/hd-filter.component.js +3 -3
- package/esm2015/hd-form/hd-form.component.js +4 -1
- package/esm5/hd-filter/hd-filter.component.js +3 -3
- package/esm5/hd-form/hd-form.component.js +4 -1
- package/fantasy-ngzorro.metadata.json +1 -1
- package/fesm2015/fantasy-ngzorro.js +5 -2
- package/fesm2015/fantasy-ngzorro.js.map +1 -1
- package/fesm5/fantasy-ngzorro.js +5 -2
- package/fesm5/fantasy-ngzorro.js.map +1 -1
- package/package.json +2 -2
|
@@ -591,7 +591,7 @@ export class HdFilterComponent {
|
|
|
591
591
|
name: 'templateName',
|
|
592
592
|
require: true,
|
|
593
593
|
width: 4,
|
|
594
|
-
maxLength:
|
|
594
|
+
maxLength: 50,
|
|
595
595
|
value: null,
|
|
596
596
|
placeholder: '请输入筛选组名称'
|
|
597
597
|
}
|
|
@@ -891,7 +891,7 @@ export class HdFilterComponent {
|
|
|
891
891
|
HdFilterComponent.decorators = [
|
|
892
892
|
{ type: Component, args: [{
|
|
893
893
|
selector: 'hd-filter',
|
|
894
|
-
template: "<form nz-form [formGroup]=\"validateFilterForm\" class=\"ant-advanced-search-form hd-filter-container\">\n <!-- \u6574\u4F53\u7ED3\u6784 -->\n <div nz-row [nzGutter]=\"24\">\n <!-- \u5BF9\u7EC4\u4EF6\u5217\u8868\u5FAA\u73AF\u5904\u7406 -->\n <ng-container *ngFor=\"let filter of filterList\">\n <div nz-col [nzSpan]=\"6\" [hidden]=\"!filter.show\">\n <nz-form-item nzFlex>\n <nz-form-label class=\"hd-filter-label\" [nzNoColon]=\"true\"><span class=\"hd-red\" *ngIf=\"filter.require\">*</span>{{ filter.label }}\n </nz-form-label>\n <nz-form-control class=\"hd-filter-control\">\n <ng-container [ngSwitch]=\"filter.type\">\n <!-- \u8FD9\u91CC\u6570\u5B57\u5BF9\u5E94\u679A\u4E3E\u7C7B\u578B\uFF0C\u53EF\u5728hd-filter.service.ts\u6587\u4EF6\u4E2D\u67E5\u770B\u5BF9\u5E94\u5173\u7CFB -->\n <ng-container *ngSwitchCase=\"0\">\n <nz-input-group [nzSuffix]=\"inputCleanTemplate\">\n <input nz-input [placeholder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u8F93\u5165' + filter.label\"\n [formControlName]=\"filter.name\"\n (blur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\"/>\n </nz-input-group>\n <ng-template #inputCleanTemplate><i nz-icon nz-tooltip class=\"ant-input-clear-icon\" nzTheme=\"fill\"\n nzType=\"close-circle\" *ngIf=\"isAllowClear(filter) && validateFilterForm.get(filter.name).value\"\n (click)=\"inputClean(filter)\"></i></ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"1\">\n <nz-select\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"2\">\n <nz-date-picker *ngIf=\"filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n nzShowTime nzFormat=\"yyyy-MM-dd HH:mm:ss\">\n </nz-date-picker>\n <nz-date-picker *ngIf=\"!filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\">\n </nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"3\">\n <nz-range-picker [nzPlaceHolder]=\"['\u5F00\u59CB\u65E5\u671F','\u7ED3\u675F\u65E5\u671F']\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\" [formControlName]=\"filter.name\">\n </nz-range-picker>\n </ng-container>\n <!-- \u591A\u9879\u9009\u62E9\u5668 -->\n <ng-container *ngSwitchCase=\"4\">\n <nz-select\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n nzMode=\"multiple\"\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"5\">\n <nz-cascader [nzOptions]=\"filter.cascaderOption.options\" [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzShowSearch]=\"getCascaderShowSearch(filter.cascaderOption)\"\n [nzMenuClassName]=\"getCascaderMenuClassName(filter.cascaderOption)\"\n [nzMenuStyle]=\"getCascaderMenuStyle(filter.cascaderOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\">\n </nz-cascader>\n </ng-container>\n <ng-container *ngSwitchCase=\"6\">\n <nz-month-picker [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"7\">\n <nz-input-number [formControlName]=\"filter.name\" [nzMin]=\"filter?.inputNumber?.min || 0\"\n [nzMax]=\"filter?.inputNumber?.max || 99999999\" [nzStep]=\"filter?.inputNumber?.step || 1\"\n [nzPlaceHolder]=\"'\u8BF7\u8F93\u5165' + filter.label\"\n [nzPrecision]=\"filter?.inputNumber?.precision != null ? filter.inputNumber.precision : 4\"\n (nzBlur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\">\n </nz-input-number>\n </ng-container>\n </ng-container>\n </nz-form-control>\n </nz-form-item>\n </div>\n </ng-container>\n\n <div class=\"hd-filter-btn\" nz-col [nzSpan]=\"6\" [nzOffset]=\"computeOffset()\">\n <!-- \u7A3F\u9762\u987A\u5E8F\uFF1A\u9ED8\u8BA4\u6761\u4EF6 \u2192 \u64CD\u4F5C(\u9F7F\u8F6E) \u2192 \u6536\u8D77 \u2192 \u67E5\u8BE2 \u2192 \u91CD\u7F6E -->\n <ng-container *ngIf=\"canUseScheme\">\n <a class=\"hd-filter-scheme-name\" (click)=\"openSwitchModal()\" nz-tooltip [nzTitle]=\"currentSchemeName\">\n <span class=\"hd-filter-scheme-name-text\">{{ currentSchemeName }}</span>\n <i nz-icon nzType=\"down\" nzTheme=\"outline\"></i>\n </a>\n <a class=\"hd-filter-scheme-op\" nz-dropdown [nzDropdownMenu]=\"schemeOpMenu\" nzTrigger=\"click\">\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\n \u64CD\u4F5C\n </a>\n <nz-dropdown-menu #schemeOpMenu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"saveCurrentScheme()\">\u4FDD\u5B58\u4E3A\u5F53\u524D</li>\n <li nz-menu-item (click)=\"openSaveAsModal()\">\u53E6\u5B58\u4E3A</li>\n <li nz-menu-item *ngIf=\"canDeleteCurrent()\"\n class=\"hd-filter-scheme-op-delete\"\n nz-popconfirm\n nzTitle=\"\u786E\u5B9A\u5220\u9664\u5F53\u524D\u7B5B\u9009\u7EC4\u5417\uFF1F\"\n nzPopconfirmPlacement=\"bottomRight\"\n (nzOnConfirm)=\"deleteCurrentScheme()\">\u5220\u9664</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <a *ngIf=\"filterList.length > 7\" class=\"hd-filter-more\" (click)=\"showMore()\">\n {{ isShowMore ? '\u5C55\u5F00' : '\u6536\u8D77' }}\n <i nz-icon [nzType]=\"isShowMore ? 'down' : 'up'\"></i>\n </a>\n <hd-button type=\"primary\" (click)=\"submitForm()\">\u67E5\u8BE2</hd-button>\n <hd-button type=\"reset\" (click)=\"resetForm()\">\u91CD\u7F6E</hd-button>\n </div>\n </div>\n</form>\n\n<!-- \u9009\u62E9\u7B5B\u9009\u7EC4 -->\n<nz-modal\n [(nzVisible)]=\"switchModalVisible\"\n nzTitle=\"\u9009\u62E9\u7B5B\u9009\u7EC4\"\n nzWidth=\"420px\"\n [nzOkLoading]=\"schemeLoading\"\n (nzOnCancel)=\"closeSwitchModal()\"\n (nzOnOk)=\"confirmSwitch()\">\n <hd-form [formList]=\"switchFormList\" (changeEvent)=\"switchFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n\n<!-- \u53E6\u5B58\u4E3A -->\n<nz-modal\n [(nzVisible)]=\"saveAsModalVisible\"\n nzTitle=\"\u4FDD\u5B58\u7B5B\u9009\u7EC4\"\n nzWidth=\"420px\"\n [nzOkLoading]=\"schemeSaving\"\n (nzOnCancel)=\"closeSaveAsModal()\"\n (nzOnOk)=\"confirmSaveAs()\">\n <hd-form [formList]=\"saveAsFormList\" (changeEvent)=\"saveAsFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n",
|
|
894
|
+
template: "<form nz-form [formGroup]=\"validateFilterForm\" class=\"ant-advanced-search-form hd-filter-container\">\n <!-- \u6574\u4F53\u7ED3\u6784 -->\n <div nz-row [nzGutter]=\"24\">\n <!-- \u5BF9\u7EC4\u4EF6\u5217\u8868\u5FAA\u73AF\u5904\u7406 -->\n <ng-container *ngFor=\"let filter of filterList\">\n <div nz-col [nzSpan]=\"6\" [hidden]=\"!filter.show\">\n <nz-form-item nzFlex>\n <nz-form-label class=\"hd-filter-label\" [nzNoColon]=\"true\"><span class=\"hd-red\" *ngIf=\"filter.require\">*</span>{{ filter.label }}\n </nz-form-label>\n <nz-form-control class=\"hd-filter-control\">\n <ng-container [ngSwitch]=\"filter.type\">\n <!-- \u8FD9\u91CC\u6570\u5B57\u5BF9\u5E94\u679A\u4E3E\u7C7B\u578B\uFF0C\u53EF\u5728hd-filter.service.ts\u6587\u4EF6\u4E2D\u67E5\u770B\u5BF9\u5E94\u5173\u7CFB -->\n <ng-container *ngSwitchCase=\"0\">\n <nz-input-group [nzSuffix]=\"inputCleanTemplate\">\n <input nz-input [placeholder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u8F93\u5165' + filter.label\"\n [formControlName]=\"filter.name\"\n (blur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\"/>\n </nz-input-group>\n <ng-template #inputCleanTemplate><i nz-icon nz-tooltip class=\"ant-input-clear-icon\" nzTheme=\"fill\"\n nzType=\"close-circle\" *ngIf=\"isAllowClear(filter) && validateFilterForm.get(filter.name).value\"\n (click)=\"inputClean(filter)\"></i></ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"1\">\n <nz-select\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"2\">\n <nz-date-picker *ngIf=\"filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n nzShowTime nzFormat=\"yyyy-MM-dd HH:mm:ss\">\n </nz-date-picker>\n <nz-date-picker *ngIf=\"!filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\">\n </nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"3\">\n <nz-range-picker [nzPlaceHolder]=\"['\u5F00\u59CB\u65E5\u671F','\u7ED3\u675F\u65E5\u671F']\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\" [formControlName]=\"filter.name\">\n </nz-range-picker>\n </ng-container>\n <!-- \u591A\u9879\u9009\u62E9\u5668 -->\n <ng-container *ngSwitchCase=\"4\">\n <nz-select\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n nzMode=\"multiple\"\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"5\">\n <nz-cascader [nzOptions]=\"filter.cascaderOption.options\" [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzShowSearch]=\"getCascaderShowSearch(filter.cascaderOption)\"\n [nzMenuClassName]=\"getCascaderMenuClassName(filter.cascaderOption)\"\n [nzMenuStyle]=\"getCascaderMenuStyle(filter.cascaderOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\">\n </nz-cascader>\n </ng-container>\n <ng-container *ngSwitchCase=\"6\">\n <nz-month-picker [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"7\">\n <nz-input-number [formControlName]=\"filter.name\" [nzMin]=\"filter?.inputNumber?.min || 0\"\n [nzMax]=\"filter?.inputNumber?.max || 99999999\" [nzStep]=\"filter?.inputNumber?.step || 1\"\n [nzPlaceHolder]=\"'\u8BF7\u8F93\u5165' + filter.label\"\n [nzPrecision]=\"filter?.inputNumber?.precision != null ? filter.inputNumber.precision : 4\"\n (nzBlur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\">\n </nz-input-number>\n </ng-container>\n </ng-container>\n </nz-form-control>\n </nz-form-item>\n </div>\n </ng-container>\n\n <div class=\"hd-filter-btn\" nz-col [nzSpan]=\"6\" [nzOffset]=\"computeOffset()\">\n <!-- \u7A3F\u9762\u987A\u5E8F\uFF1A\u9ED8\u8BA4\u6761\u4EF6 \u2192 \u64CD\u4F5C(\u9F7F\u8F6E) \u2192 \u6536\u8D77 \u2192 \u67E5\u8BE2 \u2192 \u91CD\u7F6E -->\n <ng-container *ngIf=\"canUseScheme\">\n <a class=\"hd-filter-scheme-name\" (click)=\"openSwitchModal()\" nz-tooltip [nzTitle]=\"currentSchemeName\">\n <span class=\"hd-filter-scheme-name-text\">{{ currentSchemeName }}</span>\n <i nz-icon nzType=\"down\" nzTheme=\"outline\"></i>\n </a>\n <a class=\"hd-filter-scheme-op\" nz-dropdown [nzDropdownMenu]=\"schemeOpMenu\" nzTrigger=\"click\">\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\n \u64CD\u4F5C\n </a>\n <nz-dropdown-menu #schemeOpMenu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"saveCurrentScheme()\">\u4FDD\u5B58\u4E3A\u5F53\u524D</li>\n <li nz-menu-item (click)=\"openSaveAsModal()\">\u53E6\u5B58\u4E3A</li>\n <li nz-menu-item *ngIf=\"canDeleteCurrent()\"\n class=\"hd-filter-scheme-op-delete\"\n nz-popconfirm\n nzTitle=\"\u786E\u5B9A\u5220\u9664\u5F53\u524D\u7B5B\u9009\u7EC4\u5417\uFF1F\"\n nzPopconfirmPlacement=\"bottomRight\"\n (nzOnConfirm)=\"deleteCurrentScheme()\">\u5220\u9664</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <a *ngIf=\"filterList.length > 7\" class=\"hd-filter-more\" (click)=\"showMore()\">\n {{ isShowMore ? '\u5C55\u5F00' : '\u6536\u8D77' }}\n <i nz-icon [nzType]=\"isShowMore ? 'down' : 'up'\"></i>\n </a>\n <hd-button type=\"primary\" (click)=\"submitForm()\">\u67E5\u8BE2</hd-button>\n <hd-button type=\"reset\" (click)=\"resetForm()\">\u91CD\u7F6E</hd-button>\n </div>\n </div>\n</form>\n\n<!-- \u9009\u62E9\u7B5B\u9009\u7EC4\uFF1A*ngIf \u907F\u514D\u672A\u6253\u5F00\u65F6 hd-form \u7A7A formList \u5BFC\u81F4 formGroup \u672A\u521D\u59CB\u5316\u62A5\u9519 -->\n<nz-modal\n [(nzVisible)]=\"switchModalVisible\"\n nzTitle=\"\u9009\u62E9\u7B5B\u9009\u7EC4\"\n nzWidth=\"560px\"\n [nzOkLoading]=\"schemeLoading\"\n (nzOnCancel)=\"closeSwitchModal()\"\n (nzOnOk)=\"confirmSwitch()\">\n <hd-form *ngIf=\"switchModalVisible\" [formList]=\"switchFormList\" (changeEvent)=\"switchFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n\n<!-- \u53E6\u5B58\u4E3A -->\n<nz-modal\n [(nzVisible)]=\"saveAsModalVisible\"\n nzTitle=\"\u4FDD\u5B58\u7B5B\u9009\u7EC4\"\n nzWidth=\"560px\"\n [nzOkLoading]=\"schemeSaving\"\n (nzOnCancel)=\"closeSaveAsModal()\"\n (nzOnOk)=\"confirmSaveAs()\">\n <hd-form *ngIf=\"saveAsModalVisible\" [formList]=\"saveAsFormList\" (changeEvent)=\"saveAsFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n",
|
|
895
895
|
styles: ["::ng-deep .common-btn-group>a{font-size:14px;font-weight:400;color:#20b95d!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset}::ng-deep .ant-form-item-label>label{color:#4b504e;font-size:14px}::ng-deep .ant-input-number-input{height:32px}::ng-deep .ant-input-number{height:32px}textarea.ant-input{height:auto;min-height:32px}::ng-deep .ant-select-selection--multiple{min-height:32px}::ng-deep .ant-select-selection__rendered>ul>li{height:26px!important;margin-top:3px!important;line-height:26px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:32px!important}::ng-deep .ant-input{height:32px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:32px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}::ng-deep .hd-table-container .ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-th-right-sticky{z-index:2;transform:translateZ(0)}::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-right-sticky{background:#f5f8f6!important}::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-right-sticky{background:#fff}::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-right-sticky{background:#ecf8f1!important}::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-th-right-sticky{box-shadow:none!important}::ng-deep .hd-table-container .ant-table-fixed-right{right:0!important}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:14px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-pagination-options .ant-select,::ng-deep .ant-pagination-options .ant-select-selection--single{min-width:100px}::ng-deep .ant-pagination-options-size-changer.ant-select{min-width:100px}::ng-deep .ant-time-picker{width:100%}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:var(--hd-cascader-menu-min-width,auto);max-width:560px}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child .ant-cascader-menu-item{white-space:nowrap}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.hd-filter-container{padding:20px 23px;background:#fff;border-radius:4px;margin-bottom:8px!important;font-size:14px}.hd-filter-container .ant-row{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:4px;margin-right:0!important;margin-left:0!important}.hd-filter-container .ant-row::after,.hd-filter-container .ant-row::before{display:none}.hd-filter-container .ant-col-6{float:none;padding-left:0!important;padding-right:0!important}.hd-filter-container .hd-filter-label{width:124px;word-break:break-all;font-size:14px}.hd-filter-container .hd-filter-label ::ng-deep label{font-size:14px}.hd-filter-container .hd-filter-control{width:calc(100% - 124px)}.hd-filter-container ::ng-deep .ant-calendar-picker{width:100%}.hd-filter-container .hd-filter-more{color:#20b95d;white-space:nowrap;flex-shrink:0}.hd-filter-container .hd-filter-btn{height:40px;display:inline-flex;align-items:center;justify-content:flex-end;gap:10px;max-width:100%;min-width:0;padding-left:12px;box-sizing:border-box}.hd-filter-container hd-button{margin-left:0;flex-shrink:0}.hd-filter-container ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}.hd-filter-container ::ng-deep .ant-select-selection--single{height:32px!important}.hd-filter-container ::ng-deep .ant-input{height:32px!important}.hd-filter-container ::ng-deep .ant-calendar-range-picker-input{text-align:left!important}.hd-filter-container .ant-input-number{width:100%}.hd-filter-container .hd-red{color:#f5222d}.hd-filter-container .hd-filter-scheme-name,.hd-filter-container .hd-filter-scheme-op{color:#4e5369;white-space:nowrap;display:inline-flex;align-items:center;gap:4px;padding:3px;margin:0;box-sizing:border-box}.hd-filter-container .hd-filter-scheme-name i[nz-icon],.hd-filter-container .hd-filter-scheme-op i[nz-icon]{font-size:14px;flex-shrink:0}.hd-filter-container .hd-filter-scheme-name{flex:0 1 auto;max-width:160px;min-width:0;overflow:hidden}.hd-filter-container .hd-filter-scheme-name .hd-filter-scheme-name-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hd-filter-container .hd-filter-scheme-name i[nz-icon]{font-size:12px}.hd-filter-container .hd-filter-scheme-op{flex-shrink:0}::ng-deep .hd-filter-scheme-op-delete{color:#f5222d!important}"]
|
|
896
896
|
}] }
|
|
897
897
|
];
|
|
@@ -1016,4 +1016,4 @@ if (false) {
|
|
|
1016
1016
|
*/
|
|
1017
1017
|
HdFilterComponent.prototype.schemeStore;
|
|
1018
1018
|
}
|
|
1019
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBTzVCLE1BQU0sT0FBTyxpQkFBaUI7Ozs7O0lBMEM1QixZQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFENUUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUM2QixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7Ozs7UUF4QzdELHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUkxQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHMUMsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixzQkFBaUIs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Q0FFTCxLQUFLOzhCQUVMLEtBQUs7MEJBRUwsTUFBTTt5QkFDTixNQUFNOztBQUxrQjtJQUFmLFlBQVksRUFBRTs7NkRBQTRCOzs7SUFGcEQsdUNBQW1DOzs7OztJQUVuQywrQ0FBb0Q7Ozs7O0lBRXBELDRDQUFpQzs7SUFFakMsd0NBQTJDOztJQUMzQyx1Q0FBMEM7O0lBRTFDLCtDQUE4Qjs7SUFDOUIsdUNBQTJCOztJQUMzQiw4Q0FBOEI7Ozs7O0lBQzlCLDBDQUFvRjs7Ozs7SUFDcEYsNENBQW9DOzs7OztJQUVwQywrQ0FBcUQ7Ozs7O0lBQ3JELDBDQUFnRDs7Ozs7SUFDaEQsNENBQWtEOzs7Ozs7SUFHbEQsZ0RBQXlEOzs7OztJQUN6RCxrREFBc0M7O0lBRXRDLHVDQUF1Qzs7SUFDdkMsMENBQXFDOztJQUNyQyw4Q0FBa0Q7O0lBQ2xELDBDQUFzQjs7SUFDdEIseUNBQXFCOztJQUVyQiwrQ0FBMkI7O0lBQzNCLDJDQUFxQzs7SUFDckMsK0NBQThCOztJQUU5QiwrQ0FBMkI7O0lBQzNCLDJDQUFxQzs7SUFDckMsK0NBQThCOztJQUU5Qiw4Q0FBMkQ7Ozs7O0lBQzNELDZDQUFrRDs7SUE4akJsRCxrREFBOEM7O0lBQzlDLHFEQUFvRDs7SUFDcEQsaURBQTRDOzs7OztJQTdqQjFDLCtCQUF1Qjs7Ozs7SUFDdkIsd0NBQW9GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJMaXN0VHlwZSB9IGZyb20gJy4vaGQtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUl0ZW0sIEZvcm1MaXN0VHlwZSB9IGZyb20gJy4uL2hkLWZvcm0vaGQtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvY2FzY2FkZXIudXRpbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJ25nLXpvcnJvLWFudGQnO1xuaW1wb3J0IHtcbiAgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gIEhEX0ZJTFRFUl9TQ0hFTUVfU1RPUkUsXG4gIEhkRmlsdGVyU2NoZW1lLFxuICBIZEZpbHRlclNjaGVtZVN0b3JlXG59IGZyb20gJy4vaGQtZmlsdGVyLXNjaGVtZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGZpbHRlckxpc3Q6IEFycmF5PEZpbHRlcj47XG4gIC8qKiDmmK/lkKblkK/nlKjnrZvpgInnu4TvvIjpu5jorqTlhbPpl63vvIkgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGVuYWJsZUZpbHRlclNjaGVtZSA9IGZhbHNlO1xuICAvKiog562b6YCJ5Zmo5qCH6K+G77yM5byA5ZCv562b6YCJ57uE5pe25b+F5LygICovXG4gIEBJbnB1dCgpIGZpbHRlclNjaGVtZUtleTogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2V0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdmFsaWRhdGVGaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGlzU2hvd01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJMaXN0TW9kdWxhcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnk7IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NoZW1lTG9hZFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNjaGVtZUFjdGlvblN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiDpobXpnaLphY3nva7nmoTliJ3lp4vlgLzvvIjomZrmi5/jgIzpu5jorqTmnaHku7bjgI3vvIkgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gZmFsc2U7XG5cbiAgc2NoZW1lTGlzdDogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+ID0gW107XG4gIGN1cnJlbnRTY2hlbWU6IEhkRmlsdGVyU2NoZW1lID0gbnVsbDtcbiAgY3VycmVudFNjaGVtZU5hbWUgPSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICBzY2hlbWVTYXZpbmcgPSBmYWxzZTtcblxuICBzd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc3dpdGNoRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzd2l0Y2hWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICBzYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2F2ZUFzRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzYXZlQXNWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICByZWFkb25seSBkZWZhdWx0U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICBwcml2YXRlIHJlYWRvbmx5IHN3aXRjaERlZmF1bHRLZXkgPSAnX19ERUZBVUxUX18nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSERfRklMVEVSX1NDSEVNRV9TVE9SRSkgcHJpdmF0ZSBzY2hlbWVTdG9yZTogSGRGaWx0ZXJTY2hlbWVTdG9yZVxuICApIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnRyeUxvYWRTY2hlbWVzKHRydWUpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJMaXN0J10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10gfHwgY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10pIHtcbiAgICAgIHRoaXMudHJ5TG9hZFNjaGVtZXModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2hlbWVMb2FkU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUxvYWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjYW5Vc2VTY2hlbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuZW5hYmxlRmlsdGVyU2NoZW1lICYmIHRoaXMuZmlsdGVyU2NoZW1lS2V5ICYmIHRoaXMuc2NoZW1lU3RvcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZpbHRlckxpc3QpKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3RNb2R1bGFyID0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAlIDQ7XG4gICAgY29uc3QgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKGl0ZW0udmFsdWUsIFtdKTtcbiAgICAgIGl0ZW0uc2hvdyA9IGluZGV4IDwgNztcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwTGlzdCk7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZXNDYXB0dXJlZCkge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZ2V0RmlsdGVyRGF0YSgpKTtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChmbjogYW55LCBldmVudDogYW55LCBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChmbiAmJiBzZWxlY3RPcHRpb24pIHtcbiAgICAgIGZuKGV2ZW50LCBzZWxlY3RPcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbXB1dGVPZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJldHVybiAxODtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNTaG93TW9yZSA/ICgodGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9PT0gMCB8fCB0aGlzLmZpbHRlckxpc3QubGVuZ3RoID4gNykgPyAwIDogKDMgLSB0aGlzLmZpbHRlckxpc3RNb2R1bGFyKSAqIDYpIDogKHRoaXMuZmlsdGVyTGlzdE1vZHVsYXIgPT09IDAgPyAxOCA6ICgzIC0gdGhpcy5maWx0ZXJMaXN0TW9kdWxhcikgKiA2KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZpbHRlcj4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZUxpc3QgPSBbXTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIG5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoWy4uLm5ldyBTZXQobmFtZUxpc3QpXS5sZW5ndGggIT09IGxpc3QubGVuZ3RoKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo6YeN5aSNbmFtZeWAvCEnO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKTtcbiAgICBpZiAodGhpcy5yZXNldEV2ZW50Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0RXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKSB7XG4gICAgY29uc3QgcmVzZXRWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICByZXNldFZhbHVlW2l0ZW0ubmFtZV0gPSBpdGVtLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsdGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93TW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd01vcmUgPSAhdGhpcy5pc1Nob3dNb3JlO1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zaG93ID0gdGhpcy5pc1Nob3dNb3JlID8gaW5kZXggPCA3IDogdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG4gICAgY29uc3QgcGF0Y2hPYmplY3QgPSB7fTtcbiAgICBwYXRjaE9iamVjdFtmaWx0ZXIubmFtZV0gPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2hPYmplY3QpO1xuICB9XG5cbiAgaXNBbGxvd0NsZWFyKGl0ZW06IEZpbHRlcik6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpdGVtLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLmhkQWxsb3dDbGVhcjtcbiAgICB9XG4gICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLSDnrZvpgInnu4QgLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgdHJ5TG9hZFNjaGVtZXMoYXBwbHlEZWZhdWx0OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUxvYWRTdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lTG9hZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRTdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnF1ZXJ5QnlGaWx0ZXJLZXkodGhpcy5maWx0ZXJTY2hlbWVLZXkpLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSBsaXN0IHx8IFtdO1xuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kIHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kID8gZm91bmQudGVtcGxhdGVOYW1lIDogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Yqg6L29562b6YCJ5qih54mI5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgICAgaWYgKGFwcGx5RGVmYXVsdCkge1xuICAgICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiDlsZXnpLrnlKjliJfooajvvJrkv53or4HmnInjgIzpu5jorqTmnaHku7bjgI0gKi9cbiAgZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PEhkRmlsdGVyU2NoZW1lPiA9IFtdO1xuICAgIGNvbnN0IGZyb21EYiA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICBpZiAoZnJvbURiKSB7XG4gICAgICByZXN1bHQucHVzaChmcm9tRGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICAgIHRlbXBsYXRlTmFtZTogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICAgIGZpbHRlclZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgICB9KTtcbiAgICB9XG4gICAgKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuZm9yRWFjaChzID0+IHtcbiAgICAgIGlmIChzLnRlbXBsYXRlTmFtZSAhPT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9wZW5Td2l0Y2hNb2RhbCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTY2hlbWVcbiAgICAgIHx8IHtcbiAgICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgICBmaWx0ZXJWYWx1ZTogJydcbiAgICAgIH07XG4gICAgdGhpcy5idWlsZFN3aXRjaEZvcm1MaXN0KHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGN1cnJlbnQpKTtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBjbG9zZVN3aXRjaE1vZGFsKCkge1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hGb3JtQ2hhbmdlRXZlbnQoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0gPSBmb3JtO1xuICB9XG5cbiAgZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW06IEhkRmlsdGVyU2NoZW1lKTogc3RyaW5nIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gICAgfVxuICAgIGlmIChpdGVtLnV1aWQpIHtcbiAgICAgIHJldHVybiBpdGVtLnV1aWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3dpdGNoRm9ybUxpc3Qoc2VsZWN0ZWRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbGVjdExpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW0pLFxuICAgICAgICBsYWJlbDogaXRlbS50ZW1wbGF0ZU5hbWVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLlNlbGVjdCxcbiAgICAgICAgbGFiZWw6ICfnrZvpgInnu4QnLFxuICAgICAgICBuYW1lOiAnc2NoZW1lS2V5JyxcbiAgICAgICAgcmVxdWlyZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgIHZhbHVlOiBzZWxlY3RlZEtleSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6nnrZvpgInnu4QnLFxuICAgICAgICBzZWxlY3RPcHRpb246IHtcbiAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBoZFNob3dTZWFyY2g6IHRydWUsXG4gICAgICAgICAgc2VsZWN0TGlzdDogc2VsZWN0TGlzdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNvbmZpcm1Td2l0Y2goKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybSB8fCAhdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lS2V5ID0gdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0uZ2V0UmF3VmFsdWUoKS5zY2hlbWVLZXk7XG4gICAgaWYgKHNjaGVtZUtleSA9PSBudWxsIHx8IHNjaGVtZUtleSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBsZXQgdGFyZ2V0OiBIZEZpbHRlclNjaGVtZSA9IG51bGw7XG4gICAgaWYgKHNjaGVtZUtleSA9PT0gdGhpcy5zd2l0Y2hEZWZhdWx0S2V5KSB7XG4gICAgICB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUgJiYgIXMudXVpZClcbiAgICAgICAgfHwgbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy51dWlkID09PSBzY2hlbWVLZXkpO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5U2NoZW1lKHRhcmdldCwgdHJ1ZSk7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRGVmYXVsdFNjaGVtZShpdGVtOiBIZEZpbHRlclNjaGVtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShpdGVtICYmIGl0ZW0udGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gIH1cblxuICBjYW5EZWxldGVDdXJyZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWRcbiAgICAgICYmIHRoaXMuY3VycmVudFNjaGVtZS50ZW1wbGF0ZU5hbWUgIT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgfVxuXG4gIHNhdmVDdXJyZW50U2NoZW1lKCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuY3VycmVudFNjaGVtZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgY29uc3QgYm9keTogSGRGaWx0ZXJTY2hlbWUgPSB7XG4gICAgICB1dWlkOiB0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQgPyB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCA6IG51bGwsXG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyVmFsdWU6IHRoaXMuc2VyaWFsaXplRmlsdGVyVmFsdWUoKVxuICAgIH07XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnNhdmUoYm9keSkuc3Vic2NyaWJlKFxuICAgICAgKHNhdmVkKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+S/neWtmOaIkOWKnycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzYXZlZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHNhdmVkLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5L+d5a2Y5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb3BlblNhdmVBc01vZGFsKCkge1xuICAgIHRoaXMuYnVpbGRTYXZlQXNGb3JtTGlzdCgpO1xuICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlU2F2ZUFzTW9kYWwoKSB7XG4gICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNhdmVBc0Zvcm1DaGFuZ2VFdmVudChmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybSA9IGZvcm07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZUFzRm9ybUxpc3QoKSB7XG4gICAgdGhpcy5zYXZlQXNGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLklucHV0LFxuICAgICAgICBsYWJlbDogJ+etm+mAiee7hOWQjeensCcsXG4gICAgICAgIG5hbWU6ICd0ZW1wbGF0ZU5hbWUnLFxuICAgICAgICByZXF1aXJlOiB0cnVlLFxuICAgICAgICB3aWR0aDogNCxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCdcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY29uZmlybVNhdmVBcygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtIHx8ICF0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gKCh0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybS5nZXRSYXdWYWx1ZSgpLnRlbXBsYXRlTmFtZSkgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign5LiN6IO95L2/55So44CM6buY6K6k5p2h5Lu244CN5L2c5Li6562b6YCJ57uE5ZCN56ew77yM6K+35L2/55So44CM5L+d5a2Y5Li65b2T5YmN44CN6KaG55uW6buY6K6k5p2h5Lu2Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLnNvbWUocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+etm+mAiee7hOWQjeensOW3suWtmOWcqCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBib2R5OiBIZEZpbHRlclNjaGVtZSA9IHtcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IG5hbWUsXG4gICAgICBmaWx0ZXJWYWx1ZTogdGhpcy5zZXJpYWxpemVGaWx0ZXJWYWx1ZSgpXG4gICAgfTtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuc2F2ZShib2R5KS5zdWJzY3JpYmUoXG4gICAgICAoc2F2ZWQpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5Y+m5a2Y5Li65oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNhdmVkO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gc2F2ZWQudGVtcGxhdGVOYW1lO1xuICAgICAgICB0aGlzLnJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCflj6blrZjkuLrlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlQ3VycmVudFNjaGVtZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuRGVsZXRlQ3VycmVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHV1aWQgPSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZDtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuZGVsZXRlKHV1aWQpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5Yig6Zmk5oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9ICh0aGlzLnNjaGVtZUxpc3QgfHwgW10pLmZpbHRlcihzID0+IHMudXVpZCAhPT0gdXVpZCk7XG4gICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+WIoOmZpOWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNjaGVtZUxpc3RLZWVwQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lU3RvcmUucXVlcnlCeUZpbHRlcktleSh0aGlzLmZpbHRlclNjaGVtZUtleSkuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gbGlzdCB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCkge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zY2hlbWVMaXN0LmZpbmQocyA9PiBzLnV1aWQgPT09IHRoaXMuY3VycmVudFNjaGVtZS51dWlkKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoKSA9PiB7IC8qIGlnbm9yZSAqLyB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTY2hlbWVCeU5hbWUobmFtZTogc3RyaW5nLCBlbWl0U2VhcmNoOiBib29sZWFuKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBjb25zdCB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5hcHBseVNjaGVtZSh0YXJnZXQsIGVtaXRTZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTY2hlbWUoc2NoZW1lOiBIZEZpbHRlclNjaGVtZSwgZW1pdFNlYXJjaDogYm9vbGVhbikge1xuICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNjaGVtZSAmJiBzY2hlbWUudXVpZCA/IHNjaGVtZSA6IHtcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IHNjaGVtZSA/IHNjaGVtZS50ZW1wbGF0ZU5hbWUgOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgICAgIGZpbHRlclZhbHVlOiBzY2hlbWUgPyBzY2hlbWUuZmlsdGVyVmFsdWUgOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gdGhpcy5jdXJyZW50U2NoZW1lLnRlbXBsYXRlTmFtZSB8fCBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcblxuICAgIGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSAmJiAhKHNjaGVtZSAmJiBzY2hlbWUudXVpZCkpIHtcbiAgICAgIHZhbHVlcyA9IHRoaXMuY2xvbmVQbGFpbih0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZXMgPSBKU09OLnBhcnNlKHNjaGVtZS5maWx0ZXJWYWx1ZSB8fCAne30nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdmFsdWVzID0ge307XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgLy8g5bqT5Lit6buY6K6k5p2h5Lu26KaG55uW5Yid5aeL5YC877ya5Lul6buY6K6k5YC85Li65bqV77yM5YaN5Y+g5Yqg5bqT5YC8XG4gICAgICAgIHZhbHVlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSwgdmFsdWVzIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYXRjaEZpbHRlclZhbHVlcyh2YWx1ZXMpO1xuICAgIGlmIChlbWl0U2VhcmNoKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0RmlsdGVyRGF0YSgpIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGaWx0ZXJWYWx1ZXModmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSB8fCAhdGhpcy5maWx0ZXJMaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGNoOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodmFsdWVzICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZXMsIGl0ZW0ubmFtZSkpIHtcbiAgICAgICAgcGF0Y2hbaXRlbS5uYW1lXSA9IHRoaXMucmV2aXZlRmlsdGVyVmFsdWUoaXRlbSwgdmFsdWVzW2l0ZW0ubmFtZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2gpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXZpdmVGaWx0ZXJWYWx1ZShmaWx0ZXI6IEZpbHRlciwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5EYXRlUmFuZ2UpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4gdGhpcy5wYXJzZURhdGVMaWtlKHYpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5EYXRlIHx8IGZpbHRlci50eXBlID09PSBGaWx0ZXJMaXN0VHlwZS5Nb250aCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VEYXRlTGlrZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlTGlrZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4oZC5nZXRUaW1lKCkpID8gdmFsdWUgOiBkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyB2YWx1ZSA6IGQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVQbGFpbihvYmo6IGFueSk6IGFueSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaiA9PSBudWxsID8ge30gOiBvYmopKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3VjY2Vzcyhtc2c6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZSkge1xuICAgICAgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UucHJvdG90eXBlLnN1Y2Nlc3MobXNnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dFcnJvcihtc2c6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZSkge1xuICAgICAgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UucHJvdG90eXBlLmVycm9yKG1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2FzY2FkZXJTaG93U2VhcmNoID0gZ2V0Q2FzY2FkZXJTaG93U2VhcmNoO1xuICBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWUgPSBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWU7XG4gIGdldENhc2NhZGVyTWVudVN0eWxlID0gZ2V0Q2FzY2FkZXJNZW51U3R5bGU7XG59XG4iXX0=
|
|
1019
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBTzVCLE1BQU0sT0FBTyxpQkFBaUI7Ozs7O0lBMEM1QixZQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFENUUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUM2QixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7Ozs7UUF4QzdELHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUkxQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHMUMsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixzQkFBaUIs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Q0FFTCxLQUFLOzhCQUVMLEtBQUs7MEJBRUwsTUFBTTt5QkFDTixNQUFNOztBQUxrQjtJQUFmLFlBQVksRUFBRTs7NkRBQTRCOzs7SUFGcEQsdUNBQW1DOzs7OztJQUVuQywrQ0FBb0Q7Ozs7O0lBRXBELDRDQUFpQzs7SUFFakMsd0NBQTJDOztJQUMzQyx1Q0FBMEM7O0lBRTFDLCtDQUE4Qjs7SUFDOUIsdUNBQTJCOztJQUMzQiw4Q0FBOEI7Ozs7O0lBQzlCLDBDQUFvRjs7Ozs7SUFDcEYsNENBQW9DOzs7OztJQUVwQywrQ0FBcUQ7Ozs7O0lBQ3JELDBDQUFnRDs7Ozs7SUFDaEQsNENBQWtEOzs7Ozs7SUFHbEQsZ0RBQXlEOzs7OztJQUN6RCxrREFBc0M7O0lBRXRDLHVDQUF1Qzs7SUFDdkMsMENBQXFDOztJQUNyQyw4Q0FBa0Q7O0lBQ2xELDBDQUFzQjs7SUFDdEIseUNBQXFCOztJQUVyQiwrQ0FBMkI7O0lBQzNCLDJDQUFxQzs7SUFDckMsK0NBQThCOztJQUU5QiwrQ0FBMkI7O0lBQzNCLDJDQUFxQzs7SUFDckMsK0NBQThCOztJQUU5Qiw4Q0FBMkQ7Ozs7O0lBQzNELDZDQUFrRDs7SUE4akJsRCxrREFBOEM7O0lBQzlDLHFEQUFvRDs7SUFDcEQsaURBQTRDOzs7OztJQTdqQjFDLCtCQUF1Qjs7Ozs7SUFDdkIsd0NBQW9GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJMaXN0VHlwZSB9IGZyb20gJy4vaGQtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUl0ZW0sIEZvcm1MaXN0VHlwZSB9IGZyb20gJy4uL2hkLWZvcm0vaGQtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvY2FzY2FkZXIudXRpbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJ25nLXpvcnJvLWFudGQnO1xuaW1wb3J0IHtcbiAgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gIEhEX0ZJTFRFUl9TQ0hFTUVfU1RPUkUsXG4gIEhkRmlsdGVyU2NoZW1lLFxuICBIZEZpbHRlclNjaGVtZVN0b3JlXG59IGZyb20gJy4vaGQtZmlsdGVyLXNjaGVtZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGZpbHRlckxpc3Q6IEFycmF5PEZpbHRlcj47XG4gIC8qKiDmmK/lkKblkK/nlKjnrZvpgInnu4TvvIjpu5jorqTlhbPpl63vvIkgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGVuYWJsZUZpbHRlclNjaGVtZSA9IGZhbHNlO1xuICAvKiog562b6YCJ5Zmo5qCH6K+G77yM5byA5ZCv562b6YCJ57uE5pe25b+F5LygICovXG4gIEBJbnB1dCgpIGZpbHRlclNjaGVtZUtleTogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2V0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdmFsaWRhdGVGaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGlzU2hvd01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJMaXN0TW9kdWxhcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnk7IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NoZW1lTG9hZFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNjaGVtZUFjdGlvblN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiDpobXpnaLphY3nva7nmoTliJ3lp4vlgLzvvIjomZrmi5/jgIzpu5jorqTmnaHku7bjgI3vvIkgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gZmFsc2U7XG5cbiAgc2NoZW1lTGlzdDogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+ID0gW107XG4gIGN1cnJlbnRTY2hlbWU6IEhkRmlsdGVyU2NoZW1lID0gbnVsbDtcbiAgY3VycmVudFNjaGVtZU5hbWUgPSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICBzY2hlbWVTYXZpbmcgPSBmYWxzZTtcblxuICBzd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc3dpdGNoRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzd2l0Y2hWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICBzYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2F2ZUFzRm9ybUxpc3Q6IEFycmF5PEZvcm1JdGVtPiA9IFtdO1xuICBzYXZlQXNWYWxpZGF0ZUZvcm06IEZvcm1Hcm91cDtcblxuICByZWFkb25seSBkZWZhdWx0U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICBwcml2YXRlIHJlYWRvbmx5IHN3aXRjaERlZmF1bHRLZXkgPSAnX19ERUZBVUxUX18nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSERfRklMVEVSX1NDSEVNRV9TVE9SRSkgcHJpdmF0ZSBzY2hlbWVTdG9yZTogSGRGaWx0ZXJTY2hlbWVTdG9yZVxuICApIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnRyeUxvYWRTY2hlbWVzKHRydWUpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJMaXN0J10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10gfHwgY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10pIHtcbiAgICAgIHRoaXMudHJ5TG9hZFNjaGVtZXModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2hlbWVMb2FkU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUxvYWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjYW5Vc2VTY2hlbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuZW5hYmxlRmlsdGVyU2NoZW1lICYmIHRoaXMuZmlsdGVyU2NoZW1lS2V5ICYmIHRoaXMuc2NoZW1lU3RvcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZpbHRlckxpc3QpKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3RNb2R1bGFyID0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAlIDQ7XG4gICAgY29uc3QgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKGl0ZW0udmFsdWUsIFtdKTtcbiAgICAgIGl0ZW0uc2hvdyA9IGluZGV4IDwgNztcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwTGlzdCk7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZXNDYXB0dXJlZCkge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZ2V0RmlsdGVyRGF0YSgpKTtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChmbjogYW55LCBldmVudDogYW55LCBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChmbiAmJiBzZWxlY3RPcHRpb24pIHtcbiAgICAgIGZuKGV2ZW50LCBzZWxlY3RPcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbXB1dGVPZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJldHVybiAxODtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNTaG93TW9yZSA/ICgodGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9PT0gMCB8fCB0aGlzLmZpbHRlckxpc3QubGVuZ3RoID4gNykgPyAwIDogKDMgLSB0aGlzLmZpbHRlckxpc3RNb2R1bGFyKSAqIDYpIDogKHRoaXMuZmlsdGVyTGlzdE1vZHVsYXIgPT09IDAgPyAxOCA6ICgzIC0gdGhpcy5maWx0ZXJMaXN0TW9kdWxhcikgKiA2KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZpbHRlcj4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZUxpc3QgPSBbXTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIG5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoWy4uLm5ldyBTZXQobmFtZUxpc3QpXS5sZW5ndGggIT09IGxpc3QubGVuZ3RoKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo6YeN5aSNbmFtZeWAvCEnO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKTtcbiAgICBpZiAodGhpcy5yZXNldEV2ZW50Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0RXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlckZvcm1XaXRoVmFsdWUoKSB7XG4gICAgY29uc3QgcmVzZXRWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICByZXNldFZhbHVlW2l0ZW0ubmFtZV0gPSBpdGVtLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsdGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93TW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd01vcmUgPSAhdGhpcy5pc1Nob3dNb3JlO1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zaG93ID0gdGhpcy5pc1Nob3dNb3JlID8gaW5kZXggPCA3IDogdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG4gICAgY29uc3QgcGF0Y2hPYmplY3QgPSB7fTtcbiAgICBwYXRjaE9iamVjdFtmaWx0ZXIubmFtZV0gPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLnBhdGNoVmFsdWUocGF0Y2hPYmplY3QpO1xuICB9XG5cbiAgaXNBbGxvd0NsZWFyKGl0ZW06IEZpbHRlcik6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpdGVtLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLmhkQWxsb3dDbGVhcjtcbiAgICB9XG4gICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLSDnrZvpgInnu4QgLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgdHJ5TG9hZFNjaGVtZXMoYXBwbHlEZWZhdWx0OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUxvYWRTdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lTG9hZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUxvYWRTdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnF1ZXJ5QnlGaWx0ZXJLZXkodGhpcy5maWx0ZXJTY2hlbWVLZXkpLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSBsaXN0IHx8IFtdO1xuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IGZvdW5kIHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IGZvdW5kID8gZm91bmQudGVtcGxhdGVOYW1lIDogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Yqg6L29562b6YCJ5qih54mI5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgICAgaWYgKGFwcGx5RGVmYXVsdCkge1xuICAgICAgICAgIHRoaXMuYXBwbHlTY2hlbWVCeU5hbWUoSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiDlsZXnpLrnlKjliJfooajvvJrkv53or4HmnInjgIzpu5jorqTmnaHku7bjgI0gKi9cbiAgZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PEhkRmlsdGVyU2NoZW1lPiA9IFtdO1xuICAgIGNvbnN0IGZyb21EYiA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICBpZiAoZnJvbURiKSB7XG4gICAgICByZXN1bHQucHVzaChmcm9tRGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICAgIHRlbXBsYXRlTmFtZTogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICAgIGZpbHRlclZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30pXG4gICAgICB9KTtcbiAgICB9XG4gICAgKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuZm9yRWFjaChzID0+IHtcbiAgICAgIGlmIChzLnRlbXBsYXRlTmFtZSAhPT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9wZW5Td2l0Y2hNb2RhbCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTY2hlbWVcbiAgICAgIHx8IHtcbiAgICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgICBmaWx0ZXJWYWx1ZTogJydcbiAgICAgIH07XG4gICAgdGhpcy5idWlsZFN3aXRjaEZvcm1MaXN0KHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGN1cnJlbnQpKTtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBjbG9zZVN3aXRjaE1vZGFsKCkge1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hGb3JtQ2hhbmdlRXZlbnQoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0gPSBmb3JtO1xuICB9XG5cbiAgZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW06IEhkRmlsdGVyU2NoZW1lKTogc3RyaW5nIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gICAgfVxuICAgIGlmIChpdGVtLnV1aWQpIHtcbiAgICAgIHJldHVybiBpdGVtLnV1aWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3aXRjaERlZmF1bHRLZXk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3dpdGNoRm9ybUxpc3Qoc2VsZWN0ZWRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbGVjdExpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0U3dpdGNoT3B0aW9uS2V5KGl0ZW0pLFxuICAgICAgICBsYWJlbDogaXRlbS50ZW1wbGF0ZU5hbWVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLlNlbGVjdCxcbiAgICAgICAgbGFiZWw6ICfnrZvpgInnu4QnLFxuICAgICAgICBuYW1lOiAnc2NoZW1lS2V5JyxcbiAgICAgICAgcmVxdWlyZTogdHJ1ZSxcbiAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgIHZhbHVlOiBzZWxlY3RlZEtleSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6nnrZvpgInnu4QnLFxuICAgICAgICBzZWxlY3RPcHRpb246IHtcbiAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBoZFNob3dTZWFyY2g6IHRydWUsXG4gICAgICAgICAgc2VsZWN0TGlzdDogc2VsZWN0TGlzdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNvbmZpcm1Td2l0Y2goKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybSB8fCAhdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1lS2V5ID0gdGhpcy5zd2l0Y2hWYWxpZGF0ZUZvcm0uZ2V0UmF3VmFsdWUoKS5zY2hlbWVLZXk7XG4gICAgaWYgKHNjaGVtZUtleSA9PSBudWxsIHx8IHNjaGVtZUtleSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fpgInmi6nnrZvpgInnu4QnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKTtcbiAgICBsZXQgdGFyZ2V0OiBIZEZpbHRlclNjaGVtZSA9IG51bGw7XG4gICAgaWYgKHNjaGVtZUtleSA9PT0gdGhpcy5zd2l0Y2hEZWZhdWx0S2V5KSB7XG4gICAgICB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUgJiYgIXMudXVpZClcbiAgICAgICAgfHwgbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy51dWlkID09PSBzY2hlbWVLZXkpO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5U2NoZW1lKHRhcmdldCwgdHJ1ZSk7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRGVmYXVsdFNjaGVtZShpdGVtOiBIZEZpbHRlclNjaGVtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShpdGVtICYmIGl0ZW0udGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSk7XG4gIH1cblxuICBjYW5EZWxldGVDdXJyZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWRcbiAgICAgICYmIHRoaXMuY3VycmVudFNjaGVtZS50ZW1wbGF0ZU5hbWUgIT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgfVxuXG4gIHNhdmVDdXJyZW50U2NoZW1lKCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuY3VycmVudFNjaGVtZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgY29uc3QgYm9keTogSGRGaWx0ZXJTY2hlbWUgPSB7XG4gICAgICB1dWlkOiB0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQgPyB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCA6IG51bGwsXG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyVmFsdWU6IHRoaXMuc2VyaWFsaXplRmlsdGVyVmFsdWUoKVxuICAgIH07XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnNhdmUoYm9keSkuc3Vic2NyaWJlKFxuICAgICAgKHNhdmVkKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+S/neWtmOaIkOWKnycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzYXZlZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHNhdmVkLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5L+d5a2Y5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb3BlblNhdmVBc01vZGFsKCkge1xuICAgIHRoaXMuYnVpbGRTYXZlQXNGb3JtTGlzdCgpO1xuICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlU2F2ZUFzTW9kYWwoKSB7XG4gICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNhdmVBc0Zvcm1DaGFuZ2VFdmVudChmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybSA9IGZvcm07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZUFzRm9ybUxpc3QoKSB7XG4gICAgdGhpcy5zYXZlQXNGb3JtTGlzdCA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRm9ybUxpc3RUeXBlLklucHV0LFxuICAgICAgICBsYWJlbDogJ+etm+mAiee7hOWQjeensCcsXG4gICAgICAgIG5hbWU6ICd0ZW1wbGF0ZU5hbWUnLFxuICAgICAgICByZXF1aXJlOiB0cnVlLFxuICAgICAgICB3aWR0aDogNCxcbiAgICAgICAgbWF4TGVuZ3RoOiA1MCxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAn6K+36L6T5YWl562b6YCJ57uE5ZCN56ewJ1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBjb25maXJtU2F2ZUFzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0gfHwgIXRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36L6T5YWl562b6YCJ57uE5ZCN56ewJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSAoKHRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtLmdldFJhd1ZhbHVlKCkudGVtcGxhdGVOYW1lKSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+i+k+WFpeetm+mAiee7hOWQjeensCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfkuI3og73kvb/nlKjjgIzpu5jorqTmnaHku7bjgI3kvZzkuLrnrZvpgInnu4TlkI3np7DvvIzor7fkvb/nlKjjgIzkv53lrZjkuLrlvZPliY3jgI3opobnm5bpu5jorqTmnaHku7YnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RzID0gKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuc29tZShzID0+IHMudGVtcGxhdGVOYW1lID09PSBuYW1lKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign562b6YCJ57uE5ZCN56ew5bey5a2Y5ZyoJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJvZHk6IEhkRmlsdGVyU2NoZW1lID0ge1xuICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgIHRlbXBsYXRlTmFtZTogbmFtZSxcbiAgICAgIGZpbHRlclZhbHVlOiB0aGlzLnNlcmlhbGl6ZUZpbHRlclZhbHVlKClcbiAgICB9O1xuICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zY2hlbWVBY3Rpb25TdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViID0gdGhpcy5zY2hlbWVTdG9yZS5zYXZlKGJvZHkpLnN1YnNjcmliZShcbiAgICAgIChzYXZlZCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKCflj6blrZjkuLrmiJDlip8nKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gc2F2ZWQ7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBzYXZlZC50ZW1wbGF0ZU5hbWU7XG4gICAgICAgIHRoaXMucmVmcmVzaFNjaGVtZUxpc3RLZWVwQ3VycmVudCgpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IoJ+WPpuWtmOS4uuWksei0pe+8micgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGVDdXJyZW50U2NoZW1lKCkge1xuICAgIGlmICghdGhpcy5jYW5EZWxldGVDdXJyZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXVpZCA9IHRoaXMuY3VycmVudFNjaGVtZS51dWlkO1xuICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zY2hlbWVBY3Rpb25TdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViID0gdGhpcy5zY2hlbWVTdG9yZS5kZWxldGUodXVpZCkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKCfliKDpmaTmiJDlip8nKTtcbiAgICAgICAgdGhpcy5zY2hlbWVMaXN0ID0gKHRoaXMuc2NoZW1lTGlzdCB8fCBbXSkuZmlsdGVyKHMgPT4gcy51dWlkICE9PSB1dWlkKTtcbiAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Yig6Zmk5aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVTdG9yZS5xdWVyeUJ5RmlsdGVyS2V5KHRoaXMuZmlsdGVyU2NoZW1lS2V5KS5zdWJzY3JpYmUoXG4gICAgICAobGlzdCkgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSBsaXN0IHx8IFtdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lICYmIHRoaXMuY3VycmVudFNjaGVtZS51dWlkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNjaGVtZUxpc3QuZmluZChzID0+IHMudXVpZCA9PT0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpO1xuICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gZm91bmQ7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gZm91bmQudGVtcGxhdGVOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICgpID0+IHsgLyogaWdub3JlICovIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNjaGVtZUJ5TmFtZShuYW1lOiBzdHJpbmcsIGVtaXRTZWFyY2g6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXREaXNwbGF5U2NoZW1lTGlzdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IGxpc3QuZmluZChzID0+IHMudGVtcGxhdGVOYW1lID09PSBuYW1lKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICB0aGlzLmFwcGx5U2NoZW1lKHRhcmdldCwgZW1pdFNlYXJjaCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNjaGVtZShzY2hlbWU6IEhkRmlsdGVyU2NoZW1lLCBlbWl0U2VhcmNoOiBib29sZWFuKSB7XG4gICAgdGhpcy5jdXJyZW50U2NoZW1lID0gc2NoZW1lICYmIHNjaGVtZS51dWlkID8gc2NoZW1lIDoge1xuICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgIHRlbXBsYXRlTmFtZTogc2NoZW1lID8gc2NoZW1lLnRlbXBsYXRlTmFtZSA6IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICAgICAgZmlsdGVyVmFsdWU6IHNjaGVtZSA/IHNjaGVtZS5maWx0ZXJWYWx1ZSA6IEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSlcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSB0aGlzLmN1cnJlbnRTY2hlbWUudGVtcGxhdGVOYW1lIHx8IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuXG4gICAgbGV0IHZhbHVlczogYW55ID0ge307XG4gICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FICYmICEoc2NoZW1lICYmIHNjaGVtZS51dWlkKSkge1xuICAgICAgdmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbHVlcyA9IEpTT04ucGFyc2Uoc2NoZW1lLmZpbHRlclZhbHVlIHx8ICd7fScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB2YWx1ZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSkge1xuICAgICAgICAvLyDlupPkuK3pu5jorqTmnaHku7bopobnm5bliJ3lp4vlgLzvvJrku6Xpu5jorqTlgLzkuLrlupXvvIzlho3lj6DliqDlupPlgLxcbiAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9LCB2YWx1ZXMgfHwge30pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhdGNoRmlsdGVyVmFsdWVzKHZhbHVlcyk7XG4gICAgaWYgKGVtaXRTZWFyY2gpIHtcbiAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRGaWx0ZXJEYXRhKCkgfHwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEZpbHRlclZhbHVlcyh2YWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtIHx8ICF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0Y2g6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh2YWx1ZXMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlcywgaXRlbS5uYW1lKSkge1xuICAgICAgICBwYXRjaFtpdGVtLm5hbWVdID0gdGhpcy5yZXZpdmVGaWx0ZXJWYWx1ZShpdGVtLCB2YWx1ZXNbaXRlbS5uYW1lXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShwYXRjaCk7XG4gIH1cblxuICBwcml2YXRlIHJldml2ZUZpbHRlclZhbHVlKGZpbHRlcjogRmlsdGVyLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLkRhdGVSYW5nZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiB0aGlzLnBhcnNlRGF0ZUxpa2UodikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLkRhdGUgfHwgZmlsdGVyLnR5cGUgPT09IEZpbHRlckxpc3RUeXBlLk1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZURhdGVMaWtlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGVMaWtlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyB2YWx1ZSA6IGQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IHZhbHVlIDogZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBsYWluKG9iajogYW55KTogYW55IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqID09IG51bGwgPyB7fSA6IG9iaikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dTdWNjZXNzKG1zZzogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlKSB7XG4gICAgICAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZS5wcm90b3R5cGUuc3VjY2Vzcyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Vycm9yKG1zZzogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlKSB7XG4gICAgICAod2luZG93IGFzIGFueSkuaGRNZXNzYWdlU2VydmljZS5wcm90b3R5cGUuZXJyb3IobXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICB9XG4gIH1cblxuICBnZXRDYXNjYWRlclNob3dTZWFyY2ggPSBnZXRDYXNjYWRlclNob3dTZWFyY2g7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSA9IGdldENhc2NhZGVyTWVudUNsYXNzTmFtZTtcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUgPSBnZXRDYXNjYWRlck1lbnVTdHlsZTtcbn1cbiJdfQ==
|
|
@@ -58,6 +58,8 @@ export class HdFormComponent {
|
|
|
58
58
|
*/
|
|
59
59
|
ngOnInit() {
|
|
60
60
|
if (!this.formList || this.formList.length === 0) {
|
|
61
|
+
// 模板始终绑定 [formGroup],空列表时也必须有 FormGroup 实例
|
|
62
|
+
this.validateHdForm = this.fb.group({});
|
|
61
63
|
return;
|
|
62
64
|
}
|
|
63
65
|
this.init();
|
|
@@ -71,6 +73,7 @@ export class HdFormComponent {
|
|
|
71
73
|
JSON.stringify(changes["formList"].currentValue) !==
|
|
72
74
|
JSON.stringify(changes["formList"].previousValue)) {
|
|
73
75
|
if (!this.formList || this.formList.length === 0) {
|
|
76
|
+
this.validateHdForm = this.fb.group({});
|
|
74
77
|
return;
|
|
75
78
|
}
|
|
76
79
|
this.init();
|
|
@@ -689,4 +692,4 @@ if (false) {
|
|
|
689
692
|
*/
|
|
690
693
|
HdFormComponent.prototype.fb;
|
|
691
694
|
}
|
|
692
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJoZC1mb3JtL2hkLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixxQkFBcUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQzs7QUFPaEMsTUFBTSxPQUFPLGVBQWU7Ozs7SUFjMUIsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFaekIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSW5DLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFDdkQsb0JBQWUsR0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBR3RDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBQzNELDhCQUF5QixHQUFXLENBQUMsQ0FBQztRQWtlckMsZ0NBQTJCOzs7O1FBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBQztRQUN4RCw2QkFBd0I7Ozs7UUFBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDO1FBRTdELDBCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQzlDLDZCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBQ3BELHlC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IElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZvcm1JdGVtLCBGb3JtTGlzdFR5cGUgfSBmcm9tIFwiLi9oZC1mb3JtLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSBcIi4uL3V0aWxzL2Nhc2NhZGVyLnV0aWxcIjtcbi8vIGltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImhkLWZvcm1cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9oZC1mb3JtLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9oZC1mb3JtLmNvbXBvbmVudC5sZXNzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBIZEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBmb3JtTGlzdDogQXJyYXk8Rm9ybUl0ZW0+O1xuICBAT3V0cHV0KCkgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHZhbGlkYXRlSGRGb3JtOiBGb3JtR3JvdXA7XG4gIGlucHV0VmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnk7IGV2ZW50OiBhbnkgfT4oKTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVvdXQ6IG51bWJlciA9IDA7IC8vIOm7mOiupOmYsuaKluaXtumXtFxuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgb3BlbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnk7IGV2ZW50OiBhbnkgfT4oKTtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQgfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB7XG4gICAgICAgIC8vIOmYsuaKlue7k+adn+WQjuS7heWxleW8gOaAgeinpuWPkeS4muWKoeWbnuiwg++8jOmBv+WFjemikee5geW8gOWFs+S7jeaJk+aOpeWPo1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5mb3JtTGlzdCB8fCB0aGlzLmZvcm1MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJmb3JtTGlzdFwiXSAmJlxuICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcImZvcm1MaXN0XCJdLmN1cnJlbnRWYWx1ZSkgIT09XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJmb3JtTGlzdFwiXS5wcmV2aW91c1ZhbHVlKVxuICAgICkge1xuICAgICAgaWYgKCF0aGlzLmZvcm1MaXN0IHx8IHRoaXMuZm9ybUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSwgb25TZWFyY2hFdmVudERlYm91bmNlVGltZTogYW55KSB7XG4gICAgaWYgKCFmbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbCA/IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQpKTtcbiAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCB9KTtcbiAgfVxuXG4gIG9uT3BlbkNoYW5nZUV2ZW50KFxuICAgIGZuOiBhbnksXG4gICAgb3BlbjogYm9vbGVhbixcbiAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZTogYW55LFxuICAgIGZvcm1JdGVtPzogYW55LFxuICApIHtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWxleW8gOaXtuWFiOa4heepuuaXpyBvcHRpb25z77yM6YG/5YWN5p2h5Lu25Y+Y5YyW5ZCO6K+35rGC6L+U5Zue5YmN5LuN5bGV56S65LiK5LiA5om55LiL5ouJ5pWw5o2uXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZvcm1JdGVtKTtcbiAgICB9XG4gICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIG9wZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50OiBvcGVuIH0pO1xuICB9XG5cbiAgLyoqIOaciSBvbk9wZW5DaGFuZ2VFdmVudCDml7blsZXlvIDkuIvmi4nlhYjmuIXnqbrpgInpobnvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaXmlrDmlbDmja4gKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZm9ybUl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICghZm9ybUl0ZW0gfHwgIWZvcm1JdGVtLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBmb3JtSXRlbS5zZWxlY3RPcHRpb247XG4gICAgaWYgKG9wdC5zZWxlY3RMaXN0ICE9IG51bGwpIHtcbiAgICAgIG9wdC5zZWxlY3RMaXN0ID0gW107XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgLy8g5byC5bi45o2V6I63XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZvcm1MaXN0KSkge1xuICAgICAgdGhyb3cgXCJmb3Jt57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDXCI7XG4gICAgfVxuICAgIC8vIFJlZ2lvbkFkZHJlc3Mg5Zu65a6a5Y2g5Lik5YiX77yM5L+d6K+B57qn6IGU5a695LiO5Y2V5YiX5o6n5Lu25a+56b2QXG4gICAgdGhpcy5mb3JtTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuUmVnaW9uQWRkcmVzcykge1xuICAgICAgICBpdGVtLndpZHRoID0gMjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDlr7nooajljZXmlbDmja7lgZrliJ3lp4vljJbvvIznlKhyb3fpmpTnprvmr4/ooYzmlbDmja5pdGVtXG4gICAgdGhpcy5kZWFsUm93KCk7XG4gICAgLy8g6aaW5YWI5qC55o2u5a6a5LmJ55qE57uE5Lu25pWw57uEICDljrvliJ3lp4vljJbooajljZVcbiAgICBsZXQgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZm9ybUxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIC8vIOaXpeacn+ebuOWFs+eahOaOp+S7tuWBmueJueauiuWkhOeQhlxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gMiAmJiBpdGVtLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGl0ZW0udmFsdWVcbiAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgIC5zcGxpdChcIi1cIilcbiAgICAgICAgICAubWFwKChzdHIpID0+IHBhcnNlSW50KHN0cikpO1xuICAgICAgICBjb25zdCBuZXdEYXRlU3RyID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpXG4gICAgICAgICAgLnRvTG9jYWxlRGF0ZVN0cmluZyhcInpoLUhhbnMtQ05cIiwge1xuICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCBcIi1cIik7XG4gICAgICAgIGlmIChpdGVtLnZhbGlkYXRvcikge1xuICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIHsgdmFsdWU6IG5ldyBEYXRlKG5ld0RhdGVTdHIpLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGVcbiAgICAgICAgICAgICAgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgaXRlbS52YWxpZGF0b3JdXG4gICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiBuZXcgRGF0ZShuZXdEYXRlU3RyKSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IDMgJiYgaXRlbS52YWx1ZSkge1xuICAgICAgICBsZXQgZm9ybUl0ZW1EYXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtLnZhbHVlKSk7XG4gICAgICAgIGlmIChmb3JtSXRlbURhdGUgJiYgZm9ybUl0ZW1EYXRlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBmb3JtSXRlbURhdGUgPSBmb3JtSXRlbURhdGUubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBpdGVtXG4gICAgICAgICAgICAgIC5zcGxpdChcIi1cIilcbiAgICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBwYXJzZUludChzdHIpKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGVTdHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSlcbiAgICAgICAgICAgICAgLnRvTG9jYWxlRGF0ZVN0cmluZyhcInpoLUhhbnMtQ05cIiwge1xuICAgICAgICAgICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csIFwiLVwiKTtcbiAgICAgICAgICAgIGl0ZW0gPSBuZXcgRGF0ZShuZXdEYXRlU3RyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaXRlbS52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgICAgeyB2YWx1ZTogZm9ybUl0ZW1EYXRlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZVxuICAgICAgICAgICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGl0ZW0udmFsaWRhdG9yXVxuICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGZvcm1JdGVtRGF0ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGUgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IFwiZm9ybee7hOS7tuS4rURhdGVSYW5nZeaOp+S7tnZhbHVl5YC85qC85byP5LiN6KeE6IyD77yM5q2j56Gu56S65L6LWycyMDIwLTAxLTIyJywgJzIwMjAtMDEtMjMnXVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gRm9ybUxpc3RUeXBlLkNoZWNrYm94ICYmIGl0ZW0uY2hlY2tib3hPcHRpb24pIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hWYWx1ZSA9IEFycmF5LmlzQXJyYXkoaXRlbS52YWx1ZSkgPyBpdGVtLnZhbHVlIDogW107XG4gICAgICAgIGlmIChpdGVtLnZhbGlkYXRvcikge1xuICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIHsgdmFsdWU6IGNoZWNrYm94VmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sXG4gICAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZVxuICAgICAgICAgICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBpdGVtLnZhbGlkYXRvcl1cbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIHsgdmFsdWU6IGNoZWNrYm94VmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sXG4gICAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuQ2hlY2tib3gpIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hWYWx1ZSA9IGl0ZW0udmFsdWUgIT0gbnVsbCA/IGl0ZW0udmFsdWUgOiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udmFsaWRhdG9yKSB7XG4gICAgICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAgICAgeyB2YWx1ZTogY2hlY2tib3hWYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlXG4gICAgICAgICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGl0ZW0udmFsaWRhdG9yXVxuICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAgICAgeyB2YWx1ZTogY2hlY2tib3hWYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaXN0VHlwZS5SZWdpb25BZGRyZXNzKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lvblZhbHVlID0gQXJyYXkuaXNBcnJheShpdGVtLnZhbHVlKSA/IGl0ZW0udmFsdWUgOiBudWxsO1xuICAgICAgICBjb25zdCBhZGRyZXNzVmFsdWUgPVxuICAgICAgICAgIGl0ZW0uYWRkcmVzc1ZhbHVlICE9IG51bGwgPyBpdGVtLmFkZHJlc3NWYWx1ZSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVWYWxpZGF0b3JzID1cbiAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdO1xuICAgICAgICBpZiAoaXRlbS52YWxpZGF0b3IpIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiByZWdpb25WYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlXG4gICAgICAgICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGl0ZW0udmFsaWRhdG9yXVxuICAgICAgICAgICAgICA6IFtpdGVtLnZhbGlkYXRvcl0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiByZWdpb25WYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIHJlcXVpcmVWYWxpZGF0b3JzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLmFkZHJlc3NOYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICB7IHZhbHVlOiBhZGRyZXNzVmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sXG4gICAgICAgICAgcmVxdWlyZVZhbGlkYXRvcnMsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXRlbS52YWxpZGF0b3IpIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiBpdGVtLnZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGVcbiAgICAgICAgICAgICAgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgaXRlbS52YWxpZGF0b3JdXG4gICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiBpdGVtLnZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGUgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBMaXN0KTtcblxuICAgIHRoaXMuZm9ybUxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgICAgICBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICAgICAgPyBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KGl0ZW0ubmFtZSk7XG4gICAgICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6K6i6ZiF77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpeegtOWdjyBwYXRjaFZhbHVlIOiBlOWKqOWbnuaYvu+8iVxuICAgICAgICBpZiAoZGVib3VuY2VNcyA+IDApIHtcbiAgICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVIZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZGF0YSkgPT5cbiAgICAgIHRoaXMub25IZEZvcm1WYWx1ZUNoYW5nZWQoZGF0YSksXG4gICAgKTtcbiAgICB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGRlYWxSb3coKSB7XG4gICAgLy8g5LiA6Zi25q61IOmBjeWOhuaVsOaNruiuoeeul+ebuOWFs+aVsOaNrlxuICAgIGNvbnN0IGZvcm1MaXN0TGVuZ3RoID0gdGhpcy5mb3JtTGlzdC5sZW5ndGg7XG4gICAgbGV0IHN0ZXAgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybUxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmZvcm1MaXN0W2ldLmhpZGUpIHtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1MaXN0W2ldLnRvdGFsV2lkdGggPSB0aGlzLmZvcm1MaXN0W2ldLndpZHRoIHx8IDE7XG4gICAgICAgICAgdGhpcy5mb3JtTGlzdFtpXS5pc1Jvd0ZpcnN0ID0gMTtcbiAgICAgICAgICBzdGVwID0gc3RlcCArIDQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5Y675om+5Yiw5YmN5LiA5Liq6Z2eaGlkZeeahOaOp+S7tlxuICAgICAgICAgIGZvciAobGV0IGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1MaXN0W2pdLnRvdGFsV2lkdGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtTGlzdFtpXS50b3RhbFdpZHRoID1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1MaXN0W2pdLnRvdGFsV2lkdGggKyAodGhpcy5mb3JtTGlzdFtpXS53aWR0aCB8fCAxKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUxpc3Rbal0udG90YWxXaWR0aCArICh0aGlzLmZvcm1MaXN0W2ldLndpZHRoIHx8IDEpID5cbiAgICAgICAgICAgICAgICAgIHN0ZXAgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1MaXN0W2pdLnRvdGFsV2lkdGggPD0gc3RlcFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzdGVwID0gc3RlcCArIDQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtTGlzdFtpXS5pc1Jvd0ZpcnN0ID0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1MaXN0W2ldLmlzUm93Rmlyc3QgPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOS6jOmYtuautSBpc1Jvd0ZpcnN055qE5pWw57uE6aG55aKe5Yqg5a2Q6IqC54K5XG4gICAgZm9yIChsZXQgbSA9IDA7IG0gPCBmb3JtTGlzdExlbmd0aDsgbSsrKSB7XG4gICAgICBpZiAodGhpcy5mb3JtTGlzdFttXS5pc1Jvd0ZpcnN0ID09PSAxKSB7XG4gICAgICAgIHRoaXMuZm9ybUxpc3RbbV0uY29sdW1uSXRlbXMgPSBbXTtcbiAgICAgICAgbGV0IHNwYWNlID0gMDtcbiAgICAgICAgZm9yIChsZXQgbiA9IDE7IG4gPCBmb3JtTGlzdExlbmd0aCAtIG07IG4rKykge1xuICAgICAgICAgIGlmIChzcGFjZSA9PT0gNCB8fCB0aGlzLmZvcm1MaXN0W20gKyBuXS5pc1Jvd0ZpcnN0ID09PSAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuZm9ybUxpc3RbbSArIG5dLmhpZGUgJiZcbiAgICAgICAgICAgIHRoaXMuZm9ybUxpc3RbbSArIG5dICYmXG4gICAgICAgICAgICB0aGlzLmZvcm1MaXN0W20gKyBuXS5pc1Jvd0ZpcnN0ID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1MaXN0W21dLmNvbHVtbkl0ZW1zLnB1c2godGhpcy5mb3JtTGlzdFttICsgbl0pO1xuICAgICAgICAgICAgc3BhY2UrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGE/OiBhbnkpIHtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUhkRm9ybSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTGlzdChsaXN0OiBBcnJheTxGb3JtSXRlbT4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBuYW1lTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgLy8g5qCh6aqM5Y2V6aG56YCJ5oup5ZmoXG4gICAgICAvLyBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuU2VsZWN0ICYmICghaXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdCB8fCAoaXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdCAmJiBpdGVtLnNlbGVjdE9wdGlvbi5zZWxlY3RMaXN0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAvLyAgIHRocm93ICdmb3Jt57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo5Y2V6aG56YCJ5oup5Zmo5rKh5pyJ5Lyg5YWl6YCJ6aG5ISdcbiAgICAgIC8vIH1cbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaXN0VHlwZS5SZWdpb25BZGRyZXNzICYmICFpdGVtLmFkZHJlc3NOYW1lKSB7XG4gICAgICAgIHRocm93IFwiZm9ybee7hOS7tiBSZWdpb25BZGRyZXNzIOW/hemhu+mFjee9riBhZGRyZXNzTmFtZVwiO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBpdGVtLnR5cGUgPT09IEZvcm1MaXN0VHlwZS5SZWdpb25BZGRyZXNzICYmXG4gICAgICAgICghaXRlbS5jYXNjYWRlck9wdGlvbiB8fCAhaXRlbS5jYXNjYWRlck9wdGlvbi5vcHRpb25zKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IFwiZm9ybee7hOS7tiBSZWdpb25BZGRyZXNzIOW/hemhu+mFjee9riBjYXNjYWRlck9wdGlvbi5vcHRpb25zXCI7XG4gICAgICB9XG4gICAgICBuYW1lTGlzdC5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuUmVnaW9uQWRkcmVzcykge1xuICAgICAgICBuYW1lTGlzdC5wdXNoKGl0ZW0uYWRkcmVzc05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIOagoemqjCBuYW1lIC8gYWRkcmVzc05hbWUg5piv5ZCm6YeN5aSNXG4gICAgaWYgKFsuLi5uZXcgU2V0KG5hbWVMaXN0KV0ubGVuZ3RoICE9PSBuYW1lTGlzdC5sZW5ndGgpIHtcbiAgICAgIHRocm93IFwiZm9ybee7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMg++8jOWtmOWcqOmHjeWkjW5hbWXlgLwhXCI7XG4gICAgfVxuICAgIC8vIC4uLm1vcmUgY2hlY2tcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBSZWdpb25BZGRyZXNzIOWPjOaOp+S7tuS7u+S4gOiEj+S4lOaXoOaViOaXtuaYvuekuiBlcnJvciAqL1xuICBnZXRSZWdpb25BZGRyZXNzVmFsaWRhdGVTdGF0dXMoaXRlbTogRm9ybUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUhkRm9ybSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KGl0ZW0ubmFtZSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc05hbWVcbiAgICAgID8gdGhpcy52YWxpZGF0ZUhkRm9ybS5nZXQoaXRlbS5hZGRyZXNzTmFtZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpbnZhbGlkRGlydHkgPSAoY29udHJvbCkgPT5cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC5kaXJ0eSAmJiBjb250cm9sLmludmFsaWQ7XG4gICAgaWYgKGludmFsaWREaXJ0eShyZWdpb24pIHx8IGludmFsaWREaXJ0eShhZGRyZXNzKSkge1xuICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRSZWdpb25BZGRyZXNzRXJyb3JUaXAoaXRlbTogRm9ybUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUhkRm9ybSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KGl0ZW0ubmFtZSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc05hbWVcbiAgICAgID8gdGhpcy52YWxpZGF0ZUhkRm9ybS5nZXQoaXRlbS5hZGRyZXNzTmFtZSlcbiAgICAgIDogbnVsbDtcbiAgICBpZiAocmVnaW9uICYmIHJlZ2lvbi5kaXJ0eSAmJiByZWdpb24uaGFzRXJyb3IoXCJyZXF1aXJlZFwiKSkge1xuICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwgKyBcIuS4jeiDveS4uuepulwiO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmRpcnR5ICYmIGFkZHJlc3MuaGFzRXJyb3IoXCJyZXF1aXJlZFwiKSkge1xuICAgICAgcmV0dXJuIFwi6K+m57uG5Zyw5Z2A5LiN6IO95Li656m6XCI7XG4gICAgfVxuICAgIGlmIChpdGVtLnZhbGlkYXRvcktleXMgJiYgcmVnaW9uKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdG9yS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtLnZhbGlkYXRvcktleXNbaV07XG4gICAgICAgIGlmIChyZWdpb24uaGFzRXJyb3Ioa2V5LmtleSkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5LmxhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtLmxhYmVsICsgXCLkuI3og73kuLrnqbpcIjtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52YWxpZGF0ZUhkRm9ybS5jb250cm9scykuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVIZEZvcm0ucmVzZXQoKTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmFsaWRhdGVIZEZvcm0uY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlSGRGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIGlucHV0Q2xlYW4oZmlsdGVyOiBGb3JtSXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGNoT2JqZWN0ID0ge307XG4gICAgcGF0Y2hPYmplY3RbZmlsdGVyLm5hbWVdID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtLnBhdGNoVmFsdWUocGF0Y2hPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaYr+WQpuWFgeiuuOa4heepuu+8muS8mOWFiCBGb3JtSXRlbS5oZEFsbG93Q2xlYXLvvIzlhbbmrKEgc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhcu+8jOm7mOiupCB0cnVlXG4gICAqL1xuICBpc0FsbG93Q2xlYXIoaXRlbTogRm9ybUl0ZW0pOiBib29sZWFuIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXRlbS5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIGlmIChpdGVtLnNlbGVjdE9wdGlvbiAmJiBpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5zZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFyO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzQ2hlY2tib3hDaGVja2VkKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnZhbGlkYXRlSGRGb3JtLmdldChuYW1lKTtcbiAgICBjb25zdCBjdXJyZW50ID0gY29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBudWxsO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICB9XG5cbiAgb25DaGVja2JveEl0ZW1DaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KG5hbWUpO1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSA/IFsuLi5jb250cm9sLnZhbHVlXSA6IFtdO1xuICAgIGNvbnN0IGluZGV4ID0gY3VycmVudC5pbmRleE9mKHZhbHVlKTtcbiAgICBpZiAoY2hlY2tlZCAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgIGN1cnJlbnQucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICghY2hlY2tlZCAmJiBpbmRleCAhPT0gLTEpIHtcbiAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgY29udHJvbC5zZXRWYWx1ZShjdXJyZW50KTtcbiAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICByZWFkb25seSBpbnB1dE51bWJlckRlZmF1bHRGb3JtYXR0ZXIgPSAodmFsdWU6IHVua25vd24pID0+IHZhbHVlO1xuICByZWFkb25seSBpbnB1dE51bWJlckRlZmF1bHRQYXJzZXIgPSAodmFsdWU6IHN0cmluZykgPT4gdmFsdWU7XG5cbiAgZ2V0Q2FzY2FkZXJTaG93U2VhcmNoID0gZ2V0Q2FzY2FkZXJTaG93U2VhcmNoO1xuICBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWUgPSBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWU7XG4gIGdldENhc2NhZGVyTWVudVN0eWxlID0gZ2V0Q2FzY2FkZXJNZW51U3R5bGU7XG59XG4iXX0=
|
|
695
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJoZC1mb3JtL2hkLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixxQkFBcUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQzs7QUFPaEMsTUFBTSxPQUFPLGVBQWU7Ozs7SUFjMUIsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFaekIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSW5DLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFDdkQsb0JBQWUsR0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBR3RDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBQzNELDhCQUF5QixHQUFXLENBQUMsQ0FBQztRQXFlckMsZ0NBQTJCOzs7O1FBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBQztRQUN4RCw2QkFBd0I7Ozs7UUFBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDO1FBRTdELDBCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQzlDLDZCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBQ3BELHlC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QUF5RDs7SUFvZXpELHNEQUFpRTs7SUFDakUsbURBQTZEOztJQUU3RCxnREFBOEM7O0lBQzlDLG1EQUFvRDs7SUFDcEQsK0NBQTRDOzs7OztJQXZlaEMsNkJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZvcm1JdGVtLCBGb3JtTGlzdFR5cGUgfSBmcm9tIFwiLi9oZC1mb3JtLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSBcIi4uL3V0aWxzL2Nhc2NhZGVyLnV0aWxcIjtcbi8vIGltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImhkLWZvcm1cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9oZC1mb3JtLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9oZC1mb3JtLmNvbXBvbmVudC5sZXNzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBIZEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBmb3JtTGlzdDogQXJyYXk8Rm9ybUl0ZW0+O1xuICBAT3V0cHV0KCkgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHZhbGlkYXRlSGRGb3JtOiBGb3JtR3JvdXA7XG4gIGlucHV0VmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnk7IGV2ZW50OiBhbnkgfT4oKTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVvdXQ6IG51bWJlciA9IDA7IC8vIOm7mOiupOmYsuaKluaXtumXtFxuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgb3BlbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnk7IGV2ZW50OiBhbnkgfT4oKTtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQgfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB7XG4gICAgICAgIC8vIOmYsuaKlue7k+adn+WQjuS7heWxleW8gOaAgeinpuWPkeS4muWKoeWbnuiwg++8jOmBv+WFjemikee5geW8gOWFs+S7jeaJk+aOpeWPo1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5mb3JtTGlzdCB8fCB0aGlzLmZvcm1MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8g5qih5p2/5aeL57uI57uR5a6aIFtmb3JtR3JvdXBd77yM56m65YiX6KGo5pe25Lmf5b+F6aG75pyJIEZvcm1Hcm91cCDlrp7kvotcbiAgICAgIHRoaXMudmFsaWRhdGVIZEZvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzW1wiZm9ybUxpc3RcIl0gJiZcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJmb3JtTGlzdFwiXS5jdXJyZW50VmFsdWUpICE9PVxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzW1wiZm9ybUxpc3RcIl0ucHJldmlvdXNWYWx1ZSlcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5mb3JtTGlzdCB8fCB0aGlzLmZvcm1MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlSGRGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSwgb25TZWFyY2hFdmVudERlYm91bmNlVGltZTogYW55KSB7XG4gICAgaWYgKCFmbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbCA/IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQpKTtcbiAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCB9KTtcbiAgfVxuXG4gIG9uT3BlbkNoYW5nZUV2ZW50KFxuICAgIGZuOiBhbnksXG4gICAgb3BlbjogYm9vbGVhbixcbiAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZTogYW55LFxuICAgIGZvcm1JdGVtPzogYW55LFxuICApIHtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWxleW8gOaXtuWFiOa4heepuuaXpyBvcHRpb25z77yM6YG/5YWN5p2h5Lu25Y+Y5YyW5ZCO6K+35rGC6L+U5Zue5YmN5LuN5bGV56S65LiK5LiA5om55LiL5ouJ5pWw5o2uXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZvcm1JdGVtKTtcbiAgICB9XG4gICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIG9wZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50OiBvcGVuIH0pO1xuICB9XG5cbiAgLyoqIOaciSBvbk9wZW5DaGFuZ2VFdmVudCDml7blsZXlvIDkuIvmi4nlhYjmuIXnqbrpgInpobnvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaXmlrDmlbDmja4gKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZm9ybUl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICghZm9ybUl0ZW0gfHwgIWZvcm1JdGVtLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBmb3JtSXRlbS5zZWxlY3RPcHRpb247XG4gICAgaWYgKG9wdC5zZWxlY3RMaXN0ICE9IG51bGwpIHtcbiAgICAgIG9wdC5zZWxlY3RMaXN0ID0gW107XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgLy8g5byC5bi45o2V6I63XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZvcm1MaXN0KSkge1xuICAgICAgdGhyb3cgXCJmb3Jt57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDXCI7XG4gICAgfVxuICAgIC8vIFJlZ2lvbkFkZHJlc3Mg5Zu65a6a5Y2g5Lik5YiX77yM5L+d6K+B57qn6IGU5a695LiO5Y2V5YiX5o6n5Lu25a+56b2QXG4gICAgdGhpcy5mb3JtTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuUmVnaW9uQWRkcmVzcykge1xuICAgICAgICBpdGVtLndpZHRoID0gMjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDlr7nooajljZXmlbDmja7lgZrliJ3lp4vljJbvvIznlKhyb3fpmpTnprvmr4/ooYzmlbDmja5pdGVtXG4gICAgdGhpcy5kZWFsUm93KCk7XG4gICAgLy8g6aaW5YWI5qC55o2u5a6a5LmJ55qE57uE5Lu25pWw57uEICDljrvliJ3lp4vljJbooajljZVcbiAgICBsZXQgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZm9ybUxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIC8vIOaXpeacn+ebuOWFs+eahOaOp+S7tuWBmueJueauiuWkhOeQhlxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gMiAmJiBpdGVtLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGl0ZW0udmFsdWVcbiAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgIC5zcGxpdChcIi1cIilcbiAgICAgICAgICAubWFwKChzdHIpID0+IHBhcnNlSW50KHN0cikpO1xuICAgICAgICBjb25zdCBuZXdEYXRlU3RyID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpXG4gICAgICAgICAgLnRvTG9jYWxlRGF0ZVN0cmluZyhcInpoLUhhbnMtQ05cIiwge1xuICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCBcIi1cIik7XG4gICAgICAgIGlmIChpdGVtLnZhbGlkYXRvcikge1xuICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIHsgdmFsdWU6IG5ldyBEYXRlKG5ld0RhdGVTdHIpLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGVcbiAgICAgICAgICAgICAgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgaXRlbS52YWxpZGF0b3JdXG4gICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiBuZXcgRGF0ZShuZXdEYXRlU3RyKSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IDMgJiYgaXRlbS52YWx1ZSkge1xuICAgICAgICBsZXQgZm9ybUl0ZW1EYXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtLnZhbHVlKSk7XG4gICAgICAgIGlmIChmb3JtSXRlbURhdGUgJiYgZm9ybUl0ZW1EYXRlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBmb3JtSXRlbURhdGUgPSBmb3JtSXRlbURhdGUubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBpdGVtXG4gICAgICAgICAgICAgIC5zcGxpdChcIi1cIilcbiAgICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBwYXJzZUludChzdHIpKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGVTdHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSlcbiAgICAgICAgICAgICAgLnRvTG9jYWxlRGF0ZVN0cmluZyhcInpoLUhhbnMtQ05cIiwge1xuICAgICAgICAgICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csIFwiLVwiKTtcbiAgICAgICAgICAgIGl0ZW0gPSBuZXcgRGF0ZShuZXdEYXRlU3RyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaXRlbS52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgICAgeyB2YWx1ZTogZm9ybUl0ZW1EYXRlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZVxuICAgICAgICAgICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGl0ZW0udmFsaWRhdG9yXVxuICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGZvcm1JdGVtRGF0ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGUgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IFwiZm9ybee7hOS7tuS4rURhdGVSYW5nZeaOp+S7tnZhbHVl5YC85qC85byP5LiN6KeE6IyD77yM5q2j56Gu56S65L6LWycyMDIwLTAxLTIyJywgJzIwMjAtMDEtMjMnXVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gRm9ybUxpc3RUeXBlLkNoZWNrYm94ICYmIGl0ZW0uY2hlY2tib3hPcHRpb24pIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hWYWx1ZSA9IEFycmF5LmlzQXJyYXkoaXRlbS52YWx1ZSkgPyBpdGVtLnZhbHVlIDogW107XG4gICAgICAgIGlmIChpdGVtLnZhbGlkYXRvcikge1xuICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIHsgdmFsdWU6IGNoZWNrYm94VmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sXG4gICAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZVxuICAgICAgICAgICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBpdGVtLnZhbGlkYXRvcl1cbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1Hcm91cExpc3RbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIHsgdmFsdWU6IGNoZWNrYm94VmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sXG4gICAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuQ2hlY2tib3gpIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hWYWx1ZSA9IGl0ZW0udmFsdWUgIT0gbnVsbCA/IGl0ZW0udmFsdWUgOiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0udmFsaWRhdG9yKSB7XG4gICAgICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAgICAgeyB2YWx1ZTogY2hlY2tib3hWYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlXG4gICAgICAgICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGl0ZW0udmFsaWRhdG9yXVxuICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAgICAgeyB2YWx1ZTogY2hlY2tib3hWYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaXN0VHlwZS5SZWdpb25BZGRyZXNzKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lvblZhbHVlID0gQXJyYXkuaXNBcnJheShpdGVtLnZhbHVlKSA/IGl0ZW0udmFsdWUgOiBudWxsO1xuICAgICAgICBjb25zdCBhZGRyZXNzVmFsdWUgPVxuICAgICAgICAgIGl0ZW0uYWRkcmVzc1ZhbHVlICE9IG51bGwgPyBpdGVtLmFkZHJlc3NWYWx1ZSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVWYWxpZGF0b3JzID1cbiAgICAgICAgICBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdO1xuICAgICAgICBpZiAoaXRlbS52YWxpZGF0b3IpIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiByZWdpb25WYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlXG4gICAgICAgICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGl0ZW0udmFsaWRhdG9yXVxuICAgICAgICAgICAgICA6IFtpdGVtLnZhbGlkYXRvcl0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiByZWdpb25WYWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIHJlcXVpcmVWYWxpZGF0b3JzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLmFkZHJlc3NOYW1lXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICB7IHZhbHVlOiBhZGRyZXNzVmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sXG4gICAgICAgICAgcmVxdWlyZVZhbGlkYXRvcnMsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXRlbS52YWxpZGF0b3IpIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiBpdGVtLnZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGVcbiAgICAgICAgICAgICAgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgaXRlbS52YWxpZGF0b3JdXG4gICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICB7IHZhbHVlOiBpdGVtLnZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgaXRlbS5yZXF1aXJlICYmICFpdGVtLmhpZGUgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBMaXN0KTtcblxuICAgIHRoaXMuZm9ybUxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgICAgICBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICAgICAgPyBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KGl0ZW0ubmFtZSk7XG4gICAgICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6K6i6ZiF77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpeegtOWdjyBwYXRjaFZhbHVlIOiBlOWKqOWbnuaYvu+8iVxuICAgICAgICBpZiAoZGVib3VuY2VNcyA+IDApIHtcbiAgICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVIZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZGF0YSkgPT5cbiAgICAgIHRoaXMub25IZEZvcm1WYWx1ZUNoYW5nZWQoZGF0YSksXG4gICAgKTtcbiAgICB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGRlYWxSb3coKSB7XG4gICAgLy8g5LiA6Zi25q61IOmBjeWOhuaVsOaNruiuoeeul+ebuOWFs+aVsOaNrlxuICAgIGNvbnN0IGZvcm1MaXN0TGVuZ3RoID0gdGhpcy5mb3JtTGlzdC5sZW5ndGg7XG4gICAgbGV0IHN0ZXAgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybUxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmZvcm1MaXN0W2ldLmhpZGUpIHtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1MaXN0W2ldLnRvdGFsV2lkdGggPSB0aGlzLmZvcm1MaXN0W2ldLndpZHRoIHx8IDE7XG4gICAgICAgICAgdGhpcy5mb3JtTGlzdFtpXS5pc1Jvd0ZpcnN0ID0gMTtcbiAgICAgICAgICBzdGVwID0gc3RlcCArIDQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5Y675om+5Yiw5YmN5LiA5Liq6Z2eaGlkZeeahOaOp+S7tlxuICAgICAgICAgIGZvciAobGV0IGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1MaXN0W2pdLnRvdGFsV2lkdGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtTGlzdFtpXS50b3RhbFdpZHRoID1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1MaXN0W2pdLnRvdGFsV2lkdGggKyAodGhpcy5mb3JtTGlzdFtpXS53aWR0aCB8fCAxKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUxpc3Rbal0udG90YWxXaWR0aCArICh0aGlzLmZvcm1MaXN0W2ldLndpZHRoIHx8IDEpID5cbiAgICAgICAgICAgICAgICAgIHN0ZXAgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1MaXN0W2pdLnRvdGFsV2lkdGggPD0gc3RlcFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzdGVwID0gc3RlcCArIDQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtTGlzdFtpXS5pc1Jvd0ZpcnN0ID0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1MaXN0W2ldLmlzUm93Rmlyc3QgPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOS6jOmYtuautSBpc1Jvd0ZpcnN055qE5pWw57uE6aG55aKe5Yqg5a2Q6IqC54K5XG4gICAgZm9yIChsZXQgbSA9IDA7IG0gPCBmb3JtTGlzdExlbmd0aDsgbSsrKSB7XG4gICAgICBpZiAodGhpcy5mb3JtTGlzdFttXS5pc1Jvd0ZpcnN0ID09PSAxKSB7XG4gICAgICAgIHRoaXMuZm9ybUxpc3RbbV0uY29sdW1uSXRlbXMgPSBbXTtcbiAgICAgICAgbGV0IHNwYWNlID0gMDtcbiAgICAgICAgZm9yIChsZXQgbiA9IDE7IG4gPCBmb3JtTGlzdExlbmd0aCAtIG07IG4rKykge1xuICAgICAgICAgIGlmIChzcGFjZSA9PT0gNCB8fCB0aGlzLmZvcm1MaXN0W20gKyBuXS5pc1Jvd0ZpcnN0ID09PSAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuZm9ybUxpc3RbbSArIG5dLmhpZGUgJiZcbiAgICAgICAgICAgIHRoaXMuZm9ybUxpc3RbbSArIG5dICYmXG4gICAgICAgICAgICB0aGlzLmZvcm1MaXN0W20gKyBuXS5pc1Jvd0ZpcnN0ID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1MaXN0W21dLmNvbHVtbkl0ZW1zLnB1c2godGhpcy5mb3JtTGlzdFttICsgbl0pO1xuICAgICAgICAgICAgc3BhY2UrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGE/OiBhbnkpIHtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUhkRm9ybSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTGlzdChsaXN0OiBBcnJheTxGb3JtSXRlbT4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBuYW1lTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgLy8g5qCh6aqM5Y2V6aG56YCJ5oup5ZmoXG4gICAgICAvLyBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuU2VsZWN0ICYmICghaXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdCB8fCAoaXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdCAmJiBpdGVtLnNlbGVjdE9wdGlvbi5zZWxlY3RMaXN0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAvLyAgIHRocm93ICdmb3Jt57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo5Y2V6aG56YCJ5oup5Zmo5rKh5pyJ5Lyg5YWl6YCJ6aG5ISdcbiAgICAgIC8vIH1cbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaXN0VHlwZS5SZWdpb25BZGRyZXNzICYmICFpdGVtLmFkZHJlc3NOYW1lKSB7XG4gICAgICAgIHRocm93IFwiZm9ybee7hOS7tiBSZWdpb25BZGRyZXNzIOW/hemhu+mFjee9riBhZGRyZXNzTmFtZVwiO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBpdGVtLnR5cGUgPT09IEZvcm1MaXN0VHlwZS5SZWdpb25BZGRyZXNzICYmXG4gICAgICAgICghaXRlbS5jYXNjYWRlck9wdGlvbiB8fCAhaXRlbS5jYXNjYWRlck9wdGlvbi5vcHRpb25zKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IFwiZm9ybee7hOS7tiBSZWdpb25BZGRyZXNzIOW/hemhu+mFjee9riBjYXNjYWRlck9wdGlvbi5vcHRpb25zXCI7XG4gICAgICB9XG4gICAgICBuYW1lTGlzdC5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGlzdFR5cGUuUmVnaW9uQWRkcmVzcykge1xuICAgICAgICBuYW1lTGlzdC5wdXNoKGl0ZW0uYWRkcmVzc05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIOagoemqjCBuYW1lIC8gYWRkcmVzc05hbWUg5piv5ZCm6YeN5aSNXG4gICAgaWYgKFsuLi5uZXcgU2V0KG5hbWVMaXN0KV0ubGVuZ3RoICE9PSBuYW1lTGlzdC5sZW5ndGgpIHtcbiAgICAgIHRocm93IFwiZm9ybee7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMg++8jOWtmOWcqOmHjeWkjW5hbWXlgLwhXCI7XG4gICAgfVxuICAgIC8vIC4uLm1vcmUgY2hlY2tcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBSZWdpb25BZGRyZXNzIOWPjOaOp+S7tuS7u+S4gOiEj+S4lOaXoOaViOaXtuaYvuekuiBlcnJvciAqL1xuICBnZXRSZWdpb25BZGRyZXNzVmFsaWRhdGVTdGF0dXMoaXRlbTogRm9ybUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUhkRm9ybSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KGl0ZW0ubmFtZSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc05hbWVcbiAgICAgID8gdGhpcy52YWxpZGF0ZUhkRm9ybS5nZXQoaXRlbS5hZGRyZXNzTmFtZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpbnZhbGlkRGlydHkgPSAoY29udHJvbCkgPT5cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC5kaXJ0eSAmJiBjb250cm9sLmludmFsaWQ7XG4gICAgaWYgKGludmFsaWREaXJ0eShyZWdpb24pIHx8IGludmFsaWREaXJ0eShhZGRyZXNzKSkge1xuICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRSZWdpb25BZGRyZXNzRXJyb3JUaXAoaXRlbTogRm9ybUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUhkRm9ybSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KGl0ZW0ubmFtZSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc05hbWVcbiAgICAgID8gdGhpcy52YWxpZGF0ZUhkRm9ybS5nZXQoaXRlbS5hZGRyZXNzTmFtZSlcbiAgICAgIDogbnVsbDtcbiAgICBpZiAocmVnaW9uICYmIHJlZ2lvbi5kaXJ0eSAmJiByZWdpb24uaGFzRXJyb3IoXCJyZXF1aXJlZFwiKSkge1xuICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwgKyBcIuS4jeiDveS4uuepulwiO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmRpcnR5ICYmIGFkZHJlc3MuaGFzRXJyb3IoXCJyZXF1aXJlZFwiKSkge1xuICAgICAgcmV0dXJuIFwi6K+m57uG5Zyw5Z2A5LiN6IO95Li656m6XCI7XG4gICAgfVxuICAgIGlmIChpdGVtLnZhbGlkYXRvcktleXMgJiYgcmVnaW9uKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdG9yS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtLnZhbGlkYXRvcktleXNbaV07XG4gICAgICAgIGlmIChyZWdpb24uaGFzRXJyb3Ioa2V5LmtleSkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5LmxhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtLmxhYmVsICsgXCLkuI3og73kuLrnqbpcIjtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52YWxpZGF0ZUhkRm9ybS5jb250cm9scykuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVIZEZvcm0ucmVzZXQoKTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmFsaWRhdGVIZEZvcm0uY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlSGRGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIGlucHV0Q2xlYW4oZmlsdGVyOiBGb3JtSXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGNoT2JqZWN0ID0ge307XG4gICAgcGF0Y2hPYmplY3RbZmlsdGVyLm5hbWVdID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtLnBhdGNoVmFsdWUocGF0Y2hPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaYr+WQpuWFgeiuuOa4heepuu+8muS8mOWFiCBGb3JtSXRlbS5oZEFsbG93Q2xlYXLvvIzlhbbmrKEgc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhcu+8jOm7mOiupCB0cnVlXG4gICAqL1xuICBpc0FsbG93Q2xlYXIoaXRlbTogRm9ybUl0ZW0pOiBib29sZWFuIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXRlbS5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5oZEFsbG93Q2xlYXI7XG4gICAgfVxuICAgIGlmIChpdGVtLnNlbGVjdE9wdGlvbiAmJiBpdGVtLnNlbGVjdE9wdGlvbi5oZEFsbG93Q2xlYXIgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhaXRlbS5zZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFyO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzQ2hlY2tib3hDaGVja2VkKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnZhbGlkYXRlSGRGb3JtLmdldChuYW1lKTtcbiAgICBjb25zdCBjdXJyZW50ID0gY29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBudWxsO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICB9XG5cbiAgb25DaGVja2JveEl0ZW1DaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMudmFsaWRhdGVIZEZvcm0uZ2V0KG5hbWUpO1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSA/IFsuLi5jb250cm9sLnZhbHVlXSA6IFtdO1xuICAgIGNvbnN0IGluZGV4ID0gY3VycmVudC5pbmRleE9mKHZhbHVlKTtcbiAgICBpZiAoY2hlY2tlZCAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgIGN1cnJlbnQucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICghY2hlY2tlZCAmJiBpbmRleCAhPT0gLTEpIHtcbiAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgY29udHJvbC5zZXRWYWx1ZShjdXJyZW50KTtcbiAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICByZWFkb25seSBpbnB1dE51bWJlckRlZmF1bHRGb3JtYXR0ZXIgPSAodmFsdWU6IHVua25vd24pID0+IHZhbHVlO1xuICByZWFkb25seSBpbnB1dE51bWJlckRlZmF1bHRQYXJzZXIgPSAodmFsdWU6IHN0cmluZykgPT4gdmFsdWU7XG5cbiAgZ2V0Q2FzY2FkZXJTaG93U2VhcmNoID0gZ2V0Q2FzY2FkZXJTaG93U2VhcmNoO1xuICBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWUgPSBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWU7XG4gIGdldENhc2NhZGVyTWVudVN0eWxlID0gZ2V0Q2FzY2FkZXJNZW51U3R5bGU7XG59XG4iXX0=
|