ontimize-web-ngx 15.6.0-next.5 → 15.6.0-next.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +14 -8
- package/esm2020/lib/components/form/o-form.component.mjs +3 -5
- package/esm2020/lib/components/form/services/o-form-message.service.mjs +2 -2
- package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +9 -1
- package/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +2 -2
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +1 -1
- package/esm2020/lib/components/table/column/o-column.class.mjs +2 -1
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +9 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +24 -6
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +75 -87
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +52 -0
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +12 -4
- package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
- package/esm2020/lib/components/table/o-table.component.mjs +89 -8
- package/esm2020/lib/components/table/o-table.module.mjs +4 -1
- package/esm2020/lib/config/o-providers.mjs +4 -3
- package/esm2020/lib/i18n/i18n.mjs +6 -3
- package/esm2020/lib/injection-tokens/index.mjs +2 -1
- package/esm2020/lib/interfaces/index.mjs +2 -1
- package/esm2020/lib/interfaces/jsonapi-config.interface.mjs +3 -0
- package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
- package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +44 -7
- package/esm2020/lib/services/state/o-table-component-state.class.mjs +7 -1
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +8 -2
- package/esm2020/lib/types/config.type.mjs +1 -1
- package/esm2020/lib/types/service-configuration.type.mjs +1 -1
- package/esm2020/lib/types/table/index.mjs +2 -1
- package/esm2020/lib/types/table/o-column-value-filter.type.mjs +1 -1
- package/esm2020/lib/types/table/o-table-expandable-row-state.type.mjs +2 -0
- package/esm2020/lib/util/util.mjs +11 -1
- package/fesm2015/ontimize-web-ngx.mjs +360 -122
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +342 -120
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/form/navigation/o-form-navigation.component.d.ts +1 -0
- package/lib/components/input/o-boolean-form-data-component.class.d.ts +1 -0
- package/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.d.ts +1 -1
- package/lib/components/table/column/o-column.class.d.ts +2 -1
- package/lib/components/table/column/o-table-column.component.d.ts +2 -2
- package/lib/components/table/extensions/contextmenu/o-table-context-menu.component.d.ts +2 -0
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +9 -6
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +12 -0
- package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +1 -1
- package/lib/components/table/o-table-base.class.d.ts +2 -0
- package/lib/components/table/o-table.component.d.ts +11 -2
- package/lib/i18n/i18n.d.ts +3 -0
- package/lib/injection-tokens/index.d.ts +2 -0
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/interfaces/jsonapi-config.interface.d.ts +3 -0
- package/lib/interfaces/o-table-column.interface.d.ts +2 -1
- package/lib/services/jsonapi/jsonapi.service.d.ts +6 -2
- package/lib/services/state/o-table-component-state.class.d.ts +3 -0
- package/lib/types/config.type.d.ts +2 -2
- package/lib/types/service-configuration.type.d.ts +6 -1
- package/lib/types/table/index.d.ts +1 -0
- package/lib/types/table/o-column-value-filter.type.d.ts +3 -0
- package/lib/types/table/o-table-expandable-row-state.type.d.ts +5 -0
- package/lib/util/util.d.ts +1 -0
- package/package.json +1 -1
- package/theme.scss +69 -69
|
@@ -154,15 +154,21 @@ export class OFormNavigationComponent {
|
|
|
154
154
|
}
|
|
155
155
|
last() {
|
|
156
156
|
if (!this.queryConf || this.isLast()) {
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
this.moveToLast();
|
|
158
|
+
return;
|
|
159
159
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
this.
|
|
163
|
-
|
|
164
|
-
});
|
|
160
|
+
const offset = this.queryConf.totalRecordsNumber - this.queryConf.queryRows;
|
|
161
|
+
if (offset < 0 || offset === this.queryConf.queryRecordOffset) {
|
|
162
|
+
this.moveToLast();
|
|
163
|
+
return;
|
|
165
164
|
}
|
|
165
|
+
this.queryNavigationData(offset, this.queryConf.queryRows).then(() => {
|
|
166
|
+
this.moveToLast();
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
moveToLast() {
|
|
170
|
+
const index = this.navigationData.length - 1;
|
|
171
|
+
this.move(index);
|
|
166
172
|
}
|
|
167
173
|
isFirst() {
|
|
168
174
|
let result = this.currentIndex === 0;
|
|
@@ -267,4 +273,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
267
273
|
type: Inject,
|
|
268
274
|
args: [forwardRef(() => OFormBase)]
|
|
269
275
|
}] }, { type: i1.Router }]; } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLW5hdmlnYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9uYXZpZ2F0aW9uL28tZm9ybS1uYXZpZ2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vbmF2aWdhdGlvbi9vLWZvcm0tbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFtQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUE0QmpELE1BQU0sT0FBTyx3QkFBd0I7SUFhbkMsWUFDWSxRQUFrQixFQUNpQixLQUFnQixFQUNyRCxNQUFjO1FBRlosYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNpQixVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ3JELFdBQU0sR0FBTixNQUFNLENBQVE7UUFkakIsbUJBQWMsR0FBZSxFQUFFLENBQUM7UUFDL0Is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LENBQUMsaUJBQWlCLENBQUM7U0FDM0M7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUU7WUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1NBQzFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxDQUFDOztxSEFwUlUsd0JBQXdCLDBDQWV6QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO3lHQWYxQix3QkFBd0IseUdBSnhCO1FBQ1QsdUJBQXVCO0tBQ3hCLDBCQ3ZDSCx3L0JBY2U7MkZEMkJGLHdCQUF3QjtrQkFacEMsU0FBUzsrQkFDRSxtQkFBbUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSiwyQkFBMkIsRUFBRSxNQUFNO3FCQUNwQyxhQUNVO3dCQUNULHVCQUF1QjtxQkFDeEI7OzBCQWlCRSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgVHlwZSwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi4vLi4vLi4vbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXItYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSwgT05hdmlnYXRpb25JdGVtIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9udGltaXplU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1F1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvcXVlcnktcGFyYW1zLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1CYXNlIH0gZnJvbSAnLi4vby1mb3JtLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi8uLi8uLi8uLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT0Zvcm1OYXZpZ2F0aW9uQ2xhc3MgfSBmcm9tICcuL28tZm9ybS5uYXZpZ2F0aW9uLmNsYXNzJztcblxuXG5leHBvcnQgdHlwZSBRdWVyeUNvbmZpZ3VyYXRpb24gPSB7XG4gIHNlcnZpY2VUeXBlOiBzdHJpbmc7XG4gIHF1ZXJ5QXJndW1lbnRzOiBPUXVlcnlQYXJhbXM7XG4gIGVudGl0eTogc3RyaW5nO1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIHF1ZXJ5TWV0aG9kOiBzdHJpbmc7XG4gIHRvdGFsUmVjb3Jkc051bWJlcjogbnVtYmVyO1xuICBxdWVyeVJvd3M6IG51bWJlcjtcbiAgcXVlcnlSZWNvcmRPZmZzZXQ6IG51bWJlcjtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZm9ybS1uYXZpZ2F0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tZm9ybS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1mb3JtLW5hdmlnYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1mb3JtLW5hdmlnYXRpb25dJzogJ3RydWUnXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1OYXZpZ2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgbmF2aWdhdGlvbkRhdGE6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfY3VycmVudEluZGV4ID0gMDtcblxuICBwcm90ZWN0ZWQgZm9ybU5hdmlnYXRpb246IE9Gb3JtTmF2aWdhdGlvbkNsYXNzO1xuICBwcm90ZWN0ZWQgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZm9ybUxheW91dE1hbmFnZXI6IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2U7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcbiAgcHJvdGVjdGVkIHF1ZXJ5Q29uZjogUXVlcnlDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQmFzZSkpIHByaXZhdGUgX2Zvcm06IE9Gb3JtQmFzZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge1xuICAgIHRoaXMuZm9ybU5hdmlnYXRpb24gPSB0aGlzLl9mb3JtLmdldEZvcm1OYXZpZ2F0aW9uKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PE5hdmlnYXRpb25TZXJ2aWNlPihOYXZpZ2F0aW9uU2VydmljZSBhcyBUeXBlPE5hdmlnYXRpb25TZXJ2aWNlPik7XG5cbiAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5fZm9ybS5nZXRGb3JtTWFuYWdlcigpO1xuXG4gICAgbGV0IG5hdkRhdGE7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5hbGxvd05hdmlnYXRpb24oKSkge1xuICAgICAgbmF2RGF0YSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TGFzdEl0ZW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmF2RGF0YSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJldmlvdXNSb3V0ZURhdGEoKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKG5hdkRhdGEpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EYXRhID0gbmF2RGF0YS5rZXlzVmFsdWVzIHx8IFtdO1xuICAgICAgdGhpcy5xdWVyeUNvbmYgPSBuYXZEYXRhLnF1ZXJ5Q29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSB0aGlzLmdldEN1cnJlbnRJbmRleCgpO1xuICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICB9XG5cbiAgY29uZmlndXJlU2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMucXVlcnlDb25mKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3VyZVNlcnZpY2U6IE9Db25maWd1cmVTZXJ2aWNlQXJncyA9IHtcbiAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxuICAgICAgYmFzZVNlcnZpY2U6IE9udGltaXplU2VydmljZSxcbiAgICAgIGVudGl0eTogdGhpcy5xdWVyeUNvbmYuZW50aXR5LFxuICAgICAgc2VydmljZTogdGhpcy5xdWVyeUNvbmYuc2VydmljZSxcbiAgICAgIHNlcnZpY2VUeXBlOiB0aGlzLnF1ZXJ5Q29uZi5zZXJ2aWNlVHlwZVxuICAgIH07XG4gICAgdGhpcy5kYXRhU2VydmljZSA9IFV0aWwuY29uZmlndXJlU2VydmljZShjb25maWd1cmVTZXJ2aWNlKTtcbiAgfVxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKG9mZnNldDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IE9RdWVyeVBhcmFtcyB7XG4gICAgY29uc3QgcXVlcnlBcmd1bWVudHMgPSB7IC4uLnRoaXMucXVlcnlDb25mLnF1ZXJ5QXJndW1lbnRzIH07XG4gICAgcXVlcnlBcmd1bWVudHMuY29sdW1ucyA9IHRoaXMuZ2V0S2V5c0FycmF5KCk7XG4gICAgcXVlcnlBcmd1bWVudHMub3ZyckFyZ3Mub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHF1ZXJ5QXJndW1lbnRzLm92cnJBcmdzLmxlbmd0aCA9IGxlbmd0aCA/IGxlbmd0aCA6IHRoaXMucXVlcnlDb25mLnF1ZXJ5Um93cztcbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBwcm90ZWN0ZWQgcXVlcnlOYXZpZ2F0aW9uRGF0YShvZmZzZXQ6IG51bWJlciwgbGVuZ3RoPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnF1ZXJ5Q29uZikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXJzOiAke3RoaXMucXVlcnlDb25mLnF1ZXJ5TWV0aG9kfWApKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlBcmdzID0gdGhpcy5nZXRRdWVyeUFyZ3VtZW50cyhvZmZzZXQsIGxlbmd0aCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlTWV0aG9kID0gdGhpcy5kYXRhU2VydmljZVt0aGlzLnF1ZXJ5Q29uZi5xdWVyeU1ldGhvZF07XG5cbiAgICBpZiAodHlwZW9mIHNlcnZpY2VNZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgcXVlcnkgbWV0aG9kOiAke3RoaXMucXVlcnlDb25mLnF1ZXJ5TWV0aG9kfWApKTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGFwdGVkUGFyYW1zID0gdGhpcy5kYXRhU2VydmljZS5yZXF1ZXN0QXJndW1lbnRBZGFwdGVyLnBhcnNlUXVlcnlQYXJhbWV0ZXJzKHF1ZXJ5QXJncyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNlcnZpY2VbdGhpcy5xdWVyeUNvbmYucXVlcnlNZXRob2RdKC4uLmFkYXB0ZWRQYXJhbXMpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZXJyID0+IHJlamVjdChuZXcgRXJyb3IoZXJyKSlcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5xdWVyeVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRLZXlzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIC8vIGdldHRpbmcgYXZhaWxhYmxlIG5hdmlnYXRpb25EYXRhIGtleXNcbiAgICBjb25zdCBuYXZEYXRhID0gdGhpcy5uYXZpZ2F0aW9uRGF0YSA/ICh0aGlzLm5hdmlnYXRpb25EYXRhWzBdIHx8IHt9KSA6IHt9O1xuICAgIGNvbnN0IGtleXNBcnJheSA9IFtdO1xuICAgIHRoaXMuX2Zvcm0ua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChuYXZEYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAga2V5c0FycmF5LnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ga2V5c0FycmF5O1xuICB9XG5cbiAgZ2V0Q3VycmVudEluZGV4KCk6IG51bWJlciB7XG4gICAgY29uc3Qga2V5c0FycmF5ID0gdGhpcy5nZXRLZXlzQXJyYXkoKTtcbiAgICAvLyBjdXJyZW50IHVybCBrZXlzIG9iamVjdFxuICAgIGNvbnN0IGN1cnJlbnRLZXlzID0ge307XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmZvcm1OYXZpZ2F0aW9uLmdldFVybFBhcmFtcygpO1xuICAgIGtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjdXJyZW50S2V5c1trZXldID0gY3VycmVudEl0ZW1ba2V5XTtcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gKHRoaXMubmF2aWdhdGlvbkRhdGEgfHwgW10pLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zdCBpdGVtS2V5cyA9IHt9O1xuICAgICAga2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaXRlbUtleXNba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFV0aWwuaXNFcXVpdmFsZW50KGl0ZW1LZXlzLCBjdXJyZW50S2V5cyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyBpbmRleCA6IDA7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGg7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCArIDE7XG4gICAgaWYgKHRvdGFsID4gaW5kZXgpIHtcbiAgICAgIHRoaXMubW92ZShpbmRleCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5Q29uZikge1xuICAgICAgY29uc3Qgb2Zmc2V0OiBudW1iZXIgPSAodGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgfHwgMCkgKyB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJvd3M7XG4gICAgICB0aGlzLnF1ZXJ5TmF2aWdhdGlvbkRhdGEob2Zmc2V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZlKDApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Zvcm0tdG9vbGJhci0+bmV4dCgpOiB0b3RhbCA+IGluZGV4Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJldmlvdXMoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAtIDE7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMubW92ZShpbmRleCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5Q29uZikge1xuICAgICAgY29uc3Qgb2Zmc2V0OiBudW1iZXIgPSB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJlY29yZE9mZnNldCAtIHRoaXMucXVlcnlDb25mLnF1ZXJ5Um93cztcbiAgICAgIHRoaXMucXVlcnlOYXZpZ2F0aW9uRGF0YShvZmZzZXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm1vdmUodGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggLSAxKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmb3JtLXRvb2xiYXItPm5leHQoKTogaW5kZXggPCAwJyk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJ5Q29uZiB8fCB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJlY29yZE9mZnNldCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5TmF2aWdhdGlvbkRhdGEoMCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubW92ZSgwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJ5Q29uZiB8fCB0aGlzLmlzTGFzdCgpKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEubGVuZ3RoIC0gMTtcbiAgICAgIHRoaXMubW92ZShpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMucXVlcnlDb25mLnRvdGFsUmVjb3Jkc051bWJlciAtIHRoaXMucXVlcnlDb25mLnF1ZXJ5Um93cztcbiAgICAgIHRoaXMucXVlcnlOYXZpZ2F0aW9uRGF0YShvZmZzZXQsIHRoaXMucXVlcnlDb25mLnF1ZXJ5Um93cykudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubW92ZSh0aGlzLm5hdmlnYXRpb25EYXRhLmxlbmd0aCAtIDEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNGaXJzdCgpIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdGhpcy5jdXJyZW50SW5kZXggPT09IDA7XG4gICAgaWYgKHJlc3VsdCAmJiB0aGlzLnF1ZXJ5Q29uZikge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgPT09IDA7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpc0xhc3QoKSB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRoaXMuY3VycmVudEluZGV4ID09PSAodGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggLSAxKTtcbiAgICBpZiAocmVzdWx0ICYmIHRoaXMucXVlcnlDb25mKSB7XG4gICAgICByZXN1bHQgPSAodGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgKyB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJvd3MpXG4gICAgICAgID49IHRoaXMucXVlcnlDb25mLnRvdGFsUmVjb3Jkc051bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1vdmUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2Zvcm0uc2hvd0NvbmZpcm1EaXNjYXJkQ2hhbmdlcygpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmIChyZXMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5hbGxvd05hdmlnYXRpb24oKSkge1xuICAgICAgICAgIHRoaXMubW92ZUluRm9ybUxheW91dE1hbmFnZXIoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW92ZVdpdGhvdXRNYW5hZ2VyKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlV2l0aG91dE1hbmFnZXIoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZU9mU2VsZWN0ZWRSb3codGhpcy5uYXZpZ2F0aW9uRGF0YVtpbmRleF0pO1xuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgICBpZiAobmF2RGF0YSkge1xuICAgICAgICB0aGlzLl9mb3JtLmNhbkRpc2NhcmRDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBleHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7fTtcbiAgICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHVybEFycmF5ID0gbmF2RGF0YS51cmwuc3BsaXQoQ29kZXMuUk9VVEVfU0VQQVJBVE9SKTtcbiAgICAgICAgY29uc3QgdXJsID0gdXJsQXJyYXkuc3BsaWNlKDAsIHVybEFycmF5Lmxlbmd0aCAtIHJvdXRlLmxlbmd0aCkuam9pbihDb2Rlcy5ST1VURV9TRVBBUkFUT1IpO1xuICAgICAgICByb3V0ZS51bnNoaWZ0KHVybCk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocm91dGUsIGV4dHJhcykudGhlbigobmF2aWdhdGlvbkRvbmU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAobmF2aWdhdGlvbkRvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGlmICh1cmwgIT09IG5hdkRhdGEudXJsKSB7XG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUluRm9ybUxheW91dE1hbmFnZXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2Zvcm0uc2V0VXJsUGFyYW1zQW5kUmVsb2FkKHRoaXMubmF2aWdhdGlvbkRhdGFbaW5kZXhdKTtcbiAgfVxuXG4gIGdldFJvdXRlT2ZTZWxlY3RlZFJvdyhpdGVtOiBhbnkpIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICB0aGlzLl9mb3JtLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtW2tleV0pKSB7XG4gICAgICAgICAgcm91dGUucHVzaChpdGVtW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgc2hvd05hdmlnYXRpb24oKSB7XG4gICAgLypcbiAgICAgIHF1ZXJ5Q29uZiBpcyBvbmx5IGRlZmluZWQgd2hlbiB0aGUgc2VydmljZSBpcyBwYWdlYWJsZVxuICAgICovXG4gICAgcmV0dXJuIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5Q29uZikgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyKSkgPyB0aGlzLnF1ZXJ5Q29uZi50b3RhbFJlY29yZHNOdW1iZXIgPiAxIDogdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggPiAxXG4gIH1cblxuICBzZXQgY3VycmVudEluZGV4KGFyZzogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudEluZGV4ID0gYXJnO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50SW5kZXg7XG4gIH1cblxuICBnZXRSZWNvcmRJbmRleCgpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICsgMTtcbiAgICBpZiAodGhpcy5xdWVyeUNvbmYpIHtcbiAgICAgIGluZGV4ICs9IHRoaXMucXVlcnlDb25mLnF1ZXJ5UmVjb3JkT2Zmc2V0O1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBnZXRUb3RhbFJlY29yZHNOdW1iZXIoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5xdWVyeUNvbmYgJiYgdGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGg7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TmF2aWdhdGlvbigpXCI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby1mb3JtLXRvb2xiYXItYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRmlyc3QoKVwiIChjbGljayk9XCJmaXJzdCgpXCI+XG4gICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJGaXJzdFwiIGxheW91dC1wYWRkaW5nIHN2Z0ljb249XCJvbnRpbWl6ZTpmaXJzdF9wYWdlXCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby1mb3JtLXRvb2xiYXItYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRmlyc3QoKVwiIChjbGljayk9XCJwcmV2aW91cygpXCI+XG4gICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiIGxheW91dC1wYWRkaW5nIHN2Z0ljb249XCJvbnRpbWl6ZTprZXlib2FyZF9hcnJvd19sZWZ0XCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxzcGFuIGxheW91dC1wYWRkaW5nPnt7IGdldFJlY29yZEluZGV4KCkgfX0gLyB7eyBnZXRUb3RhbFJlY29yZHNOdW1iZXIoKSB9fTwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJvLWZvcm0tdG9vbGJhci1idXR0b25cIiBbZGlzYWJsZWRdPVwiaXNMYXN0KClcIiAoY2xpY2spPVwibmV4dCgpXCI+XG4gICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJOZXh0XCIgbGF5b3V0LXBhZGRpbmcgc3ZnSWNvbj1cIm9udGltaXplOmtleWJvYXJkX2Fycm93X3JpZ2h0XCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby1mb3JtLXRvb2xiYXItYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzTGFzdCgpXCIgKGNsaWNrKT1cImxhc3QoKVwiPlxuICAgIDxtYXQtaWNvbiBhcmlhLWxhYmVsPVwiTGFzdFwiIGxheW91dC1wYWRkaW5nIHN2Z0ljb249XCJvbnRpbWl6ZTpsYXN0X3BhZ2VcIj48L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLW5hdmlnYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9uYXZpZ2F0aW9uL28tZm9ybS1uYXZpZ2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vbmF2aWdhdGlvbi9vLWZvcm0tbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFtQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUE0QmpELE1BQU0sT0FBTyx3QkFBd0I7SUFhbkMsWUFDWSxRQUFrQixFQUNpQixLQUFnQixFQUNyRCxNQUFjO1FBRlosYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNpQixVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ3JELFdBQU0sR0FBTixNQUFNLENBQVE7UUFkakIsbUJBQWMsR0FBZSxFQUFFLENBQUM7UUFDL0Is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QzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDO1NBQzNDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztTQUMxQztRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDcEMsQ0FBQzs7cUhBaFNVLHdCQUF3QiwwQ0FlekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQzt5R0FmMUIsd0JBQXdCLHlHQUp4QjtRQUNULHVCQUF1QjtLQUN4QiwwQkN2Q0gsdy9CQWNlOzJGRDJCRix3QkFBd0I7a0JBWnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUdkLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osMkJBQTJCLEVBQUUsTUFBTTtxQkFDcEMsYUFDVTt3QkFDVCx1QkFBdUI7cUJBQ3hCOzswQkFpQkUsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFR5cGUsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4uLy4uLy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UsIE9OYXZpZ2F0aW9uSXRlbSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQmFzZSB9IGZyb20gJy4uL28tZm9ybS1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4vLi4vLi4vLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IE9Gb3JtTmF2aWdhdGlvbkNsYXNzIH0gZnJvbSAnLi9vLWZvcm0ubmF2aWdhdGlvbi5jbGFzcyc7XG5cblxuZXhwb3J0IHR5cGUgUXVlcnlDb25maWd1cmF0aW9uID0ge1xuICBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBxdWVyeUFyZ3VtZW50czogT1F1ZXJ5UGFyYW1zO1xuICBlbnRpdHk6IHN0cmluZztcbiAgc2VydmljZTogc3RyaW5nO1xuICBxdWVyeU1ldGhvZDogc3RyaW5nO1xuICB0b3RhbFJlY29yZHNOdW1iZXI6IG51bWJlcjtcbiAgcXVlcnlSb3dzOiBudW1iZXI7XG4gIHF1ZXJ5UmVjb3JkT2Zmc2V0OiBudW1iZXI7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWZvcm0tbmF2aWdhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWZvcm0tbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tZm9ybS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZm9ybS1uYXZpZ2F0aW9uXSc6ICd0cnVlJ1xuICB9LFxuICBwcm92aWRlcnM6IFtcbiAgICBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlclxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9Gb3JtTmF2aWdhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIG5hdmlnYXRpb25EYXRhOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX2N1cnJlbnRJbmRleCA9IDA7XG5cbiAgcHJvdGVjdGVkIGZvcm1OYXZpZ2F0aW9uOiBPRm9ybU5hdmlnYXRpb25DbGFzcztcbiAgcHJvdGVjdGVkIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcbiAgcHJvdGVjdGVkIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlO1xuXG4gIHByb3RlY3RlZCBxdWVyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IEJhc2VTZXJ2aWNlPFNlcnZpY2VSZXNwb25zZT47XG4gIHByb3RlY3RlZCBxdWVyeUNvbmY6IFF1ZXJ5Q29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPRm9ybUJhc2UpKSBwcml2YXRlIF9mb3JtOiBPRm9ybUJhc2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICB0aGlzLmZvcm1OYXZpZ2F0aW9uID0gdGhpcy5fZm9ybS5nZXRGb3JtTmF2aWdhdGlvbigpO1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxOYXZpZ2F0aW9uU2VydmljZT4oTmF2aWdhdGlvblNlcnZpY2UgYXMgVHlwZTxOYXZpZ2F0aW9uU2VydmljZT4pO1xuXG4gICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMuX2Zvcm0uZ2V0Rm9ybU1hbmFnZXIoKTtcblxuICAgIGxldCBuYXZEYXRhO1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuYWxsb3dOYXZpZ2F0aW9uKCkpIHtcbiAgICAgIG5hdkRhdGEgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hdkRhdGEgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzUm91dGVEYXRhKCk7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChuYXZEYXRhKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YSA9IG5hdkRhdGEua2V5c1ZhbHVlcyB8fCBbXTtcbiAgICAgIHRoaXMucXVlcnlDb25mID0gbmF2RGF0YS5xdWVyeUNvbmZpZ3VyYXRpb247XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50SW5kZXgoKTtcbiAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcbiAgfVxuXG4gIGNvbmZpZ3VyZVNlcnZpY2UoKSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJ5Q29uZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmVTZXJ2aWNlOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7XG4gICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICAgIGJhc2VTZXJ2aWNlOiBPbnRpbWl6ZVNlcnZpY2UsXG4gICAgICBlbnRpdHk6IHRoaXMucXVlcnlDb25mLmVudGl0eSxcbiAgICAgIHNlcnZpY2U6IHRoaXMucXVlcnlDb25mLnNlcnZpY2UsXG4gICAgICBzZXJ2aWNlVHlwZTogdGhpcy5xdWVyeUNvbmYuc2VydmljZVR5cGVcbiAgICB9O1xuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBVdGlsLmNvbmZpZ3VyZVNlcnZpY2UoY29uZmlndXJlU2VydmljZSk7XG4gIH1cblxuICBnZXRRdWVyeUFyZ3VtZW50cyhvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBPUXVlcnlQYXJhbXMge1xuICAgIGNvbnN0IHF1ZXJ5QXJndW1lbnRzID0geyAuLi50aGlzLnF1ZXJ5Q29uZi5xdWVyeUFyZ3VtZW50cyB9O1xuICAgIHF1ZXJ5QXJndW1lbnRzLmNvbHVtbnMgPSB0aGlzLmdldEtleXNBcnJheSgpO1xuICAgIHF1ZXJ5QXJndW1lbnRzLm92cnJBcmdzLm9mZnNldCA9IG9mZnNldDtcbiAgICBxdWVyeUFyZ3VtZW50cy5vdnJyQXJncy5sZW5ndGggPSBsZW5ndGggPyBsZW5ndGggOiB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJvd3M7XG4gICAgcmV0dXJuIHF1ZXJ5QXJndW1lbnRzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5TmF2aWdhdGlvbkRhdGEob2Zmc2V0OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5xdWVyeUNvbmYpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgcXVlcnkgcGFyYW1ldGVyczogJHt0aGlzLnF1ZXJ5Q29uZi5xdWVyeU1ldGhvZH1gKSk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5QXJncyA9IHRoaXMuZ2V0UXVlcnlBcmd1bWVudHMob2Zmc2V0LCBsZW5ndGgpO1xuXG4gICAgY29uc3Qgc2VydmljZU1ldGhvZCA9IHRoaXMuZGF0YVNlcnZpY2VbdGhpcy5xdWVyeUNvbmYucXVlcnlNZXRob2RdO1xuXG4gICAgaWYgKHR5cGVvZiBzZXJ2aWNlTWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIHF1ZXJ5IG1ldGhvZDogJHt0aGlzLnF1ZXJ5Q29uZi5xdWVyeU1ldGhvZH1gKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWRhcHRlZFBhcmFtcyA9IHRoaXMuZGF0YVNlcnZpY2UucmVxdWVzdEFyZ3VtZW50QWRhcHRlci5wYXJzZVF1ZXJ5UGFyYW1ldGVycyhxdWVyeUFyZ3MpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFTZXJ2aWNlW3RoaXMucXVlcnlDb25mLnF1ZXJ5TWV0aG9kXSguLi5hZGFwdGVkUGFyYW1zKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25EYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlDb25mLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiByZWplY3QobmV3IEVycm9yKGVycikpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0S2V5c0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICAvLyBnZXR0aW5nIGF2YWlsYWJsZSBuYXZpZ2F0aW9uRGF0YSBrZXlzXG4gICAgY29uc3QgbmF2RGF0YSA9IHRoaXMubmF2aWdhdGlvbkRhdGEgPyAodGhpcy5uYXZpZ2F0aW9uRGF0YVswXSB8fCB7fSkgOiB7fTtcbiAgICBjb25zdCBrZXlzQXJyYXkgPSBbXTtcbiAgICB0aGlzLl9mb3JtLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAobmF2RGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGtleXNBcnJheS5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGtleXNBcnJheTtcbiAgfVxuXG4gIGdldEN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGtleXNBcnJheSA9IHRoaXMuZ2V0S2V5c0FycmF5KCk7XG4gICAgLy8gY3VycmVudCB1cmwga2V5cyBvYmplY3RcbiAgICBjb25zdCBjdXJyZW50S2V5cyA9IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5mb3JtTmF2aWdhdGlvbi5nZXRVcmxQYXJhbXMoKTtcbiAgICBrZXlzQXJyYXkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY3VycmVudEtleXNba2V5XSA9IGN1cnJlbnRJdGVtW2tleV07XG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXg6IG51bWJlciA9ICh0aGlzLm5hdmlnYXRpb25EYXRhIHx8IFtdKS5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgaXRlbUtleXMgPSB7fTtcbiAgICAgIGtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGl0ZW1LZXlzW2tleV0gPSBpdGVtW2tleV07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBVdGlsLmlzRXF1aXZhbGVudChpdGVtS2V5cywgY3VycmVudEtleXMpO1xuICAgIH0pO1xuICAgIHJldHVybiBpbmRleCA+PSAwID8gaW5kZXggOiAwO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMubmF2aWdhdGlvbkRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKyAxO1xuICAgIGlmICh0b3RhbCA+IGluZGV4KSB7XG4gICAgICB0aGlzLm1vdmUoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeUNvbmYpIHtcbiAgICAgIGNvbnN0IG9mZnNldDogbnVtYmVyID0gKHRoaXMucXVlcnlDb25mLnF1ZXJ5UmVjb3JkT2Zmc2V0IHx8IDApICsgdGhpcy5xdWVyeUNvbmYucXVlcnlSb3dzO1xuICAgICAgdGhpcy5xdWVyeU5hdmlnYXRpb25EYXRhKG9mZnNldCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubW92ZSgwKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmb3JtLXRvb2xiYXItPm5leHQoKTogdG90YWwgPiBpbmRleCcpO1xuICAgIH1cbiAgfVxuXG4gIHByZXZpb3VzKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggLSAxO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLm1vdmUoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeUNvbmYpIHtcbiAgICAgIGNvbnN0IG9mZnNldDogbnVtYmVyID0gdGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgLSB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJvd3M7XG4gICAgICB0aGlzLnF1ZXJ5TmF2aWdhdGlvbkRhdGEob2Zmc2V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZlKHRoaXMubmF2aWdhdGlvbkRhdGEubGVuZ3RoIC0gMSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignZm9ybS10b29sYmFyLT5uZXh0KCk6IGluZGV4IDwgMCcpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIGlmICghdGhpcy5xdWVyeUNvbmYgfHwgdGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgPT09IDApIHtcbiAgICAgIHRoaXMubW92ZSgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeU5hdmlnYXRpb25EYXRhKDApLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm1vdmUoMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsYXN0KCkge1xuICAgIGlmICghdGhpcy5xdWVyeUNvbmYgfHwgdGhpcy5pc0xhc3QoKSkge1xuICAgICAgdGhpcy5tb3ZlVG9MYXN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyIC0gdGhpcy5xdWVyeUNvbmYucXVlcnlSb3dzO1xuXG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID09PSB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJlY29yZE9mZnNldCkge1xuICAgICAgLy8gaWYgdGhlIG9mZnNldCBpcyBuZWdhdGl2ZSBvciBlcXVhbCB0byB0aGUgY3VycmVudCBvZmZzZXQsIGl0IG1lYW5zIHdlIGFyZSBhbHJlYWR5IGF0IHRoZSBsYXN0IHBhZ2VcbiAgICAgIHRoaXMubW92ZVRvTGFzdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlOYXZpZ2F0aW9uRGF0YShvZmZzZXQsIHRoaXMucXVlcnlDb25mLnF1ZXJ5Um93cykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLm1vdmVUb0xhc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZVRvTGFzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEubGVuZ3RoIC0gMTtcbiAgICB0aGlzLm1vdmUoaW5kZXgpO1xuICB9XG5cbiAgaXNGaXJzdCgpIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdGhpcy5jdXJyZW50SW5kZXggPT09IDA7XG4gICAgaWYgKHJlc3VsdCAmJiB0aGlzLnF1ZXJ5Q29uZikge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgPT09IDA7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpc0xhc3QoKSB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRoaXMuY3VycmVudEluZGV4ID09PSAodGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggLSAxKTtcbiAgICBpZiAocmVzdWx0ICYmIHRoaXMucXVlcnlDb25mKSB7XG4gICAgICByZXN1bHQgPSAodGhpcy5xdWVyeUNvbmYucXVlcnlSZWNvcmRPZmZzZXQgKyB0aGlzLnF1ZXJ5Q29uZi5xdWVyeVJvd3MpXG4gICAgICAgID49IHRoaXMucXVlcnlDb25mLnRvdGFsUmVjb3Jkc051bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1vdmUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2Zvcm0uc2hvd0NvbmZpcm1EaXNjYXJkQ2hhbmdlcygpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmIChyZXMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5hbGxvd05hdmlnYXRpb24oKSkge1xuICAgICAgICAgIHRoaXMubW92ZUluRm9ybUxheW91dE1hbmFnZXIoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW92ZVdpdGhvdXRNYW5hZ2VyKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlV2l0aG91dE1hbmFnZXIoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZU9mU2VsZWN0ZWRSb3codGhpcy5uYXZpZ2F0aW9uRGF0YVtpbmRleF0pO1xuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuYXZEYXRhOiBPTmF2aWdhdGlvbkl0ZW0gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldExhc3RJdGVtKCk7XG4gICAgICBpZiAobmF2RGF0YSkge1xuICAgICAgICB0aGlzLl9mb3JtLmNhbkRpc2NhcmRDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBleHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7fTtcbiAgICAgICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHVybEFycmF5ID0gbmF2RGF0YS51cmwuc3BsaXQoQ29kZXMuUk9VVEVfU0VQQVJBVE9SKTtcbiAgICAgICAgY29uc3QgdXJsID0gdXJsQXJyYXkuc3BsaWNlKDAsIHVybEFycmF5Lmxlbmd0aCAtIHJvdXRlLmxlbmd0aCkuam9pbihDb2Rlcy5ST1VURV9TRVBBUkFUT1IpO1xuICAgICAgICByb3V0ZS51bnNoaWZ0KHVybCk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocm91dGUsIGV4dHJhcykudGhlbigobmF2aWdhdGlvbkRvbmU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAobmF2aWdhdGlvbkRvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGlmICh1cmwgIT09IG5hdkRhdGEudXJsKSB7XG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlTGFzdEl0ZW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUluRm9ybUxheW91dE1hbmFnZXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2Zvcm0uc2V0VXJsUGFyYW1zQW5kUmVsb2FkKHRoaXMubmF2aWdhdGlvbkRhdGFbaW5kZXhdKTtcbiAgfVxuXG4gIGdldFJvdXRlT2ZTZWxlY3RlZFJvdyhpdGVtOiBhbnkpIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICB0aGlzLl9mb3JtLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtW2tleV0pKSB7XG4gICAgICAgICAgcm91dGUucHVzaChpdGVtW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgc2hvd05hdmlnYXRpb24oKSB7XG4gICAgLypcbiAgICAgIHF1ZXJ5Q29uZiBpcyBvbmx5IGRlZmluZWQgd2hlbiB0aGUgc2VydmljZSBpcyBwYWdlYWJsZVxuICAgICovXG4gICAgcmV0dXJuIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5Q29uZikgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyKSkgPyB0aGlzLnF1ZXJ5Q29uZi50b3RhbFJlY29yZHNOdW1iZXIgPiAxIDogdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggPiAxXG4gIH1cblxuICBzZXQgY3VycmVudEluZGV4KGFyZzogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudEluZGV4ID0gYXJnO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50SW5kZXg7XG4gIH1cblxuICBnZXRSZWNvcmRJbmRleCgpOiBudW1iZXIge1xuICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICsgMTtcbiAgICBpZiAodGhpcy5xdWVyeUNvbmYpIHtcbiAgICAgIGluZGV4ICs9IHRoaXMucXVlcnlDb25mLnF1ZXJ5UmVjb3JkT2Zmc2V0O1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBnZXRUb3RhbFJlY29yZHNOdW1iZXIoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5xdWVyeUNvbmYgJiYgdGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeUNvbmYudG90YWxSZWNvcmRzTnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGg7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TmF2aWdhdGlvbigpXCI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby1mb3JtLXRvb2xiYXItYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRmlyc3QoKVwiIChjbGljayk9XCJmaXJzdCgpXCI+XG4gICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJGaXJzdFwiIGxheW91dC1wYWRkaW5nIHN2Z0ljb249XCJvbnRpbWl6ZTpmaXJzdF9wYWdlXCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby1mb3JtLXRvb2xiYXItYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRmlyc3QoKVwiIChjbGljayk9XCJwcmV2aW91cygpXCI+XG4gICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiIGxheW91dC1wYWRkaW5nIHN2Z0ljb249XCJvbnRpbWl6ZTprZXlib2FyZF9hcnJvd19sZWZ0XCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxzcGFuIGxheW91dC1wYWRkaW5nPnt7IGdldFJlY29yZEluZGV4KCkgfX0gLyB7eyBnZXRUb3RhbFJlY29yZHNOdW1iZXIoKSB9fTwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJvLWZvcm0tdG9vbGJhci1idXR0b25cIiBbZGlzYWJsZWRdPVwiaXNMYXN0KClcIiAoY2xpY2spPVwibmV4dCgpXCI+XG4gICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJOZXh0XCIgbGF5b3V0LXBhZGRpbmcgc3ZnSWNvbj1cIm9udGltaXplOmtleWJvYXJkX2Fycm93X3JpZ2h0XCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby1mb3JtLXRvb2xiYXItYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzTGFzdCgpXCIgKGNsaWNrKT1cImxhc3QoKVwiPlxuICAgIDxtYXQtaWNvbiBhcmlhLWxhYmVsPVwiTGFzdFwiIGxheW91dC1wYWRkaW5nIHN2Z0ljb249XCJvbnRpbWl6ZTpsYXN0X3BhZ2VcIj48L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|