tnx-shared 5.0.69 → 5.0.70
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/bundles/tnx-shared.umd.js +575 -807
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/data-form-base.d.ts +2 -2
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/data-list-base.d.ts +1 -3
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/classes/constants.d.ts +0 -4
- package/classes/constants.d.ts.map +1 -1
- package/classes/form-schema.d.ts +4 -38
- package/classes/form-schema.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts +0 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +1 -4
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +1 -6
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +2 -0
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-explorer/services/download-link.service.d.ts +1 -0
- package/components/file-explorer/services/download-link.service.d.ts.map +1 -1
- package/components/file-explorer/services/file-explorer.service.d.ts +2 -0
- package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
- package/components/file-explorer/services/file-object.service.d.ts +1 -0
- package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
- package/components/file-explorer/signature-detail/signature-detail.component.d.ts +8 -0
- package/components/file-explorer/signature-detail/signature-detail.component.d.ts.map +1 -0
- package/components/file-explorer/signature-detail/signature-detail.component.ngfactory.d.ts.map +1 -0
- package/components/file-explorer/signature-detail/signature-detail.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/mask/mask.component.d.ts +0 -2
- package/components/mask/mask.component.d.ts.map +1 -1
- package/configs/component-context.constant.d.ts +0 -1
- package/configs/component-context.constant.d.ts.map +1 -1
- package/esm2015/classes/base/data-form-base.js +5 -5
- package/esm2015/classes/base/data-list-base.js +23 -48
- package/esm2015/classes/constants.js +1 -6
- package/esm2015/classes/form-schema.js +3 -34
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +16 -72
- package/esm2015/components/common-app-component/app.menu.component.js +2 -2
- package/esm2015/components/common-app-component/common-app-component.js +3 -26
- package/esm2015/components/crud/crud-form/crud-form.component.js +2 -9
- package/esm2015/components/crud/crud-list/crud-list.component.js +6 -71
- package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +3 -29
- package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +3 -29
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +151 -12
- package/esm2015/components/file-explorer/services/download-link.service.js +4 -1
- package/esm2015/components/file-explorer/services/file-explorer.service.js +22 -8
- package/esm2015/components/file-explorer/services/file-object.service.js +15 -1
- package/esm2015/components/file-explorer/signature-detail/signature-detail.component.js +66 -0
- package/esm2015/components/mask/mask.component.js +4 -8
- package/esm2015/components/workflow/services/entity-workflow-history.service.js +3 -3
- package/esm2015/components/workflow/services/entity-workflow-setting.service.js +4 -4
- package/esm2015/configs/component-context.constant.js +2 -3
- package/esm2015/models/grid-info.js +1 -1
- package/esm2015/pipes/tn-date.pipe.js +2 -12
- package/esm2015/public-api.js +7 -3
- package/esm2015/services/base.service.js +1 -16
- package/esm2015/services/common.service.js +1 -9
- package/esm2015/services/crud.service.js +4 -23
- package/esm2015/services/menu.service.js +3 -6
- package/esm2015/services/notifier.service.js +2 -2
- package/esm2015/services/permission.service.js +2 -9
- package/esm2015/services/template-text-v4.service.js +1 -1
- package/esm2015/services/user-v5.service.js +1 -1
- package/esm2015/services/user.service.js +2 -8
- package/esm2015/tnx-shared.js +22 -24
- package/esm2015/tnx-shared.module.js +4 -2
- package/fesm2015/tnx-shared.js +341 -530
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +0 -1
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/pipes/tn-date.pipe.d.ts +0 -2
- package/pipes/tn-date.pipe.d.ts.map +1 -1
- package/public-api.d.ts +6 -2
- package/public-api.d.ts.map +1 -1
- package/services/base.service.d.ts +0 -1
- package/services/base.service.d.ts.map +1 -1
- package/services/common.service.d.ts +0 -4
- package/services/common.service.d.ts.map +1 -1
- package/services/crud.service.d.ts.map +1 -1
- package/services/menu.service.d.ts +1 -1
- package/services/menu.service.d.ts.map +1 -1
- package/services/permission.service.d.ts +0 -1
- package/services/permission.service.d.ts.map +1 -1
- package/services/template-text-v4.service.d.ts.map +1 -1
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.d.ts +21 -23
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -2
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
- package/components/file-explorer/models/file-settings.d.ts +0 -46
- package/components/file-explorer/models/file-settings.d.ts.map +0 -1
- package/esm2015/components/file-explorer/models/file-settings.js +0 -60
- package/esm2015/services/organization-base.service.js +0 -57
- package/services/organization-base.service.d.ts +0 -16
- package/services/organization-base.service.d.ts.map +0 -1
- package/services/organization-base.service.ngfactory.d.ts.map +0 -1
|
@@ -1095,14 +1095,6 @@ export class CommonService {
|
|
|
1095
1095
|
errorDetail: err
|
|
1096
1096
|
};
|
|
1097
1097
|
}
|
|
1098
|
-
tryParseJson(data) {
|
|
1099
|
-
try {
|
|
1100
|
-
return { valid: true, value: JSON.parse(data) };
|
|
1101
|
-
}
|
|
1102
|
-
catch (e) {
|
|
1103
|
-
return { valid: false, value: data };
|
|
1104
|
-
}
|
|
1105
|
-
}
|
|
1106
1098
|
}
|
|
1107
1099
|
CommonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CommonService_Factory() { return new CommonService(i0.ɵɵinject(i1.ModuleConfigService)); }, token: CommonService, providedIn: "root" });
|
|
1108
1100
|
CommonService.decorators = [
|
|
@@ -1113,4 +1105,4 @@ CommonService.decorators = [
|
|
|
1113
1105
|
CommonService.ctorParameters = () => [
|
|
1114
1106
|
{ type: ModuleConfigService }
|
|
1115
1107
|
];
|
|
1116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsic2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUdsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUVyRCxxQkFBcUI7QUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCLElBQUssZUFLSjtBQUxELFdBQUssZUFBZTtJQUNoQix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7SUFDSixpRUFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUxJLGVBQWUsS0FBZixlQUFlLFFBS25CO0FBSUQsTUFBTSxPQUFPLGFBQWE7SUFnQ3RCLFlBQW9CLG9CQUF5QztRQUF6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBL0I3RCxlQUFVLEdBQW9CLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFckQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQXlCcEIsZ0JBQVcsR0FBRyxrQ0FBa0Ms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QUUsSUFBSSxFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDOzs7O1lBOXNDSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWRRLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICdmYXN0LXNhZmUtc3RyaW5naWZ5JztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZGlhbG9nJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICd1bmRlcnNjb3JlJztcclxuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyLCBTb3J0IH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcclxuXHJcbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxyXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xyXG5cclxuZW51bSBNZW51T3JpZW50YXRpb24ge1xyXG4gICAgU1RBVElDLFxyXG4gICAgT1ZFUkxBWSxcclxuICAgIFNMSU0sXHJcbiAgICBIT1JJWk9OVEFMLFxyXG59XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1vblNlcnZpY2Uge1xyXG4gICAgbGF5b3V0TW9kZTogTWVudU9yaWVudGF0aW9uID0gTWVudU9yaWVudGF0aW9uLlNUQVRJQztcclxuXHJcbiAgICBkYXJrTWVudSA9IGZhbHNlO1xyXG5cclxuICAgIHByb2ZpbGVNb2RlID0gJ3RvcCc7XHJcblxyXG4gICAgcm90YXRlTWVudUJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgICB0b3BiYXJNZW51QWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIG92ZXJsYXlNZW51QWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIHN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgc3RhdGljTWVudU1vYmlsZUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBtZW51Q2xpY2s6IGJvb2xlYW47XHJcblxyXG4gICAgdG9wYmFySXRlbUNsaWNrOiBib29sZWFuO1xyXG5cclxuICAgIGFjdGl2ZVRvcGJhckl0ZW06IGFueTtcclxuXHJcbiAgICByZXNldE1lbnU6IGJvb2xlYW47XHJcblxyXG4gICAgY3VycmVudEFjdGl2ZUl0ZW06IGFueTtcclxuXHJcbiAgICBtZW51SG92ZXJBY3RpdmU6IGJvb2xlYW47XHJcbiAgICB0ZXN0OiBib29sZWFuO1xyXG5cclxuICAgIHRuUHJlZml4TG9nID0gJy0tLS0tLS0tLT5UTl9MT0dfQ09OU09MRS0tLS0tLS0+JztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ3VpZCgpIHtcclxuICAgICAgICBmdW5jdGlvbiBzNCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgczQoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tU3RyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKTtcclxuICAgIH1cclxuXHJcbiAgICByYW5kb21TdHJpbmdXaXRoTm90RGVsaW1pdGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKS5yZXBsYWNlKCctJywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmluZ0Zvcm1hdChpbnB1dFN0cmluZzogc3RyaW5nLCAuLi5hcmdzKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBhcmdzKSB7XHJcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcucmVwbGFjZShgeyR7aW5kZXh9fWAsIGFyZ3NbaW5kZXhdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbnB1dFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBodG1sRW5jb2RlKHN0cikge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmcoc3RyKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyZxdW90OycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEzhuqV5IHbhu4EgZ2nDoSB0cuG7iyB0aGVvIHBhdGggJydcclxuICAgIGdldFZhbHVlQnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtwYXRoc1tpXV07XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgb2JqID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgLy8ge3NlYXJjaDoge2tleSA6ICduYW1uaCd9fSAuID0+IHNlYXJjaC5rZXlcclxuICAgIHNldFZhbHVlQnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gZmllbGRzLmxlbmd0aDsgaSA8IG4gJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpXTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbZmllbGRdID0gZGF0YTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0W2ZpZWxkXSA9PT0gJ3VuZGVmaW5lZCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAhXy5pc09iamVjdChyZXN1bHRbZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W2ZpZWxkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGREYXlzKGRhdGU6IERhdGUsIGRheXM6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIGNsb25lZC5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRIb3VycyhkYXRlOiBEYXRlLCBob3VyczogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgY2xvbmVkLnNldFRpbWUoY2xvbmVkLmdldFRpbWUoKSArIChob3VycyAqIDYwICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRXb3JrRGF5cyhkYXRlLCBkYXlzKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgd2hpbGUgKGRheXMgPiAwKSB7XHJcbiAgICAgICAgICAgIGNsb25lZC5zZXREYXRlKGNsb25lZC5nZXREYXRlKCkgKyAxKTtcclxuICAgICAgICAgICAgaWYgKGNsb25lZC5nZXREYXkoKSAhPT0gMCAmJiBjbG9uZWQuZ2V0RGF5KCkgIT09IDYpIHtcclxuICAgICAgICAgICAgICAgIGRheXMgLT0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFRvQ1NWKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XHJcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gYy5oZWFkZXIgKyAnLCc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcclxuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRtLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSArICcsJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVjIoZGF0YXM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcclxuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXHJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZG0ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XHJcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xyXG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFRvQ1NWR3JvdXAoZGF0YXM6IGFueSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XHJcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gY29sdW1uc1tpXS5oZWFkZXIgKyAnLCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFzLmZvckVhY2goKHN1YkRhdGEpID0+IHtcclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHN1YkRhdGEuZ3JvdXBOYW1lKTtcclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKGhlYWRlclN0cmluZyk7XHJcblxyXG4gICAgICAgICAgICBzdWJEYXRhLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZG0ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJykgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKCdcXG4nKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xyXG4gICAgICAgIGxldCBjc3YgPSAnJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU2VsZWN0SXRlbShcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgdmFsdWVGaWVsZDogc3RyaW5nLFxyXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nID0gJycsXHJcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nID0gJycsXHJcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMiA9ICcnLFxyXG4gICAgICAgIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWVcclxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XHJcbiAgICAgICAgaWYgKCF0ZXh0RmllbGQgfHwgdGV4dEZpZWxkID09PSAnJykge1xyXG4gICAgICAgICAgICB0ZXh0RmllbGQgPSB2YWx1ZUZpZWxkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGVtcEFycjogU2VsZWN0SXRlbVtdID0gW107XHJcblxyXG4gICAgICAgIGlmIChhbGxvd051bGwpIHtcclxuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHsgbGFiZWw6ICcnLCB2YWx1ZTogJycgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cclxuICAgICAgICBmb3IgKGNvbnN0IGluZCBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW2luZF07XHJcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQyLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeFRleHRGaWVsZDJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVt2YWx1ZUZpZWxkXSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZW1wQXJyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhYmVsKFxyXG4gICAgICAgIGl0ZW06IGFueSxcclxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyxcclxuICAgICAgICB0ZXh0RmllbGQyOiBzdHJpbmcsXHJcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMjogc3RyaW5nXHJcbiAgICApIHtcclxuICAgICAgICBpZiAodGV4dEZpZWxkMikge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgaXRlbVt0ZXh0RmllbGRdICtcclxuICAgICAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgICAgIHByZWZpeFRleHRGaWVsZDIgK1xyXG4gICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgIGl0ZW1bdGV4dEZpZWxkMl1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbVt0ZXh0RmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtTWFzdGVyRGF0YShcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJyxcclxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyA9ICduYW1lJ1xyXG4gICAgKTogU2VsZWN0SXRlbVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VG9TZWxlY3RJdGVtKGRhdGEsIHZhbHVlRmllbGQsIHRleHRGaWVsZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JjZUlmNDAxID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pc0ZvcmNlTG9nb3V0SWY0MDE7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZUlmNDAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfYXV0aGVuU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoZW5TZXJ2aWNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9ub3RpZmllclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICAgICAgICAgIF9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0jhu4cgdGjhu5FuZyBz4bq9IHThu7EgxJHEg25nIHh14bqldCBzYXUgNXMgxJHhu4MgY+G6rXAgbmjhuq1wIHBoacOqbiBi4bqjbiBt4bubaScsICdUaMO0bmcgYsOhbycpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NsZWVwIGJlZm9yZSBsb2dvdXQnKTtcclxuICAgICAgICAgICAgICAgICAgICBfYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDxSZXNwb25zZVJlc3VsdD57XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEuIEjDo3kgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QhISEnLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgdG90YWxSZWNvcmQ6IDAsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgZXJyb3JDaGVja0V4aXN0OiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckNvbnRyb2xJZDogbnVsbCxcclxuICAgICAgICAgICAgZXJyb3JGb3JtSWQ6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblRvcGJhckl0ZW1DbGljayhldmVudCwgaXRlbSkge1xyXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9PT0gaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgYXV0b09wZW5Ub3BiYXJJdGVtKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaXNIb3Jpem9udGFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5IT1JJWk9OVEFMO1xyXG4gICAgfVxyXG4gICAgaXNTbGltKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5TTElNO1xyXG4gICAgfVxyXG4gICAgaGlkZU92ZXJsYXlNZW51KCkge1xyXG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIG9uTGF5b3V0Q2xpY2soKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhckl0ZW1DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZW51Q2xpY2spIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5pc1NsaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE1lbnUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5TWVudUFjdGl2ZSB8fCB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubWVudUhvdmVyQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub3BiYXJNZW51QnV0dG9uQ2xpY2soZXZ0KSB7XHJcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9ICF0aGlzLnRvcGJhck1lbnVBY3RpdmU7XHJcblxyXG4gICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5hdXRvT3BlblRvcGJhckl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93VG9wYmFyTWVudSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudG9wYmFyTWVudUFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRvT3BlblRvcGJhckl0ZW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25NZW51QnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXRoaXMucm90YXRlTWVudUJ1dHRvbjtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9ICF0aGlzLm92ZXJsYXlNZW51QWN0aXZlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSAhdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgIC5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gIXRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMZWZ0TWVudShzaG93KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSAhc2hvdztcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSBzaG93O1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWSkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gIXNob3c7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9IHNob3c7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSBzaG93O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gIXNob3c7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSAhc2hvdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk1lbnVDbGljaygkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNldE1lbnUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpc1RhYmxldCgpIHtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIHJldHVybiB3aWR0aCA8PSAxMDI0ICYmIHdpZHRoID4gNjQwO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRGVza3RvcCgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiAxMDI0O1xyXG4gICAgfVxyXG5cclxuICAgIGlzTW9iaWxlKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA2NDA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNPdmVybGF5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbWJpbmVTZXJ2aWNlQ29kZUFuZFN1ZmZpeChzZXJ2aWNlQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LnN1ZmZpeFNlcnZpY2VDb2RlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtzZXJ2aWNlQ29kZX0ke3RoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnRcclxuICAgICAgICAgICAgICAgIC5zdWZmaXhTZXJ2aWNlQ29kZVxyXG4gICAgICAgICAgICAgICAgfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VydmljZUNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsYXkobXM6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBCZWdpbiBkaXNhYmxlIGVkaXRvciB0YWIgKi9cclxuICAgIHNldEF1dG9mb2N1c0ZpcnN0Q29udHJvbChpZEVsZW1lbnQpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgdmlld1JlZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICh2aWV3UmVmICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdmlld1JlZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LnR5cGUgIT0gJ3JhZGlvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleGF0ZWFyYSA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleGF0ZWFyYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhhdGVhcmEuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRhYkRpc2FibGVkSGFuZGxlcigpIHtcclxuICAgICAgICAvLyByZXR1cm4ge1xyXG4gICAgICAgIC8vICAgICBrZXkgICAgOiA5LFxyXG4gICAgICAgIC8vICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoYXJnMSwgYXJnMikge1xyXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbmV4dCA9IEpRdWVyeShkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCdwLWVkaXRvcicpLnBhcmVudCgpLm5leHQoKS5maW5kKCc6dGFiYmFibGUsIDpmb2N1c2FibGUnKS5maXJzdCgpO1xyXG4gICAgICAgIC8vICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAvLyAgICAgICAgICAgICBuZXh0LmZvY3VzKCk7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRhYkRpc2FibGVkSGFuZGxlcihldmVudCkge1xyXG4gICAgICAgIC8vIHRoaXMuZGlzYWJsZVRhYlRvb2xiYXJFZGl0b3IoKTtcclxuICAgICAgICAvLyBldmVudC5lZGl0b3Iua2V5Ym9hcmQuYmluZGluZ3NbOV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyBldmVudC5lZGl0b3Iua2V5Ym9hcmQuYmluZGluZ3NbOV0ucHVzaCh0aGlzLmdldFRhYkRpc2FibGVkSGFuZGxlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlVGFiVG9vbGJhckVkaXRvcigpIHtcclxuICAgICAgICAvLyBqUXVlcnkoXCIucWwtdG9vbGJhclwiKS5maW5kKFwiOmJ1dHRvblwiKS5hdHRyKFwidGFiaW5kZXhcIiwgXCItMVwiKTtcclxuICAgIH1cclxuICAgIC8qKiBFbmQgZGlzYWJsZSBlZGl0b3IgdGFiICovXHJcblxyXG4gICAgcHJvY2Vzc0RhdGVJbnB1dChpbnB1dFZhbHVlLCBzaG93VGltZTogYm9vbGVhbik6IERhdGUge1xyXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0ludGVnZXJTdHJpbmcoaW5wdXRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGlucHV0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBoTm93ID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG4gICAgICAgICAgICBjb25zdCBtTm93ID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNOb3cgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobnVtYmVyID4gOTkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gMTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gJ0RETU1ZWVlZaGhtbSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IG1vbWVudChpbnB1dFZhbHVlLCBmb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5LnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDEyMDE5XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSAraW5wdXRWYWx1ZS5zdWJzdHIoNCwgNCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDExOVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gKygnMjAnICsgaW5wdXRWYWx1ZS5zdWJzdHIoNCwgMikudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDFcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Q3VycmVudFllYXIoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA+IC0xMDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLmFkZERheXMobmV3IERhdGUoKSwgbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWUucmVwbGFjZSgvLS9nLCAnLycpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlVGltZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVkgaGg6bW0nXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlVGltZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWSdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGQuZ2V0RGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRZZWFyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50TW9udGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRNb250aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldER5bmFtaWNGb3JtSWQoc2VydmljZSwgZW50aXR5LCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYCR7c2VydmljZX1fJHtlbnRpdHl9XyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZWZhdWx0RHluYW1pY0Zvcm1JZChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYERFRkFVTFRfJHthY3Rpb259YC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb25lT2JqZWN0KG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFByb3BlcnR5KHByb3AsIHZhbCwgbW9kZWwpIHtcclxuICAgICAgICBsZXQgY2xvbmUgPSB0aGlzLmNsb25lT2JqZWN0KG1vZGVsKTtcclxuICAgICAgICBpZiAoY2xvbmUpIHtcclxuICAgICAgICAgICAgY2xvbmVbcHJvcF0gPSB2YWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhbmRhcmRpemVkSnNvbihpbnB1dEpzb246IHN0cmluZykge1xyXG4gICAgICAgIGxldCBkYXRhID0gaW5wdXRKc29uLnJlcGxhY2UoL09iamVjdElkXFwoKC4qPylcXCkvZ20sICckMScpO1xyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL0lTT0RhdGVcXCgoLio/KVxcKS9nbSwgJyQxJyk7XHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvTnVtYmVyTG9uZ1xcKCguKj8pXFwpL2dtLCAnJDEnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdHJpZ2dlclJlc2l6ZVdpbmRvdygpIHtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcclxuICAgIH1cclxuXHJcbiAgICBhdXRvQWxpZ25EaWFsb2coZGlhbG9nOiBEaWFsb2cpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlclJlc2l6ZVdpbmRvdygpLCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIG9iakhhc051bGwob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmpba2V5XSAhPSBudWxsICYmIG9ialtrZXldICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFycmF5SGFzQ2hhbmdlZChvbGRBcnJheSwgbmV3QXJyYXkpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgaSwgaXRlbSwgaiwgbGVuO1xyXG4gICAgICAgIGlmICgoIW9sZEFycmF5ICYmIG5ld0FycmF5KSB8fCAob2xkQXJyYXkgJiYgIW5ld0FycmF5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRBcnJheSkgPT09IEpTT04uc3RyaW5naWZ5KG5ld0FycmF5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gbmV3QXJyYXkubGVuZ3RoOyBqIDwgbGVuOyBpID0gKytqKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBuZXdBcnJheVtpXTtcclxuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGl0ZW0pICE9PSBKU09OLnN0cmluZ2lmeShvbGRBcnJheVtpXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0cnlQYXJzZUV4dHJhY3REYXRlKGRhdGVWYWx1ZSwgZm9ybWF0KSB7XHJcbiAgICAgICAgY29uc3QgZGF5ID0gbW9tZW50KGRhdGVWYWx1ZSwgZm9ybWF0KTtcclxuICAgICAgICBpZiAoZGF5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXkudG9EYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGdldFZhbHVlRnJvbVRhc2soa2V5VmFsdWUsIGN1cnJlbnRWaWV3LCBzdGVwTWV0YWRhdGEpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICBpZiAoY3VycmVudFZpZXcua2V5VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZpZXcua2V5VmFsdWVzKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ID09PSBrZXlWYWx1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGFza0tleVZhbHVlICE9PSBudWxsICYmIHRhc2tLZXlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0YXNrS2V5VmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0ZXBNZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJFeHRlbmREYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgICAgIHN0ZXBNZXRhZGF0YS5maW5kKCh4KSA9PiB4LmtleSA9PT0gJ2V4dGVuZERhdGEnKS52YWx1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB0YXNrS2V5VmFsdWUgPSBhcnJFeHRlbmREYXRhLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoeCkgPT4geC5rZXkgJiYgeC5rZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5VmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdXBwZXJGaXJzdExldHRlcihpbnB1dCkge1xyXG4gICAgICAgIGlmIChpbnB1dCA9PSAnJyB8fCBpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IHVuZGVmaW5lZCkgeyByZXR1cm4gJyc7IH1cclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG5cclxuICAgICAgICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KCcgJyk7XHJcblxyXG4gICAgICAgIHdvcmRzLmZvckVhY2goKHdvcmQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHdvcmQudHJpbSgpICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod29yZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JkLnN1YnN0cmluZygxKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcgJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IHJlc3VsdCArPSB3b3JkLnRvVXBwZXJDYXNlKCkgKyAnICc7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcGxhY2VBbGwoaW5wdXRTdHIsIHNlYXJjaCwgcmVwbGFjZW1lbnQpIHtcclxuICAgICAgICBpZiAoaW5wdXRTdHIgPT09IG51bGwgfHwgaW5wdXRTdHIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gaW5wdXRTdHI7IH1cclxuICAgICAgICByZXR1cm4gaW5wdXRTdHIuc3BsaXQoc2VhcmNoKS5qb2luKHJlcGxhY2VtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ltYWdlKGZpbGVOYW1lKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICByZXR1cm4gL1xcLihnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pLnRlc3QoZmlsZU5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlSWZyYW1lKHVybCkge1xyXG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IGA8aWZyYW1lIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHdpZHRoPVwiMFwiIGhlaWdodD1cIjBcIiBzcmM9XCIke3VybH1cIj48L2lmcmFtZT5gO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBpZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSW50ZWdlclN0cmluZyhzdHI6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghc3RyKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIHdoaWxlIChzdHIuaW5kZXhPZignMCcpID09IDApIHtcclxuICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0ciA9PSAnJykgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLmZsb29yKE51bWJlcihzdHIpKTtcclxuICAgICAgICByZXR1cm4gbiAhPT0gSW5maW5pdHkgJiYgU3RyaW5nKG4pID09PSBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQW55TWFzaygpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc349XCJ1aS1kaWFsb2ctbWFza1wiXScpIHx8XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLXNpZGViYXItbWFza1wiXScpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzYWZlU3RyaW5naWZ5KGRhdGEpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gc3RyaW5naWZ5LnN0YWJsZVN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wYXJlU3RyaW5nKHZhbHVlMSwgdmFsdWUyKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21wYXJlRGF0ZShkYXRlMSwgZGF0ZTIpIHtcclxuICAgICAgICBpZiAoIWRhdGUxIHx8ICFkYXRlMikgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgIGRhdGUxID0gdGhpcy5wYXJzZURhdGUoZGF0ZTEpO1xyXG4gICAgICAgIGRhdGUyID0gdGhpcy5wYXJzZURhdGUoZGF0ZTIpO1xyXG4gICAgICAgIGlmIChkYXRlMS5nZXRUaW1lKCkgPCBkYXRlMi5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZTEuZ2V0VGltZSgpID09IGRhdGUyLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlmZkRhdGUoZGF0ZTE6IGFueSwgZGF0ZTI6IGFueSk6IG51bWJlciB7XHJcbiAgICAgICAgLy8gZDEgPCBkMiB0aMOsIGLhurFuZyA9IC0xXHJcbiAgICAgICAgY29uc3QgZDEgPSBtb21lbnQoZGF0ZTEpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgIGNvbnN0IGQyID0gbW9tZW50KGRhdGUyKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgICBpZiAoZDEgPT0gZDIpIHsgcmV0dXJuIDA7IH1cclxuICAgICAgICBpZiAoZDEgPiBkMikgeyByZXR1cm4gMTsgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wYXJlV2l0aE5vdyhkYXRlMSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZShkYXRlMSwgY3VycmVudERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0ZVN0ciBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVTdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIgPT0gJycpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhc3luY0ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9yZGVyQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIF8uc29ydEJ5KG9iaiwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBCeShvYmo6IGFueVtdLCBwcm9wOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gXy5ncm91cEJ5KG9iaiwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGluY3QoYXJyYXk6IG51bWJlcltdKSB7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZsYWdzW2FycmF5W2ldXSkgeyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICBmbGFnc1thcnJheVtpXV0gPSB0cnVlO1xyXG4gICAgICAgICAgICBvdXRwdXQucHVzaChhcnJheVtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGluY3RBcnJheShhcnJheTogYW55W10pIHtcclxuICAgICAgICB2YXIgYXJyUmVzdWx0ID0gYXJyYXkuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gYXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gaW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBhcnJSZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGluY3RGaWVsZChhcnJheTogYW55W10sIGZpZWxkKSB7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaV1bZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoZmxhZ3NbdmFsdWVdKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgIGZsYWdzW3ZhbHVlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuXHJcbiAgICBhZGREaXN0aW5jdChzb3VyY2U6IGFueVtdLCBkZXN0OiBhbnlbXSkge1xyXG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRlc3Quc29tZShwID0+IHAgPT0gcykpIHtcclxuICAgICAgICAgICAgICAgIGRlc3QucHVzaChzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEjDoG0gZHV54buHdCBt4bqjbmcsIGzhuqV5IHJhIHBo4bqnbiB04butIHRo4buPYSBtw6NuIFtmdW5jXSB2w6AgeMOzYSBwaOG6p24gdOG7rSDEkcOzIMSRaSBraOG7j2kgbeG6o25nXHJcbiAgICAvLyAgICAgIGNhbGxCYWNrOiBvcHRpb25hbCBwaOG7pWMgduG7pSBuaHUgY+G6p3Uga2jDoWMga2hpIGR1eeG7h3QgxJHhur9uIGl0ZW0gdGjhu49hIG3Do25cclxuICAgIGdldEFuZFJlbW92ZShzb3VyY2U6IGFueVtdLCBmdW5jOiBGdW5jdGlvbiwgY2FsbEJhY2s/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChjYWxsQmFjayA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNhbGxCYWNrID0gaSA9PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhzb3VyY2VbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsQmFjayhzb3VyY2VbaV0pO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc291cmNlW2ldKTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVNZW51KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnVmZmVyVmlld1tpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGd1aWRFbXB0eSgpIHtcclxuICAgICAgICByZXR1cm4gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzcGxheVZhbCh2YWwpIHtcclxuICAgICAgICBpZiAodmFsID09IHVuZGVmaW5lZCB8fCB2YWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGltZVNwYW46IFRy4bqjIHbhu4EgdHJ1ZSBu4bq/dSBoYWkga2hv4bqjbmcgdGjhu51pIGdpYW4gKHN0YXJ0LCBlbmQpXHJcbiAgICAgKiB2w6AgKGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkgZ2lhbyBuaGF1LiBLaMO0bmcgdMOtbmhcclxuICAgICAqIGNo4buJIGdpYW8gbeG7mXQgxJHhuqd1IG3DunQuXHJcbiAgICAgKi9cclxuICAgIGhhc0ludGVyc2VjdGlvbihzdGFydCwgZW5kLCBjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQpIHtcclxuICAgICAgICB2YXIgaGFzSW50ZXJzZWN0aW9uID0gKHN0YXJ0IDwgY29tcGFyZVN0YXJ0ICYmIGNvbXBhcmVTdGFydCA8IGVuZClcclxuICAgICAgICAgICAgfHwgKHN0YXJ0IDwgY29tcGFyZUVuZCAmJiBjb21wYXJlRW5kIDwgZW5kKVxyXG4gICAgICAgICAgICB8fCAoY29tcGFyZVN0YXJ0IDw9IHN0YXJ0ICYmIGVuZCA8PSBjb21wYXJlRW5kKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhc0ludGVyc2VjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBoYXNJbnRlcnNlY3Rpb25EYXRlKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCwgZGF0ZUZvcm1hdCA9IHRydWUpIHtcclxuICAgICAgICBpZiAoIWRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShzdGFydCkgPCBuZXcgRGF0ZShjb21wYXJlRW5kKSAmJiBuZXcgRGF0ZShlbmQpID4gbmV3IERhdGUoY29tcGFyZVN0YXJ0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0IDwgY29tcGFyZUVuZCAmJiBlbmQgPiBjb21wYXJlU3RhcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE9mZnNldEluTWludXRlKHN0ckRhdGUxLCBzdHJEYXRlMiwgcm91bmQgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKCFzdHJEYXRlMSB8fCAhc3RyRGF0ZTIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZDEgPSBuZXcgRGF0ZShzdHJEYXRlMSk7XHJcbiAgICAgICAgbGV0IGQyID0gbmV3IERhdGUoc3RyRGF0ZTIpO1xyXG5cclxuICAgICAgICBsZXQgb2Zmc2V0ID0gKGQxLmdldFRpbWUoKSAtIGQyLmdldFRpbWUoKSkgLyAxMDAwIC8gNjA7XHJcbiAgICAgICAgaWYgKHJvdW5kKSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZmluZFRlbXBsYXRlRnJvbUxpc3QoJGxpc3Q6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PiwgdGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gJGxpc3RcclxuICAgICAgICAgICAgPyAkbGlzdC5maW5kKCh0ZW1wbGF0ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUuX2RlZiAmJiB0ZW1wbGF0ZS5fZGVmLnJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbGQgdmVyc2lvbiwgbm90IGl2eVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5fZGVmLnJlZmVyZW5jZXNbdGVtcGxhdGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lciAmJiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpcyBpdnkgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzWzBdID09IHRlbXBsYXRlTmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTYW1lQXJyYXkoYXJyYXkxOiBhbnlbXSwgYXJyYXkyOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChhcnJheTEubGVuZ3RoICE9IGFycmF5Mi5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpdGVtIG9mIGFycmF5MSkge1xyXG4gICAgICAgICAgICBpZiAoIWFycmF5Mi5zb21lKHEgPT4gcSA9PSBpdGVtKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkUGFnZSgpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW1wdHlBcnJheU9yTnVsbChhcnJheTogYW55W10pIHtcclxuICAgICAgICBpZiAoYXJyYXkgIT09IHVuZGVmaW5lZCAmJiBhcnJheSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlckNvbnRhaW5lcihsb2dpYzogJ2FuZCcgfCAnb3InLCAuLi5maWx0ZXJzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgbG9naWMsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0ZpbHRlclY0KGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlNZXNzYWdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBzZWxCb3guc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnZhbHVlID0gdmFsO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsQm94KTtcclxuICAgICAgICBzZWxCb3guZm9jdXMoKTtcclxuICAgICAgICBzZWxCb3guc2VsZWN0KCk7XHJcbiAgICAgICAgc2VsQm94LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5KTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcclxuICAgIH1cclxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4sXHJcbiAgICAgICAgICAgIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcclxuICAgICAgICAgICAgc3ViRmllbGRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nRXJyb3IoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgTXJyIFN0YXJyOiAke3RoaXMudG5QcmVmaXhMb2d9YCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ0luZm8obXNnKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmluZm8obXNnKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dJbmZvU2ltcGxlKG1zZykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgTXJyIFN0YXJyOiAke21zZ31gKTtcclxuICAgIH07XHJcblxyXG4gICAgbWF0Y2hSdWxlU2hvcnQoc3RyLCBydWxlKSB7XHJcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcnVsZS5zcGxpdCgnKicpLm1hcChlc2NhcGVSZWdleCkuam9pbignLionKSArICckJykudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4cGxhbmF0aW9uIGNvZGVcclxuICAgIG1hdGNoUnVsZUV4cGwoc3RyLCBydWxlKSB7XHJcbiAgICAgICAgLy8gZm9yIHRoaXMgc29sdXRpb24gdG8gd29yayBvbiBhbnkgc3RyaW5nLCBubyBtYXR0ZXIgd2hhdCBjaGFyYWN0ZXJzIGl0IGhhc1xyXG4gICAgICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xyXG5cclxuICAgICAgICAvLyBcIi5cIiAgPT4gRmluZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGV4Y2VwdCBuZXdsaW5lIG9yIGxpbmUgdGVybWluYXRvclxyXG4gICAgICAgIC8vIFwiLipcIiA9PiBNYXRjaGVzIGFueSBzdHJpbmcgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVyc1xyXG4gICAgICAgIHJ1bGUgPSBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpO1xyXG5cclxuICAgICAgICAvLyBcIl5cIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhlIGZvbGxvd2luZyBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0XHJcbiAgICAgICAgLy8gXCIkXCIgID0+IE1hdGNoZXMgYW55IHN0cmluZyB3aXRoIHRoYXQgaW4gZnJvbnQgYXQgdGhlIGVuZCBvZiBpdFxyXG4gICAgICAgIHJ1bGUgPSAnXicgKyBydWxlICsgJyQnO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciBtYXRjaGluZyBzdHJpbmdcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocnVsZSk7XHJcblxyXG4gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBmaW5kcyBhIG1hdGNoLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZVxyXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVzcG9uc2VSZXN1bHRGcm9tRXhjZXB0aW9uKGVycjogYW55KTogUmVzcG9uc2VSZXN1bHQge1xyXG4gICAgICAgIHJldHVybiA8YW55PntcclxuICAgICAgICAgICAgZXJyb3I6ICdFWENFUFRJT04nLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJyxcclxuICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgZXJyb3JEZXRhaWw6IGVyclxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRyeVBhcnNlSnNvbihkYXRhOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IEpTT04ucGFyc2UoZGF0YSkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGF0YSB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
1108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsic2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUdsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUVyRCxxQkFBcUI7QUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCLElBQUssZUFLSjtBQUxELFdBQUssZUFBZTtJQUNoQix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7SUFDSixpRUFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUxJLGVBQWUsS0FBZixlQUFlLFFBS25CO0FBSUQsTUFBTSxPQUFPLGFBQWE7SUFnQ3RCLFlBQW9CLG9CQUF5QztRQUF6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBL0I3RCxlQUFVLEdBQW9CLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFckQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQXlCcEIsZ0JBQVcsR0FBRyxrQ0FBa0Ms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RyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDbkIsNEVBQTRFO1FBQzVFLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWhGLHFFQUFxRTtRQUNyRSxtRUFBbUU7UUFDbkUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRCx1RUFBdUU7UUFDdkUsaUVBQWlFO1FBQ2pFLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUV4Qix5REFBeUQ7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsK0RBQStEO1FBQy9ELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsOEJBQThCLENBQUMsR0FBUTtRQUNuQyxPQUFZO1lBQ1IsS0FBSyxFQUFFLFdBQVc7WUFDbEIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsR0FBRztTQUNuQixDQUFDO0lBQ04sQ0FBQzs7OztZQXJzQ0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFkUSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnZmFzdC1zYWZlLXN0cmluZ2lmeSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XHJcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbHRlciwgU29ydCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XHJcblxyXG4vLyBmaXggZm9yIGJ1aWxkIHByb2RcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbmVudW0gTWVudU9yaWVudGF0aW9uIHtcclxuICAgIFNUQVRJQyxcclxuICAgIE9WRVJMQVksXHJcbiAgICBTTElNLFxyXG4gICAgSE9SSVpPTlRBTCxcclxufVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tb25TZXJ2aWNlIHtcclxuICAgIGxheW91dE1vZGU6IE1lbnVPcmllbnRhdGlvbiA9IE1lbnVPcmllbnRhdGlvbi5TVEFUSUM7XHJcblxyXG4gICAgZGFya01lbnUgPSBmYWxzZTtcclxuXHJcbiAgICBwcm9maWxlTW9kZSA9ICd0b3AnO1xyXG5cclxuICAgIHJvdGF0ZU1lbnVCdXR0b246IGJvb2xlYW47XHJcblxyXG4gICAgdG9wYmFyTWVudUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBvdmVybGF5TWVudUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBzdGF0aWNNZW51RGVza3RvcEluYWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIHN0YXRpY01lbnVNb2JpbGVBY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgbWVudUNsaWNrOiBib29sZWFuO1xyXG5cclxuICAgIHRvcGJhckl0ZW1DbGljazogYm9vbGVhbjtcclxuXHJcbiAgICBhY3RpdmVUb3BiYXJJdGVtOiBhbnk7XHJcblxyXG4gICAgcmVzZXRNZW51OiBib29sZWFuO1xyXG5cclxuICAgIGN1cnJlbnRBY3RpdmVJdGVtOiBhbnk7XHJcblxyXG4gICAgbWVudUhvdmVyQWN0aXZlOiBib29sZWFuO1xyXG4gICAgdGVzdDogYm9vbGVhbjtcclxuXHJcbiAgICB0blByZWZpeExvZyA9ICctLS0tLS0tLS0+VE5fTE9HX0NPTlNPTEUtLS0tLS0tPic7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIGd1aWQoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gczQoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAgICAgICAgICAgLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgIHM0KClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJhbmRvbVN0cmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tU3RyaW5nV2l0aE5vdERlbGltaXRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCkucmVwbGFjZSgnLScsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdGb3JtYXQoaW5wdXRTdHJpbmc6IHN0cmluZywgLi4uYXJncykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxyXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggaW4gYXJncykge1xyXG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLnJlcGxhY2UoYHske2luZGV4fX1gLCBhcmdzW2luZGV4XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbEVuY29kZShzdHIpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKHN0cilcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmcXVvdDsnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBM4bqleSB24buBIGdpw6EgdHLhu4sgdGhlbyBwYXRoICcnXHJcbiAgICBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbcGF0aHNbaV1dO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIC8vIHtzZWFyY2g6IHtrZXkgOiAnbmFtbmgnfX0gLiA9PiBzZWFyY2gua2V5XHJcbiAgICBzZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG9iajtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGZpZWxkcy5sZW5ndGg7IGkgPCBuICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaV07XHJcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZF0gPT09ICd1bmRlZmluZWQnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIV8uaXNPYmplY3QocmVzdWx0W2ZpZWxkXSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtmaWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICBjbG9uZWQuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpO1xyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSG91cnMoZGF0ZTogRGF0ZSwgaG91cnM6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIGNsb25lZC5zZXRUaW1lKGNsb25lZC5nZXRUaW1lKCkgKyAoaG91cnMgKiA2MCAqIDYwICogMTAwMCkpO1xyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV29ya0RheXMoZGF0ZSwgZGF5cykge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIHdoaWxlIChkYXlzID4gMCkge1xyXG4gICAgICAgICAgICBjbG9uZWQuc2V0RGF0ZShjbG9uZWQuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChjbG9uZWQuZ2V0RGF5KCkgIT09IDAgJiYgY2xvbmVkLmdldERheSgpICE9PSA2KSB7XHJcbiAgICAgICAgICAgICAgICBkYXlzIC09IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJvd1N0cmluZyArPSAodHlwZW9mIGRbYy5maWVsZF0pLnRvU3RyaW5nKCkgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkbS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJykgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9DU1YyKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XHJcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gYy5oZWFkZXIgKyAnLCc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcclxuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRtLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSArICcsJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVkdyb3VwKGRhdGFzOiBhbnksIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGNvbHVtbnNbaV0uaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChzdWJEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChzdWJEYXRhLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChoZWFkZXJTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgc3ViRGF0YS5kYXRhLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRtLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaCgnXFxuJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBsZXQgY3N2ID0gJyc7XHJcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xyXG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRUb1NlbGVjdEl0ZW0oXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyxcclxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyA9ICcnLFxyXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyA9ICcnLFxyXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDIgPSAnJyxcclxuICAgICAgICBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlXHJcbiAgICApOiBTZWxlY3RJdGVtW10ge1xyXG4gICAgICAgIGlmICghdGV4dEZpZWxkIHx8IHRleHRGaWVsZCA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGV4dEZpZWxkID0gdmFsdWVGaWVsZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXBBcnI6IFNlbGVjdEl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7IGxhYmVsOiAnJywgdmFsdWU6ICcnIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXHJcbiAgICAgICAgZm9yIChjb25zdCBpbmQgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtpbmRdO1xyXG4gICAgICAgICAgICB0ZW1wQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkMixcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhUZXh0RmllbGQyXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bdmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGVtcEFycjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYWJlbChcclxuICAgICAgICBpdGVtOiBhbnksXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcsXHJcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nLFxyXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDI6IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKHRleHRGaWVsZDIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGl0ZW1bdGV4dEZpZWxkXSArXHJcbiAgICAgICAgICAgICAgICAnIC0gJyArXHJcbiAgICAgICAgICAgICAgICBwcmVmaXhUZXh0RmllbGQyICtcclxuICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICBpdGVtW3RleHRGaWVsZDJdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGV4dEZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU2VsZWN0SXRlbU1hc3RlckRhdGEoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCcsXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnbmFtZSdcclxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvU2VsZWN0SXRlbShkYXRhLCB2YWx1ZUZpZWxkLCB0ZXh0RmllbGQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9yY2VJZjQwMSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaXNGb3JjZUxvZ291dElmNDAxO1xyXG4gICAgICAgICAgICBpZiAoZm9yY2VJZjQwMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX2F1dGhlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aGVuU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfbm90aWZpZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdI4buHIHRo4buRbmcgc+G6vSB04buxIMSRxINuZyB4deG6pXQgc2F1IDVzIMSR4buDIGPhuq1wIG5o4bqtcCBwaGnDqm4gYuG6o24gbeG7m2knLCAnVGjDtG5nIGLDoW8nKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzbGVlcCBiZWZvcmUgbG9nb3V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSg8UmVzcG9uc2VSZXN1bHQ+e1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhLiBIw6N5IGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90ISEhJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkOiAwLFxyXG4gICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yQ2hlY2tFeGlzdDogbnVsbCxcclxuICAgICAgICAgICAgZXJyb3JDb250cm9sSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIGVycm9yRm9ybUlkOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub3BiYXJJdGVtQ2xpY2soZXZlbnQsIGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGF1dG9PcGVuVG9wYmFySXRlbSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSG9yaXpvbnRhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uSE9SSVpPTlRBTDtcclxuICAgIH1cclxuICAgIGlzU2xpbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uU0xJTTtcclxuICAgIH1cclxuICAgIGhpZGVPdmVybGF5TWVudSgpIHtcclxuICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBvbkxheW91dENsaWNrKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50b3BiYXJJdGVtQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWVudUNsaWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuaXNTbGltKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRNZW51ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgfHwgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1lbnVIb3ZlckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9wYmFyTWVudUJ1dHRvbkNsaWNrKGV2dCkge1xyXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSAhdGhpcy50b3BiYXJNZW51QWN0aXZlO1xyXG5cclxuICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1RvcGJhck1lbnUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhck1lbnVBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudUJ1dHRvbkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICF0aGlzLnJvdGF0ZU1lbnVCdXR0b247XHJcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhdGhpcy5vdmVybGF5TWVudUFjdGl2ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gIXRoaXNcclxuICAgICAgICAgICAgICAgICAgICAuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICF0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTGVmdE1lbnUoc2hvdykge1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gIXNob3c7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUNsaWNrID0gc2hvdztcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9ICFzaG93O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSBzaG93O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gc2hvdztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICFzaG93O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXNob3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25NZW51Q2xpY2soJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzZXRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUYWJsZXQoKSB7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICByZXR1cm4gd2lkdGggPD0gMTAyNCAmJiB3aWR0aCA+IDY0MDtcclxuICAgIH1cclxuXHJcbiAgICBpc0Rlc2t0b3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNDtcclxuICAgIH1cclxuXHJcbiAgICBpc01vYmlsZSgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNjQwO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT3ZlcmxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lU2VydmljZUNvZGVBbmRTdWZmaXgoc2VydmljZUNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7c2VydmljZUNvZGV9JHt0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50XHJcbiAgICAgICAgICAgICAgICAuc3VmZml4U2VydmljZUNvZGVcclxuICAgICAgICAgICAgICAgIH1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGF5KG1zOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQmVnaW4gZGlzYWJsZSBlZGl0b3IgdGFiICovXHJcbiAgICBzZXRBdXRvZm9jdXNGaXJzdENvbnRyb2woaWRFbGVtZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAodmlld1JlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC50eXBlICE9ICdyYWRpbycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXhhdGVhcmEgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXhhdGVhcmEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4YXRlYXJhLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHtcclxuICAgICAgICAvLyAgICAga2V5ICAgIDogOSxcclxuICAgICAgICAvLyAgICAgaGFuZGxlcjogZnVuY3Rpb24gKGFyZzEsIGFyZzIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5leHQgPSBKUXVlcnkoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgncC1lZGl0b3InKS5wYXJlbnQoKS5uZXh0KCkuZmluZCgnOnRhYmJhYmxlLCA6Zm9jdXNhYmxlJykuZmlyc3QoKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUYWJEaXNhYmxlZEhhbmRsZXIoZXZlbnQpIHtcclxuICAgICAgICAvLyB0aGlzLmRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCk7XHJcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLnB1c2godGhpcy5nZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZVRhYlRvb2xiYXJFZGl0b3IoKSB7XHJcbiAgICAgICAgLy8galF1ZXJ5KFwiLnFsLXRvb2xiYXJcIikuZmluZChcIjpidXR0b25cIikuYXR0cihcInRhYmluZGV4XCIsIFwiLTFcIik7XHJcbiAgICB9XHJcbiAgICAvKiogRW5kIGRpc2FibGUgZWRpdG9yIHRhYiAqL1xyXG5cclxuICAgIHByb2Nlc3NEYXRlSW5wdXQoaW5wdXRWYWx1ZSwgc2hvd1RpbWU6IGJvb2xlYW4pOiBEYXRlIHtcclxuICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyU3RyaW5nKGlucHV0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgaE5vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuICAgICAgICAgICAgY29uc3QgbU5vdyA9IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBzTm93ID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDk5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9ICdERE1NWVlZWWhobW0nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoaW5wdXRWYWx1ZSwgZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMjAxOVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gK2lucHV0VmFsdWUuc3Vic3RyKDQsIDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDYpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMTlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICsoJzIwJyArIGlucHV0VmFsdWUuc3Vic3RyKDQsIDIpLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPiAtMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5hZGREYXlzKG5ldyBEYXRlKCksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZVRpbWUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZVRpbWUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlVGltZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVknXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDApO1xyXG4gICAgICAgIHJldHVybiBkLmdldERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50WWVhcigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudE1vbnRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0TW9udGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREeW5hbWljRm9ybUlkKHNlcnZpY2UsIGVudGl0eSwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3NlcnZpY2V9XyR7ZW50aXR5fV8ke2FjdGlvbn1gLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdER5bmFtaWNGb3JtSWQoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGBERUZBVUxUXyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9uZU9iamVjdChvYmo6IGFueSkge1xyXG4gICAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcm9wZXJ0eShwcm9wLCB2YWwsIG1vZGVsKSB7XHJcbiAgICAgICAgbGV0IGNsb25lID0gdGhpcy5jbG9uZU9iamVjdChtb2RlbCk7XHJcbiAgICAgICAgaWYgKGNsb25lKSB7XHJcbiAgICAgICAgICAgIGNsb25lW3Byb3BdID0gdmFsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YW5kYXJkaXplZEpzb24oaW5wdXRKc29uOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IGlucHV0SnNvbi5yZXBsYWNlKC9PYmplY3RJZFxcKCguKj8pXFwpL2dtLCAnJDEnKTtcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9JU09EYXRlXFwoKC4qPylcXCkvZ20sICckMScpO1xyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL051bWJlckxvbmdcXCgoLio/KVxcKS9nbSwgJyQxJyk7XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRyaWdnZXJSZXNpemVXaW5kb3coKSB7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXV0b0FsaWduRGlhbG9nKGRpYWxvZzogRGlhbG9nKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJSZXNpemVXaW5kb3coKSwgMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBvYmpIYXNOdWxsKG9iaikge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqW2tleV0gIT0gbnVsbCAmJiBvYmpba2V5XSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhcnJheUhhc0NoYW5nZWQob2xkQXJyYXksIG5ld0FycmF5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGksIGl0ZW0sIGosIGxlbjtcclxuICAgICAgICBpZiAoKCFvbGRBcnJheSAmJiBuZXdBcnJheSkgfHwgKG9sZEFycmF5ICYmICFuZXdBcnJheSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkQXJyYXkpID09PSBKU09OLnN0cmluZ2lmeShuZXdBcnJheSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gaiA9IDAsIGxlbiA9IG5ld0FycmF5Lmxlbmd0aDsgaiA8IGxlbjsgaSA9ICsraikge1xyXG4gICAgICAgICAgICBpdGVtID0gbmV3QXJyYXlbaV07XHJcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShpdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkob2xkQXJyYXlbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5UGFyc2VFeHRyYWN0RGF0ZShkYXRlVmFsdWUsIGZvcm1hdCkge1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG1vbWVudChkYXRlVmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgaWYgKGRheSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF5LnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZUZyb21UYXNrKGtleVZhbHVlLCBjdXJyZW50Vmlldywgc3RlcE1ldGFkYXRhKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWaWV3LmtleVZhbHVlcykge1xyXG4gICAgICAgICAgICBjb25zdCB0YXNrS2V5VmFsdWUgPSBKU09OLnBhcnNlKGN1cnJlbnRWaWV3LmtleVZhbHVlcykuZmluZChcclxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSA9PT0ga2V5VmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGVwTWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyRXh0ZW5kRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgICAgICBzdGVwTWV0YWRhdGEuZmluZCgoeCkgPT4geC5rZXkgPT09ICdleHRlbmREYXRhJykudmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdGFza0tleVZhbHVlID0gYXJyRXh0ZW5kRGF0YS5maW5kKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ICYmIHgua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleVZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0YXNrS2V5VmFsdWUgIT09IG51bGwgJiYgdGFza0tleVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhc2tLZXlWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHVwcGVyRmlyc3RMZXR0ZXIoaW5wdXQpIHtcclxuICAgICAgICBpZiAoaW5wdXQgPT0gJycgfHwgaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSB1bmRlZmluZWQpIHsgcmV0dXJuICcnOyB9XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgY29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh3b3JkLnRyaW0oKSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JkLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd29yZC5zdWJzdHJpbmcoMSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnICc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyByZXN1bHQgKz0gd29yZC50b1VwcGVyQ2FzZSgpICsgJyAnOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBsYWNlQWxsKGlucHV0U3RyLCBzZWFyY2gsIHJlcGxhY2VtZW50KSB7XHJcbiAgICAgICAgaWYgKGlucHV0U3RyID09PSBudWxsIHx8IGlucHV0U3RyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIGlucHV0U3RyOyB9XHJcbiAgICAgICAgcmV0dXJuIGlucHV0U3RyLnNwbGl0KHNlYXJjaCkuam9pbihyZXBsYWNlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbWFnZShmaWxlTmFtZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgcmV0dXJuIC9cXC4oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaS50ZXN0KGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUlmcmFtZSh1cmwpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWUgPSBgPGlmcmFtZSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgc3JjPVwiJHt1cmx9XCI+PC9pZnJhbWU+YDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ludGVnZXJTdHJpbmcoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXN0cikgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICB3aGlsZSAoc3RyLmluZGV4T2YoJzAnKSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdHIgPT0gJycpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgICAgICBjb25zdCBuID0gTWF0aC5mbG9vcihOdW1iZXIoc3RyKSk7XHJcbiAgICAgICAgcmV0dXJuIG4gIT09IEluZmluaXR5ICYmIFN0cmluZyhuKSA9PT0gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0FueU1hc2soKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktZGlhbG9nLW1hc2tcIl0nKSB8fFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc349XCJ1aS1zaWRlYmFyLW1hc2tcIl0nKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2FmZVN0cmluZ2lmeShkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHN0cmluZ2lmeS5zdGFibGVTdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGFyZVN0cmluZyh2YWx1ZTEsIHZhbHVlMikge1xyXG4gICAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGFyZURhdGUoZGF0ZTEsIGRhdGUyKSB7XHJcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICBkYXRlMSA9IHRoaXMucGFyc2VEYXRlKGRhdGUxKTtcclxuICAgICAgICBkYXRlMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyKTtcclxuICAgICAgICBpZiAoZGF0ZTEuZ2V0VGltZSgpIDwgZGF0ZTIuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGUxLmdldFRpbWUoKSA9PSBkYXRlMi5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpZmZEYXRlKGRhdGUxOiBhbnksIGRhdGUyOiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIC8vIGQxIDwgZDIgdGjDrCBi4bqxbmcgPSAtMVxyXG4gICAgICAgIGNvbnN0IGQxID0gbW9tZW50KGRhdGUxKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgICBjb25zdCBkMiA9IG1vbWVudChkYXRlMikuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgaWYgKGQxID09IGQyKSB7IHJldHVybiAwOyB9XHJcbiAgICAgICAgaWYgKGQxID4gZDIpIHsgcmV0dXJuIDE7IH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGFyZVdpdGhOb3coZGF0ZTEpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoZGF0ZTEsIGN1cnJlbnREYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogYW55KSB7XHJcbiAgICAgICAgaWYgKGRhdGVTdHIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlU3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghZGF0ZVN0ciB8fCBkYXRlU3RyID09ICcnKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYXN5bmNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2soYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvcmRlckJ5KG9iajogYW55W10sIHByb3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBfLnNvcnRCeShvYmosIHByb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIF8uZ3JvdXBCeShvYmosIHByb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0KGFycmF5OiBudW1iZXJbXSkge1xyXG4gICAgICAgIGNvbnN0IGZsYWdzID0gW10sIG91dHB1dCA9IFtdLCBsID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmbGFnc1thcnJheVtpXV0pIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgZmxhZ3NbYXJyYXlbaV1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0QXJyYXkoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgdmFyIGFyclJlc3VsdCA9IGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4KTtcclxuICAgICAgICByZXR1cm4gYXJyUmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0RmllbGQoYXJyYXk6IGFueVtdLCBmaWVsZCkge1xyXG4gICAgICAgIGNvbnN0IGZsYWdzID0gW10sIG91dHB1dCA9IFtdLCBsID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgICAgIGxldCB2YWx1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W2ldW2ZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKGZsYWdzW3ZhbHVlXSkgeyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICBmbGFnc1t2YWx1ZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGlzdGluY3Qoc291cmNlOiBhbnlbXSwgZGVzdDogYW55W10pIHtcclxuICAgICAgICBzb3VyY2UuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFkZXN0LnNvbWUocCA9PiBwID09IHMpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0LnB1c2gocyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIw6BtIGR1eeG7h3QgbeG6o25nLCBs4bqleSByYSBwaOG6p24gdOG7rSB0aOG7j2EgbcOjbiBbZnVuY10gdsOgIHjDs2EgcGjhuqduIHThu60gxJHDsyDEkWkga2jhu49pIG3huqNuZ1xyXG4gICAgLy8gICAgICBjYWxsQmFjazogb3B0aW9uYWwgcGjhu6VjIHbhu6Ugbmh1IGPhuqd1IGtow6FjIGtoaSBkdXnhu4d0IMSR4bq/biBpdGVtIHRo4buPYSBtw6NuXHJcbiAgICBnZXRBbmRSZW1vdmUoc291cmNlOiBhbnlbXSwgZnVuYzogRnVuY3Rpb24sIGNhbGxCYWNrPzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoY2FsbEJhY2sgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjYWxsQmFjayA9IGkgPT4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMoc291cmNlW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbEJhY2soc291cmNlW2ldKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNvdXJjZVtpXSk7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTWVudSgpIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVudS1idXR0b24nKS5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmluZ1RvQXJyYXlCdWZmZXIoc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0cmluZy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICBndWlkRW1wdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3BsYXlWYWwodmFsKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpbWVTcGFuOiBUcuG6oyB24buBIHRydWUgbuG6v3UgaGFpIGtob+G6o25nIHRo4budaSBnaWFuIChzdGFydCwgZW5kKVxyXG4gICAgICogdsOgIChjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQpIGdpYW8gbmhhdS4gS2jDtG5nIHTDrW5oXHJcbiAgICAgKiBjaOG7iSBnaWFvIG3hu5l0IMSR4bqndSBtw7p0LlxyXG4gICAgICovXHJcbiAgICBoYXNJbnRlcnNlY3Rpb24oc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSB7XHJcbiAgICAgICAgdmFyIGhhc0ludGVyc2VjdGlvbiA9IChzdGFydCA8IGNvbXBhcmVTdGFydCAmJiBjb21wYXJlU3RhcnQgPCBlbmQpXHJcbiAgICAgICAgICAgIHx8IChzdGFydCA8IGNvbXBhcmVFbmQgJiYgY29tcGFyZUVuZCA8IGVuZClcclxuICAgICAgICAgICAgfHwgKGNvbXBhcmVTdGFydCA8PSBzdGFydCAmJiBlbmQgPD0gY29tcGFyZUVuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBoYXNJbnRlcnNlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgaGFzSW50ZXJzZWN0aW9uRGF0ZShzdGFydCwgZW5kLCBjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQsIGRhdGVGb3JtYXQgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKCFkYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUoc3RhcnQpIDwgbmV3IERhdGUoY29tcGFyZUVuZCkgJiYgbmV3IERhdGUoZW5kKSA+IG5ldyBEYXRlKGNvbXBhcmVTdGFydCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydCA8IGNvbXBhcmVFbmQgJiYgZW5kID4gY29tcGFyZVN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRJbk1pbnV0ZShzdHJEYXRlMSwgc3RyRGF0ZTIsIHJvdW5kID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghc3RyRGF0ZTEgfHwgIXN0ckRhdGUyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGQxID0gbmV3IERhdGUoc3RyRGF0ZTEpO1xyXG4gICAgICAgIGxldCBkMiA9IG5ldyBEYXRlKHN0ckRhdGUyKTtcclxuXHJcbiAgICAgICAgbGV0IG9mZnNldCA9IChkMS5nZXRUaW1lKCkgLSBkMi5nZXRUaW1lKCkpIC8gMTAwMCAvIDYwO1xyXG4gICAgICAgIGlmIChyb3VuZCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmRUZW1wbGF0ZUZyb21MaXN0KCRsaXN0OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj4sIHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICRsaXN0XHJcbiAgICAgICAgICAgID8gJGxpc3QuZmluZCgodGVtcGxhdGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlLl9kZWYgJiYgdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIHZlcnNpb24sIG5vdCBpdnlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzW3RlbXBsYXRlTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIgJiYgdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgaXZ5IHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIubG9jYWxOYW1lc1swXSA9PSB0ZW1wbGF0ZU5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2FtZUFycmF5KGFycmF5MTogYW55W10sIGFycmF5MjogYW55W10pIHtcclxuICAgICAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPSBhcnJheTIubGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaXRlbSBvZiBhcnJheTEpIHtcclxuICAgICAgICAgICAgaWYgKCFhcnJheTIuc29tZShxID0+IHEgPT0gaXRlbSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFBhZ2UoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VtcHR5QXJyYXlPck51bGwoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFycmF5ICE9PSB1bmRlZmluZWQgJiYgYXJyYXkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGxvZ2ljLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc11cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5TWVzc2FnZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgICBzZWxCb3guc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC52YWx1ZSA9IHZhbDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XHJcbiAgICAgICAgc2VsQm94LmZvY3VzKCk7XHJcbiAgICAgICAgc2VsQm94LnNlbGVjdCgpO1xyXG4gICAgICAgIHNlbEJveC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTk5OSk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNlbEJveCk7XHJcbiAgICB9XHJcbiAgICBuZXdCaW5kaW5nRmlsdGVyKGNvbHVtbjogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHNvdXJjZUZpZWxkOiBzdHJpbmcsIHN1YkZpZWxkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxyXG4gICAgICAgICAgICBvcGVyYXRvcixcclxuICAgICAgICAgICAgc291cmNlRmllbGQsXHJcbiAgICAgICAgICAgIHN1YkZpZWxkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3U29ydChmaWVsZDogc3RyaW5nLCBkaXI6IDEgfCAtMSA9IDEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNvcnQoeyBmaWVsZCwgZGlyIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ0Vycm9yKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dJbmZvKG1zZykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgTXJyIFN0YXJyOiAke3RoaXMudG5QcmVmaXhMb2d9YCk7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKG1zZyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nSW5mb1NpbXBsZShtc2cpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmluZm8oYE1yciBTdGFycjogJHttc2d9YCk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1hdGNoUnVsZVNob3J0KHN0ciwgcnVsZSkge1xyXG4gICAgICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJykgKyAnJCcpLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFeHBsYW5hdGlvbiBjb2RlXHJcbiAgICBtYXRjaFJ1bGVFeHBsKHN0ciwgcnVsZSkge1xyXG4gICAgICAgIC8vIGZvciB0aGlzIHNvbHV0aW9uIHRvIHdvcmsgb24gYW55IHN0cmluZywgbm8gbWF0dGVyIHdoYXQgY2hhcmFjdGVycyBpdCBoYXNcclxuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcclxuXHJcbiAgICAgICAgLy8gXCIuXCIgID0+IEZpbmQgYSBzaW5nbGUgY2hhcmFjdGVyLCBleGNlcHQgbmV3bGluZSBvciBsaW5lIHRlcm1pbmF0b3JcclxuICAgICAgICAvLyBcIi4qXCIgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgY29udGFpbnMgemVybyBvciBtb3JlIGNoYXJhY3RlcnNcclxuICAgICAgICBydWxlID0gcnVsZS5zcGxpdCgnKicpLm1hcChlc2NhcGVSZWdleCkuam9pbignLionKTtcclxuXHJcbiAgICAgICAgLy8gXCJeXCIgID0+IE1hdGNoZXMgYW55IHN0cmluZyB3aXRoIHRoZSBmb2xsb3dpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBpdFxyXG4gICAgICAgIC8vIFwiJFwiICA9PiBNYXRjaGVzIGFueSBzdHJpbmcgd2l0aCB0aGF0IGluIGZyb250IGF0IHRoZSBlbmQgb2YgaXRcclxuICAgICAgICBydWxlID0gJ14nICsgcnVsZSArICckJztcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgbWF0Y2hpbmcgc3RyaW5nXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJ1bGUpO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZmluZHMgYSBtYXRjaCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2VcclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJlc3BvbnNlUmVzdWx0RnJvbUV4Y2VwdGlvbihlcnI6IGFueSk6IFJlc3BvbnNlUmVzdWx0IHtcclxuICAgICAgICByZXR1cm4gPGFueT57XHJcbiAgICAgICAgICAgIGVycm9yOiAnRVhDRVBUSU9OJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYScsXHJcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgIGVycm9yRGV0YWlsOiBlcnJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|