@fundamental-ngx/platform 0.43.36 → 0.43.38
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/approval-flow/approval-flow-user-list/approval-flow-user-list.component.d.ts +10 -0
- package/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -4
- package/esm2020/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +50 -14
- package/esm2020/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -1
- package/esm2020/list/base-list-item.mjs +4 -2
- package/esm2020/list/list.component.mjs +12 -2
- package/esm2020/table/components/table-row/table-row.component.mjs +4 -3
- package/esm2020/table/table.component.mjs +43 -10
- package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +241 -37
- package/esm2020/table-helpers/models/directives.mjs +1 -1
- package/esm2020/table-helpers/services/table-column-resize.service.mjs +26 -5
- package/esm2020/table-helpers/table.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +52 -20
- package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-form.mjs +2 -0
- package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-list.mjs +15 -2
- package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +369 -147
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +165 -131
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +50 -18
- package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-form.mjs +2 -0
- package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-list.mjs +14 -2
- package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +370 -148
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +164 -131
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fundamental-ngx-platform-v0.43.38.tgz +0 -0
- package/list/list.component.d.ts +6 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/table/table.component.d.ts +9 -0
- package/table-helpers/directives/table-virtual-scroll.directive.d.ts +64 -5
- package/table-helpers/models/directives.d.ts +1 -0
- package/table-helpers/services/table-column-resize.service.d.ts +4 -0
- package/table-helpers/table.d.ts +10 -2
- package/fundamental-ngx-platform-v0.43.36.tgz +0 -0
|
@@ -261,10 +261,16 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
261
261
|
this._multiSelect = false;
|
|
262
262
|
}
|
|
263
263
|
this._selectionModel = new SelectionModel(this._multiSelect, this.selectedItems);
|
|
264
|
-
this._selectionModel.changed.pipe(takeUntil(this._destroyed)).subscribe(() => {
|
|
264
|
+
this._selectionModel.changed.pipe(takeUntil(this._destroyed)).subscribe((selection) => {
|
|
265
265
|
this.selectedItems = this._selectionModel.selected;
|
|
266
266
|
const event = new SelectionChangeEvent();
|
|
267
267
|
event.selectedItems = this.selectedItems;
|
|
268
|
+
if (selection.added?.length) {
|
|
269
|
+
event.added = selection.added[0];
|
|
270
|
+
}
|
|
271
|
+
if (selection.removed?.length) {
|
|
272
|
+
event.removed = selection.removed[0];
|
|
273
|
+
}
|
|
268
274
|
this.stateChanges.next(event);
|
|
269
275
|
this.selectedItemChange.emit(event);
|
|
270
276
|
});
|
|
@@ -385,6 +391,10 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
385
391
|
this.stateChanges.next(item);
|
|
386
392
|
}
|
|
387
393
|
/** @hidden */
|
|
394
|
+
_clearSelection() {
|
|
395
|
+
this._selectionModel.clear();
|
|
396
|
+
}
|
|
397
|
+
/** @hidden */
|
|
388
398
|
_setItems() {
|
|
389
399
|
if (this._dsItems.length !== null && this.itemSize !== 0) {
|
|
390
400
|
this._startIndex = 0;
|
|
@@ -739,4 +749,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
739
749
|
type: HostListener,
|
|
740
750
|
args: ['click', ['$event']]
|
|
741
751
|
}] } });
|
|
742
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxN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QUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUszQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUt0QyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFnSnRFLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExJU1RfSVRFTV9UWVBFLCBMaXN0SXRlbURlZiB9IGZyb20gJy4vYmFzZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBMaXN0Q29uZmlnIH0gZnJvbSAnLi9saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbnRlbnRDb250ZXh0LCBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2xvYWQtbW9yZS1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBMaXN0LCBGZHBMaXN0RGF0YVNvdXJjZSwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKiogU2VsZWN0ZWQgaXRlbXMgKi9cbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcbiAgICAvKiogSW5kZXggKi9cbiAgICBpbmRleDogbnVtYmVyO1xufVxuXG5sZXQgbmV4dExpc3RJZCA9IDA7XG5cbi8qKlxuICogVGhlIExpc3QgY29tcG9uZW50IHJlcHJlc2VudHMgYSBjb250YWluZXIgZm9yIGxpc3QgaXRlbSB0eXBlcy5cbiAqIEl0IGlzIHVzZWQgdG8gZGlzcGxheSBhIGxpc3QgZmVhdHVyZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IEZkcExpc3RDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICctMSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQ8VD5cbiAgICBleHRlbmRzIENvbGxlY3Rpb25CYXNlSW5wdXRcbiAgICBpbXBsZW1lbnRzIExpc3RVbnJlYWRJbmRpY2F0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGZHBMaXN0PEJhc2VMaXN0SXRlbT5cbntcbiAgICAvKiogIEFuIGFycmF5IHRoYXQgaG9sZHMgYSBsaXN0IG9mIGFsbCBzZWxlY3RlZCBpdGVtcy4gKiovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcblxuICAgIC8qKiBkZWZpbmUgc2l6ZSBvZiBpdGVtcyBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFTZXRzaXplOiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lcyB3aGV0aGVyIGl0ZW1zIGFyZSBtdWx0aXNlbGVjdGFibGUgZm9yIHNjcmVlbiByZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTXVsdGlzZWxlY3RhYmxlOiBib29sZWFuO1xuXG4gICAgLyoqIFRpdGxlIHVzZWQgb24gYnV0dG9uIHdoZW4gZGF0YSBsb2FkcyBvbiBidXR0b24gY2xpY2suICovXG4gICAgQElucHV0KClcbiAgICBsb2FkVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBMYWJlbCB1c2VkIG9uIGFubm91bmNlIG1lc3NhZ2Ugb2YgZGF0YSB3YXMgbG9hZGVkIGZvciBzY3JlZW4gcmVhZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmdMYWJlbCA9ICcnO1xuXG4gICAgLyoqIFdhaXQgdGltZSBmb3IgbmV3IGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVsYXlUaW1lOiBudW1iZXI7XG5cbiAgICAvKiogSXRlbXMgdG8gYmUgbG9hZGVkIGF0IG9uY2UuIEludGluaXR5IChubyBsaW1pdCkgYnkgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1TaXplID0gSW5maW5pdHk7XG5cbiAgICAvKiogRW5hYmxlcyBsYXp5IGxvYWRNb3JlIG9mIGRhdGEuICovXG4gICAgQElucHV0KClcbiAgICBsb2FkTW9yZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZGF0YSBsb2FkIG9uIHNjcm9sbCBmb3IgdHJ1ZVxuICAgICAqIGZhbHNlOiBlbmFibGVzIGRhdGEgbG9hZGluZyBvbiBidXR0b24gY2xpY2suXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkT25TY3JvbGw6IGJvb2xlYW47XG5cbiAgICAvKiogZGVmaW5lIHRoZSByb2xlIHRvIGN1c3RvbSByZXF1aXJlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGUgPSAnbGlzdCc7XG5cbiAgICAvKiogTGlzdFR5cGUgJ2luYWN0aXZlJyB8ICdhY3RpdmUnIHwgJ25hdmlnYXRpb24nIHwgJ2RldGFpbCcgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpc3RUeXBlOiBMaXN0VHlwZSA9ICdhY3RpdmUnO1xuXG4gICAgLyoqIE1heCBoZWlnaHQgZm9yIHZpZXdwb3J0IHRvIGRpc3BsYXkgc2Nyb2xsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgcmVtb3ZlZCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBTY3JvbGwgb2Zmc2V0IHBlcmNlbnRhZ2UgdG8gdHJpZ2dlciBzY3JvbGwgZXZlbnQuICovXG4gICAgQElucHV0KClcbiAgICBzY3JvbGxPZmZzZXRQZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgICAvKiogRWVuYWJsZXMgc2VsZWN0aW9uIHN0eWxlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHNlbGVjdGlvbi4gVHlwZXMgaW5jbHVkZTpcbiAgICAgKiAnbm9uZSd8ICdtdWx0aScgfCAnc2luZ2xlJ3wnZGVsZXRlJy5cbiAgICAgKiBMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoKS4nXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gJ25vbmUnLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uVHlwZSA9ICdub25lJztcblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgcmFkaW8gYnV0dG9uIGFuZCBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByb3cgbGV2ZWwgU2VsZWN0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJvd1NlbGVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3Jvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1zZWxlY3Rpb24tcm93Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZWQgJiYgdGhpcy5oYXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByb3dTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIERhdGFzb3VyY2UgZm9yIHN1Z2dlc3Rpb24gbGlzdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBMaXN0RGF0YVNvdXJjZTxUPikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEUyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBMaXN0RGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVkID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gWydmZC1saXN0LS1uYXZpZ2F0aW9uJ107XG4gICAgICAgIGlmICh0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2ZkLWxpc3QtLW5hdmlnYXRpb24tb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NMaXN0KTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGVkO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRpb25JbmRpY2F0b3IuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbmF2aWdhdGlvbkluZGljYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1pbmRpY2F0aW9uJyk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdmlnYXRpb25JbmRpY2F0b3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzQnlMaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc0J5TGluZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCeUxpbmUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1ieWxpbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQnlMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQnlMaW5lO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzT2JqZWN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc09iamVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNPYmplY3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1vYmplY3QtbGlzdCcpO1xuICAgIH1cblxuICAgIGdldCBoYXNPYmplY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVucmVhZEluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW50ZXJjZXB0IHRhYiBrZXkgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGludGVyY2VwdFRhYktleSA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHNlbGVjdGVkIGl0ZW0gaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQWNjZXNzIGNoaWxkIGVsZW1lbnQsIGZvciBjaGVja2luZyBsaW5rIGNvbnRlbnQgKi9cbiAgICBAVmlld0NoaWxkKCdsaW5rJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgYW5jaG9yOiBFbGVtZW50UmVmPEhUTUxMaW5rRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBMaXN0SXRlbURlZikpXG4gICAgbGlzdEl0ZW1EZWY6IExpc3RJdGVtRGVmO1xuXG4gICAgLyoqIExvYWQgTW9yZSBMaXN0IGl0ZW0gY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlKVxuICAgIGxvYWRNb3JlQ29udGVudDogTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqIENoaWxkIGl0ZW1zIG9mIHRoZSBMaXN0LiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCYXNlTGlzdEl0ZW0pLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF91bEVsZW1lbnQoKTogTnVsbGFibGU8SFRNTFVMaXN0RWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGlzcGxheSBsb2FkaW5nIHN5bWJvbFxuICAgICAqL1xuICAgIF9sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGtleU1hbmdlciB0byBoYW5kbGUga2V5Ym9yZCBldmVudHMgdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIF9rZXlNYW5hZ2VyOiBOdWxsYWJsZTxGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYXJpYVNldFNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IG5ldyBPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogTGlzdERhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIGlzIHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzQnlMaW5lOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogb25seSBhIHN1YnNldCBvZiB0aGUgbGlzdCBpdGVtcyBhcmUgbmF2aWdhYmxlXG4gICAgICogeW91IHNob3VsZCBpbmRpY2F0ZSB0aG9zZSBieSBkaXNwbGF5aW5nIGEgbmF2aWdhdGlvbiBhcnJvd1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25JbmRpY2F0b3I6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBvYmplY3QgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNPYmplY3Q6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmVyZmllcyBwYXJ0aWFsIG5hdmlnYXRpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFydGlhbE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGUgbW9kZWwgYmFja2luZyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIG11bHRpc2VsZWN0aW9uXG4gICAgICogYmluZGluZyBpbiB0ZW1wYXRlIHRvIGFwcGVuZCBjbGFzc1xuICAgICAqL1xuICAgIHByaXZhdGUgX211bHRpU2VsZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkdmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciByb3cgbGV2ZWwgc2VsZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcm93U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gVG8gc3RvcmUgKi9cbiAgICBwcml2YXRlIF90ZW1wSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNJdGVtczogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhbmd1YWdlOiBGZExhbmd1YWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZnRlclZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlJDogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnPzogTGlzdENvbmZpZ1xuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBVcGRhdGUgbmF2Z2lhdGlvbiBzdHlsZXMgZm9yIG5vbiBuYXZpZ2F0ZWQgaXRlbXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBfdXBkYXRlTmF2aWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+ID0gJzAnO1xuICAgICAgICBjb25zdCBlbGVtZW50OiBOdWxsYWJsZTxIVE1MRWxlbWVudD4gPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQ/LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGlmIChpc1ByZXNlbnQocGFyZW50KSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtSWQgPSBwYXJlbnQ/LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1uYXZpZ2F0ZWQnKTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uX2ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gZWwucXVlcnlTZWxlY3RvcignYScpO1xuICAgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2xpJyAmJiAhIWxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICBsaW5rRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IHNlbGVjdGlvbiBtYW5hZ2VtZW50IHNob3VsZCBiZSBjb21wbGV0ZWx5IGNoYW5nZWQgaHR0cHM6Ly9naXRodWIuY29tL1NBUC9mdW5kYW1lbnRhbC1uZ3gvaXNzdWVzLzgwMDhcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSb3dTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNpbmdsZVNlbGVjdChldmVudCwgc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTXVsdGlTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBjb250ZXh0IGZvciBsb2FkIG1vcmUgYnV0dG9uICovXG4gICAgZ2V0TG9hZE1vcmVDb250ZW50Q29udGV4dCgpOiBMb2FkTW9yZUNvbnRlbnRDb250ZXh0IHtcbiAgICAgICAgY29uc3QgJGltcGxpY2l0ID0ge1xuICAgICAgICAgICAgbG9hZFRpdGxlOiB0aGlzLmxvYWRUaXRsZSxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRoaXMuX2xvYWRpbmcsXG4gICAgICAgICAgICBsb2FkaW5nTGFiZWw6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChsYW5ndWFnZSkgPT4gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKGxhbmd1YWdlLCAncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9hZGluZ0xhYmVsKTtcbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICBsYXN0Q2h1bms6IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX2xhc3RJbmRleFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9kc0l0ZW1zLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0LFxuICAgICAgICAgICAgLi4uJGltcGxpY2l0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBsaXMgY29tcG9uZW50IHdpdGggc2VsZWN0aW9uIG1vZGVcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0SXRlbXMoKTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgdGhpcy5pZCA9IGBmZHAtbGlzdC0ke25leHRMaXN0SWQrK31gO1xuXG4gICAgICAgIC8vIHVzaW5nIHNlbGVjdGlvbiBNb2RlbCBmb3IgbXVsdGlzZWxlY3RcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hcmlhTXVsdGlzZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+KHRoaXMuX211bHRpU2VsZWN0LCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlRXZlbnQoKTtcbiAgICAgICAgICAgIGV2ZW50LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbWFuYWdlciBvbiBsaXN0IGl0ZW1zLCBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBhcnJheVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPih0aGlzLmxpc3RJdGVtcykud2l0aFdyYXAoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5saXN0SXRlbXMpLCBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlTGlzdEl0ZW1zKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtYnVzeS1pbmRpY2F0b3InKTtcbiAgICAgICAgaW5kaWNhdG9yPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGluZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICogaW4gdGVtcGxhdGUgb24gbGlzdCBhbmQgbGlzdCBpdGVtc1xuICAgICAqL1xuICAgIF9oYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogTnVsbGFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSAmJiAhdGhpcy5pbnRlcmNlcHRUYWJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYmluZGVkIGluIHRlbXBsYXRlIG9uIHNjcm9sbFxuICAgICAqL1xuICAgIF9zY3JvbGxIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmcgJiYgdGhpcy5sb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbG9hZCBtb3JlIG9uIGVudGVyIG9yIHNwYWNlIHByZXNzXG4gICAgICovXG4gICAgX2xvYWRPbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgbGF6eSBsb2FkaW5nIGRhdGFcbiAgICAgKiB1c2VkIGluIHRlbXBsYXRlXG4gICAgICogb25zY3JvbGwgYW5kIG9uIG1vcmUgYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX2dldE1vcmVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgb2YodGhpcy5fbG9hZE5ld0l0ZW1zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoYXN5bmMgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJz09PUludmFsaWQgUmVzcG9uc2UgcmVjZWl2ZWQ9PT0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMubG9hZGluZ0xhYmVsLCAnYXNzZXJ0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVsYXkodGhpcy5kZWxheVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyArK2ksICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNbaV0gPSByZXN1bHRbal07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHVzZWQgaW4gdGVtcGF0ZSB0byBnZXQgU2VsZWN0ZWQgaXRlbXMgZnJvbSBhIGxpc3RcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIF9vblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldHVwTGlzdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaXRlbS5yb3dTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbjtcbiAgICAgICAgaXRlbS5faGFzQnlMaW5lID0gdGhpcy5oYXNCeUxpbmU7XG4gICAgICAgIGl0ZW0uaXRlbVNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FyaWFTZXRTaXplID0gdGhpcy5hcmlhU2V0c2l6ZVxuICAgICAgICAgICAgPyBvZih0aGlzLmFyaWFTZXRzaXplKVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyPy5nZXRUb3RhbEl0ZW1zXG4gICAgICAgICAgICA/IHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmdldFRvdGFsSXRlbXMoKVxuICAgICAgICAgICAgOiBvZih0aGlzLmxpc3RJdGVtcy5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uID0gdGhpcy5saXN0SXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yIHx8IGl0ZW0ubGlzdFR5cGUgPT09ICdkZXRhaWwnKTtcblxuICAgICAgICBsZXQgY3VycmVudEdyb3VwOiBCYXNlTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCB1c2UgaW5kZXggZnJvbSB0aGUgaXRlcmF0aW9uIGR1ZSB0byBwb3NzaWJsZSBncm91cCBpdGVtIGV4aXN0ZW5jZSwgd2UgbmVlZCB0byB0cmFjayBpdCBtYW51YWxseS5cbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGVkID0gdGhpcy5uYXZpZ2F0ZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdGhpcy5uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgPT09IExJU1RfSVRFTV9UWVBFLkhFQURFUikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBJdGVtSWRzID0gW107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5fdHlwZSAhPT0gTElTVF9JVEVNX1RZUEUuSVRFTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhU2V0U2l6ZSA9IHRoaXMuX2FyaWFTZXRTaXplO1xuXG4gICAgICAgICAgICBpdGVtLmFyaWFQb3NpbnNldCA9ICsraXRlbUluZGV4O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcy5wdXNoKGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLmxpc3RJdGVtcy5sYXN0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwPy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgY3VycmVudEdyb3VwSXRlbUlkcy5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPHVsXG4gICAgZmQtbGlzdFxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXJcIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICBbYnlsaW5lXT1cImhhc0J5TGluZVwiXG4gICAgW2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb25dPVwibmF2aWdhdGVkIHx8IG5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIFtuYXZpZ2F0aW9uSW5kaWNhdG9yXT1cIm5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIHN0eWxlPVwib3V0bGluZTogbm9uZVwiXG4gICAgKGtleWRvd24pPVwiX2tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpOyBfaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIl9vblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIl9hcmlhU2V0U2l6ZSB8IGFzeW5jXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJhcmlhTXVsdGlzZWxlY3RhYmxlXCJcbiAgICBbcm9sZV09XCJyb2xlXCJcbiAgICBbdW5yZWFkSW5kaWNhdG9yXT1cInVucmVhZEluZGljYXRvclwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlICYmIGxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmdcIlxuICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmcgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgICAgICBmZEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uU2Nyb2xsQWN0aW9uKT1cIl9zY3JvbGxIYW5kbGVyKClcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxQZXJjZW50XT1cInNjcm9sbE9mZnNldFBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZE9uU2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIl9pdGVtcy5sZW5ndGggIT09IDA7IHRoZW4gdGhlbkJsb2NrOyBlbHNlIGVsc2VCbG9ja1wiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICNsaXN0SXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkTW9yZSAmJiAhbG9hZE9uU2Nyb2xsICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfZ2V0TW9yZURhdGEoKVwiXG4gICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9sb2FkT25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC1saXN0X19pdGVtLS1jdXN0b20tY29udGVudF09XCJsb2FkTW9yZUNvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pdGVtIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmcgZmQtbGlzdF9faXRlbS0tYWN0aW9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVFbGVtZW50Q29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUVsZW1lbnRDb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZE1vcmVDb250ZW50OyBlbHNlIGRlZmF1bHRDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVDb250ZW50LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldExvYWRNb3JlQ29udGVudENvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNsb2FkXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2l0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbURlZi50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxpc3RJdGVtcz8ubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0J5TGluZTsgZWxzZSBieWxpbmVMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNieWxpbmVMb2FkaW5nPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
752
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxN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QVdGLFlBQVk7c0JBRGYsS0FBSztnQkFrQkYsVUFBVTtzQkFEYixLQUFLO2dCQWFGLFNBQVM7c0JBRFosS0FBSztnQkFrQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVlGLFNBQVM7c0JBRFosS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBWU4sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsTUFBTTtzQkFETCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3ZDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUszQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUt0QyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFnSnRFLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExJU1RfSVRFTV9UWVBFLCBMaXN0SXRlbURlZiB9IGZyb20gJy4vYmFzZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBMaXN0Q29uZmlnIH0gZnJvbSAnLi9saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbnRlbnRDb250ZXh0LCBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2xvYWQtbW9yZS1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBMaXN0LCBGZHBMaXN0RGF0YVNvdXJjZSwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKiogU2VsZWN0ZWQgaXRlbXMgKi9cbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcbiAgICAvKiogSW5kZXggKi9cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIC8qKiBTZWxlY3RlZCBpdGVtICovXG4gICAgYWRkZWQ/OiBCYXNlTGlzdEl0ZW07XG4gICAgLyoqIERlc2VsZWN0ZWQgaXRlbSAqL1xuICAgIHJlbW92ZWQ/OiBCYXNlTGlzdEl0ZW07XG59XG5cbmxldCBuZXh0TGlzdElkID0gMDtcblxuLyoqXG4gKiBUaGUgTGlzdCBjb21wb25lbnQgcmVwcmVzZW50cyBhIGNvbnRhaW5lciBmb3IgbGlzdCBpdGVtIHR5cGVzLlxuICogSXQgaXMgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBmZWF0dXJlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRmRwTGlzdENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJy0xJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudDxUPlxuICAgIGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dFxuICAgIGltcGxlbWVudHMgTGlzdFVucmVhZEluZGljYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZkcExpc3Q8QmFzZUxpc3RJdGVtPlxue1xuICAgIC8qKiAgQW4gYXJyYXkgdGhhdCBob2xkcyBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIGl0ZW1zLiAqKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuXG4gICAgLyoqIGRlZmluZSBzaXplIG9mIGl0ZW1zIGZvciBzY3JlZW4gcmVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVNldHNpemU6IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmVzIHdoZXRoZXIgaXRlbXMgYXJlIG11bHRpc2VsZWN0YWJsZSBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFNdWx0aXNlbGVjdGFibGU6IGJvb2xlYW47XG5cbiAgICAvKiogVGl0bGUgdXNlZCBvbiBidXR0b24gd2hlbiBkYXRhIGxvYWRzIG9uIGJ1dHRvbiBjbGljay4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIExhYmVsIHVzZWQgb24gYW5ub3VuY2UgbWVzc2FnZSBvZiBkYXRhIHdhcyBsb2FkZWQgZm9yIHNjcmVlbiByZWFkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZ0xhYmVsID0gJyc7XG5cbiAgICAvKiogV2FpdCB0aW1lIGZvciBuZXcgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkZWxheVRpbWU6IG51bWJlcjtcblxuICAgIC8qKiBJdGVtcyB0byBiZSBsb2FkZWQgYXQgb25jZS4gSW50aW5pdHkgKG5vIGxpbWl0KSBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVNpemUgPSBJbmZpbml0eTtcblxuICAgIC8qKiBFbmFibGVzIGxhenkgbG9hZE1vcmUgb2YgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRNb3JlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBkYXRhIGxvYWQgb24gc2Nyb2xsIGZvciB0cnVlXG4gICAgICogZmFsc2U6IGVuYWJsZXMgZGF0YSBsb2FkaW5nIG9uIGJ1dHRvbiBjbGljay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRPblNjcm9sbDogYm9vbGVhbjtcblxuICAgIC8qKiBkZWZpbmUgdGhlIHJvbGUgdG8gY3VzdG9tIHJlcXVpcmVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZSA9ICdsaXN0JztcblxuICAgIC8qKiBMaXN0VHlwZSAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnbmF2aWdhdGlvbicgfCAnZGV0YWlsJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdFR5cGU6IExpc3RUeXBlID0gJ2FjdGl2ZSc7XG5cbiAgICAvKiogTWF4IGhlaWdodCBmb3Igdmlld3BvcnQgdG8gZGlzcGxheSBzY3JvbGwuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyByZW1vdmVkIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIFNjcm9sbCBvZmZzZXQgcGVyY2VudGFnZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNjcm9sbE9mZnNldFBlcmNlbnRhZ2U6IG51bWJlcjtcblxuICAgIC8qKiBFZW5hYmxlcyBzZWxlY3Rpb24gc3R5bGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0aW9uLiBUeXBlcyBpbmNsdWRlOlxuICAgICAqICdub25lJ3wgJ211bHRpJyB8ICdzaW5nbGUnfCdkZWxldGUnLlxuICAgICAqIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICgpLidcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnbm9uZScuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25UeXBlID0gJ25vbmUnO1xuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByYWRpbyBidXR0b24gYW5kIGNoZWNrYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIHJvdyBsZXZlbCBTZWxlY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93U2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGlvbiA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlZCAmJiB0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZmQtbGlzdC0tc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcExpc3REYXRhU291cmNlPFQ+KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcExpc3REYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0ZWQgPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2ZkLWxpc3QtLW5hdmlnYXRpb24nXTtcbiAgICAgICAgaWYgKHRoaXMuaGFzT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1vYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCguLi5jbGFzc0xpc3QpO1xuICAgIH1cblxuICAgIGdldCBuYXZpZ2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGlvbkluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1uYXZpZ2F0aW9uLWluZGljYXRpb24nKTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGlvbkluZGljYXRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNCeUxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzQnlMaW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc0J5TGluZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLWJ5bGluZScpO1xuICAgIH1cblxuICAgIGdldCBoYXNCeUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNCeUxpbmU7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNPYmplY3QuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzT2JqZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc09iamVjdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLW9iamVjdC1saXN0Jyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09iamVjdDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5yZWFkSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBpbnRlcmNlcHQgdGFiIGtleSBuYXZpZ2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW50ZXJjZXB0VGFiS2V5ID0gdHJ1ZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gc2VsZWN0ZWQgaXRlbSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBBY2Nlc3MgY2hpbGQgZWxlbWVudCwgZm9yIGNoZWNraW5nIGxpbmsgY29udGVudCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpbmsnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBhbmNob3I6IEVsZW1lbnRSZWY8SFRNTExpbmtFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IExpc3RJdGVtRGVmKSlcbiAgICBsaXN0SXRlbURlZjogTGlzdEl0ZW1EZWY7XG5cbiAgICAvKiogTG9hZCBNb3JlIExpc3QgaXRlbSBjb250ZW50ICovXG4gICAgQENvbnRlbnRDaGlsZChMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUpXG4gICAgbG9hZE1vcmVDb250ZW50OiBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmU7XG5cbiAgICAvKiogQ2hpbGQgaXRlbXMgb2YgdGhlIExpc3QuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEJhc2VMaXN0SXRlbSksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3VsRWxlbWVudCgpOiBOdWxsYWJsZTxIVE1MVUxpc3RFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd1bCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUbyBkaXNwbGF5IGxvYWRpbmcgc3ltYm9sXG4gICAgICovXG4gICAgX2xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICoga2V5TWFuZ2VyIHRvIGhhbmRsZSBrZXlib3JkIGV2ZW50cyB1c2VkIGluIHRlbXBsYXRlXG4gICAgICovXG4gICAgX2tleU1hbmFnZXI6IE51bGxhYmxlPEZvY3VzS2V5TWFuYWdlcjxCYXNlTGlzdEl0ZW0+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hcmlhU2V0U2l6ZTogT2JzZXJ2YWJsZTxudW1iZXI+ID0gbmV3IE9ic2VydmFibGUoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9kYXRhU291cmNlOiBMaXN0RGF0YVNvdXJjZTxUPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRpb25SZXNvbHZlciA9IG5ldyBUcmFuc2xhdGlvblJlc29sdmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIEJ5IGxpbmUgaXMgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNCeUxpbmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBsaXN0IGl0ZW1zIGFyZSBuYXZpZ2FibGVcbiAgICAgKiB5b3Ugc2hvdWxkIGluZGljYXRlIHRob3NlIGJ5IGRpc3BsYXlpbmcgYSBuYXZpZ2F0aW9uIGFycm93XG4gICAgICovXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkluZGljYXRvcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIG9iamVjdCBwcmVzZW50IGluIGxpc3QgaXRlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhc09iamVjdDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWZXJmaWVzIHBhcnRpYWwgbmF2aWdhdGlvbiBlbmFibGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9wYXJ0aWFsTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoZSBtb2RlbCBiYWNraW5nIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPEJhc2VMaXN0SXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgbXVsdGlzZWxlY3Rpb25cbiAgICAgKiBiaW5kaW5nIGluIHRlbXBhdGUgdG8gYXBwZW5kIGNsYXNzXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbXVsdGlTZWxlY3QgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWR2YWx1ZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIHJvdyBsZXZlbCBzZWxlY3Rpb24gbW9kZSBpcyBlbmFibGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yb3dTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiBUbyBzdG9yZSAqL1xuICAgIHByaXZhdGUgX3RlbXBJdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXJ0SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYXN0SW5kZXggPSB0aGlzLml0ZW1TaXplO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc0l0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBmb3IgZGF0YSBzb3VyY2UgaGFuZGxpbmdcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbjogTnVsbGFibGU8U3Vic2NyaXB0aW9uPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U6IEZkTGFuZ3VhZ2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FmdGVyVmlld0luaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgQEluamVjdChGRF9MQU5HVUFHRSkgcHJpdmF0ZSByZWFkb25seSBfbGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+LFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEKSBmb3JtRmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRF9DT05UUk9MKSBmb3JtQ29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgICAgICBwcm90ZWN0ZWQgX2xpc3RDb25maWc/OiBMaXN0Q29uZmlnXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jaGFuZ2VEZXRlY3RvclJlZiwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIG9uIFVwZGF0ZSBuYXZnaWF0aW9uIHN0eWxlcyBmb3Igbm9uIG5hdmlnYXRlZCBpdGVtc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICogc2VwcmF0ZSBQUiBmb3IgY3VzdG9tIGV2ZW50XG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIF91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4gPSAnMCc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQ6IE51bGxhYmxlPEhUTUxFbGVtZW50PiA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZXZlbnQudGFyZ2V0IDogbnVsbDtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudD8uY2xvc2VzdCgnLmZkLWxpc3RfX2l0ZW0nKTtcbiAgICAgICAgaWYgKGlzUHJlc2VudChwYXJlbnQpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9IHBhcmVudD8uZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYW5jaG9yPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW5hdmlnYXRlZCcpO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5fZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua0VsZW1lbnQgPSBlbC5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJykge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaXMtbmF2aWdhdGVkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnbGknICYmICEhbGlua0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGxpbmtFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogc2VsZWN0aW9uIG1hbmFnZW1lbnQgc2hvdWxkIGJlIGNvbXBsZXRlbHkgY2hhbmdlZCBodHRwczovL2dpdGh1Yi5jb20vU0FQL2Z1bmRhbWVudGFsLW5neC9pc3N1ZXMvODAwOFxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJvd1NlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50LCBzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aVNlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IGNvbnRleHQgZm9yIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgICBnZXRMb2FkTW9yZUNvbnRlbnRDb250ZXh0KCk6IExvYWRNb3JlQ29udGVudENvbnRleHQge1xuICAgICAgICBjb25zdCAkaW1wbGljaXQgPSB7XG4gICAgICAgICAgICBsb2FkVGl0bGU6IHRoaXMubG9hZFRpdGxlLFxuICAgICAgICAgICAgbG9hZGluZzogdGhpcy5fbG9hZGluZyxcbiAgICAgICAgICAgIGxvYWRpbmdMYWJlbDogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGxhbmd1YWdlKSA9PiB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUobGFuZ3VhZ2UsICdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5sb2FkaW5nTGFiZWwpO1xuICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgIGxhc3RDaHVuazoge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fbGFzdEluZGV4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWw6IHRoaXMuX2RzSXRlbXMubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQsXG4gICAgICAgICAgICAuLi4kaW1wbGljaXRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIGxpcyBjb21wb25lbnQgd2l0aCBzZWxlY3Rpb24gbW9kZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLmlkID0gYGZkcC1saXN0LSR7bmV4dExpc3RJZCsrfWA7XG5cbiAgICAgICAgLy8gdXNpbmcgc2VsZWN0aW9uIE1vZGVsIGZvciBtdWx0aXNlbGVjdFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFyaWFNdWx0aXNlbGVjdGFibGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPEJhc2VMaXN0SXRlbT4odGhpcy5fbXVsdGlTZWxlY3QsIHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO1xuICAgICAgICAgICAgZXZlbnQuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uYWRkZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFkZGVkID0gc2VsZWN0aW9uLmFkZGVkWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yZW1vdmVkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBldmVudC5yZW1vdmVkID0gc2VsZWN0aW9uLnJlbW92ZWRbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbWFuYWdlciBvbiBsaXN0IGl0ZW1zLCBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBhcnJheVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPih0aGlzLmxpc3RJdGVtcykud2l0aFdyYXAoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5saXN0SXRlbXMpLCBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlTGlzdEl0ZW1zKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtYnVzeS1pbmRpY2F0b3InKTtcbiAgICAgICAgaW5kaWNhdG9yPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGluZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICogaW4gdGVtcGxhdGUgb24gbGlzdCBhbmQgbGlzdCBpdGVtc1xuICAgICAqL1xuICAgIF9oYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogTnVsbGFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSAmJiAhdGhpcy5pbnRlcmNlcHRUYWJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYmluZGVkIGluIHRlbXBsYXRlIG9uIHNjcm9sbFxuICAgICAqL1xuICAgIF9zY3JvbGxIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmcgJiYgdGhpcy5sb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbG9hZCBtb3JlIG9uIGVudGVyIG9yIHNwYWNlIHByZXNzXG4gICAgICovXG4gICAgX2xvYWRPbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgbGF6eSBsb2FkaW5nIGRhdGFcbiAgICAgKiB1c2VkIGluIHRlbXBsYXRlXG4gICAgICogb25zY3JvbGwgYW5kIG9uIG1vcmUgYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX2dldE1vcmVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgb2YodGhpcy5fbG9hZE5ld0l0ZW1zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoYXN5bmMgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJz09PUludmFsaWQgUmVzcG9uc2UgcmVjZWl2ZWQ9PT0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMubG9hZGluZ0xhYmVsLCAnYXNzZXJ0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVsYXkodGhpcy5kZWxheVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyArK2ksICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNbaV0gPSByZXN1bHRbal07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHVzZWQgaW4gdGVtcGF0ZSB0byBnZXQgU2VsZWN0ZWQgaXRlbXMgZnJvbSBhIGxpc3RcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIF9vblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldHVwTGlzdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaXRlbS5yb3dTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbjtcbiAgICAgICAgaXRlbS5faGFzQnlMaW5lID0gdGhpcy5oYXNCeUxpbmU7XG4gICAgICAgIGl0ZW0uaXRlbVNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FyaWFTZXRTaXplID0gdGhpcy5hcmlhU2V0c2l6ZVxuICAgICAgICAgICAgPyBvZih0aGlzLmFyaWFTZXRzaXplKVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyPy5nZXRUb3RhbEl0ZW1zXG4gICAgICAgICAgICA/IHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmdldFRvdGFsSXRlbXMoKVxuICAgICAgICAgICAgOiBvZih0aGlzLmxpc3RJdGVtcy5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uID0gdGhpcy5saXN0SXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yIHx8IGl0ZW0ubGlzdFR5cGUgPT09ICdkZXRhaWwnKTtcblxuICAgICAgICBsZXQgY3VycmVudEdyb3VwOiBCYXNlTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCB1c2UgaW5kZXggZnJvbSB0aGUgaXRlcmF0aW9uIGR1ZSB0byBwb3NzaWJsZSBncm91cCBpdGVtIGV4aXN0ZW5jZSwgd2UgbmVlZCB0byB0cmFjayBpdCBtYW51YWxseS5cbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGVkID0gdGhpcy5uYXZpZ2F0ZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdGhpcy5uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgPT09IExJU1RfSVRFTV9UWVBFLkhFQURFUikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBJdGVtSWRzID0gW107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5fdHlwZSAhPT0gTElTVF9JVEVNX1RZUEUuSVRFTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhU2V0U2l6ZSA9IHRoaXMuX2FyaWFTZXRTaXplO1xuXG4gICAgICAgICAgICBpdGVtLmFyaWFQb3NpbnNldCA9ICsraXRlbUluZGV4O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcy5wdXNoKGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLmxpc3RJdGVtcy5sYXN0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwPy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgY3VycmVudEdyb3VwSXRlbUlkcy5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPHVsXG4gICAgZmQtbGlzdFxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXJcIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICBbYnlsaW5lXT1cImhhc0J5TGluZVwiXG4gICAgW2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb25dPVwibmF2aWdhdGVkIHx8IG5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIFtuYXZpZ2F0aW9uSW5kaWNhdG9yXT1cIm5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIHN0eWxlPVwib3V0bGluZTogbm9uZVwiXG4gICAgKGtleWRvd24pPVwiX2tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpOyBfaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIl9vblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIl9hcmlhU2V0U2l6ZSB8IGFzeW5jXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJhcmlhTXVsdGlzZWxlY3RhYmxlXCJcbiAgICBbcm9sZV09XCJyb2xlXCJcbiAgICBbdW5yZWFkSW5kaWNhdG9yXT1cInVucmVhZEluZGljYXRvclwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlICYmIGxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmdcIlxuICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmcgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgICAgICBmZEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uU2Nyb2xsQWN0aW9uKT1cIl9zY3JvbGxIYW5kbGVyKClcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxQZXJjZW50XT1cInNjcm9sbE9mZnNldFBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZE9uU2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIl9pdGVtcy5sZW5ndGggIT09IDA7IHRoZW4gdGhlbkJsb2NrOyBlbHNlIGVsc2VCbG9ja1wiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICNsaXN0SXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkTW9yZSAmJiAhbG9hZE9uU2Nyb2xsICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfZ2V0TW9yZURhdGEoKVwiXG4gICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9sb2FkT25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC1saXN0X19pdGVtLS1jdXN0b20tY29udGVudF09XCJsb2FkTW9yZUNvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pdGVtIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmcgZmQtbGlzdF9faXRlbS0tYWN0aW9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVFbGVtZW50Q29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUVsZW1lbnRDb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZE1vcmVDb250ZW50OyBlbHNlIGRlZmF1bHRDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVDb250ZW50LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldExvYWRNb3JlQ29udGVudENvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNsb2FkXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2l0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbURlZi50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxpc3RJdGVtcz8ubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0J5TGluZTsgZWxzZSBieWxpbmVMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNieWxpbmVMb2FkaW5nPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|