ngx-tethys 16.2.0 → 16.2.2
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/CHANGELOG.md +21 -0
- package/esm2022/table/table.component.mjs +4 -4
- package/esm2022/version.mjs +2 -2
- package/fesm2022/ngx-tethys-table.mjs +3 -3
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/input/styles/input-group.scss +1 -1
- package/package.json +1 -1
- package/property/styles/properties.scss +1 -0
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [16.2.2](https://github.com/atinc/ngx-tethys/compare/16.2.1...16.2.2) (2024-01-17)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **table:** change first sort from asc to desc #INFR-11320 ([#3015](https://github.com/atinc/ngx-tethys/issues/3015)) ([f73c256](https://github.com/atinc/ngx-tethys/commit/f73c2567b0d4d1ba9f580ba4701a7c6f51107792)), closes [#INFR-11320](https://github.com/atinc/ngx-tethys/issues/INFR-11320)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [16.2.1](https://github.com/atinc/ngx-tethys/compare/16.2.0-next.11...16.2.1) (2024-01-11)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* **input-number:** fix input number display value error with suffix when delete #INFR-11109 ([6cbf2b4](https://github.com/atinc/ngx-tethys/commit/6cbf2b45f080514c1b8dfff71bf9765db2b90c8b)), closes [#INFR-11109](https://github.com/atinc/ngx-tethys/issues/INFR-11109)
|
|
20
|
+
* **input:** adjust padding left of suffix element #INFR-11267 ([#3013](https://github.com/atinc/ngx-tethys/issues/3013)) ([f1fb421](https://github.com/atinc/ngx-tethys/commit/f1fb421b3d681a24da2c5f6ed19e4bc6a6ab2833)), closes [#INFR-11267](https://github.com/atinc/ngx-tethys/issues/INFR-11267)
|
|
21
|
+
* **property:** fix align center #INFR-11191 ([#3011](https://github.com/atinc/ngx-tethys/issues/3011)) ([b99b2d1](https://github.com/atinc/ngx-tethys/commit/b99b2d128f5bc5072109a8ab97dbdd79963913e9)), closes [#INFR-11191](https://github.com/atinc/ngx-tethys/issues/INFR-11191)
|
|
22
|
+
* **tree-select:** optimize tree select popover width style #INFR-11127 ([#3009](https://github.com/atinc/ngx-tethys/issues/3009)) ([3faa2f7](https://github.com/atinc/ngx-tethys/commit/3faa2f7073a62837c4817c6ffde4870d198e50ea)), closes [#INFR-11127](https://github.com/atinc/ngx-tethys/issues/INFR-11127)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
5
26
|
# [16.2.0](https://github.com/atinc/ngx-tethys/compare/16.2.0-next.11...16.2.0) (2024-01-02)
|
|
6
27
|
|
|
7
28
|
|
|
@@ -598,11 +598,11 @@ export class ThyTableComponent extends _MixinBase {
|
|
|
598
598
|
const { sortDirection, model, sortChange } = column;
|
|
599
599
|
let direction;
|
|
600
600
|
if (sortDirection === ThyTableSortDirection.default) {
|
|
601
|
-
direction = ThyTableSortDirection.asc;
|
|
602
|
-
}
|
|
603
|
-
else if (sortDirection === ThyTableSortDirection.asc) {
|
|
604
601
|
direction = ThyTableSortDirection.desc;
|
|
605
602
|
}
|
|
603
|
+
else if (sortDirection === ThyTableSortDirection.desc) {
|
|
604
|
+
direction = ThyTableSortDirection.asc;
|
|
605
|
+
}
|
|
606
606
|
else {
|
|
607
607
|
direction = ThyTableSortDirection.default;
|
|
608
608
|
}
|
|
@@ -1023,4 +1023,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
|
|
|
1023
1023
|
type: ContentChildren,
|
|
1024
1024
|
args: [ThyTableColumnComponent]
|
|
1025
1025
|
}] } });
|
|
1026
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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QjtzQkFIdkIsV0FBVzt1QkFBQyx5Q0FBeUM7O3NCQUNyRCxLQUFLO2dCQUlHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFNRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBU0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBS0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBS0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUtHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFLRyxhQUFhO3NCQUF0QixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVrQyxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR25DLHNCQUFzQjtzQkFEekIsZUFBZTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbnN0cnVjdG9yLFxuICAgIElucHV0Qm9vbGVhbixcbiAgICBJbnB1dENzc1BpeGVsLFxuICAgIElucHV0TnVtYmVyLFxuICAgIE1peGluQmFzZSxcbiAgICBtaXhpblVuc3Vic2NyaWJlLFxuICAgIFRoeVVuc3Vic2NyaWJlLFxuICAgIFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2Vcbn0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIFNhZmVBbnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgZ2V0LCBoZWxwZXJzLCBpc1N0cmluZywga2V5QnksIHNldCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBFTVBUWSwgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZUNoYW5nZXMsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCwgVEhZX1RBQkxFX0NPTFVNTl9QQVJFTlRfQ09NUE9ORU5ULCBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIFBhZ2VDaGFuZ2VkRXZlbnQsXG4gICAgVGh5TXVsdGlTZWxlY3RFdmVudCxcbiAgICBUaHlQYWdlLFxuICAgIFRoeVJhZGlvU2VsZWN0RXZlbnQsXG4gICAgVGh5U3dpdGNoRXZlbnQsXG4gICAgVGh5VGFibGVTa2VsZXRvbkNvbHVtbixcbiAgICBUaHlUYWJsZURyYWdnYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlRW1wdHlPcHRpb25zLFxuICAgIFRoeVRhYmxlRXZlbnQsXG4gICAgVGh5VGFibGVSb3dFdmVudCxcbiAgICBUaHlUYWJsZVNvcnREaXJlY3Rpb24sXG4gICAgVGh5VGFibGVTb3J0RXZlbnRcbn0gZnJvbSAnLi90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3dEcmFnRGlzYWJsZWRQaXBlIH0gZnJvbSAnLi9waXBlcy9kcmFnLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUaHlUYWJsZVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5RW1wdHlDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVN3aXRjaENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvc3dpdGNoJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5SWNvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnIHwgJ2JvcmRlcmVkJyB8ICdib3hlZCc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlTW9kZSA9ICdsaXN0JyB8ICdncm91cCcgfCAndHJlZSc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlU2l6ZSA9ICdtZCcgfCAnc20nIHwgJ3hzJyB8ICdsZycgfCAneGxnJyB8ICdkZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGh5Rml4ZWREaXJlY3Rpb24ge1xuICAgIGxlZnQgPSAnbGVmdCcsXG4gICAgcmlnaHQgPSAncmlnaHQnXG59XG5cbmludGVyZmFjZSBUaHlUYWJsZUdyb3VwPFQgPSB1bmtub3duPiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZXhwYW5kPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IG9iamVjdFtdO1xuICAgIG9yaWdpbj86IFQ7XG59XG5cbmNvbnN0IHRhYmxlVGhlbWVNYXAgPSB7XG4gICAgZGVmYXVsdDogJ3RhYmxlLWRlZmF1bHQnLFxuICAgIGJvcmRlcmVkOiAndGFibGUtYm9yZGVyZWQnLFxuICAgIGJveGVkOiAndGFibGUtYm94ZWQnXG59O1xuXG5jb25zdCBjdXN0b21UeXBlID0ge1xuICAgIGluZGV4OiAnaW5kZXgnLFxuICAgIGNoZWNrYm94OiAnY2hlY2tib3gnLFxuICAgIHJhZGlvOiAncmFkaW8nLFxuICAgIHN3aXRjaDogJ3N3aXRjaCdcbn07XG5cbmNvbnN0IGNzcyA9IHtcbiAgICB0YWJsZUJvZHk6ICd0aHktdGFibGUtYm9keScsXG4gICAgdGFibGVTY3JvbGxMZWZ0OiAndGh5LXRhYmxlLXNjcm9sbC1sZWZ0JyxcbiAgICB0YWJsZVNjcm9sbFJpZ2h0OiAndGh5LXRhYmxlLXNjcm9sbC1yaWdodCcsXG4gICAgdGFibGVTY3JvbGxNaWRkbGU6ICd0aHktdGFibGUtc2Nyb2xsLW1pZGRsZSdcbn07XG5cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG5jb25zdCBfTWl4aW5CYXNlOiBDb25zdHJ1Y3RvcjxUaHlVbnN1YnNjcmliZT4gJiB0eXBlb2YgTWl4aW5CYXNlID0gbWl4aW5VbnN1YnNjcmliZShNaXhpbkJhc2UpO1xuXG4vKipcbiAqIOihqOagvOe7hOS7tlxuICogQG5hbWUgdGh5LXRhYmxlXG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlUYWJsZUNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktdGFibGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3JkZXJlZF0nOiBgdGhlbWUgPT09ICdib3JkZXJlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3hlZF0nOiBgdGhlbWUgPT09ICdib3hlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1maXhlZC1oZWFkZXJdJzogJ3RoeUhlYWRlckZpeGVkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlJY29uQ29tcG9uZW50LFxuICAgICAgICBUaHlEcmFnRHJvcERpcmVjdGl2ZSxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVGh5U3dpdGNoQ29tcG9uZW50LFxuICAgICAgICBUaHlFbXB0eUNvbXBvbmVudCxcbiAgICAgICAgVGh5VGFibGVTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUsXG4gICAgICAgIFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VGFibGVDb21wb25lbnQgZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSVRoeVRhYmxlQ29sdW1uUGFyZW50Q29tcG9uZW50IHtcbiAgICBwdWJsaWMgY3VzdG9tVHlwZSA9IGN1c3RvbVR5cGU7XG5cbiAgICBwdWJsaWMgbW9kZWw6IG9iamVjdFtdID0gW107XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10gPSBbXTtcblxuICAgIHB1YmxpYyByb3dLZXkgPSAnX2lkJztcblxuICAgIHB1YmxpYyBncm91cEJ5OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgbW9kZTogVGh5VGFibGVNb2RlID0gJ2xpc3QnO1xuXG4gICAgcHVibGljIHRoZW1lOiBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnO1xuXG4gICAgcHVibGljIGNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHVibGljIHNpemU6IFRoeVRhYmxlU2l6ZSA9ICdtZCc7XG5cbiAgICBwdWJsaWMgcm93Q2xhc3NOYW1lOiBzdHJpbmcgfCBGdW5jdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nRG9uZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgbG9hZGluZ1RleHQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBlbXB0eU9wdGlvbnM6IFRoeVRhYmxlRW1wdHlPcHRpb25zID0ge307XG5cbiAgICBwdWJsaWMgZHJhZ2dhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRSYWRpb1JvdzogU2FmZUFueSA9IG51bGw7XG5cbiAgICBwdWJsaWMgcGFnaW5hdGlvbjogVGh5UGFnZSA9IHsgaW5kZXg6IDEsIHNpemU6IDIwLCB0b3RhbDogMCwgc2l6ZU9wdGlvbnM6IFsyMCwgNTAsIDEwMF0gfTtcblxuICAgIHB1YmxpYyB0cmFja0J5Rm46IFNhZmVBbnk7XG5cbiAgICBwdWJsaWMgd2hvbGVSb3dTZWxlY3QgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaXhlZERpcmVjdGlvbiA9IFRoeUZpeGVkRGlyZWN0aW9uO1xuXG4gICAgcHVibGljIGhhc0ZpeGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29sdW1uczogVGh5VGFibGVDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGlmZjogSXRlcmFibGVEaWZmZXI8U2FmZUFueT47XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9vbGRUaHlDbGFzc05hbWUgPSAnJztcblxuICAgIHByaXZhdGUgc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcblxuICAgIHByaXZhdGUgZ2V0IHRhYmxlU2Nyb2xsRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzcy50YWJsZUJvZHkpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHNjcm9sbCQoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCA/IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcpIDogRU1QVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaVsOaNruS4uuepuuaXtuWxleekuueahOaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPFNhZmVBbnk+O1xuXG4gICAgQFZpZXdDaGlsZHJlbigncm93cycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSByb3dzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85bGV56S65pa55byP77yM5YiX6KGoL+WIhue7hC/moJFcbiAgICAgKiBAdHlwZSBsaXN0IHwgZ3JvdXAgfCB0cmVlXG4gICAgICogQGRlZmF1bHQgbGlzdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGUodmFsdWU6IFRoeVRhYmxlTW9kZSkge1xuICAgICAgICB0aGlzLm1vZGUgPSB2YWx1ZSB8fCB0aGlzLm1vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZeeahOWAvOS4uiBgZ3JvdXBgIOaXtuWIhue7hOeahCBLZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlHcm91cEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5ncm91cEJ5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6KGM5pWw5o2u55qE5ZSv5LiA5qCH6K+G5bGe5oCn5ZCNXG4gICAgICogQGRlZmF1bHQgX2lkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93S2V5KHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMucm93S2V5ID0gdmFsdWUgfHwgdGhpcy5yb3dLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiG57uE5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBzKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRHcm91cHModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZWwodmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlIHx8IFtdO1xuICAgICAgICB0aGlzLl9kaWZmID0gdGhpcy5fZGlmZmVycy5maW5kKHRoaXMubW9kZWwpLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YU1vZGVsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTmmL7npLrpo47moLzvvIxgYm9yZGVyZWRgIOaXtuWktOmDqOacieiDjOaZr+iJsuS4lOWIhuWJsue6v+WMuuWIq+aYjuaYvlxuICAgICAqIEB0eXBlIGRlZmF1bHQgfCBib3JkZXJlZCB8IGJveGVkXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVRoZW1lKHZhbHVlOiBUaHlUYWJsZVRoZW1lKSB7XG4gICAgICAgIHRoaXMudGhlbWUgPSB2YWx1ZSB8fCB0aGlzLnRoZW1lO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOWkp+Wwj1xuICAgICAqIEB0eXBlIHhzIHwgc20gfCBtZCB8IGxnIHwgeGxnIHwgZGVmYXVsdFxuICAgICAqIEBkZWZhdWx0IG1kXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZSh2YWx1ZTogVGh5VGFibGVTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHZhbHVlIHx8IHRoaXMuc2l6ZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzmnIDlsI/lrr3luqbvvIzkuIDoiKzmmK/pgILnlKjkuo7orr7nva7liJflrr3kuLrnmb7liIbkuYvmiJZhdXRv5pe26ZmQ5Yi26KGo5qC85pyA5bCP5a695bqmJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeU1pbldpZHRoOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuLogZml4ZWQg5biD5bGA6KGo5qC877yM6K6+572uIGZpeGVkIOWQju+8jOWIl+WuveWwhuS4peagvOaMieeFp+iuvue9ruWuveW6puWxleekuu+8jOWIl+WuveWwhuS4jeS8muagueaNruihqOagvOWGheWuueiHquWKqOiwg+aVtFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUxheW91dEZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6KGo5aS05Zu65a6a77yM6Iul6K6+572u5Li6IHRydWXvvIwg6ZyA6KaB5ZCM5q2l6K6+572uIHRoeUhlaWdodFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRlckZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE6auY5bqmXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeUhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC855qE5qC35byPXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGEgPT4gYS50cmltKCkpO1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gbGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0aGlzLl9vbGRUaHlDbGFzc05hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRUaHlDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBsaXN0LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzooYznmoTmoLflvI/vvIzkvKDlhaXlh73mlbDvvIzmlK/mjIEgcm9344CBaW5kZXhcbiAgICAgKiBAdHlwZSBzdHJpbmcgfCAocm93LCBpbmRleCkgPT4gc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcgfCBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLnJvd0NsYXNzTmFtZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWKoOi9veeKtuaAgVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlMb2FkaW5nRG9uZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Yqg6L295pe25pi+56S655qE5paH5pys77yM5bey5bqf5byDXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMb2FkaW5nVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDphY3nva7nqbrnirbmgIHnu4Tku7ZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eU9wdGlvbnModmFsdWU6IFRoeVRhYmxlRW1wdHlPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZW1wdHlPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byA5ZCv6KGM5ouW5ou9XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgdGhpcy5kcmFnZ2FibGUgJiYgdGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJlZSBtb2RlIHNvcnRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN6aG156CBXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5UGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLmluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6aG15pi+56S65pWw6YePXG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mgLvpobXmlbBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VUb3RhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi50b3RhbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reW9k+WJjeihjOaYr+WQpuiHquWKqOmAieS4rSBDaGVja2JveO+8jOS4jeW8gOWQr+aXtuWPquacieeCueWHuyBDaGVja2JveCDliJfml7bmiY3kvJrop6blj5HpgInkuK1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeVdob2xlUm93U2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyB0YWJsZS1ob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aG9sZVJvd1NlbGVjdCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRsZXNzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrooajmoLzlpLTvvIzlt7Llup/lvIPvvIzor7fkvb/nlKggdGh5SGVhZGxlc3NcbiAgICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIHRoeUhlYWRsZXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5U2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRoeUhlYWRsZXNzID0gIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuW3puS+pyBUb3RhbFxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5U2hvd1RvdGFsJykgQElucHV0Qm9vbGVhbigpIHNob3dUb3RhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66LCD5pW05q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGGXG4gICAgICovXG4gICAgQElucHV0KCd0aHlTaG93U2l6ZUNoYW5nZXInKSBASW5wdXRCb29sZWFuKCkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYblj6/pgInpoblcbiAgICAgKiBAdHlwZSBudW1iZXJbXVxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5UGFnZVNpemVPcHRpb25zJylcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWxleekuuaXtueahOe8qei/m1xuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHRoeUluZGVudCA9IDIwO1xuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lr7nosaHkuK3nmoTlrZDoioLngrkgS2V5XG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nO1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCvIEhvdmVyIOWQjuaYvuekuuaTjeS9nO+8jOm7mOiupOS4jeaYvuekuuaTjeS9nOWMuuWGheWuue+8jOm8oOaghyBIb3ZlciDml7blsZXnpLpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRhYmxlLWhvdmVyLWRpc3BsYXktb3BlcmF0aW9uJylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHRoeUhvdmVyRGlzcGxheU9wZXJhdGlvbjogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZTogKGl0ZW06IFNhZmVBbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIl+eahOmqqOaetuexu+Wei1xuICAgICAqIEB0eXBlIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDb2x1bW5Ta2VsZXRvblR5cGVzOiBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdID0gW1xuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS50aXRsZSxcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUubWVtYmVyLFxuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0XG4gICAgXTtcblxuICAgIC8qKlxuICAgICAqIOWIh+aNoue7hOS7tuWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblN3aXRjaENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5U3dpdGNoRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlvZPliY3pobXmlLnlj5jlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIOWkmumAieWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbk11bHRpU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5TXVsdGlTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDljZXpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25SYWRpb1NlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVJhZGlvU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5ouW5Yqo5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRHJhZ2dhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVEcmFnZ2FibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzooYzngrnlh7vop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Sb3dDbGljazogRXZlbnRFbWl0dGVyPFRoeVRhYmxlUm93RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5YiX5o6S5bqP5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeVNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlU29ydEV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICAgIHNldCBsaXN0T2ZDb2x1bW5Db21wb25lbnRzKGNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxUaHlUYWJsZUNvbHVtbkNvbXBvbmVudD4pIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbXBvbmVudHMudG9BcnJheSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNGaXhlZCA9ICEhdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZml4ZWQgPT09IHRoaXMuZml4ZWREaXJlY3Rpb24ubGVmdCB8fCBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU2tlbGV0b25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5pWw5o2u55qE5oqY5Y+g5bGV5byA54q25oCBXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcDogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcE9mR3JvdXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHByaXZhdGUgZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWc6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIGRyYWdQcmV2aWV3Q2xhc3MgPSAndGh5LXRhYmxlLWRyYWctcHJldmlldyc7XG5cbiAgICBwdWJsaWMgc2tlbGV0b25Db2x1bW5zOiBUaHlUYWJsZVNrZWxldG9uQ29sdW1uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgICAgIHByaXZhdGUgdXBkYXRlSG9zdENsYXNzU2VydmljZTogVXBkYXRlSG9zdENsYXNzU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogU2FmZUFueSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2JpbmRUcmFja0ZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zLnNvbWUoaXRlbSA9PiBpdGVtLmV4cGFuZCA9PT0gdHJ1ZSkgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1swXS5leHBhbmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpIHtcbiAgICAgICAgY29uc3QgbGVmdEZpeGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpeGVkID09PSBUaHlGaXhlZERpcmVjdGlvbi5sZWZ0KTtcbiAgICAgICAgbGVmdEZpeGVkQ29sdW1ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBsZWZ0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLmxlZnQgPSBwcmV2aW91cyA/IHByZXZpb3VzLmxlZnQgKyBwYXJzZUludChwcmV2aW91cy53aWR0aC50b1N0cmluZygpLCAxMCkgOiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmlnaHRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ucmlnaHQpLnJldmVyc2UoKTtcbiAgICAgICAgcmlnaHRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcmlnaHRGaXhlZENvbHVtbnNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIGl0ZW0ucmlnaHQgPSBwcmV2aW91cyA/IHByZXZpb3VzLnJpZ2h0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURhdGFNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNlbGVjdGlvbnMocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zLmluY2x1ZGVzKHJvd1t0aGlzLnJvd0tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3c6IG9iamVjdCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBnZXQocm93LCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlczogSXRlcmFibGVDaGFuZ2VzPFNhZmVBbnk+KSB7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8U2FmZUFueT4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VzdG9tTW9kZWxWYWx1ZShyZWNvcmQuaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRUcmFja0ZuKCkge1xuICAgICAgICB0aGlzLnRyYWNrQnlGbiA9IGZ1bmN0aW9uICh0aGlzOiBTYWZlQW55LCBpbmRleDogbnVtYmVyLCByb3c6IFNhZmVBbnkpOiBTYWZlQW55IHtcbiAgICAgICAgICAgIHJldHVybiByb3cgJiYgdGhpcy5yb3dLZXkgPyByb3dbdGhpcy5yb3dLZXldIDogaW5kZXg7XG4gICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXN0cm95SW52YWxpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdbJCRjb2x1bW5dJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0Q2xhc3MoZmlyc3QgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWZpcnN0ICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGB0YWJsZS0ke3RoaXMuc2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVUaGVtZU1hcFt0aGlzLnRoZW1lXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLnVwZGF0ZUNsYXNzKGNsYXNzTmFtZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDb2x1bW5TZWxlY3Rpb25zKGtleTogc3RyaW5nLCBzZWxlY3Rpb25zOiBTYWZlQW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbnMocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUZW1wbGF0ZVJlZihyZWY6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RlbFZhbHVlKHJvdzogU2FmZUFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBnZXQocm93LCBwYXRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyUm93Q2xhc3NOYW1lKHJvdzogU2FmZUFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMucm93Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5yb3dDbGFzc05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzc05hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucm93Q2xhc3NOYW1lIGFzIEZ1bmN0aW9uKShyb3csIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLm1vZGVsKSB7XG4gICAgICAgICAgICBzZXQocm93LCBjb2x1bW4ubW9kZWwsIHJvd1tjb2x1bW4ua2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZUluZGV4Q2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VJbmRleENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlU2l6ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKG51bGwsIHJvdywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25NdWx0aVNlbGVjdENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5tb2RlbC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVtjb2x1bW4ua2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG11bHRpU2VsZWN0RXZlbnQ6IFRoeU11bHRpU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPbk11bHRpU2VsZWN0Q2hhbmdlLmVtaXQobXVsdGlTZWxlY3RFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgcmFkaW9TZWxlY3RFdmVudDogVGh5UmFkaW9TZWxlY3RFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25SYWRpb1NlbGVjdENoYW5nZS5lbWl0KHJhZGlvU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN3aXRjaENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHN3aXRjaEV2ZW50OiBUaHlTd2l0Y2hFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgcmVmcmVzaDogKHZhbHVlOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCByb3c7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW2NvbHVtbi5rZXldID0gZ2V0KHZhbHVlLCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uU3dpdGNoQ2hhbmdlLmVtaXQoc3dpdGNoRXZlbnQpO1xuICAgIH1cblxuICAgIHNob3dFeHBhbmQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByb3dbdGhpcy50aHlDaGlsZHJlbktleV0gJiYgcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNFeHBhbmRlZChyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dO1xuICAgIH1cblxuICAgIGljb25JbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICd0cmVlJykge1xuICAgICAgICAgICAgcmV0dXJuIGxldmVsICogdGhpcy50aHlJbmRlbnQgLSA1O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGRJbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBgJHsobGV2ZWwgKyAxKSAqIHRoaXMudGh5SW5kZW50IC0gNX1weGBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZChyb3cpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnR3JvdXBTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZyA9IHsgLi4udGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwIH07XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5leHBhbmQpO1xuICAgICAgICB0aGlzLmZvbGRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5vbkRyYWdTdGFydGVkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwRW5kKGV2ZW50OiBDZGtEcmFnRW5kPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnW2dyb3VwLmlkXSk7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRHJhZ0dyb3VwRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGEuaWQgPT09IGdyb3VwLmlkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwXG4gICAgICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IGV2ZW50Lml0ZW0sXG4gICAgICAgICAgICAgICAgbW9kZWxzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZ3JvdXBzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwIGNoaWxkcmVuXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGFbdGhpcy5ncm91cEJ5XSA9PT0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPVxuICAgICAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5nZXRTb3J0ZWRJdGVtcygpLmZpbmRJbmRleChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YS5pZCA9PT0gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV07XG4gICAgICAgICAgICAgICAgfSkgKyAxO1xuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogZ3JvdXAuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXggLSBncm91cEluZGV4LFxuICAgICAgICAgICAgICAgIG5ld0luZGV4OiBldmVudC5jdXJyZW50SW5kZXggLSBncm91cEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGdyb3VwLmNoaWxkcmVuLCBkcmFnRXZlbnQub2xkSW5kZXgsIGRyYWdFdmVudC5uZXdJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDx1bmtub3duPikge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdQcmV2aWV3Q2xhc3MpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGRzOiBIVE1MQ29sbGVjdGlvbiA9IGV2ZW50LnNvdXJjZS5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShwcmV2aWV3Py5jaGlsZHJlbikuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtvcmlnaW5hbFRkc1tpbmRleF0/LmNsaWVudFdpZHRofXB4YDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkcm9wTGlzdEVudGVyUHJlZGljYXRlID0gKGluZGV4OiBudW1iZXIsIGRyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBkcm9wLmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdLmRhdGEuZ3JvdXBfaWQgPT09IGRyYWcuZGF0YS5ncm91cF9pZDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkRyYWdNb2RlbERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgbW9kZWxzOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgIH07XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm1vZGVsLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ0dyb3VwRHJvcHBlZChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIHRoaXMub25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uSGVhZGVyQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc29ydERpcmVjdGlvbiwgbW9kZWwsIHNvcnRDaGFuZ2UgfSA9IGNvbHVtbjtcbiAgICAgICAgICAgIGxldCBkaXJlY3Rpb247XG4gICAgICAgICAgICBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uYXNjO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0RGlyZWN0aW9uID09PSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uYXNjKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uLnNvcnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBjb25zdCBzb3J0RXZlbnQgPSB7IGV2ZW50LCBrZXk6IG1vZGVsLCBkaXJlY3Rpb24gfTtcbiAgICAgICAgICAgIHNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICAgICAgdGhpcy50aHlTb3J0Q2hhbmdlLmVtaXQoc29ydEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0NsaWNrKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm9uUm93Q2xpY2tQcm9wYWdhdGlvbkV2ZW50SGFuZGxlcihldmVudCwgcm93KTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3ggfHwgaXRlbS50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4gJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4ua2V5XSA9ICFyb3dbY29sdW1uLmtleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKGV2ZW50LCByb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3dFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRoeU9uUm93Q2xpY2suZW1pdChyb3dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUm93Q2xpY2tQcm9wYWdhdGlvbkV2ZW50SGFuZGxlcihldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCcudHJlZS1leHBhbmQtaWNvbicpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZENoaWxkcmVuKHJvdyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q29udGV4dE1lbnUoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVFdmVudDogVGh5VGFibGVFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25Sb3dDb250ZXh0TWVudS5lbWl0KGNvbnRleHRNZW51RXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5jb2x1bW5zIHx8IFtdO1xuICAgICAgICBjb25zdCBfY29sdW1ucyA9IGNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb21wb25lbnQud2lkdGgsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb21wb25lbnQuY2xhc3NOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobiwgaSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuLCBfY29sdW1uc1tpXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRHcm91cHMob3JpZ2luR3JvdXBzOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbkdyb3Vwc01hcCA9IGhlbHBlcnMua2V5Qnkob3JpZ2luR3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgb3JpZ2luR3JvdXBzLmZvckVhY2goKG9yaWdpbjogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXA6IFRoeVRhYmxlR3JvdXAgPSB7IGlkOiBvcmlnaW5bdGhpcy5yb3dLZXldLCBjaGlsZHJlbjogW10sIG9yaWdpbiB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwLmhhc093blByb3BlcnR5KGdyb3VwLmlkKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmV4cGFuZCA9IHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cFtncm91cC5pZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwLmV4cGFuZCA9ICEhKG9yaWdpbkdyb3Vwc01hcFtncm91cC5pZF0gYXMgU2FmZUFueSkuZXhwYW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1vZGVsKCkge1xuICAgICAgICBjb25zdCBncm91cHNNYXAgPSBrZXlCeSh0aGlzLmdyb3VwcywgJ2lkJyk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNNYXBbcm93W3RoaXMuZ3JvdXBCeV1dO1xuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4ucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kR3JvdXAoZ3JvdXA6IFRoeVRhYmxlR3JvdXApIHtcbiAgICAgICAgZ3JvdXAuZXhwYW5kID0gIWdyb3VwLmV4cGFuZDtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXSA9IGdyb3VwLmV4cGFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEdyb3Vwcyhncm91cHM6IFRoeVRhYmxlR3JvdXBbXSkge1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2xkR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjcm9sbENsYXNzKCkge1xuICAgICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy50YWJsZVNjcm9sbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG1heFNjcm9sbExlZnQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoIC0gc2Nyb2xsRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgY29uc3QgbGFzdFNjcm9sbENsYXNzTmFtZSA9IHRoaXMuc2Nyb2xsQ2xhc3NOYW1lO1xuICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9ICcnO1xuICAgICAgICBpZiAoc2Nyb2xsRWxlbWVudC5zY3JvbGxXaWR0aCA+IHNjcm9sbEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChzY3JvbGxYID49IG1heFNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbFJpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbE1pZGRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNjcm9sbENsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgbGFzdFNjcm9sbENsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCB0aGlzLnNjcm9sbENsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLmluaXRpYWxpemVFbGVtZW50KHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcyh0cnVlKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgbWVyZ2UodGhpcy52aWV3cG9ydFJ1bGVyLmNoYW5nZSgyMDApLCBvZihudWxsKS5waXBlKGRlbGF5KDIwMCkpKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkU2tlbGV0b25Db2x1bW5zKCkge1xuICAgICAgICB0aGlzLnNrZWxldG9uQ29sdW1ucyA9IFtdO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudGh5Q29sdW1uU2tlbGV0b25UeXBlc1tpbmRleF0gfHwgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUuZGVmYXVsdCxcbiAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoIHx8ICdhdXRvJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b25Db2x1bW5zID0gWy4uLnRoaXMuc2tlbGV0b25Db2x1bW5zLCBpdGVtXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvd3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMucm93cyksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9ic2VydmFibGU8RXZlbnQ+KHN1YnNjcmliZXIgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucm93cy5tYXAocm93ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogdGhlcmUncyBubyBuZWVkIHRvIGFkZCB0b3VjaCwgcG9pbnRlciBhbmQgbW91c2UgZXZlbnQgbGlzdGVuZXJzIHRvZ2V0aGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiByb3dzLCB3aGljaCB3aWxsIGxlYWQgdG8gYWRkaW5nIE4gKiAzIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIChodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8jZXhhbXBsZXMpLCB3ZSBjYW4gdXNlIGZlYXR1cmUgZGV0ZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSBpZiBwb2ludGVyIGV2ZW50cyBhcmUgYXZhaWxhYmxlLiBJZiBwb2ludGVyIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCB3ZSBoYXZlIHRvIGxpc3RlbiBvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBgcG9pbnRlcmRvd25gIGV2ZW50LiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIG9uIGEgdG91Y2ggZGV2aWNlIG9yIG5vdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG91Y2ggZXZlbnRzIGFyZSBoYW5kbGVkIGVhcmxpZXIgdGhhbiBtb3VzZSBldmVudHMsIHRobyBub3QgYWxsIHVzZXIgYWdlbnRzIGRpc3BhdGNoIG1vdXNlIGV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0b3VjaCBldmVudHMuIFNlZSB0aGUgc3BlYzogaHR0cHM6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy8jbW91c2UtZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuUG9pbnRlckV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwb2ludGVyZG93bidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ29udG91Y2hzdGFydCcgaW4gcm93Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RvdWNoc3RhcnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBzaW5jZSBDaHJvbWUgNTYgZGVmYXVsdHMgZG9jdW1lbnQgbGV2ZWwgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIHRvIHBhc3NpdmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50IGB0b3VjaHN0YXJ0YCBsaXN0ZW5lciBpcyBub3QgcGFzc2l2ZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5ldmVyIGNhbGwgYHByZXZlbnREZWZhdWx0KClgIG9uIGl0LCBzbyB3ZSdyZSBzYWZlIG1ha2luZyBpdCBwYXNzaXZlIHRvby5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zPnBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBtb2RlQ2hhbmdlID0gc2ltcGxlQ2hhbmdlcy50aHlNb2RlO1xuICAgICAgICBjb25zdCB0aHlHcm91cHNDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeUdyb3VwcztcbiAgICAgICAgY29uc3QgaXNHcm91cE1vZGUgPSBtb2RlQ2hhbmdlICYmIG1vZGVDaGFuZ2UuY3VycmVudFZhbHVlID09PSAnZ3JvdXAnO1xuICAgICAgICBpZiAoaXNHcm91cE1vZGUgJiYgdGh5R3JvdXBzQ2hhbmdlICYmIHRoeUdyb3Vwc0NoYW5nZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3Vwcyh0aHlHcm91cHNDaGFuZ2UuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RpZmYpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmLmRpZmYodGhpcy5tb2RlbCk7XG4gICAgICAgICAgICB0aGlzLl9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lJbnZhbGlkQXR0cmlidXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRoeS10YWJsZS1ib2R5XCJcbiAgY2RrU2Nyb2xsYWJsZVxuICBbbmdDbGFzc109XCJ7ICd0aHktdGFibGUtZml4ZWQnOiBoYXNGaXhlZCwgJ3RoeS10YWJsZS1ib3JkZXJlZC10aGVtZSc6IHRoZW1lID09PSAnYm9yZGVyZWQnICYmIGhhc0ZpeGVkIH1cIj5cbiAgPHRhYmxlXG4gICAgI3RhYmxlXG4gICAgY2xhc3M9XCJ0YWJsZVwiXG4gICAgW25nQ2xhc3NdPVwiW2NsYXNzTmFtZV1cIlxuICAgIFtjbGFzcy50YWJsZS1maXhlZF09XCJ0aHlMYXlvdXRGaXhlZFwiXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdnYWJsZV09XCJkcmFnZ2FibGVcIlxuICAgIFtjbGFzcy50YWJsZS1ncm91cF09XCJtb2RlID09PSAnZ3JvdXAnXCJcbiAgICBbc3R5bGUubWluLXdpZHRoXT1cInRoeU1pbldpZHRoXCI+XG4gICAgPGNvbGdyb3VwPlxuICAgICAgPGNvbCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBbd2lkdGhdPVwiY29sdW1uLndpZHRoXCIgW3N0eWxlLm1pbldpZHRoXT1cImhhc0ZpeGVkID8gY29sdW1uLndpZHRoIDogY29sdW1uLm1pbldpZHRoXCIgLz5cbiAgICA8L2NvbGdyb3VwPlxuXG4gICAgPHRoZWFkICpuZ0lmPVwiIXRoeUhlYWRsZXNzXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzTmFtZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1sZWZ0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ubGVmdFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5yaWdodFwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbkhlYWRlckNsaWNrKCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW4udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29sdW1uIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uc29ydGFibGVcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBbbmdDbGFzc109XCJbJ3RoeS10YWJsZS1jb2x1bW4tc29ydGFibGUtaWNvbicsICdweC0xJywgY29sdW1uLnNvcnREaXJlY3Rpb25dXCIgdGh5SWNvbk5hbWU9XCJzb3J0LXZlcnRpY2FsLXR0XCI+XG4gICAgICAgICAgICA8L3RoeS1pY29uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuXG4gICAgPHRib2R5XG4gICAgICAqbmdJZj1cImxvYWRpbmdEb25lXCJcbiAgICAgIHRoeURyYWdEcm9wXG4gICAgICBjZGtEcm9wTGlzdFxuICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWdnYWJsZVwiXG4gICAgICBbY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlXT1cImRyb3BMaXN0RW50ZXJQcmVkaWNhdGVcIlxuICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyYWdEcm9wcGVkKCRldmVudClcIj5cbiAgICAgIDwhLS0gZ3JvdXAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2dyb3VwJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHNcIj5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIGNsYXNzPVwidGh5LXRhYmxlLWdyb3VwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRHcm91cChncm91cClcIlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJncm91cCB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdHcm91cFN0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0dyb3VwRW5kKCRldmVudClcIj5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyYWdnYWJsZSAmJiAhKGdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGUpXCI+XG4gICAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJ0YWJsZS1kcmFnZ2FibGUtaWNvblwiIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwiZXhwYW5kLWljb25cIiBbdGh5SWNvbk5hbWVdPVwiZ3JvdXAuZXhwYW5kID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBncm91cC5vcmlnaW4sIGdyb3VwOiBncm91cC5vcmlnaW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5jaGlsZHJlbj8ubGVuZ3RoICYmIGdyb3VwLmV4cGFuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGdyb3VwLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbGlzdOaooeW8j+S4i+ayoeacieebtOaOpeS9v+eUqGl0ZW3mqKHmnb/vvIzmmK/lm6DkuLrkvb/nlKjkuobmqKHmnb/lvbHlk43kuoZBbmd1bGFy55qE5L6d6LWW5qCR77yM5a+86Ie0Q2RrRHJhZ0Ryb3DmjpLluo/lpLHmlYjvvIznm67liY3ov5nmoLfkv67mlLnlj6/ku6XmmoLml7bop6PlhrPnur/kuIrkuI3og73mjpLluo/nmoTpl67popjvvIxUcmVl5qih5byP55qE5o6S5bqP5pqC5pe25LiN5pSv5oyBIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdsaXN0J1wiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgbW9kZWw7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJ0aHktc29ydGFibGUtaXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxuICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwicm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbmRlclJvd0NsYXNzTmFtZShyb3csIGkpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICh0aHlDb250ZXh0TWVudSk9XCJvblJvd0NvbnRleHRNZW51KCRldmVudCwgcm93KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgbW9kZWw7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIGluZGV4OiBpLCBsZXZlbDogMCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICN0clRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgI3Jvd3NcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDFcbiAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgaXNFeHBhbmRlZChyb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygcm93W3RoeUNoaWxkcmVuS2V5XTsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiBjaGlsZCwgaW5kZXg6IGosIGxldmVsOiBsZXZlbCArIDEgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlICN0ZHNUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWk9XCJpbmRleFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS1vcGVyYXRpb24tbGlua3NdPVwiISFjb2x1bW4ub3BlcmF0aW9uYWxcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY29sdW1uLXNlY29uZGFyeV09XCIhIWNvbHVtbi5zZWNvbmRhcnlcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY2hlY2tib3gtY29sdW1uXT1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1sZWZ0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ubGVmdFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5yaWdodFwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kID8gdGRJbmRlbnRDb21wdXRlZChsZXZlbCkgOiBudWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImogPT09IDAgJiYgZHJhZ2dhYmxlICYmICEocm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGUpXCI+XG4gICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJ0YWJsZS1kcmFnZ2FibGUtaWNvblwiIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tdGVtcGxhdGUtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihjb2x1bW4uY2VsbFRlbXBsYXRlUmVmKVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1leHBhbmQtaWNvbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwiaXNFeHBhbmRlZChyb3cpID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiXG4gICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dFeHBhbmQocm93KSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLW5vdCB0ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZVJlZihjb2x1bW4uY2VsbFRlbXBsYXRlUmVmKVwiPlxuICAgICAgICAgICAgPCEtLSBkZWZhdWx0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5tb2RlbCAmJiAhY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kXCJcbiAgICAgICAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwiaXNFeHBhbmRlZChyb3cpID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cImljb25JbmRlbnRDb21wdXRlZChsZXZlbClcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TW9kZWxWYWx1ZShyb3csIGNvbHVtbi5tb2RlbCkgfCBpc1ZhbGlkTW9kZWxWYWx1ZTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0TW9kZWxWYWx1ZShyb3csIGNvbHVtbi5tb2RlbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRlZmF1bHRUZXh0XCIgY2xhc3M9XCJ0ZXh0LWRlc2NcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi5kZWZhdWx0VGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gaW5kZXggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuaW5kZXhcIj5cbiAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIGNoZWNrYm94IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94XCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSByYWRpbyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpb1wiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRSYWRpb1Jvd1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RvcFByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25SYWRpb1NlbGVjdENoYW5nZSgkZXZlbnQsIHJvdylcIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gc3dpdGNoIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaFwiPlxuICAgICAgICAgICAgICA8dGh5LXN3aXRjaFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5rZXldXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKHRoeUNoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvdywgY29sdW1uKVwiPjwvdGh5LXN3aXRjaD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nRG9uZSAmJiBtb2RlbC5sZW5ndGggPT09IDAgJiYgZ3JvdXBzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGh5LXRhYmxlLWVtcHR5IGNsZWFyLWhvdmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVtcHR5VGVtcGxhdGU7IGVsc2UgZGVmYXVsdEVtcHR5XCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHk+XG4gICAgICA8dGh5LWVtcHR5XG4gICAgICAgIFt0aHlNZXNzYWdlXT1cImVtcHR5T3B0aW9ucy5tZXNzYWdlXCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uS2V5XT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvbktleVwiXG4gICAgICAgIFt0aHlUcmFuc2xhdGlvblZhbHVlc109XCJlbXB0eU9wdGlvbnMudHJhbnNsYXRpb25WYWx1ZXNcIlxuICAgICAgICBbdGh5RW50aXR5TmFtZV09XCJlbXB0eU9wdGlvbnMuZW50aXR5TmFtZVwiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lVHJhbnNsYXRlS2V5XT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lVHJhbnNsYXRlS2V5XCJcbiAgICAgICAgW3RoeUljb25OYW1lXT1cImVtcHR5T3B0aW9ucy5pY29uTmFtZVwiXG4gICAgICAgIFt0aHlTaXplXT1cImVtcHR5T3B0aW9ucy5zaXplXCJcbiAgICAgICAgW3RoeU1hcmdpblRvcF09XCJlbXB0eU9wdGlvbnMubWFyZ2luVG9wXCJcbiAgICAgICAgW3RoeVRvcEF1dG9dPVwiZW1wdHlPcHRpb25zLnRvcEF1dG9cIlxuICAgICAgICBbdGh5Q29udGFpbmVyXT1cImVtcHR5T3B0aW9ucy5jb250YWluZXJcIj48L3RoeS1lbXB0eT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8dGh5LXRhYmxlLXNrZWxldG9uXG4gICAgKm5nSWY9XCIhbG9hZGluZ0RvbmVcIlxuICAgIFt0aHlSb3dDb3VudF09XCI2XCJcbiAgICBbdGh5SGVhZGxlc3NdPVwidHJ1ZVwiXG4gICAgW3RoeVRoZW1lXT1cInRoZW1lXCJcbiAgICBbdGh5U2l6ZV09XCJzaXplXCJcbiAgICBbdGh5TWluV2lkdGhdPVwidGh5TWluV2lkdGhcIlxuICAgIFt0aHlDb2x1bW5zXT1cInNrZWxldG9uQ29sdW1uc1wiPlxuICA8L3RoeS10YWJsZS1za2VsZXRvbj5cblxuICA8ZGl2IGNsYXNzPVwidGh5LXRhYmxlLWZvb3RlclwiICpuZ0lmPVwicGFnaW5hdGlvbi50b3RhbCA+IHBhZ2luYXRpb24uc2l6ZVwiIFtjbGFzcy50aHktdGFibGUtZm9vdGVyLWhhcy1wYWRkaW5nXT1cInRoZW1lID09PSAnZGVmYXVsdCdcIj5cbiAgICA8dGh5LXBhZ2luYXRpb25cbiAgICAgIFt0aHlQYWdlSW5kZXhdPVwicGFnaW5hdGlvbi5pbmRleFwiXG4gICAgICBbdGh5VG90YWxdPVwicGFnaW5hdGlvbi50b3RhbFwiXG4gICAgICBbdGh5UGFnZVNpemVdPVwicGFnaW5hdGlvbi5zaXplXCJcbiAgICAgIFt0aHlQYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvbi5zaXplT3B0aW9uc1wiXG4gICAgICBbdGh5U2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlclwiXG4gICAgICBbdGh5U2hvd1RvdGFsXT1cInNob3dUb3RhbFwiXG4gICAgICAodGh5UGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VJbmRleENoYW5nZSk9XCJvblBhZ2VJbmRleENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICh0aHlQYWdlU2l6ZUNoYW5nZWQpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC90aHktcGFnaW5hdGlvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
1026
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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QjtzQkFIdkIsV0FBVzt1QkFBQyx5Q0FBeUM7O3NCQUNyRCxLQUFLO2dCQUlHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFNRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBU0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBS0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBS0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUtHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFLRyxhQUFhO3NCQUF0QixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVrQyxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR25DLHNCQUFzQjtzQkFEekIsZUFBZTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbnN0cnVjdG9yLFxuICAgIElucHV0Qm9vbGVhbixcbiAgICBJbnB1dENzc1BpeGVsLFxuICAgIElucHV0TnVtYmVyLFxuICAgIE1peGluQmFzZSxcbiAgICBtaXhpblVuc3Vic2NyaWJlLFxuICAgIFRoeVVuc3Vic2NyaWJlLFxuICAgIFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2Vcbn0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIFNhZmVBbnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgZ2V0LCBoZWxwZXJzLCBpc1N0cmluZywga2V5QnksIHNldCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBFTVBUWSwgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZUNoYW5nZXMsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCwgVEhZX1RBQkxFX0NPTFVNTl9QQVJFTlRfQ09NUE9ORU5ULCBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIFBhZ2VDaGFuZ2VkRXZlbnQsXG4gICAgVGh5TXVsdGlTZWxlY3RFdmVudCxcbiAgICBUaHlQYWdlLFxuICAgIFRoeVJhZGlvU2VsZWN0RXZlbnQsXG4gICAgVGh5U3dpdGNoRXZlbnQsXG4gICAgVGh5VGFibGVTa2VsZXRvbkNvbHVtbixcbiAgICBUaHlUYWJsZURyYWdnYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlRW1wdHlPcHRpb25zLFxuICAgIFRoeVRhYmxlRXZlbnQsXG4gICAgVGh5VGFibGVSb3dFdmVudCxcbiAgICBUaHlUYWJsZVNvcnREaXJlY3Rpb24sXG4gICAgVGh5VGFibGVTb3J0RXZlbnRcbn0gZnJvbSAnLi90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3dEcmFnRGlzYWJsZWRQaXBlIH0gZnJvbSAnLi9waXBlcy9kcmFnLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUaHlUYWJsZVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5RW1wdHlDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVN3aXRjaENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvc3dpdGNoJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5SWNvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnIHwgJ2JvcmRlcmVkJyB8ICdib3hlZCc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlTW9kZSA9ICdsaXN0JyB8ICdncm91cCcgfCAndHJlZSc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlU2l6ZSA9ICdtZCcgfCAnc20nIHwgJ3hzJyB8ICdsZycgfCAneGxnJyB8ICdkZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGh5Rml4ZWREaXJlY3Rpb24ge1xuICAgIGxlZnQgPSAnbGVmdCcsXG4gICAgcmlnaHQgPSAncmlnaHQnXG59XG5cbmludGVyZmFjZSBUaHlUYWJsZUdyb3VwPFQgPSB1bmtub3duPiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZXhwYW5kPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IG9iamVjdFtdO1xuICAgIG9yaWdpbj86IFQ7XG59XG5cbmNvbnN0IHRhYmxlVGhlbWVNYXAgPSB7XG4gICAgZGVmYXVsdDogJ3RhYmxlLWRlZmF1bHQnLFxuICAgIGJvcmRlcmVkOiAndGFibGUtYm9yZGVyZWQnLFxuICAgIGJveGVkOiAndGFibGUtYm94ZWQnXG59O1xuXG5jb25zdCBjdXN0b21UeXBlID0ge1xuICAgIGluZGV4OiAnaW5kZXgnLFxuICAgIGNoZWNrYm94OiAnY2hlY2tib3gnLFxuICAgIHJhZGlvOiAncmFkaW8nLFxuICAgIHN3aXRjaDogJ3N3aXRjaCdcbn07XG5cbmNvbnN0IGNzcyA9IHtcbiAgICB0YWJsZUJvZHk6ICd0aHktdGFibGUtYm9keScsXG4gICAgdGFibGVTY3JvbGxMZWZ0OiAndGh5LXRhYmxlLXNjcm9sbC1sZWZ0JyxcbiAgICB0YWJsZVNjcm9sbFJpZ2h0OiAndGh5LXRhYmxlLXNjcm9sbC1yaWdodCcsXG4gICAgdGFibGVTY3JvbGxNaWRkbGU6ICd0aHktdGFibGUtc2Nyb2xsLW1pZGRsZSdcbn07XG5cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG5jb25zdCBfTWl4aW5CYXNlOiBDb25zdHJ1Y3RvcjxUaHlVbnN1YnNjcmliZT4gJiB0eXBlb2YgTWl4aW5CYXNlID0gbWl4aW5VbnN1YnNjcmliZShNaXhpbkJhc2UpO1xuXG4vKipcbiAqIOihqOagvOe7hOS7tlxuICogQG5hbWUgdGh5LXRhYmxlXG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlUYWJsZUNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktdGFibGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3JkZXJlZF0nOiBgdGhlbWUgPT09ICdib3JkZXJlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3hlZF0nOiBgdGhlbWUgPT09ICdib3hlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1maXhlZC1oZWFkZXJdJzogJ3RoeUhlYWRlckZpeGVkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlJY29uQ29tcG9uZW50LFxuICAgICAgICBUaHlEcmFnRHJvcERpcmVjdGl2ZSxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVGh5U3dpdGNoQ29tcG9uZW50LFxuICAgICAgICBUaHlFbXB0eUNvbXBvbmVudCxcbiAgICAgICAgVGh5VGFibGVTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUsXG4gICAgICAgIFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VGFibGVDb21wb25lbnQgZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSVRoeVRhYmxlQ29sdW1uUGFyZW50Q29tcG9uZW50IHtcbiAgICBwdWJsaWMgY3VzdG9tVHlwZSA9IGN1c3RvbVR5cGU7XG5cbiAgICBwdWJsaWMgbW9kZWw6IG9iamVjdFtdID0gW107XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10gPSBbXTtcblxuICAgIHB1YmxpYyByb3dLZXkgPSAnX2lkJztcblxuICAgIHB1YmxpYyBncm91cEJ5OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgbW9kZTogVGh5VGFibGVNb2RlID0gJ2xpc3QnO1xuXG4gICAgcHVibGljIHRoZW1lOiBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnO1xuXG4gICAgcHVibGljIGNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHVibGljIHNpemU6IFRoeVRhYmxlU2l6ZSA9ICdtZCc7XG5cbiAgICBwdWJsaWMgcm93Q2xhc3NOYW1lOiBzdHJpbmcgfCBGdW5jdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nRG9uZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgbG9hZGluZ1RleHQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBlbXB0eU9wdGlvbnM6IFRoeVRhYmxlRW1wdHlPcHRpb25zID0ge307XG5cbiAgICBwdWJsaWMgZHJhZ2dhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRSYWRpb1JvdzogU2FmZUFueSA9IG51bGw7XG5cbiAgICBwdWJsaWMgcGFnaW5hdGlvbjogVGh5UGFnZSA9IHsgaW5kZXg6IDEsIHNpemU6IDIwLCB0b3RhbDogMCwgc2l6ZU9wdGlvbnM6IFsyMCwgNTAsIDEwMF0gfTtcblxuICAgIHB1YmxpYyB0cmFja0J5Rm46IFNhZmVBbnk7XG5cbiAgICBwdWJsaWMgd2hvbGVSb3dTZWxlY3QgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaXhlZERpcmVjdGlvbiA9IFRoeUZpeGVkRGlyZWN0aW9uO1xuXG4gICAgcHVibGljIGhhc0ZpeGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29sdW1uczogVGh5VGFibGVDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGlmZjogSXRlcmFibGVEaWZmZXI8U2FmZUFueT47XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9vbGRUaHlDbGFzc05hbWUgPSAnJztcblxuICAgIHByaXZhdGUgc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcblxuICAgIHByaXZhdGUgZ2V0IHRhYmxlU2Nyb2xsRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzcy50YWJsZUJvZHkpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHNjcm9sbCQoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCA/IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcpIDogRU1QVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaVsOaNruS4uuepuuaXtuWxleekuueahOaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPFNhZmVBbnk+O1xuXG4gICAgQFZpZXdDaGlsZHJlbigncm93cycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSByb3dzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85bGV56S65pa55byP77yM5YiX6KGoL+WIhue7hC/moJFcbiAgICAgKiBAdHlwZSBsaXN0IHwgZ3JvdXAgfCB0cmVlXG4gICAgICogQGRlZmF1bHQgbGlzdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGUodmFsdWU6IFRoeVRhYmxlTW9kZSkge1xuICAgICAgICB0aGlzLm1vZGUgPSB2YWx1ZSB8fCB0aGlzLm1vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZeeahOWAvOS4uiBgZ3JvdXBgIOaXtuWIhue7hOeahCBLZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlHcm91cEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5ncm91cEJ5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6KGM5pWw5o2u55qE5ZSv5LiA5qCH6K+G5bGe5oCn5ZCNXG4gICAgICogQGRlZmF1bHQgX2lkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93S2V5KHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMucm93S2V5ID0gdmFsdWUgfHwgdGhpcy5yb3dLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiG57uE5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBzKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRHcm91cHModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZWwodmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlIHx8IFtdO1xuICAgICAgICB0aGlzLl9kaWZmID0gdGhpcy5fZGlmZmVycy5maW5kKHRoaXMubW9kZWwpLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YU1vZGVsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTmmL7npLrpo47moLzvvIxgYm9yZGVyZWRgIOaXtuWktOmDqOacieiDjOaZr+iJsuS4lOWIhuWJsue6v+WMuuWIq+aYjuaYvlxuICAgICAqIEB0eXBlIGRlZmF1bHQgfCBib3JkZXJlZCB8IGJveGVkXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVRoZW1lKHZhbHVlOiBUaHlUYWJsZVRoZW1lKSB7XG4gICAgICAgIHRoaXMudGhlbWUgPSB2YWx1ZSB8fCB0aGlzLnRoZW1lO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOWkp+Wwj1xuICAgICAqIEB0eXBlIHhzIHwgc20gfCBtZCB8IGxnIHwgeGxnIHwgZGVmYXVsdFxuICAgICAqIEBkZWZhdWx0IG1kXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZSh2YWx1ZTogVGh5VGFibGVTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHZhbHVlIHx8IHRoaXMuc2l6ZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzmnIDlsI/lrr3luqbvvIzkuIDoiKzmmK/pgILnlKjkuo7orr7nva7liJflrr3kuLrnmb7liIbkuYvmiJZhdXRv5pe26ZmQ5Yi26KGo5qC85pyA5bCP5a695bqmJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeU1pbldpZHRoOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuLogZml4ZWQg5biD5bGA6KGo5qC877yM6K6+572uIGZpeGVkIOWQju+8jOWIl+WuveWwhuS4peagvOaMieeFp+iuvue9ruWuveW6puWxleekuu+8jOWIl+WuveWwhuS4jeS8muagueaNruihqOagvOWGheWuueiHquWKqOiwg+aVtFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUxheW91dEZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6KGo5aS05Zu65a6a77yM6Iul6K6+572u5Li6IHRydWXvvIwg6ZyA6KaB5ZCM5q2l6K6+572uIHRoeUhlaWdodFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRlckZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE6auY5bqmXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeUhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC855qE5qC35byPXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGEgPT4gYS50cmltKCkpO1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gbGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0aGlzLl9vbGRUaHlDbGFzc05hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRUaHlDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBsaXN0LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzooYznmoTmoLflvI/vvIzkvKDlhaXlh73mlbDvvIzmlK/mjIEgcm9344CBaW5kZXhcbiAgICAgKiBAdHlwZSBzdHJpbmcgfCAocm93LCBpbmRleCkgPT4gc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcgfCBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLnJvd0NsYXNzTmFtZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWKoOi9veeKtuaAgVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlMb2FkaW5nRG9uZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Yqg6L295pe25pi+56S655qE5paH5pys77yM5bey5bqf5byDXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMb2FkaW5nVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDphY3nva7nqbrnirbmgIHnu4Tku7ZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eU9wdGlvbnModmFsdWU6IFRoeVRhYmxlRW1wdHlPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZW1wdHlPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byA5ZCv6KGM5ouW5ou9XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgdGhpcy5kcmFnZ2FibGUgJiYgdGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJlZSBtb2RlIHNvcnRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN6aG156CBXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5UGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLmluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6aG15pi+56S65pWw6YePXG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mgLvpobXmlbBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VUb3RhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi50b3RhbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reW9k+WJjeihjOaYr+WQpuiHquWKqOmAieS4rSBDaGVja2JveO+8jOS4jeW8gOWQr+aXtuWPquacieeCueWHuyBDaGVja2JveCDliJfml7bmiY3kvJrop6blj5HpgInkuK1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeVdob2xlUm93U2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyB0YWJsZS1ob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aG9sZVJvd1NlbGVjdCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRsZXNzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrooajmoLzlpLTvvIzlt7Llup/lvIPvvIzor7fkvb/nlKggdGh5SGVhZGxlc3NcbiAgICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIHRoeUhlYWRsZXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5U2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRoeUhlYWRsZXNzID0gIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuW3puS+pyBUb3RhbFxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5U2hvd1RvdGFsJykgQElucHV0Qm9vbGVhbigpIHNob3dUb3RhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66LCD5pW05q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGGXG4gICAgICovXG4gICAgQElucHV0KCd0aHlTaG93U2l6ZUNoYW5nZXInKSBASW5wdXRCb29sZWFuKCkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYblj6/pgInpoblcbiAgICAgKiBAdHlwZSBudW1iZXJbXVxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5UGFnZVNpemVPcHRpb25zJylcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWxleekuuaXtueahOe8qei/m1xuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHRoeUluZGVudCA9IDIwO1xuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lr7nosaHkuK3nmoTlrZDoioLngrkgS2V5XG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nO1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCvIEhvdmVyIOWQjuaYvuekuuaTjeS9nO+8jOm7mOiupOS4jeaYvuekuuaTjeS9nOWMuuWGheWuue+8jOm8oOaghyBIb3ZlciDml7blsZXnpLpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRhYmxlLWhvdmVyLWRpc3BsYXktb3BlcmF0aW9uJylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHRoeUhvdmVyRGlzcGxheU9wZXJhdGlvbjogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZTogKGl0ZW06IFNhZmVBbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIl+eahOmqqOaetuexu+Wei1xuICAgICAqIEB0eXBlIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDb2x1bW5Ta2VsZXRvblR5cGVzOiBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdID0gW1xuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS50aXRsZSxcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUubWVtYmVyLFxuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0XG4gICAgXTtcblxuICAgIC8qKlxuICAgICAqIOWIh+aNoue7hOS7tuWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblN3aXRjaENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5U3dpdGNoRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlvZPliY3pobXmlLnlj5jlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIOWkmumAieWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbk11bHRpU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5TXVsdGlTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDljZXpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25SYWRpb1NlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVJhZGlvU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5ouW5Yqo5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRHJhZ2dhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVEcmFnZ2FibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzooYzngrnlh7vop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Sb3dDbGljazogRXZlbnRFbWl0dGVyPFRoeVRhYmxlUm93RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5YiX5o6S5bqP5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeVNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlU29ydEV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICAgIHNldCBsaXN0T2ZDb2x1bW5Db21wb25lbnRzKGNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxUaHlUYWJsZUNvbHVtbkNvbXBvbmVudD4pIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbXBvbmVudHMudG9BcnJheSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNGaXhlZCA9ICEhdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZml4ZWQgPT09IHRoaXMuZml4ZWREaXJlY3Rpb24ubGVmdCB8fCBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU2tlbGV0b25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5pWw5o2u55qE5oqY5Y+g5bGV5byA54q25oCBXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcDogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcE9mR3JvdXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHByaXZhdGUgZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWc6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIGRyYWdQcmV2aWV3Q2xhc3MgPSAndGh5LXRhYmxlLWRyYWctcHJldmlldyc7XG5cbiAgICBwdWJsaWMgc2tlbGV0b25Db2x1bW5zOiBUaHlUYWJsZVNrZWxldG9uQ29sdW1uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgICAgIHByaXZhdGUgdXBkYXRlSG9zdENsYXNzU2VydmljZTogVXBkYXRlSG9zdENsYXNzU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogU2FmZUFueSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2JpbmRUcmFja0ZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zLnNvbWUoaXRlbSA9PiBpdGVtLmV4cGFuZCA9PT0gdHJ1ZSkgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1swXS5leHBhbmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpIHtcbiAgICAgICAgY29uc3QgbGVmdEZpeGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpeGVkID09PSBUaHlGaXhlZERpcmVjdGlvbi5sZWZ0KTtcbiAgICAgICAgbGVmdEZpeGVkQ29sdW1ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBsZWZ0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLmxlZnQgPSBwcmV2aW91cyA/IHByZXZpb3VzLmxlZnQgKyBwYXJzZUludChwcmV2aW91cy53aWR0aC50b1N0cmluZygpLCAxMCkgOiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmlnaHRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ucmlnaHQpLnJldmVyc2UoKTtcbiAgICAgICAgcmlnaHRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcmlnaHRGaXhlZENvbHVtbnNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIGl0ZW0ucmlnaHQgPSBwcmV2aW91cyA/IHByZXZpb3VzLnJpZ2h0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURhdGFNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNlbGVjdGlvbnMocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zLmluY2x1ZGVzKHJvd1t0aGlzLnJvd0tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3c6IG9iamVjdCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBnZXQocm93LCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlczogSXRlcmFibGVDaGFuZ2VzPFNhZmVBbnk+KSB7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8U2FmZUFueT4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VzdG9tTW9kZWxWYWx1ZShyZWNvcmQuaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRUcmFja0ZuKCkge1xuICAgICAgICB0aGlzLnRyYWNrQnlGbiA9IGZ1bmN0aW9uICh0aGlzOiBTYWZlQW55LCBpbmRleDogbnVtYmVyLCByb3c6IFNhZmVBbnkpOiBTYWZlQW55IHtcbiAgICAgICAgICAgIHJldHVybiByb3cgJiYgdGhpcy5yb3dLZXkgPyByb3dbdGhpcy5yb3dLZXldIDogaW5kZXg7XG4gICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXN0cm95SW52YWxpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdbJCRjb2x1bW5dJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0Q2xhc3MoZmlyc3QgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWZpcnN0ICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGB0YWJsZS0ke3RoaXMuc2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVUaGVtZU1hcFt0aGlzLnRoZW1lXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLnVwZGF0ZUNsYXNzKGNsYXNzTmFtZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDb2x1bW5TZWxlY3Rpb25zKGtleTogc3RyaW5nLCBzZWxlY3Rpb25zOiBTYWZlQW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbnMocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUZW1wbGF0ZVJlZihyZWY6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RlbFZhbHVlKHJvdzogU2FmZUFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBnZXQocm93LCBwYXRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyUm93Q2xhc3NOYW1lKHJvdzogU2FmZUFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMucm93Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5yb3dDbGFzc05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzc05hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucm93Q2xhc3NOYW1lIGFzIEZ1bmN0aW9uKShyb3csIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLm1vZGVsKSB7XG4gICAgICAgICAgICBzZXQocm93LCBjb2x1bW4ubW9kZWwsIHJvd1tjb2x1bW4ua2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZUluZGV4Q2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VJbmRleENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlU2l6ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKG51bGwsIHJvdywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25NdWx0aVNlbGVjdENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5tb2RlbC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVtjb2x1bW4ua2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG11bHRpU2VsZWN0RXZlbnQ6IFRoeU11bHRpU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPbk11bHRpU2VsZWN0Q2hhbmdlLmVtaXQobXVsdGlTZWxlY3RFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgcmFkaW9TZWxlY3RFdmVudDogVGh5UmFkaW9TZWxlY3RFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25SYWRpb1NlbGVjdENoYW5nZS5lbWl0KHJhZGlvU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN3aXRjaENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHN3aXRjaEV2ZW50OiBUaHlTd2l0Y2hFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgcmVmcmVzaDogKHZhbHVlOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCByb3c7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW2NvbHVtbi5rZXldID0gZ2V0KHZhbHVlLCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uU3dpdGNoQ2hhbmdlLmVtaXQoc3dpdGNoRXZlbnQpO1xuICAgIH1cblxuICAgIHNob3dFeHBhbmQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByb3dbdGhpcy50aHlDaGlsZHJlbktleV0gJiYgcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNFeHBhbmRlZChyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dO1xuICAgIH1cblxuICAgIGljb25JbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICd0cmVlJykge1xuICAgICAgICAgICAgcmV0dXJuIGxldmVsICogdGhpcy50aHlJbmRlbnQgLSA1O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGRJbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBgJHsobGV2ZWwgKyAxKSAqIHRoaXMudGh5SW5kZW50IC0gNX1weGBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZChyb3cpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnR3JvdXBTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZyA9IHsgLi4udGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwIH07XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5leHBhbmQpO1xuICAgICAgICB0aGlzLmZvbGRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5vbkRyYWdTdGFydGVkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwRW5kKGV2ZW50OiBDZGtEcmFnRW5kPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnW2dyb3VwLmlkXSk7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRHJhZ0dyb3VwRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGEuaWQgPT09IGdyb3VwLmlkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwXG4gICAgICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IGV2ZW50Lml0ZW0sXG4gICAgICAgICAgICAgICAgbW9kZWxzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZ3JvdXBzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwIGNoaWxkcmVuXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGFbdGhpcy5ncm91cEJ5XSA9PT0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPVxuICAgICAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5nZXRTb3J0ZWRJdGVtcygpLmZpbmRJbmRleChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YS5pZCA9PT0gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV07XG4gICAgICAgICAgICAgICAgfSkgKyAxO1xuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogZ3JvdXAuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXggLSBncm91cEluZGV4LFxuICAgICAgICAgICAgICAgIG5ld0luZGV4OiBldmVudC5jdXJyZW50SW5kZXggLSBncm91cEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGdyb3VwLmNoaWxkcmVuLCBkcmFnRXZlbnQub2xkSW5kZXgsIGRyYWdFdmVudC5uZXdJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDx1bmtub3duPikge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdQcmV2aWV3Q2xhc3MpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGRzOiBIVE1MQ29sbGVjdGlvbiA9IGV2ZW50LnNvdXJjZS5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShwcmV2aWV3Py5jaGlsZHJlbikuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtvcmlnaW5hbFRkc1tpbmRleF0/LmNsaWVudFdpZHRofXB4YDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkcm9wTGlzdEVudGVyUHJlZGljYXRlID0gKGluZGV4OiBudW1iZXIsIGRyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBkcm9wLmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdLmRhdGEuZ3JvdXBfaWQgPT09IGRyYWcuZGF0YS5ncm91cF9pZDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkRyYWdNb2RlbERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgbW9kZWxzOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgIH07XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm1vZGVsLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ0dyb3VwRHJvcHBlZChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIHRoaXMub25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uSGVhZGVyQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc29ydERpcmVjdGlvbiwgbW9kZWwsIHNvcnRDaGFuZ2UgfSA9IGNvbHVtbjtcbiAgICAgICAgICAgIGxldCBkaXJlY3Rpb247XG4gICAgICAgICAgICBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVzYztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2MpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uYXNjO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbi5zb3J0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgY29uc3Qgc29ydEV2ZW50ID0geyBldmVudCwga2V5OiBtb2RlbCwgZGlyZWN0aW9uIH07XG4gICAgICAgICAgICBzb3J0Q2hhbmdlLmVtaXQoc29ydEV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMudGh5U29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5vblJvd0NsaWNrUHJvcGFnYXRpb25FdmVudEhhbmRsZXIoZXZlbnQsIHJvdyk7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94IHx8IGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpbztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSAhcm93W2NvbHVtbi5rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShldmVudCwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvUm93ID0gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50LCByb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93RXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50aHlPblJvd0NsaWNrLmVtaXQocm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJvd0NsaWNrUHJvcGFnYXRpb25FdmVudEhhbmRsZXIoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCgnLnRyZWUtZXhwYW5kLWljb24nKSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRDaGlsZHJlbihyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0NvbnRleHRNZW51KGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNZW51RXZlbnQ6IFRoeVRhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUm93Q29udGV4dE1lbnUuZW1pdChjb250ZXh0TWVudUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgX2NvbHVtbnMgPSBjb21wb25lbnRzLm1hcChjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogY29tcG9uZW50LndpZHRoLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY29tcG9uZW50LmNsYXNzTmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG4sIGkpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obiwgX2NvbHVtbnNbaV0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkR3JvdXBzKG9yaWdpbkdyb3VwczogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBvcmlnaW5Hcm91cHNNYXAgPSBoZWxwZXJzLmtleUJ5KG9yaWdpbkdyb3VwcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIG9yaWdpbkdyb3Vwcy5mb3JFYWNoKChvcmlnaW46IFNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBUaHlUYWJsZUdyb3VwID0geyBpZDogb3JpZ2luW3RoaXMucm93S2V5XSwgY2hpbGRyZW46IFtdLCBvcmlnaW4gfTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cC5oYXNPd25Qcm9wZXJ0eShncm91cC5pZCkpIHtcbiAgICAgICAgICAgICAgICBncm91cC5leHBhbmQgPSB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cC5leHBhbmQgPSAhIShvcmlnaW5Hcm91cHNNYXBbZ3JvdXAuaWRdIGFzIFNhZmVBbnkpLmV4cGFuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRNb2RlbCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzTWFwID0ga2V5QnkodGhpcy5ncm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzTWFwW3Jvd1t0aGlzLmdyb3VwQnldXTtcbiAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cGFuZEdyb3VwKGdyb3VwOiBUaHlUYWJsZUdyb3VwKSB7XG4gICAgICAgIGdyb3VwLmV4cGFuZCA9ICFncm91cC5leHBhbmQ7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cFtncm91cC5pZF0gPSBncm91cC5leHBhbmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9sZEdyb3Vwcyhncm91cHM6IFRoeVRhYmxlR3JvdXBbXSkge1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxDbGFzcygpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMudGFibGVTY3JvbGxFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXhTY3JvbGxMZWZ0ID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxXaWR0aCAtIHNjcm9sbEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHNjcm9sbFggPSBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IGxhc3RTY3JvbGxDbGFzc05hbWUgPSB0aGlzLnNjcm9sbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSAnJztcbiAgICAgICAgaWYgKHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggPiBzY3JvbGxFbGVtZW50LmNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsWCA+PSBtYXhTY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxSaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxNaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RTY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIGxhc3RTY3JvbGxDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgdGhpcy5zY3JvbGxDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS5pbml0aWFsaXplRWxlbWVudCh0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3ModHJ1ZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIG1lcmdlKHRoaXMudmlld3BvcnRSdWxlci5jaGFuZ2UoMjAwKSwgb2YobnVsbCkucGlwZShkZWxheSgyMDApKSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFNrZWxldG9uQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbXTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRoeUNvbHVtblNrZWxldG9uVHlwZXNbaW5kZXhdIHx8IFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCB8fCAnYXV0bydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uQ29sdW1ucyA9IFsuLi50aGlzLnNrZWxldG9uQ29sdW1ucywgaXRlbV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLnJvd3MpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlPEV2ZW50PihzdWJzY3JpYmVyID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnJvd3MubWFwKHJvdyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHRoZXJlJ3Mgbm8gbmVlZCB0byBhZGQgdG91Y2gsIHBvaW50ZXIgYW5kIG1vdXNlIGV2ZW50IGxpc3RlbmVycyB0b2dldGhlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2Ygcm93cywgd2hpY2ggd2lsbCBsZWFkIHRvIGFkZGluZyBOICogMyBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI2V4YW1wbGVzKSwgd2UgY2FuIHVzZSBmZWF0dXJlIGRldGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgaWYgcG9pbnRlciBldmVudHMgYXJlIGF2YWlsYWJsZS4gSWYgcG9pbnRlciBldmVudHMgYXJlIGF2YWlsYWJsZSwgd2UgaGF2ZSB0byBsaXN0ZW4gb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgYHBvaW50ZXJkb3duYCBldmVudC4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGRldGVybWluZSBpZiB3ZSdyZSBvbiBhIHRvdWNoIGRldmljZSBvciBub3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdWNoIGV2ZW50cyBhcmUgaGFuZGxlZCBlYXJsaWVyIHRoYW4gbW91c2UgZXZlbnRzLCB0aG8gbm90IGFsbCB1c2VyIGFnZW50cyBkaXNwYXRjaCBtb3VzZSBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdG91Y2ggZXZlbnRzLiBTZWUgdGhlIHNwZWM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvI21vdXNlLWV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBvaW50ZXJFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncG9pbnRlcmRvd24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdvbnRvdWNoc3RhcnQnIGluIHJvdy5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICd0b3VjaHN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbW91c2Vkb3duJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogc2luY2UgQ2hyb21lIDU2IGRlZmF1bHRzIGRvY3VtZW50IGxldmVsIGB0b3VjaHN0YXJ0YCBsaXN0ZW5lciB0byBwYXNzaXZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZWxlbWVudCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgaXMgbm90IHBhc3NpdmUgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZXZlciBjYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBvbiBpdCwgc28gd2UncmUgc2FmZSBtYWtpbmcgaXQgcGFzc2l2ZSB0b28uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucz5wYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgbW9kZUNoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5TW9kZTtcbiAgICAgICAgY29uc3QgdGh5R3JvdXBzQ2hhbmdlID0gc2ltcGxlQ2hhbmdlcy50aHlHcm91cHM7XG4gICAgICAgIGNvbnN0IGlzR3JvdXBNb2RlID0gbW9kZUNoYW5nZSAmJiBtb2RlQ2hhbmdlLmN1cnJlbnRWYWx1ZSA9PT0gJ2dyb3VwJztcbiAgICAgICAgaWYgKGlzR3JvdXBNb2RlICYmIHRoeUdyb3Vwc0NoYW5nZSAmJiB0aHlHcm91cHNDaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRHcm91cHModGh5R3JvdXBzQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTW9kZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kaWZmKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5fZGlmZi5kaWZmKHRoaXMubW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbHlEaWZmQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95SW52YWxpZEF0dHJpYnV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0aHktdGFibGUtYm9keVwiXG4gIGNka1Njcm9sbGFibGVcbiAgW25nQ2xhc3NdPVwieyAndGh5LXRhYmxlLWZpeGVkJzogaGFzRml4ZWQsICd0aHktdGFibGUtYm9yZGVyZWQtdGhlbWUnOiB0aGVtZSA9PT0gJ2JvcmRlcmVkJyAmJiBoYXNGaXhlZCB9XCI+XG4gIDx0YWJsZVxuICAgICN0YWJsZVxuICAgIGNsYXNzPVwidGFibGVcIlxuICAgIFtuZ0NsYXNzXT1cIltjbGFzc05hbWVdXCJcbiAgICBbY2xhc3MudGFibGUtZml4ZWRdPVwidGh5TGF5b3V0Rml4ZWRcIlxuICAgIFtjbGFzcy50YWJsZS1kcmFnZ2FibGVdPVwiZHJhZ2dhYmxlXCJcbiAgICBbY2xhc3MudGFibGUtZ3JvdXBdPVwibW9kZSA9PT0gJ2dyb3VwJ1wiXG4gICAgW3N0eWxlLm1pbi13aWR0aF09XCJ0aHlNaW5XaWR0aFwiPlxuICAgIDxjb2xncm91cD5cbiAgICAgIDxjb2wgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgW3dpZHRoXT1cImNvbHVtbi53aWR0aFwiIFtzdHlsZS5taW5XaWR0aF09XCJoYXNGaXhlZCA/IGNvbHVtbi53aWR0aCA6IGNvbHVtbi5taW5XaWR0aFwiIC8+XG4gICAgPC9jb2xncm91cD5cblxuICAgIDx0aGVhZCAqbmdJZj1cIiF0aHlIZWFkbGVzc1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5oZWFkZXJDbGFzc05hbWVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY29sdW1uLXNvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tbGVmdF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLmxlZnRcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLXJpZ2h0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ucmlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICBbc3R5bGUucmlnaHQucHhdPVwiY29sdW1uLnJpZ2h0XCJcbiAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljaygkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbHVtbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCI+XG4gICAgICAgICAgICA8dGh5LWljb24gW25nQ2xhc3NdPVwiWyd0aHktdGFibGUtY29sdW1uLXNvcnRhYmxlLWljb24nLCAncHgtMScsIGNvbHVtbi5zb3J0RGlyZWN0aW9uXVwiIHRoeUljb25OYW1lPVwic29ydC12ZXJ0aWNhbC10dFwiPlxuICAgICAgICAgICAgPC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keVxuICAgICAgKm5nSWY9XCJsb2FkaW5nRG9uZVwiXG4gICAgICB0aHlEcmFnRHJvcFxuICAgICAgY2RrRHJvcExpc3RcbiAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnZ2FibGVcIlxuICAgICAgW2Nka0Ryb3BMaXN0U29ydFByZWRpY2F0ZV09XCJkcm9wTGlzdEVudGVyUHJlZGljYXRlXCJcbiAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25EcmFnRHJvcHBlZCgkZXZlbnQpXCI+XG4gICAgICA8IS0tIGdyb3VwIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdncm91cCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzXCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInRoeS10YWJsZS1ncm91cFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kR3JvdXAoZ3JvdXApXCJcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImdyb3VwXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnR3JvdXBTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdHcm91cEVuZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LXRhYmxlLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmFnZ2FibGUgJiYgIShncm91cCB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlKVwiPlxuICAgICAgICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGFibGUtZHJhZ2dhYmxlLWljb25cIiB0aHlJY29uTmFtZT1cImRyYWdcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cImV4cGFuZC1pY29uXCIgW3RoeUljb25OYW1lXT1cImdyb3VwLmV4cGFuZCA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZ3JvdXAub3JpZ2luLCBncm91cDogZ3JvdXAub3JpZ2luIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAuY2hpbGRyZW4/Lmxlbmd0aCAmJiBncm91cC5leHBhbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBncm91cC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGxpc3TmqKHlvI/kuIvmsqHmnInnm7TmjqXkvb/nlKhpdGVt5qih5p2/77yM5piv5Zug5Li65L2/55So5LqG5qih5p2/5b2x5ZON5LqGQW5ndWxhcueahOS+nei1luagke+8jOWvvOiHtENka0RyYWdEcm9w5o6S5bqP5aSx5pWI77yM55uu5YmN6L+Z5qC35L+u5pS55Y+v5Lul5pqC5pe26Kej5Yaz57q/5LiK5LiN6IO95o6S5bqP55qE6Zeu6aKY77yMVHJlZeaooeW8j+eahOaOkuW6j+aaguaXtuS4jeaUr+aMgSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnbGlzdCdcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgI3Jvd3NcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIG1vZGVsOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAndHJlZSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIG1vZGVsOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93LCBpbmRleDogaSwgbGV2ZWw6IDAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHJUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWk9XCJpbmRleFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgY2xhc3M9XCJ0aHktc29ydGFibGUtaXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxuICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwicm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbmRlclJvd0NsYXNzTmFtZShyb3csIGkpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICh0aHlDb250ZXh0TWVudSk9XCJvblJvd0NvbnRleHRNZW51KCRldmVudCwgcm93KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxXG4gICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGlzRXhwYW5kZWQocm93KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIHJvd1t0aHlDaGlsZHJlbktleV07IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogY2hpbGQsIGluZGV4OiBqLCBsZXZlbDogbGV2ZWwgKyAxIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGRzVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIlxuICAgICAgICAgIFtjbGFzcy50aHktb3BlcmF0aW9uLWxpbmtzXT1cIiEhY29sdW1uLm9wZXJhdGlvbmFsXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNvbHVtbi1zZWNvbmRhcnldPVwiISFjb2x1bW4uc2Vjb25kYXJ5XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNoZWNrYm94LWNvbHVtbl09XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tbGVmdF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLmxlZnRcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLXJpZ2h0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ucmlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICBbc3R5bGUucmlnaHQucHhdPVwiY29sdW1uLnJpZ2h0XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZCA/IHRkSW5kZW50Q29tcHV0ZWQobGV2ZWwpIDogbnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJqID09PSAwICYmIGRyYWdnYWJsZSAmJiAhKHJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlKVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGFibGUtZHJhZ2dhYmxlLWljb25cIiB0aHlJY29uTmFtZT1cImRyYWdcIj48L3RoeS1pY29uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLXRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGVtcGxhdGVSZWYoY29sdW1uLmNlbGxUZW1wbGF0ZVJlZilcIj5cbiAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kXCJcbiAgICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cImlzRXhwYW5kZWQocm93KSA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIlxuICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImljb25JbmRlbnRDb21wdXRlZChsZXZlbClcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS1ub3QgdGVtcGxhdGUtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYoY29sdW1uLmNlbGxUZW1wbGF0ZVJlZilcIj5cbiAgICAgICAgICAgIDwhLS0gZGVmYXVsdCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubW9kZWwgJiYgIWNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1leHBhbmQtaWNvbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cImlzRXhwYW5kZWQocm93KSA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dFeHBhbmQocm93KSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE1vZGVsVmFsdWUocm93LCBjb2x1bW4ubW9kZWwpIHwgaXNWYWxpZE1vZGVsVmFsdWU7IGVsc2UgZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vZGVsVmFsdWUocm93LCBjb2x1bW4ubW9kZWwpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5kZWZhdWx0VGV4dFwiIGNsYXNzPVwidGV4dC1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uZGVmYXVsdFRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIGluZGV4IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmluZGV4XCI+XG4gICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBjaGVja2JveCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5rZXldXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RvcFByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gcmFkaW8gLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW9cIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUmFkaW9Sb3dcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9TZWxlY3RDaGFuZ2UoJGV2ZW50LCByb3cpXCIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHN3aXRjaCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5zd2l0Y2hcIj5cbiAgICAgICAgICAgICAgPHRoeS1zd2l0Y2hcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICh0aHlDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIj48L3RoeS1zd2l0Y2g+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ0RvbmUgJiYgbW9kZWwubGVuZ3RoID09PSAwICYmIGdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRoeS10YWJsZS1lbXB0eSBjbGVhci1ob3ZlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbXB0eVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFbXB0eVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5PlxuICAgICAgPHRoeS1lbXB0eVxuICAgICAgICBbdGh5TWVzc2FnZV09XCJlbXB0eU9wdGlvbnMubWVzc2FnZVwiXG4gICAgICAgIFt0aHlUcmFuc2xhdGlvbktleV09XCJlbXB0eU9wdGlvbnMudHJhbnNsYXRpb25LZXlcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25WYWx1ZXNdPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uVmFsdWVzXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVdPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVcIlxuICAgICAgICBbdGh5RW50aXR5TmFtZVRyYW5zbGF0ZUtleV09XCJlbXB0eU9wdGlvbnMuZW50aXR5TmFtZVRyYW5zbGF0ZUtleVwiXG4gICAgICAgIFt0aHlJY29uTmFtZV09XCJlbXB0eU9wdGlvbnMuaWNvbk5hbWVcIlxuICAgICAgICBbdGh5U2l6ZV09XCJlbXB0eU9wdGlvbnMuc2l6ZVwiXG4gICAgICAgIFt0aHlNYXJnaW5Ub3BdPVwiZW1wdHlPcHRpb25zLm1hcmdpblRvcFwiXG4gICAgICAgIFt0aHlUb3BBdXRvXT1cImVtcHR5T3B0aW9ucy50b3BBdXRvXCJcbiAgICAgICAgW3RoeUNvbnRhaW5lcl09XCJlbXB0eU9wdGlvbnMuY29udGFpbmVyXCI+PC90aHktZW1wdHk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPHRoeS10YWJsZS1za2VsZXRvblxuICAgICpuZ0lmPVwiIWxvYWRpbmdEb25lXCJcbiAgICBbdGh5Um93Q291bnRdPVwiNlwiXG4gICAgW3RoeUhlYWRsZXNzXT1cInRydWVcIlxuICAgIFt0aHlUaGVtZV09XCJ0aGVtZVwiXG4gICAgW3RoeVNpemVdPVwic2l6ZVwiXG4gICAgW3RoeU1pbldpZHRoXT1cInRoeU1pbldpZHRoXCJcbiAgICBbdGh5Q29sdW1uc109XCJza2VsZXRvbkNvbHVtbnNcIj5cbiAgPC90aHktdGFibGUtc2tlbGV0b24+XG5cbiAgPGRpdiBjbGFzcz1cInRoeS10YWJsZS1mb290ZXJcIiAqbmdJZj1cInBhZ2luYXRpb24udG90YWwgPiBwYWdpbmF0aW9uLnNpemVcIiBbY2xhc3MudGh5LXRhYmxlLWZvb3Rlci1oYXMtcGFkZGluZ109XCJ0aGVtZSA9PT0gJ2RlZmF1bHQnXCI+XG4gICAgPHRoeS1wYWdpbmF0aW9uXG4gICAgICBbdGh5UGFnZUluZGV4XT1cInBhZ2luYXRpb24uaW5kZXhcIlxuICAgICAgW3RoeVRvdGFsXT1cInBhZ2luYXRpb24udG90YWxcIlxuICAgICAgW3RoeVBhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICBbdGh5UGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRpb24uc2l6ZU9wdGlvbnNcIlxuICAgICAgW3RoeVNob3dTaXplQ2hhbmdlcl09XCJzaG93U2l6ZUNoYW5nZXJcIlxuICAgICAgW3RoeVNob3dUb3RhbF09XCJzaG93VG90YWxcIlxuICAgICAgKHRoeVBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICh0aHlQYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZVNpemVDaGFuZ2VkKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvdGh5LXBhZ2luYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2022/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('16.2.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('16.2.2');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNi4yLjInKTtcbiJdfQ==
|
|
@@ -1030,11 +1030,11 @@ class ThyTableComponent extends _MixinBase {
|
|
|
1030
1030
|
const { sortDirection, model, sortChange } = column;
|
|
1031
1031
|
let direction;
|
|
1032
1032
|
if (sortDirection === ThyTableSortDirection.default) {
|
|
1033
|
-
direction = ThyTableSortDirection.asc;
|
|
1034
|
-
}
|
|
1035
|
-
else if (sortDirection === ThyTableSortDirection.asc) {
|
|
1036
1033
|
direction = ThyTableSortDirection.desc;
|
|
1037
1034
|
}
|
|
1035
|
+
else if (sortDirection === ThyTableSortDirection.desc) {
|
|
1036
|
+
direction = ThyTableSortDirection.asc;
|
|
1037
|
+
}
|
|
1038
1038
|
else {
|
|
1039
1039
|
direction = ThyTableSortDirection.default;
|
|
1040
1040
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-table.mjs","sources":["../../../src/table/table.interface.ts","../../../src/table/table-column.component.ts","../../../src/table/pipes/drag.pipe.ts","../../../src/table/pipes/table.pipe.ts","../../../src/table/enums/column-skeleton-type.ts","../../../src/table/table-skeleton.component.ts","../../../src/table/table-skeleton.component.html","../../../src/table/table.component.ts","../../../src/table/table.component.html","../../../src/table/table.module.ts","../../../src/table/ngx-tethys-table.ts"],"sourcesContent":["import { EventEmitter, TemplateRef } from '@angular/core';\nimport { ThyTableColumnSkeletonType } from './enums';\n\nexport enum ThyTableSortDirection {\n default = '',\n asc = 'asc',\n desc = 'desc'\n}\nexport interface ThyTableColumn {\n key: string;\n model: string;\n title: string;\n type: string;\n selections: any;\n width: string | number;\n className: string;\n headerClassName: string;\n disabled: boolean;\n defaultText: string;\n expand: boolean;\n templateRef: TemplateRef<any>;\n headerTemplateRef: TemplateRef<any>;\n fixed?: 'left' | 'right';\n left?: number;\n right?: number;\n sortable?: boolean;\n // 操作列\n operational?: boolean;\n // 次要列\n secondary?: boolean;\n sortDirection?: ThyTableSortDirection;\n sortChange?: EventEmitter<ThyTableSortEvent>;\n}\n\nexport interface ThyPage {\n index?: number;\n size?: number;\n total?: number;\n sizeOptions?: number[];\n}\n\nexport interface ThyTableEmptyOptions {\n message?: string;\n translationKey?: string;\n translationValues?: any;\n entityName?: string;\n entityNameTranslateKey?: string;\n iconName?: string;\n size?: string;\n marginTop?: string;\n topAuto?: string;\n container?: TemplateRef<any>;\n}\n\nexport type PageChangedEvent = ThyPageChangedEvent;\nexport interface ThyPageChangedEvent {\n itemsPerPage: number;\n page: number;\n}\n\nexport interface ThyTableEvent {\n event: Event;\n row: any;\n}\n\nexport interface ThyMultiSelectEvent extends ThyTableEvent {\n rows: any[];\n}\n\nexport interface ThyRadioSelectEvent {\n event: Event;\n row: any;\n}\n\nexport interface ThySwitchEvent extends ThyTableEvent {\n refresh?: Function;\n}\n\nexport interface ThyTableDraggableEvent {\n oldIndex?: number;\n newIndex?: number;\n model?: any;\n models?: Array<any>;\n [key: string]: any;\n}\n\nexport interface ThyTableSortEvent {\n event: Event;\n key: string;\n direction: ThyTableSortDirection;\n}\n\nexport interface ThyTableRowEvent {\n event: Event;\n row: any;\n}\n\nexport interface ThyTableSkeletonColumn {\n width: number | string;\n type: ThyTableColumnSkeletonType;\n}\n","import { _isNumberValue } from '@angular/cdk/coercion';\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { InputBoolean } from 'ngx-tethys/core';\nimport { coerceCssPixelValue, isArray, isObject } from 'ngx-tethys/util';\nimport { ThyTableSortDirection, ThyTableSortEvent } from './table.interface';\n\nexport interface IThyTableColumnParentComponent {\n rowKey: string;\n updateColumnSelections(key: string, selections: any): void;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const THY_TABLE_COLUMN_PARENT_COMPONENT = new InjectionToken<IThyTableColumnParentComponent>('THY_TABLE_COLUMN_PARENT_COMPONENT');\n\nexport type FixedDirection = 'left' | 'right';\n\n/**\n * 表格列组件\n * @name thy-table-column\n * @order 20\n */\n@Component({\n selector: 'thy-table-column',\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class ThyTableColumnComponent implements OnInit {\n /**\n * 设置数据属性 Key,读取数组中对象的当前 Key 值\n * @type string\n */\n @Input('thyModelKey') model = '';\n\n /**\n * 设置列名,显示在表头\n * @type string\n */\n @Input('thyTitle') title = '';\n\n /**\n * 设置列的特殊类型,序列号、选择框、单选框、切换按钮\n * @type string\n */\n @Input('thyType') type = '';\n\n public width: string = '';\n\n /**\n * 设置列的宽度\n */\n @Input()\n set thyWidth(value: string | number) {\n this.width = coerceCssPixelValue(value);\n }\n\n public minWidth: string = '';\n\n /**\n * 设置列的最小宽度\n */\n @Input()\n set thyMinWidth(value: string | number) {\n this.minWidth = coerceCssPixelValue(value);\n }\n\n /**\n * 设置列的样式\n */\n @Input('thyClassName') className = '';\n\n /**\n * 设置列头部的 Class,即 th 元素上的样式\n * @type string\n */\n @Input('thyHeaderClassName') headerClassName = '';\n\n /**\n * 设置自定义类型的禁用状态\n * @type boolean\n */\n @Input('thyDisabled') @InputBoolean() disabled = false;\n\n /**\n * thyType 为 checkbox 或者 radio 类型时选中的数据 ,支持单个对象,单个 Id,同时支持多个 Id,多个对象\n */\n @Input('thySelections')\n set selections(value: any) {\n if (value) {\n this._selections = isArray(value) ? value : [value];\n this._selections = this._selections.map((item: string | number | object) => {\n return isObject(item) ? item[this.parent.rowKey] : item;\n });\n if (!this._firstChange) {\n this.parent.updateColumnSelections(this.key, this._selections);\n }\n }\n }\n\n get selections() {\n return this._selections;\n }\n /**\n * 设置数据为空的时候显示的文本\n * @type string\n */\n @Input('thyDefaultText') defaultText = '';\n\n /**\n * 设置 Tree 模式下折叠展开按钮展示列,不传默认第一列\n */\n @Input('thyExpand') @InputBoolean() expand = false;\n\n public sortable: boolean;\n\n /**\n * 是否开启列排序功能(开启时 thyModelKey 为 必传)\n * @default false\n */\n @Input()\n @InputBoolean()\n set thySortable(value: boolean) {\n if (value) {\n if (this.model) {\n this.sortable = true;\n } else {\n throw new Error(`thyModelKey is required when sortable`);\n }\n } else {\n this.sortable = false;\n }\n }\n\n /**\n * 默认列排序顺序\n * @type 'asc' | 'desc' | ''\n */\n @Input('thySortDirection') sortDirection = ThyTableSortDirection.default;\n\n /**\n * 设置固定列\n */\n @Input('thyFixed') fixed: FixedDirection;\n\n /**\n * 当前列是否是操作列,设置为 true 时会追加 thy-operation-links 样式类,文字居中\n * @default false\n */\n @Input('thyOperational') @InputBoolean() operational: boolean | string;\n\n /**\n * 当前列是否是次要列,设置为 true 时会追加 thy-table-column-secondary 样式类,文字颜色为 $gray-600\n * @default false\n */\n @Input('thySecondary') @InputBoolean() secondary: boolean | string;\n\n /**\n * 列排序修改事件\n */\n @Output('thySortChange') sortChange: EventEmitter<ThyTableSortEvent> = new EventEmitter<ThyTableSortEvent>();\n\n @ContentChild('header', { static: true }) headerTemplateRef: TemplateRef<any>;\n\n @ContentChild('cell', { static: true }) cellTemplateRef: TemplateRef<any>;\n\n @ContentChild(TemplateRef, { static: true })\n set templateRef(value: TemplateRef<any>) {\n if (value) {\n if (!this.headerTemplateRef && !this.cellTemplateRef) {\n this.cellTemplateRef = value;\n }\n }\n }\n\n public key?: string;\n\n public left: number;\n\n public right: number;\n\n private _selections: any;\n\n private _firstChange = true;\n\n constructor(\n private el: ElementRef,\n @Optional()\n @Inject(THY_TABLE_COLUMN_PARENT_COMPONENT)\n public parent: IThyTableColumnParentComponent\n ) {}\n\n ngOnInit() {\n this.key = this._generateKey();\n this._firstChange = false;\n }\n\n private _generateKey() {\n return '[$$column]' + Math.random().toString(16).slice(2, 10);\n }\n}\n","import { SafeAny } from 'ngx-tethys/types';\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @private\n */\n@Pipe({\n name: 'tableRowDragDisabled',\n standalone: true\n})\nexport class TableRowDragDisabledPipe implements PipeTransform {\n transform(item: SafeAny, dragDisabledPredicate: (item: SafeAny) => boolean): boolean {\n return dragDisabledPredicate(item);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @private\n */\n@Pipe({\n name: 'isValidModelValue',\n standalone: true\n})\nexport class TableIsValidModelValuePipe implements PipeTransform {\n transform(value: any): boolean {\n return value !== '' && value !== undefined && value !== null;\n }\n}\n","export enum ThyTableColumnSkeletonType {\n title = 'title',\n member = 'member',\n default = 'default',\n checkbox = 'checkbox'\n}\n","import { NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { InputBoolean, InputCssPixel } from 'ngx-tethys/core';\nimport { ThySkeletonCircleComponent, ThySkeletonRectangleComponent } from 'ngx-tethys/skeleton';\nimport { ThyTableSkeletonColumn } from './table.interface';\nimport { ThyViewOutletDirective } from 'ngx-tethys/shared';\nimport { ThyTableColumnSkeletonType } from './enums';\nimport { ThyTableSize, ThyTableTheme } from './table.component';\n\nconst COLUMN_COUNT = 5;\n\n/**\n * 表格的骨架屏组件\n * @name thy-table-skeleton\n */\n@Component({\n selector: 'thy-table-skeleton',\n templateUrl: './table-skeleton.component.html',\n host: {\n class: 'thy-table-skeleton'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgFor, NgClass, NgIf, NgTemplateOutlet, ThyViewOutletDirective, ThySkeletonRectangleComponent, ThySkeletonCircleComponent]\n})\nexport class ThyTableSkeletonComponent implements AfterViewInit {\n @ViewChild('titleTemplate') titleTemplate: ElementRef<HTMLElement>;\n\n @ViewChild('memberTemplate') memberTemplate: ElementRef<HTMLElement>;\n\n @ViewChild('defaultTemplate') defaultTemplate: ElementRef<HTMLElement>;\n\n @ViewChild('checkboxTemplate') checkboxTemplate: ElementRef<HTMLElement>;\n\n /**\n * 骨架边框圆角\n */\n @Input()\n @InputCssPixel()\n thyBorderRadius: string | number;\n\n /**\n * 表格内容骨架高度\n */\n @Input()\n @InputCssPixel()\n thyRowHeight: string | number = '20px';\n\n /**\n * 是否开启动画\n * @default true\n */\n @Input()\n @InputBoolean()\n thyAnimated: boolean = true;\n\n /**\n * 动画速度\n */\n @Input() thyAnimatedInterval: string;\n\n /**\n * 骨架主色\n */\n @Input() thyPrimaryColor: string;\n\n /**\n * 骨架次色\n */\n @Input() thySecondaryColor: string;\n\n rowCount: number[] = [];\n\n /**\n * 行数\n */\n @Input()\n set thyRowCount(value: number | string) {\n this.rowCount = Array.from({ length: +value });\n }\n\n /**\n * 是否展示骨架头\n * @default false\n */\n @Input() @InputBoolean() thyHeadless = false;\n\n /**\n * 骨架屏的风格\n * @type default | bordered | boxed\n */\n @Input() thyTheme: ThyTableTheme = 'default';\n\n /**\n * 骨架屏的大小\n * @type xs | sm | md | lg | xlg | default\n * @default md\n */\n @Input() thySize: ThyTableSize = 'md';\n\n /**\n * 设置表格最小宽度\n */\n @Input()\n @InputCssPixel()\n thyMinWidth: string | number;\n\n /**\n * 表格列骨架的配置项,支持配置列宽、骨架类型\n * @type ThyTableSkeletonColumn[]\n */\n @Input() set thyColumns(columns: ThyTableSkeletonColumn[]) {\n if (columns && columns.length) {\n this.columns = columns;\n } else {\n this.columns = [...this.defaultColumns];\n }\n }\n\n public titleHeight = '20px';\n\n public titleWidth = '50px';\n\n public checkboxWidth = '20px';\n\n public avatarSize = '24px';\n\n public columnType = ThyTableColumnSkeletonType;\n\n public skeletonColumnsMap: {\n [key: string]: ElementRef<HTMLElement>;\n } = {};\n\n get tableClassMap() {\n return {\n table: true,\n 'table-bordered': this.thyTheme === 'bordered',\n 'table-boxed': this.thyTheme === 'boxed',\n [`table-${this.thySize}`]: !!this.thySize\n };\n }\n\n private defaultColumns = Array.from({ length: COLUMN_COUNT }).map((item, index: number) => {\n if (index === 0) {\n return {\n width: '40%',\n type: ThyTableColumnSkeletonType.title\n };\n } else if (index === 1) {\n return {\n width: '17%',\n type: ThyTableColumnSkeletonType.member\n };\n } else {\n return {\n width: 'auto',\n type: ThyTableColumnSkeletonType.default\n };\n }\n });\n\n public columns: ThyTableSkeletonColumn[] = [...this.defaultColumns];\n\n public trackByFn(index: number) {\n return index;\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n this.skeletonColumnsMap = {\n [ThyTableColumnSkeletonType.title]: this.titleTemplate,\n [ThyTableColumnSkeletonType.member]: this.memberTemplate,\n [ThyTableColumnSkeletonType.checkbox]: this.checkboxTemplate\n };\n this.cdr.detectChanges();\n }\n}\n","<table [ngClass]=\"tableClassMap\" [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns; trackBy: trackByFn\" [width]=\"column.width\" />\n </colgroup>\n <ng-container *ngIf=\"!thyHeadless\">\n <thead>\n <tr>\n <th *ngFor=\"let column of columns; trackBy: trackByFn\">\n <thy-skeleton-rectangle\n [thyRowWidth]=\"column?.type === columnType.checkbox ? checkboxWidth : titleWidth\"\n [thyRowHeight]=\"titleHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyTheme === 'bordered' || thyTheme === 'boxed' ? '#eee' : thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n </th>\n </tr>\n </thead>\n </ng-container>\n <tbody>\n <ng-container *ngFor=\"let item of rowCount; let i = index\">\n <tr>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByFn\">\n <td>\n <ng-container\n *thyViewOutlet=\"\n skeletonColumnsMap[column.type] || defaultTemplate\n context:{\n trIndex: i,\n }\n \">\n </ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n</table>\n\n<ng-template #titleTemplate let-trIndex=\"trIndex\">\n <div class=\"d-flex align-items-center\">\n <thy-skeleton-rectangle\n class=\"mr-2 flex-shrink-0\"\n [thyRowWidth]=\"checkboxWidth\"\n [thyRowHeight]=\"thyRowHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n\n <ng-container\n *thyViewOutlet=\"defaultTemplate;\n context:{\n rowWidth: trIndex % 3 === 0 ? '75%' : trIndex % 3 === 1 ? '100%' : trIndex % 3 === 2 ? '65%' : '',\n }\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #checkboxTemplate>\n <thy-skeleton-rectangle\n [thyRowWidth]=\"checkboxWidth\"\n [thyRowHeight]=\"thyRowHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n</ng-template>\n\n<ng-template #memberTemplate>\n <div class=\"d-flex align-items-center\">\n <thy-skeleton-circle\n class=\"mr-2 flex-shrink-0\"\n [thySize]=\"avatarSize\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-circle>\n\n <ng-container *thyViewOutlet=\"defaultTemplate\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-rowWidth=\"rowWidth\">\n <thy-skeleton-rectangle\n [thyRowWidth]=\"rowWidth\"\n [thyRowHeight]=\"thyRowHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n</ng-template>\n","import {\n Constructor,\n InputBoolean,\n InputCssPixel,\n InputNumber,\n MixinBase,\n mixinUnsubscribe,\n ThyUnsubscribe,\n UpdateHostClassService\n} from 'ngx-tethys/core';\nimport { Dictionary, SafeAny } from 'ngx-tethys/types';\nimport { coerceBooleanProperty, get, helpers, isString, keyBy, set } from 'ngx-tethys/util';\nimport { EMPTY, fromEvent, merge, Observable, of } from 'rxjs';\nimport { delay, startWith, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { CdkDrag, CdkDragDrop, CdkDragEnd, CdkDragStart, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ViewportRuler } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { DOCUMENT, isPlatformServer, NgClass, NgFor, NgIf, NgTemplateOutlet, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n IterableChangeRecord,\n IterableChanges,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { IThyTableColumnParentComponent, THY_TABLE_COLUMN_PARENT_COMPONENT, ThyTableColumnComponent } from './table-column.component';\nimport {\n PageChangedEvent,\n ThyMultiSelectEvent,\n ThyPage,\n ThyRadioSelectEvent,\n ThySwitchEvent,\n ThyTableSkeletonColumn,\n ThyTableDraggableEvent,\n ThyTableEmptyOptions,\n ThyTableEvent,\n ThyTableRowEvent,\n ThyTableSortDirection,\n ThyTableSortEvent\n} from './table.interface';\nimport { TableRowDragDisabledPipe } from './pipes/drag.pipe';\nimport { TableIsValidModelValuePipe } from './pipes/table.pipe';\nimport { ThyPaginationComponent } from 'ngx-tethys/pagination';\nimport { ThyTableSkeletonComponent } from './table-skeleton.component';\nimport { ThyEmptyComponent } from 'ngx-tethys/empty';\nimport { ThySwitchComponent } from 'ngx-tethys/switch';\nimport { FormsModule } from '@angular/forms';\nimport { ThyDragDropDirective, ThyContextMenuDirective } from 'ngx-tethys/shared';\nimport { ThyIconComponent } from 'ngx-tethys/icon';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { ThyTableColumnSkeletonType } from './enums';\n\nexport type ThyTableTheme = 'default' | 'bordered' | 'boxed';\n\nexport type ThyTableMode = 'list' | 'group' | 'tree';\n\nexport type ThyTableSize = 'md' | 'sm' | 'xs' | 'lg' | 'xlg' | 'default';\n\nexport enum ThyFixedDirection {\n left = 'left',\n right = 'right'\n}\n\ninterface ThyTableGroup<T = unknown> {\n id?: string;\n expand?: boolean;\n children?: object[];\n origin?: T;\n}\n\nconst tableThemeMap = {\n default: 'table-default',\n bordered: 'table-bordered',\n boxed: 'table-boxed'\n};\n\nconst customType = {\n index: 'index',\n checkbox: 'checkbox',\n radio: 'radio',\n switch: 'switch'\n};\n\nconst css = {\n tableBody: 'thy-table-body',\n tableScrollLeft: 'thy-table-scroll-left',\n tableScrollRight: 'thy-table-scroll-right',\n tableScrollMiddle: 'thy-table-scroll-middle'\n};\n\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n\nconst _MixinBase: Constructor<ThyUnsubscribe> & typeof MixinBase = mixinUnsubscribe(MixinBase);\n\n/**\n * 表格组件\n * @name thy-table\n * @order 10\n */\n@Component({\n selector: 'thy-table',\n templateUrl: './table.component.html',\n providers: [\n {\n provide: THY_TABLE_COLUMN_PARENT_COMPONENT,\n useExisting: ThyTableComponent\n },\n UpdateHostClassService\n ],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-table',\n '[class.thy-table-bordered]': `theme === 'bordered'`,\n '[class.thy-table-boxed]': `theme === 'boxed'`,\n '[class.thy-table-fixed-header]': 'thyHeaderFixed'\n },\n standalone: true,\n imports: [\n CdkScrollable,\n NgClass,\n NgFor,\n NgIf,\n NgTemplateOutlet,\n ThyIconComponent,\n ThyDragDropDirective,\n CdkDropList,\n CdkDrag,\n ThyContextMenuDirective,\n NgStyle,\n FormsModule,\n ThySwitchComponent,\n ThyEmptyComponent,\n ThyTableSkeletonComponent,\n ThyPaginationComponent,\n TableIsValidModelValuePipe,\n TableRowDragDisabledPipe\n ]\n})\nexport class ThyTableComponent extends _MixinBase implements OnInit, OnChanges, AfterViewInit, OnDestroy, IThyTableColumnParentComponent {\n public customType = customType;\n\n public model: object[] = [];\n\n public groups: ThyTableGroup[] = [];\n\n public rowKey = '_id';\n\n public groupBy: string;\n\n public mode: ThyTableMode = 'list';\n\n public theme: ThyTableTheme = 'default';\n\n public className = '';\n\n public size: ThyTableSize = 'md';\n\n public rowClassName: string | Function;\n\n public loadingDone = true;\n\n public loadingText: string;\n\n public emptyOptions: ThyTableEmptyOptions = {};\n\n public draggable = false;\n\n public selectedRadioRow: SafeAny = null;\n\n public pagination: ThyPage = { index: 1, size: 20, total: 0, sizeOptions: [20, 50, 100] };\n\n public trackByFn: SafeAny;\n\n public wholeRowSelect = false;\n\n public fixedDirection = ThyFixedDirection;\n\n public hasFixed = false;\n\n public columns: ThyTableColumnComponent[] = [];\n\n private _diff: IterableDiffer<SafeAny>;\n\n private initialized = false;\n\n private _oldThyClassName = '';\n\n private scrollClassName = css.tableScrollLeft;\n\n private get tableScrollElement(): HTMLElement {\n return this.elementRef.nativeElement.getElementsByClassName(css.tableBody)[0] as HTMLElement;\n }\n\n private get scroll$() {\n return merge(this.tableScrollElement ? fromEvent<MouseEvent>(this.tableScrollElement, 'scroll') : EMPTY);\n }\n\n /**\n * 设置数据为空时展示的模板\n * @type TemplateRef\n */\n @ContentChild('empty') emptyTemplate: TemplateRef<SafeAny>;\n\n @ViewChild('table', { static: true }) tableElementRef: ElementRef<SafeAny>;\n\n @ViewChildren('rows', { read: ElementRef }) rows: QueryList<ElementRef<HTMLElement>>;\n\n /**\n * 表格展示方式,列表/分组/树\n * @type list | group | tree\n * @default list\n */\n @Input()\n set thyMode(value: ThyTableMode) {\n this.mode = value || this.mode;\n }\n\n /**\n * thyMode的值为 `group` 时分组的 Key\n */\n @Input()\n set thyGroupBy(value: string) {\n this.groupBy = value;\n }\n\n /**\n * 设置每行数据的唯一标识属性名\n * @default _id\n */\n @Input()\n set thyRowKey(value: SafeAny) {\n this.rowKey = value || this.rowKey;\n }\n\n /**\n * 分组数据源\n */\n @Input()\n set thyGroups(value: SafeAny) {\n if (this.mode === 'group') {\n this.buildGroups(value);\n }\n }\n\n /**\n * 数据源\n */\n @Input()\n set thyModel(value: SafeAny) {\n this.model = value || [];\n this._diff = this._differs.find(this.model).create();\n this._initializeDataModel();\n\n if (this.mode === 'group') {\n this.buildModel();\n }\n }\n\n /**\n * 表格的显示风格,`bordered` 时头部有背景色且分割线区别明显\n * @type default | bordered | boxed\n * @default default\n */\n @Input()\n set thyTheme(value: ThyTableTheme) {\n this.theme = value || this.theme;\n this._setClass();\n }\n\n /**\n * 表格的大小\n * @type xs | sm | md | lg | xlg | default\n * @default md\n */\n @Input()\n set thySize(value: ThyTableSize) {\n this.size = value || this.size;\n this._setClass();\n }\n\n /**\n * 设置表格最小宽度,一般是适用于设置列宽为百分之或auto时限制表格最小宽度'\n */\n @Input()\n @InputCssPixel()\n thyMinWidth: string | number;\n\n /**\n * 设置为 fixed 布局表格,设置 fixed 后,列宽将严格按照设置宽度展示,列宽将不会根据表格内容自动调整\n * @default false\n */\n @Input() @InputBoolean() thyLayoutFixed: boolean;\n\n /**\n * 是否表头固定,若设置为 true, 需要同步设置 thyHeight\n * @default false\n */\n @Input() @InputBoolean() thyHeaderFixed: boolean;\n\n /**\n * 表格的高度\n */\n @HostBinding('style.height')\n @Input()\n @InputCssPixel()\n thyHeight: string;\n\n /**\n * 设置表格的样式\n */\n @Input()\n set thyClassName(value: string) {\n const list = this.className.split(' ').filter(a => a.trim());\n const index: number = list.findIndex(item => item === this._oldThyClassName);\n if (index !== -1) {\n list.splice(index, 1, value);\n } else {\n list.push(value);\n }\n this._oldThyClassName = value;\n this.className = list.join(' ');\n }\n\n /**\n * 设置表格行的样式,传入函数,支持 row、index\n * @type string | (row, index) => string\n */\n @Input()\n set thyRowClassName(value: string | Function) {\n this.rowClassName = value;\n }\n\n /**\n * 设置加载状态\n * @default true\n */\n @Input()\n @InputBoolean()\n set thyLoadingDone(value: boolean) {\n this.loadingDone = value;\n }\n\n /**\n * 设置加载时显示的文本,已废弃\n * @deprecated\n */\n @Input()\n set thyLoadingText(value: string) {\n this.loadingText = value;\n }\n\n /**\n * 配置空状态组件\n */\n @Input()\n set thyEmptyOptions(value: ThyTableEmptyOptions) {\n this.emptyOptions = value;\n }\n\n /**\n * 是否开启行拖拽\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyDraggable(value: boolean) {\n this.draggable = coerceBooleanProperty(value);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && this.draggable && this.mode === 'tree') {\n throw new Error('Tree mode sorting is not supported');\n }\n }\n\n /**\n * 设置当前页码\n * @default 1\n */\n @Input()\n @InputNumber()\n set thyPageIndex(value: number) {\n this.pagination.index = value;\n }\n\n /**\n * 设置每页显示数量\n * @default 20\n */\n @Input()\n @InputNumber()\n set thyPageSize(value: number) {\n this.pagination.size = value;\n }\n\n /**\n * 设置总页数\n */\n @Input()\n @InputNumber()\n set thyPageTotal(value: number) {\n this.pagination.total = value;\n }\n\n /**\n * 选中当前行是否自动选中 Checkbox,不开启时只有点击 Checkbox 列时才会触发选中\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyWholeRowSelect(value: boolean) {\n if (value) {\n this.className += ' table-hover';\n }\n this.wholeRowSelect = value;\n }\n\n /**\n * 是否显示表格头\n * @default false\n */\n @Input() @InputBoolean() thyHeadless = false;\n\n /**\n * 是否显示表格头,已废弃,请使用 thyHeadless\n * @deprecated please use thyHeadless\n */\n @Input()\n @InputBoolean()\n set thyShowHeader(value: boolean) {\n this.thyHeadless = !value;\n }\n\n /**\n * 是否显示左侧 Total\n */\n @Input('thyShowTotal') @InputBoolean() showTotal = false;\n\n /**\n * 是否显示调整每页显示条数下拉框\n */\n @Input('thyShowSizeChanger') @InputBoolean() showSizeChanger = false;\n\n /**\n * 每页显示条数下拉框可选项\n * @type number[]\n */\n @Input('thyPageSizeOptions')\n set pageSizeOptions(value: number[]) {\n this.pagination.sizeOptions = value;\n }\n\n /**\n * thyMode 为 tree 时,设置 Tree 树状数据展示时的缩进\n */\n @Input() @InputNumber() thyIndent = 20;\n\n /**\n * thyMode 为 tree 时,设置 Tree 树状数据对象中的子节点 Key\n * @type string\n */\n @Input() thyChildrenKey = 'children';\n\n /**\n * 开启 Hover 后显示操作,默认不显示操作区内容,鼠标 Hover 时展示\n * @default false\n */\n @HostBinding('class.thy-table-hover-display-operation')\n @Input()\n @InputBoolean()\n thyHoverDisplayOperation: boolean;\n\n @Input() thyDragDisabledPredicate: (item: SafeAny) => boolean = () => false;\n\n /**\n * 表格列的骨架类型\n * @type ThyTableColumnSkeletonType[]\n */\n @Input() thyColumnSkeletonTypes: ThyTableColumnSkeletonType[] = [\n ThyTableColumnSkeletonType.title,\n ThyTableColumnSkeletonType.member,\n ThyTableColumnSkeletonType.default\n ];\n\n /**\n * 切换组件回调事件\n */\n @Output() thyOnSwitchChange: EventEmitter<ThySwitchEvent> = new EventEmitter<ThySwitchEvent>();\n\n /**\n * 表格分页回调事件\n */\n @Output() thyOnPageChange: EventEmitter<PageChangedEvent> = new EventEmitter<PageChangedEvent>();\n\n /**\n * 表格分页当前页改变回调事件\n */\n @Output() thyOnPageIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Output() thyOnPageSizeChange: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * 多选回调事件\n */\n @Output() thyOnMultiSelectChange: EventEmitter<ThyMultiSelectEvent> = new EventEmitter<ThyMultiSelectEvent>();\n\n /**\n * 单选回调事件\n */\n @Output() thyOnRadioSelectChange: EventEmitter<ThyRadioSelectEvent> = new EventEmitter<ThyRadioSelectEvent>();\n\n /**\n * 拖动修改事件\n */\n @Output() thyOnDraggableChange: EventEmitter<ThyTableDraggableEvent> = new EventEmitter<ThyTableDraggableEvent>();\n\n /**\n * 表格行点击触发事件\n */\n @Output() thyOnRowClick: EventEmitter<ThyTableRowEvent> = new EventEmitter<ThyTableRowEvent>();\n\n /**\n * 列排序修改事件\n */\n @Output() thySortChange: EventEmitter<ThyTableSortEvent> = new EventEmitter<ThyTableSortEvent>();\n\n @Output() thyOnRowContextMenu: EventEmitter<ThyTableEvent> = new EventEmitter<ThyTableEvent>();\n\n @ContentChild('group', { static: true }) groupTemplate: TemplateRef<SafeAny>;\n\n @ContentChildren(ThyTableColumnComponent)\n set listOfColumnComponents(components: QueryList<ThyTableColumnComponent>) {\n if (components) {\n this.columns = components.toArray();\n this.hasFixed = !!this.columns.find(item => {\n return item.fixed === this.fixedDirection.left || item.fixed === this.fixedDirection.right;\n });\n this.buildSkeletonColumns();\n this._initializeColumns();\n this._initializeDataModel();\n }\n }\n\n // 数据的折叠展开状态\n public expandStatusMap: Dictionary<boolean> = {};\n\n public expandStatusMapOfGroup: Dictionary<boolean> = {};\n\n private expandStatusMapOfGroupBeforeDrag: Dictionary<boolean> = {};\n\n dragPreviewClass = 'thy-table-drag-preview';\n\n public skeletonColumns: ThyTableSkeletonColumn[] = [];\n\n constructor(\n public elementRef: ElementRef,\n private _differs: IterableDiffers,\n private viewportRuler: ViewportRuler,\n private updateHostClassService: UpdateHostClassService,\n @Inject(DOCUMENT) private document: SafeAny,\n @Inject(PLATFORM_ID) private platformId: string,\n private ngZone: NgZone,\n private renderer: Renderer2,\n private cdr: ChangeDetectorRef\n ) {\n super();\n this._bindTrackFn();\n }\n\n private _initializeColumns() {\n if (!this.columns.some(item => item.expand === true) && this.columns.length > 0) {\n this.columns[0].expand = true;\n }\n this._initializeColumnFixedPositions();\n }\n\n private _initializeColumnFixedPositions() {\n const leftFixedColumns = this.columns.filter(item => item.fixed === ThyFixedDirection.left);\n leftFixedColumns.forEach((item, index) => {\n const previous = leftFixedColumns[index - 1];\n item.left = previous ? previous.left + parseInt(previous.width.toString(), 10) : 0;\n });\n const rightFixedColumns = this.columns.filter(item => item.fixed === ThyFixedDirection.right).reverse();\n rightFixedColumns.forEach((item, index) => {\n const previous = rightFixedColumns[index - 1];\n item.right = previous ? previous.right + parseInt(previous.width.toString(), 10) : 0;\n });\n }\n\n private _initializeDataModel() {\n this.model.forEach(row => {\n this.columns.forEach(column => {\n this._initialSelections(row, column);\n this._initialCustomModelValue(row, column);\n });\n });\n }\n\n private _initialSelections(row: object, column: ThyTableColumnComponent) {\n if (column.selections) {\n if (column.type === 'checkbox') {\n row[column.key] = column.selections.includes(row[this.rowKey]);\n this.onModelChange(row, column);\n }\n if (column.type === 'radio') {\n if (column.selections.includes(row[this.rowKey])) {\n this.selectedRadioRow = row;\n }\n }\n }\n }\n\n private _initialCustomModelValue(row: object, column: ThyTableColumnComponent) {\n if (column.type === customType.switch) {\n row[column.key] = get(row, column.model);\n }\n }\n\n private _refreshCustomModelValue(row: SafeAny) {\n this.columns.forEach(column => {\n this._initialCustomModelValue(row, column);\n });\n }\n\n private _applyDiffChanges(changes: IterableChanges<SafeAny>) {\n if (changes) {\n changes.forEachAddedItem((record: IterableChangeRecord<SafeAny>) => {\n this._refreshCustomModelValue(record.item);\n });\n }\n }\n\n private _bindTrackFn() {\n this.trackByFn = function (this: SafeAny, index: number, row: SafeAny): SafeAny {\n return row && this.rowKey ? row[this.rowKey] : index;\n }.bind(this);\n }\n\n private _destroyInvalidAttribute() {\n this.model.forEach(row => {\n for (const key in row) {\n if (key.includes('[$$column]')) {\n delete row[key];\n }\n }\n });\n }\n\n private _setClass(first = false) {\n if (!first && !this.initialized) {\n return;\n }\n const classNames: string[] = [];\n if (this.size) {\n classNames.push(`table-${this.size}`);\n }\n if (tableThemeMap[this.theme]) {\n classNames.push(tableThemeMap[this.theme]);\n }\n\n this.updateHostClassService.updateClass(classNames);\n }\n\n public updateColumnSelections(key: string, selections: SafeAny): void {\n const column = this.columns.find(item => item.key === key);\n this.model.forEach(row => {\n this._initialSelections(row, column);\n });\n }\n\n public isTemplateRef(ref: SafeAny) {\n return ref instanceof TemplateRef;\n }\n\n public getModelValue(row: SafeAny, path: string) {\n return get(row, path);\n }\n\n public renderRowClassName(row: SafeAny, index: number) {\n if (!this.rowClassName) {\n return null;\n }\n if (isString(this.rowClassName)) {\n return this.rowClassName;\n } else {\n return (this.rowClassName as Function)(row, index);\n }\n }\n\n public onModelChange(row: SafeAny, column: ThyTableColumnComponent) {\n if (column.model) {\n set(row, column.model, row[column.key]);\n }\n }\n\n public onStopPropagation(event: Event) {\n if (this.wholeRowSelect) {\n event.stopPropagation();\n }\n }\n\n public onPageChange(event: PageChangedEvent) {\n this.thyOnPageChange.emit(event);\n }\n\n public onPageIndexChange(event: number) {\n this.thyOnPageIndexChange.emit(event);\n }\n\n public onPageSizeChange(event: number) {\n this.thyOnPageSizeChange.emit(event);\n }\n\n public onCheckboxChange(row: SafeAny, column: ThyTableColumnComponent) {\n this.onModelChange(row, column);\n this.onMultiSelectChange(null, row, column);\n }\n\n public onMultiSelectChange(event: Event, row: SafeAny, column: ThyTableColumnComponent) {\n const rows = this.model.filter(item => {\n return item[column.key];\n });\n const multiSelectEvent: ThyMultiSelectEvent = {\n event: event,\n row: row,\n rows: rows\n };\n this.thyOnMultiSelectChange.emit(multiSelectEvent);\n }\n\n public onRadioSelectChange(event: Event, row: SafeAny) {\n const radioSelectEvent: ThyRadioSelectEvent = {\n event: event,\n row: row\n };\n this.thyOnRadioSelectChange.emit(radioSelectEvent);\n }\n\n public onSwitchChange(event: Event, row: SafeAny, column: SafeAny) {\n const switchEvent: ThySwitchEvent = {\n event: event,\n row: row,\n refresh: (value: SafeAny) => {\n value = value || row;\n setTimeout(() => {\n value[column.key] = get(value, column.model);\n });\n }\n };\n this.thyOnSwitchChange.emit(switchEvent);\n }\n\n showExpand(row: SafeAny) {\n return row[this.thyChildrenKey] && row[this.thyChildrenKey].length > 0;\n }\n\n isExpanded(row: SafeAny) {\n return this.expandStatusMap[row[this.rowKey]];\n }\n\n iconIndentComputed(level: number) {\n if (this.mode === 'tree') {\n return level * this.thyIndent - 5;\n }\n }\n\n tdIndentComputed(level: number) {\n return {\n position: 'relative',\n paddingLeft: `${(level + 1) * this.thyIndent - 5}px`\n };\n }\n\n expandChildren(row: SafeAny) {\n if (this.isExpanded(row)) {\n this.expandStatusMap[row[this.rowKey]] = false;\n } else {\n this.expandStatusMap[row[this.rowKey]] = true;\n }\n }\n\n onDragGroupStarted(event: CdkDragStart<unknown>) {\n this.expandStatusMapOfGroupBeforeDrag = { ...this.expandStatusMapOfGroup };\n const groups = this.groups.filter(group => group.expand);\n this.foldGroups(groups);\n this.onDragStarted(event);\n this.cdr.detectChanges();\n }\n\n onDragGroupEnd(event: CdkDragEnd<unknown>) {\n const groups = this.groups.filter(group => this.expandStatusMapOfGroupBeforeDrag[group.id]);\n this.expandGroups(groups);\n this.cdr.detectChanges();\n }\n\n private onDragGroupDropped(event: CdkDragDrop<unknown>) {\n const group = this.groups.find(group => {\n return event.item.data.id === group.id;\n });\n if (group) {\n // drag group\n const dragEvent: ThyTableDraggableEvent = {\n model: event.item,\n models: this.groups,\n oldIndex: event.previousIndex,\n newIndex: event.currentIndex\n };\n moveItemInArray(this.groups, event.previousIndex, event.currentIndex);\n this.thyOnDraggableChange.emit(dragEvent);\n } else {\n // drag group children\n const group = this.groups.find(group => {\n return event.item.data[this.groupBy] === group.id;\n });\n const groupIndex =\n event.container.getSortedItems().findIndex(item => {\n return item.data.id === event.item.data[this.groupBy];\n }) + 1;\n const dragEvent: ThyTableDraggableEvent = {\n model: event.item,\n models: group.children,\n oldIndex: event.previousIndex - groupIndex,\n newIndex: event.currentIndex - groupIndex\n };\n moveItemInArray(group.children, dragEvent.oldIndex, dragEvent.newIndex);\n this.thyOnDraggableChange.emit(dragEvent);\n }\n }\n\n onDragStarted(event: CdkDragStart<unknown>) {\n this.ngZone.runOutsideAngular(() =>\n setTimeout(() => {\n const preview = this.document.getElementsByClassName(this.dragPreviewClass)[0];\n const originalTds: HTMLCollection = event.source._dragRef.getPlaceholderElement()?.children;\n if (preview) {\n Array.from(preview?.children).forEach((element: HTMLElement, index: number) => {\n element.style.width = `${originalTds[index]?.clientWidth}px`;\n });\n }\n })\n );\n }\n\n dropListEnterPredicate = (index: number, drag: CdkDrag, drop: CdkDropList) => {\n return drop.getSortedItems()[index].data.group_id === drag.data.group_id;\n };\n\n private onDragModelDropped(event: CdkDragDrop<unknown>) {\n const dragEvent: ThyTableDraggableEvent = {\n model: event.item,\n models: this.model,\n oldIndex: event.previousIndex,\n newIndex: event.currentIndex\n };\n moveItemInArray(this.model, event.previousIndex, event.currentIndex);\n this.thyOnDraggableChange.emit(dragEvent);\n }\n\n onDragDropped(event: CdkDragDrop<unknown>) {\n if (this.mode === 'group') {\n this.onDragGroupDropped(event);\n } else if (this.mode === 'list') {\n this.onDragModelDropped(event);\n }\n }\n\n onColumnHeaderClick(event: Event, column: ThyTableColumnComponent) {\n if (column.sortable) {\n const { sortDirection, model, sortChange } = column;\n let direction;\n if (sortDirection === ThyTableSortDirection.default) {\n direction = ThyTableSortDirection.asc;\n } else if (sortDirection === ThyTableSortDirection.asc) {\n direction = ThyTableSortDirection.desc;\n } else {\n direction = ThyTableSortDirection.default;\n }\n column.sortDirection = direction;\n const sortEvent = { event, key: model, direction };\n sortChange.emit(sortEvent);\n this.thySortChange.emit(sortEvent);\n }\n }\n\n public onRowClick(event: Event, row: SafeAny) {\n const next = this.onRowClickPropagationEventHandler(event, row);\n if (next) {\n if (this.wholeRowSelect) {\n const column = this.columns.find(item => {\n return item.type === customType.checkbox || item.type === customType.radio;\n });\n if (column && !column.disabled) {\n if (column.type === customType.checkbox) {\n row[column.key] = !row[column.key];\n this.onModelChange(row, column);\n this.onMultiSelectChange(event, row, column);\n }\n if (column.type === customType.radio) {\n this.selectedRadioRow = row;\n this.onRadioSelectChange(event, row);\n }\n }\n }\n const rowEvent = {\n event: event,\n row: row\n };\n this.thyOnRowClick.emit(rowEvent);\n }\n }\n\n private onRowClickPropagationEventHandler(event: Event, row: SafeAny): boolean {\n if ((event.target as Element).closest('.tree-expand-icon')) {\n this.expandChildren(row);\n return false;\n }\n return true;\n }\n\n public onRowContextMenu(event: Event, row: SafeAny) {\n const contextMenuEvent: ThyTableEvent = {\n event: event,\n row: row\n };\n this.thyOnRowContextMenu.emit(contextMenuEvent);\n }\n\n private _refreshColumns() {\n const components = this.columns || [];\n const _columns = components.map(component => {\n return {\n width: component.width,\n className: component.className\n };\n });\n\n this.columns.forEach((n, i) => {\n Object.assign(n, _columns[i]);\n });\n }\n\n private buildGroups(originGroups: SafeAny) {\n const originGroupsMap = helpers.keyBy(originGroups, 'id');\n this.groups = [];\n originGroups.forEach((origin: SafeAny) => {\n const group: ThyTableGroup = { id: origin[this.rowKey], children: [], origin };\n\n if (this.expandStatusMapOfGroup.hasOwnProperty(group.id)) {\n group.expand = this.expandStatusMapOfGroup[group.id];\n } else {\n group.expand = !!(originGroupsMap[group.id] as SafeAny).expand;\n }\n\n this.groups.push(group);\n });\n }\n\n private buildModel() {\n const groupsMap = keyBy(this.groups, 'id');\n this.model.forEach(row => {\n const group = groupsMap[row[this.groupBy]];\n if (group) {\n group.children.push(row);\n }\n });\n }\n\n public expandGroup(group: ThyTableGroup) {\n group.expand = !group.expand;\n this.expandStatusMapOfGroup[group.id] = group.expand;\n }\n\n private expandGroups(groups: ThyTableGroup[]) {\n groups.forEach(group => {\n this.expandGroup(group);\n });\n }\n\n private foldGroups(groups: ThyTableGroup[]) {\n groups.forEach(group => {\n this.expandGroup(group);\n });\n }\n\n private updateScrollClass() {\n const scrollElement = this.tableScrollElement;\n const maxScrollLeft = scrollElement.scrollWidth - scrollElement.offsetWidth;\n const scrollX = scrollElement.scrollLeft;\n const lastScrollClassName = this.scrollClassName;\n this.scrollClassName = '';\n if (scrollElement.scrollWidth > scrollElement.clientWidth) {\n if (scrollX >= maxScrollLeft) {\n this.scrollClassName = css.tableScrollRight;\n } else if (scrollX === 0) {\n this.scrollClassName = css.tableScrollLeft;\n } else {\n this.scrollClassName = css.tableScrollMiddle;\n }\n }\n if (lastScrollClassName) {\n this.renderer.removeClass(this.tableScrollElement, lastScrollClassName);\n }\n if (this.scrollClassName) {\n this.renderer.addClass(this.tableScrollElement, this.scrollClassName);\n }\n }\n\n ngOnInit() {\n this.updateHostClassService.initializeElement(this.tableElementRef.nativeElement);\n this._setClass(true);\n this.initialized = true;\n\n merge(this.viewportRuler.change(200), of(null).pipe(delay(200)))\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this._refreshColumns();\n this.updateScrollClass();\n this.cdr.detectChanges();\n });\n\n this.ngZone.runOutsideAngular(() => {\n this.scroll$.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n this.updateScrollClass();\n });\n });\n }\n\n private buildSkeletonColumns() {\n this.skeletonColumns = [];\n\n this.columns.forEach((column: ThyTableColumnComponent, index: number) => {\n const item = {\n type: this.thyColumnSkeletonTypes[index] || ThyTableColumnSkeletonType.default,\n width: column.width || 'auto'\n };\n this.skeletonColumns = [...this.skeletonColumns, item];\n });\n }\n\n ngAfterViewInit(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.rows.changes\n .pipe(\n startWith(this.rows),\n switchMap(\n () =>\n new Observable<Event>(subscriber =>\n this.ngZone.runOutsideAngular(() =>\n merge(\n ...this.rows.map(row =>\n fromEvent(\n row.nativeElement,\n // Note: there's no need to add touch, pointer and mouse event listeners together.\n // There can be any number of rows, which will lead to adding N * 3 event listeners.\n // According to the spec (https://www.w3.org/TR/pointerevents/#examples), we can use feature detection\n // to determine if pointer events are available. If pointer events are available, we have to listen only\n // to the `pointerdown` event. Otherwise, we have to determine if we're on a touch device or not.\n // Touch events are handled earlier than mouse events, tho not all user agents dispatch mouse events\n // after touch events. See the spec: https://www.w3.org/TR/touch-events/#mouse-events.\n window.PointerEvent\n ? 'pointerdown'\n : 'ontouchstart' in row.nativeElement\n ? 'touchstart'\n : 'mousedown',\n // Note: since Chrome 56 defaults document level `touchstart` listener to passive.\n // The element `touchstart` listener is not passive by default\n // We never call `preventDefault()` on it, so we're safe making it passive too.\n <AddEventListenerOptions>passiveEventListenerOptions\n )\n )\n ).subscribe(subscriber)\n )\n )\n ),\n takeUntil(this.ngUnsubscribe$)\n )\n .subscribe(event => {\n if (!this.draggable) {\n event.stopPropagation();\n }\n });\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n const modeChange = simpleChanges.thyMode;\n const thyGroupsChange = simpleChanges.thyGroups;\n const isGroupMode = modeChange && modeChange.currentValue === 'group';\n if (isGroupMode && thyGroupsChange && thyGroupsChange.firstChange) {\n this.buildGroups(thyGroupsChange.currentValue);\n this.buildModel();\n }\n\n if (this._diff) {\n const changes = this._diff.diff(this.model);\n this._applyDiffChanges(changes);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this._destroyInvalidAttribute();\n }\n}\n","<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list模式下没有直接使用item模板,是因为使用了模板影响了Angular的依赖树,导致CdkDragDrop排序失效,目前这样修改可以暂时解决线上不能排序的问题,Tree模式的排序暂时不支持 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyPaginationModule } from 'ngx-tethys/pagination';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThySwitchModule } from 'ngx-tethys/switch';\nimport { ThySkeletonModule } from 'ngx-tethys/skeleton';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { TableRowDragDisabledPipe } from './pipes/drag.pipe';\nimport { TableIsValidModelValuePipe } from './pipes/table.pipe';\nimport { ThyTableColumnComponent } from './table-column.component';\nimport { ThyTableComponent } from './table.component';\nimport { ThyTableSkeletonComponent } from './table-skeleton.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThyPaginationModule,\n ThySwitchModule,\n ThyLoadingModule,\n ThyEmptyModule,\n ThySharedModule,\n ThySkeletonModule,\n ThyIconModule,\n DragDropModule,\n ScrollingModule,\n ThyTableComponent,\n ThyTableColumnComponent,\n TableIsValidModelValuePipe,\n TableRowDragDisabledPipe,\n ThyTableSkeletonComponent\n ],\n exports: [ThyTableComponent, ThyTableColumnComponent, ThyTableSkeletonComponent]\n})\nexport class ThyTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-table.mjs","sources":["../../../src/table/table.interface.ts","../../../src/table/table-column.component.ts","../../../src/table/pipes/drag.pipe.ts","../../../src/table/pipes/table.pipe.ts","../../../src/table/enums/column-skeleton-type.ts","../../../src/table/table-skeleton.component.ts","../../../src/table/table-skeleton.component.html","../../../src/table/table.component.ts","../../../src/table/table.component.html","../../../src/table/table.module.ts","../../../src/table/ngx-tethys-table.ts"],"sourcesContent":["import { EventEmitter, TemplateRef } from '@angular/core';\nimport { ThyTableColumnSkeletonType } from './enums';\n\nexport enum ThyTableSortDirection {\n default = '',\n asc = 'asc',\n desc = 'desc'\n}\nexport interface ThyTableColumn {\n key: string;\n model: string;\n title: string;\n type: string;\n selections: any;\n width: string | number;\n className: string;\n headerClassName: string;\n disabled: boolean;\n defaultText: string;\n expand: boolean;\n templateRef: TemplateRef<any>;\n headerTemplateRef: TemplateRef<any>;\n fixed?: 'left' | 'right';\n left?: number;\n right?: number;\n sortable?: boolean;\n // 操作列\n operational?: boolean;\n // 次要列\n secondary?: boolean;\n sortDirection?: ThyTableSortDirection;\n sortChange?: EventEmitter<ThyTableSortEvent>;\n}\n\nexport interface ThyPage {\n index?: number;\n size?: number;\n total?: number;\n sizeOptions?: number[];\n}\n\nexport interface ThyTableEmptyOptions {\n message?: string;\n translationKey?: string;\n translationValues?: any;\n entityName?: string;\n entityNameTranslateKey?: string;\n iconName?: string;\n size?: string;\n marginTop?: string;\n topAuto?: string;\n container?: TemplateRef<any>;\n}\n\nexport type PageChangedEvent = ThyPageChangedEvent;\nexport interface ThyPageChangedEvent {\n itemsPerPage: number;\n page: number;\n}\n\nexport interface ThyTableEvent {\n event: Event;\n row: any;\n}\n\nexport interface ThyMultiSelectEvent extends ThyTableEvent {\n rows: any[];\n}\n\nexport interface ThyRadioSelectEvent {\n event: Event;\n row: any;\n}\n\nexport interface ThySwitchEvent extends ThyTableEvent {\n refresh?: Function;\n}\n\nexport interface ThyTableDraggableEvent {\n oldIndex?: number;\n newIndex?: number;\n model?: any;\n models?: Array<any>;\n [key: string]: any;\n}\n\nexport interface ThyTableSortEvent {\n event: Event;\n key: string;\n direction: ThyTableSortDirection;\n}\n\nexport interface ThyTableRowEvent {\n event: Event;\n row: any;\n}\n\nexport interface ThyTableSkeletonColumn {\n width: number | string;\n type: ThyTableColumnSkeletonType;\n}\n","import { _isNumberValue } from '@angular/cdk/coercion';\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { InputBoolean } from 'ngx-tethys/core';\nimport { coerceCssPixelValue, isArray, isObject } from 'ngx-tethys/util';\nimport { ThyTableSortDirection, ThyTableSortEvent } from './table.interface';\n\nexport interface IThyTableColumnParentComponent {\n rowKey: string;\n updateColumnSelections(key: string, selections: any): void;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const THY_TABLE_COLUMN_PARENT_COMPONENT = new InjectionToken<IThyTableColumnParentComponent>('THY_TABLE_COLUMN_PARENT_COMPONENT');\n\nexport type FixedDirection = 'left' | 'right';\n\n/**\n * 表格列组件\n * @name thy-table-column\n * @order 20\n */\n@Component({\n selector: 'thy-table-column',\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class ThyTableColumnComponent implements OnInit {\n /**\n * 设置数据属性 Key,读取数组中对象的当前 Key 值\n * @type string\n */\n @Input('thyModelKey') model = '';\n\n /**\n * 设置列名,显示在表头\n * @type string\n */\n @Input('thyTitle') title = '';\n\n /**\n * 设置列的特殊类型,序列号、选择框、单选框、切换按钮\n * @type string\n */\n @Input('thyType') type = '';\n\n public width: string = '';\n\n /**\n * 设置列的宽度\n */\n @Input()\n set thyWidth(value: string | number) {\n this.width = coerceCssPixelValue(value);\n }\n\n public minWidth: string = '';\n\n /**\n * 设置列的最小宽度\n */\n @Input()\n set thyMinWidth(value: string | number) {\n this.minWidth = coerceCssPixelValue(value);\n }\n\n /**\n * 设置列的样式\n */\n @Input('thyClassName') className = '';\n\n /**\n * 设置列头部的 Class,即 th 元素上的样式\n * @type string\n */\n @Input('thyHeaderClassName') headerClassName = '';\n\n /**\n * 设置自定义类型的禁用状态\n * @type boolean\n */\n @Input('thyDisabled') @InputBoolean() disabled = false;\n\n /**\n * thyType 为 checkbox 或者 radio 类型时选中的数据 ,支持单个对象,单个 Id,同时支持多个 Id,多个对象\n */\n @Input('thySelections')\n set selections(value: any) {\n if (value) {\n this._selections = isArray(value) ? value : [value];\n this._selections = this._selections.map((item: string | number | object) => {\n return isObject(item) ? item[this.parent.rowKey] : item;\n });\n if (!this._firstChange) {\n this.parent.updateColumnSelections(this.key, this._selections);\n }\n }\n }\n\n get selections() {\n return this._selections;\n }\n /**\n * 设置数据为空的时候显示的文本\n * @type string\n */\n @Input('thyDefaultText') defaultText = '';\n\n /**\n * 设置 Tree 模式下折叠展开按钮展示列,不传默认第一列\n */\n @Input('thyExpand') @InputBoolean() expand = false;\n\n public sortable: boolean;\n\n /**\n * 是否开启列排序功能(开启时 thyModelKey 为 必传)\n * @default false\n */\n @Input()\n @InputBoolean()\n set thySortable(value: boolean) {\n if (value) {\n if (this.model) {\n this.sortable = true;\n } else {\n throw new Error(`thyModelKey is required when sortable`);\n }\n } else {\n this.sortable = false;\n }\n }\n\n /**\n * 默认列排序顺序\n * @type 'asc' | 'desc' | ''\n */\n @Input('thySortDirection') sortDirection = ThyTableSortDirection.default;\n\n /**\n * 设置固定列\n */\n @Input('thyFixed') fixed: FixedDirection;\n\n /**\n * 当前列是否是操作列,设置为 true 时会追加 thy-operation-links 样式类,文字居中\n * @default false\n */\n @Input('thyOperational') @InputBoolean() operational: boolean | string;\n\n /**\n * 当前列是否是次要列,设置为 true 时会追加 thy-table-column-secondary 样式类,文字颜色为 $gray-600\n * @default false\n */\n @Input('thySecondary') @InputBoolean() secondary: boolean | string;\n\n /**\n * 列排序修改事件\n */\n @Output('thySortChange') sortChange: EventEmitter<ThyTableSortEvent> = new EventEmitter<ThyTableSortEvent>();\n\n @ContentChild('header', { static: true }) headerTemplateRef: TemplateRef<any>;\n\n @ContentChild('cell', { static: true }) cellTemplateRef: TemplateRef<any>;\n\n @ContentChild(TemplateRef, { static: true })\n set templateRef(value: TemplateRef<any>) {\n if (value) {\n if (!this.headerTemplateRef && !this.cellTemplateRef) {\n this.cellTemplateRef = value;\n }\n }\n }\n\n public key?: string;\n\n public left: number;\n\n public right: number;\n\n private _selections: any;\n\n private _firstChange = true;\n\n constructor(\n private el: ElementRef,\n @Optional()\n @Inject(THY_TABLE_COLUMN_PARENT_COMPONENT)\n public parent: IThyTableColumnParentComponent\n ) {}\n\n ngOnInit() {\n this.key = this._generateKey();\n this._firstChange = false;\n }\n\n private _generateKey() {\n return '[$$column]' + Math.random().toString(16).slice(2, 10);\n }\n}\n","import { SafeAny } from 'ngx-tethys/types';\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @private\n */\n@Pipe({\n name: 'tableRowDragDisabled',\n standalone: true\n})\nexport class TableRowDragDisabledPipe implements PipeTransform {\n transform(item: SafeAny, dragDisabledPredicate: (item: SafeAny) => boolean): boolean {\n return dragDisabledPredicate(item);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @private\n */\n@Pipe({\n name: 'isValidModelValue',\n standalone: true\n})\nexport class TableIsValidModelValuePipe implements PipeTransform {\n transform(value: any): boolean {\n return value !== '' && value !== undefined && value !== null;\n }\n}\n","export enum ThyTableColumnSkeletonType {\n title = 'title',\n member = 'member',\n default = 'default',\n checkbox = 'checkbox'\n}\n","import { NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { InputBoolean, InputCssPixel } from 'ngx-tethys/core';\nimport { ThySkeletonCircleComponent, ThySkeletonRectangleComponent } from 'ngx-tethys/skeleton';\nimport { ThyTableSkeletonColumn } from './table.interface';\nimport { ThyViewOutletDirective } from 'ngx-tethys/shared';\nimport { ThyTableColumnSkeletonType } from './enums';\nimport { ThyTableSize, ThyTableTheme } from './table.component';\n\nconst COLUMN_COUNT = 5;\n\n/**\n * 表格的骨架屏组件\n * @name thy-table-skeleton\n */\n@Component({\n selector: 'thy-table-skeleton',\n templateUrl: './table-skeleton.component.html',\n host: {\n class: 'thy-table-skeleton'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgFor, NgClass, NgIf, NgTemplateOutlet, ThyViewOutletDirective, ThySkeletonRectangleComponent, ThySkeletonCircleComponent]\n})\nexport class ThyTableSkeletonComponent implements AfterViewInit {\n @ViewChild('titleTemplate') titleTemplate: ElementRef<HTMLElement>;\n\n @ViewChild('memberTemplate') memberTemplate: ElementRef<HTMLElement>;\n\n @ViewChild('defaultTemplate') defaultTemplate: ElementRef<HTMLElement>;\n\n @ViewChild('checkboxTemplate') checkboxTemplate: ElementRef<HTMLElement>;\n\n /**\n * 骨架边框圆角\n */\n @Input()\n @InputCssPixel()\n thyBorderRadius: string | number;\n\n /**\n * 表格内容骨架高度\n */\n @Input()\n @InputCssPixel()\n thyRowHeight: string | number = '20px';\n\n /**\n * 是否开启动画\n * @default true\n */\n @Input()\n @InputBoolean()\n thyAnimated: boolean = true;\n\n /**\n * 动画速度\n */\n @Input() thyAnimatedInterval: string;\n\n /**\n * 骨架主色\n */\n @Input() thyPrimaryColor: string;\n\n /**\n * 骨架次色\n */\n @Input() thySecondaryColor: string;\n\n rowCount: number[] = [];\n\n /**\n * 行数\n */\n @Input()\n set thyRowCount(value: number | string) {\n this.rowCount = Array.from({ length: +value });\n }\n\n /**\n * 是否展示骨架头\n * @default false\n */\n @Input() @InputBoolean() thyHeadless = false;\n\n /**\n * 骨架屏的风格\n * @type default | bordered | boxed\n */\n @Input() thyTheme: ThyTableTheme = 'default';\n\n /**\n * 骨架屏的大小\n * @type xs | sm | md | lg | xlg | default\n * @default md\n */\n @Input() thySize: ThyTableSize = 'md';\n\n /**\n * 设置表格最小宽度\n */\n @Input()\n @InputCssPixel()\n thyMinWidth: string | number;\n\n /**\n * 表格列骨架的配置项,支持配置列宽、骨架类型\n * @type ThyTableSkeletonColumn[]\n */\n @Input() set thyColumns(columns: ThyTableSkeletonColumn[]) {\n if (columns && columns.length) {\n this.columns = columns;\n } else {\n this.columns = [...this.defaultColumns];\n }\n }\n\n public titleHeight = '20px';\n\n public titleWidth = '50px';\n\n public checkboxWidth = '20px';\n\n public avatarSize = '24px';\n\n public columnType = ThyTableColumnSkeletonType;\n\n public skeletonColumnsMap: {\n [key: string]: ElementRef<HTMLElement>;\n } = {};\n\n get tableClassMap() {\n return {\n table: true,\n 'table-bordered': this.thyTheme === 'bordered',\n 'table-boxed': this.thyTheme === 'boxed',\n [`table-${this.thySize}`]: !!this.thySize\n };\n }\n\n private defaultColumns = Array.from({ length: COLUMN_COUNT }).map((item, index: number) => {\n if (index === 0) {\n return {\n width: '40%',\n type: ThyTableColumnSkeletonType.title\n };\n } else if (index === 1) {\n return {\n width: '17%',\n type: ThyTableColumnSkeletonType.member\n };\n } else {\n return {\n width: 'auto',\n type: ThyTableColumnSkeletonType.default\n };\n }\n });\n\n public columns: ThyTableSkeletonColumn[] = [...this.defaultColumns];\n\n public trackByFn(index: number) {\n return index;\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n this.skeletonColumnsMap = {\n [ThyTableColumnSkeletonType.title]: this.titleTemplate,\n [ThyTableColumnSkeletonType.member]: this.memberTemplate,\n [ThyTableColumnSkeletonType.checkbox]: this.checkboxTemplate\n };\n this.cdr.detectChanges();\n }\n}\n","<table [ngClass]=\"tableClassMap\" [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns; trackBy: trackByFn\" [width]=\"column.width\" />\n </colgroup>\n <ng-container *ngIf=\"!thyHeadless\">\n <thead>\n <tr>\n <th *ngFor=\"let column of columns; trackBy: trackByFn\">\n <thy-skeleton-rectangle\n [thyRowWidth]=\"column?.type === columnType.checkbox ? checkboxWidth : titleWidth\"\n [thyRowHeight]=\"titleHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyTheme === 'bordered' || thyTheme === 'boxed' ? '#eee' : thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n </th>\n </tr>\n </thead>\n </ng-container>\n <tbody>\n <ng-container *ngFor=\"let item of rowCount; let i = index\">\n <tr>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByFn\">\n <td>\n <ng-container\n *thyViewOutlet=\"\n skeletonColumnsMap[column.type] || defaultTemplate\n context:{\n trIndex: i,\n }\n \">\n </ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n</table>\n\n<ng-template #titleTemplate let-trIndex=\"trIndex\">\n <div class=\"d-flex align-items-center\">\n <thy-skeleton-rectangle\n class=\"mr-2 flex-shrink-0\"\n [thyRowWidth]=\"checkboxWidth\"\n [thyRowHeight]=\"thyRowHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n\n <ng-container\n *thyViewOutlet=\"defaultTemplate;\n context:{\n rowWidth: trIndex % 3 === 0 ? '75%' : trIndex % 3 === 1 ? '100%' : trIndex % 3 === 2 ? '65%' : '',\n }\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #checkboxTemplate>\n <thy-skeleton-rectangle\n [thyRowWidth]=\"checkboxWidth\"\n [thyRowHeight]=\"thyRowHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n</ng-template>\n\n<ng-template #memberTemplate>\n <div class=\"d-flex align-items-center\">\n <thy-skeleton-circle\n class=\"mr-2 flex-shrink-0\"\n [thySize]=\"avatarSize\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-circle>\n\n <ng-container *thyViewOutlet=\"defaultTemplate\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-rowWidth=\"rowWidth\">\n <thy-skeleton-rectangle\n [thyRowWidth]=\"rowWidth\"\n [thyRowHeight]=\"thyRowHeight\"\n [thyBorderRadius]=\"thyBorderRadius\"\n [thyAnimated]=\"thyAnimated\"\n [thyAnimatedInterval]=\"thyAnimatedInterval\"\n [thyPrimaryColor]=\"thyPrimaryColor\"\n [thySecondaryColor]=\"thySecondaryColor\"></thy-skeleton-rectangle>\n</ng-template>\n","import {\n Constructor,\n InputBoolean,\n InputCssPixel,\n InputNumber,\n MixinBase,\n mixinUnsubscribe,\n ThyUnsubscribe,\n UpdateHostClassService\n} from 'ngx-tethys/core';\nimport { Dictionary, SafeAny } from 'ngx-tethys/types';\nimport { coerceBooleanProperty, get, helpers, isString, keyBy, set } from 'ngx-tethys/util';\nimport { EMPTY, fromEvent, merge, Observable, of } from 'rxjs';\nimport { delay, startWith, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { CdkDrag, CdkDragDrop, CdkDragEnd, CdkDragStart, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ViewportRuler } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { DOCUMENT, isPlatformServer, NgClass, NgFor, NgIf, NgTemplateOutlet, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n IterableChangeRecord,\n IterableChanges,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { IThyTableColumnParentComponent, THY_TABLE_COLUMN_PARENT_COMPONENT, ThyTableColumnComponent } from './table-column.component';\nimport {\n PageChangedEvent,\n ThyMultiSelectEvent,\n ThyPage,\n ThyRadioSelectEvent,\n ThySwitchEvent,\n ThyTableSkeletonColumn,\n ThyTableDraggableEvent,\n ThyTableEmptyOptions,\n ThyTableEvent,\n ThyTableRowEvent,\n ThyTableSortDirection,\n ThyTableSortEvent\n} from './table.interface';\nimport { TableRowDragDisabledPipe } from './pipes/drag.pipe';\nimport { TableIsValidModelValuePipe } from './pipes/table.pipe';\nimport { ThyPaginationComponent } from 'ngx-tethys/pagination';\nimport { ThyTableSkeletonComponent } from './table-skeleton.component';\nimport { ThyEmptyComponent } from 'ngx-tethys/empty';\nimport { ThySwitchComponent } from 'ngx-tethys/switch';\nimport { FormsModule } from '@angular/forms';\nimport { ThyDragDropDirective, ThyContextMenuDirective } from 'ngx-tethys/shared';\nimport { ThyIconComponent } from 'ngx-tethys/icon';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { ThyTableColumnSkeletonType } from './enums';\n\nexport type ThyTableTheme = 'default' | 'bordered' | 'boxed';\n\nexport type ThyTableMode = 'list' | 'group' | 'tree';\n\nexport type ThyTableSize = 'md' | 'sm' | 'xs' | 'lg' | 'xlg' | 'default';\n\nexport enum ThyFixedDirection {\n left = 'left',\n right = 'right'\n}\n\ninterface ThyTableGroup<T = unknown> {\n id?: string;\n expand?: boolean;\n children?: object[];\n origin?: T;\n}\n\nconst tableThemeMap = {\n default: 'table-default',\n bordered: 'table-bordered',\n boxed: 'table-boxed'\n};\n\nconst customType = {\n index: 'index',\n checkbox: 'checkbox',\n radio: 'radio',\n switch: 'switch'\n};\n\nconst css = {\n tableBody: 'thy-table-body',\n tableScrollLeft: 'thy-table-scroll-left',\n tableScrollRight: 'thy-table-scroll-right',\n tableScrollMiddle: 'thy-table-scroll-middle'\n};\n\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n\nconst _MixinBase: Constructor<ThyUnsubscribe> & typeof MixinBase = mixinUnsubscribe(MixinBase);\n\n/**\n * 表格组件\n * @name thy-table\n * @order 10\n */\n@Component({\n selector: 'thy-table',\n templateUrl: './table.component.html',\n providers: [\n {\n provide: THY_TABLE_COLUMN_PARENT_COMPONENT,\n useExisting: ThyTableComponent\n },\n UpdateHostClassService\n ],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-table',\n '[class.thy-table-bordered]': `theme === 'bordered'`,\n '[class.thy-table-boxed]': `theme === 'boxed'`,\n '[class.thy-table-fixed-header]': 'thyHeaderFixed'\n },\n standalone: true,\n imports: [\n CdkScrollable,\n NgClass,\n NgFor,\n NgIf,\n NgTemplateOutlet,\n ThyIconComponent,\n ThyDragDropDirective,\n CdkDropList,\n CdkDrag,\n ThyContextMenuDirective,\n NgStyle,\n FormsModule,\n ThySwitchComponent,\n ThyEmptyComponent,\n ThyTableSkeletonComponent,\n ThyPaginationComponent,\n TableIsValidModelValuePipe,\n TableRowDragDisabledPipe\n ]\n})\nexport class ThyTableComponent extends _MixinBase implements OnInit, OnChanges, AfterViewInit, OnDestroy, IThyTableColumnParentComponent {\n public customType = customType;\n\n public model: object[] = [];\n\n public groups: ThyTableGroup[] = [];\n\n public rowKey = '_id';\n\n public groupBy: string;\n\n public mode: ThyTableMode = 'list';\n\n public theme: ThyTableTheme = 'default';\n\n public className = '';\n\n public size: ThyTableSize = 'md';\n\n public rowClassName: string | Function;\n\n public loadingDone = true;\n\n public loadingText: string;\n\n public emptyOptions: ThyTableEmptyOptions = {};\n\n public draggable = false;\n\n public selectedRadioRow: SafeAny = null;\n\n public pagination: ThyPage = { index: 1, size: 20, total: 0, sizeOptions: [20, 50, 100] };\n\n public trackByFn: SafeAny;\n\n public wholeRowSelect = false;\n\n public fixedDirection = ThyFixedDirection;\n\n public hasFixed = false;\n\n public columns: ThyTableColumnComponent[] = [];\n\n private _diff: IterableDiffer<SafeAny>;\n\n private initialized = false;\n\n private _oldThyClassName = '';\n\n private scrollClassName = css.tableScrollLeft;\n\n private get tableScrollElement(): HTMLElement {\n return this.elementRef.nativeElement.getElementsByClassName(css.tableBody)[0] as HTMLElement;\n }\n\n private get scroll$() {\n return merge(this.tableScrollElement ? fromEvent<MouseEvent>(this.tableScrollElement, 'scroll') : EMPTY);\n }\n\n /**\n * 设置数据为空时展示的模板\n * @type TemplateRef\n */\n @ContentChild('empty') emptyTemplate: TemplateRef<SafeAny>;\n\n @ViewChild('table', { static: true }) tableElementRef: ElementRef<SafeAny>;\n\n @ViewChildren('rows', { read: ElementRef }) rows: QueryList<ElementRef<HTMLElement>>;\n\n /**\n * 表格展示方式,列表/分组/树\n * @type list | group | tree\n * @default list\n */\n @Input()\n set thyMode(value: ThyTableMode) {\n this.mode = value || this.mode;\n }\n\n /**\n * thyMode的值为 `group` 时分组的 Key\n */\n @Input()\n set thyGroupBy(value: string) {\n this.groupBy = value;\n }\n\n /**\n * 设置每行数据的唯一标识属性名\n * @default _id\n */\n @Input()\n set thyRowKey(value: SafeAny) {\n this.rowKey = value || this.rowKey;\n }\n\n /**\n * 分组数据源\n */\n @Input()\n set thyGroups(value: SafeAny) {\n if (this.mode === 'group') {\n this.buildGroups(value);\n }\n }\n\n /**\n * 数据源\n */\n @Input()\n set thyModel(value: SafeAny) {\n this.model = value || [];\n this._diff = this._differs.find(this.model).create();\n this._initializeDataModel();\n\n if (this.mode === 'group') {\n this.buildModel();\n }\n }\n\n /**\n * 表格的显示风格,`bordered` 时头部有背景色且分割线区别明显\n * @type default | bordered | boxed\n * @default default\n */\n @Input()\n set thyTheme(value: ThyTableTheme) {\n this.theme = value || this.theme;\n this._setClass();\n }\n\n /**\n * 表格的大小\n * @type xs | sm | md | lg | xlg | default\n * @default md\n */\n @Input()\n set thySize(value: ThyTableSize) {\n this.size = value || this.size;\n this._setClass();\n }\n\n /**\n * 设置表格最小宽度,一般是适用于设置列宽为百分之或auto时限制表格最小宽度'\n */\n @Input()\n @InputCssPixel()\n thyMinWidth: string | number;\n\n /**\n * 设置为 fixed 布局表格,设置 fixed 后,列宽将严格按照设置宽度展示,列宽将不会根据表格内容自动调整\n * @default false\n */\n @Input() @InputBoolean() thyLayoutFixed: boolean;\n\n /**\n * 是否表头固定,若设置为 true, 需要同步设置 thyHeight\n * @default false\n */\n @Input() @InputBoolean() thyHeaderFixed: boolean;\n\n /**\n * 表格的高度\n */\n @HostBinding('style.height')\n @Input()\n @InputCssPixel()\n thyHeight: string;\n\n /**\n * 设置表格的样式\n */\n @Input()\n set thyClassName(value: string) {\n const list = this.className.split(' ').filter(a => a.trim());\n const index: number = list.findIndex(item => item === this._oldThyClassName);\n if (index !== -1) {\n list.splice(index, 1, value);\n } else {\n list.push(value);\n }\n this._oldThyClassName = value;\n this.className = list.join(' ');\n }\n\n /**\n * 设置表格行的样式,传入函数,支持 row、index\n * @type string | (row, index) => string\n */\n @Input()\n set thyRowClassName(value: string | Function) {\n this.rowClassName = value;\n }\n\n /**\n * 设置加载状态\n * @default true\n */\n @Input()\n @InputBoolean()\n set thyLoadingDone(value: boolean) {\n this.loadingDone = value;\n }\n\n /**\n * 设置加载时显示的文本,已废弃\n * @deprecated\n */\n @Input()\n set thyLoadingText(value: string) {\n this.loadingText = value;\n }\n\n /**\n * 配置空状态组件\n */\n @Input()\n set thyEmptyOptions(value: ThyTableEmptyOptions) {\n this.emptyOptions = value;\n }\n\n /**\n * 是否开启行拖拽\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyDraggable(value: boolean) {\n this.draggable = coerceBooleanProperty(value);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && this.draggable && this.mode === 'tree') {\n throw new Error('Tree mode sorting is not supported');\n }\n }\n\n /**\n * 设置当前页码\n * @default 1\n */\n @Input()\n @InputNumber()\n set thyPageIndex(value: number) {\n this.pagination.index = value;\n }\n\n /**\n * 设置每页显示数量\n * @default 20\n */\n @Input()\n @InputNumber()\n set thyPageSize(value: number) {\n this.pagination.size = value;\n }\n\n /**\n * 设置总页数\n */\n @Input()\n @InputNumber()\n set thyPageTotal(value: number) {\n this.pagination.total = value;\n }\n\n /**\n * 选中当前行是否自动选中 Checkbox,不开启时只有点击 Checkbox 列时才会触发选中\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyWholeRowSelect(value: boolean) {\n if (value) {\n this.className += ' table-hover';\n }\n this.wholeRowSelect = value;\n }\n\n /**\n * 是否显示表格头\n * @default false\n */\n @Input() @InputBoolean() thyHeadless = false;\n\n /**\n * 是否显示表格头,已废弃,请使用 thyHeadless\n * @deprecated please use thyHeadless\n */\n @Input()\n @InputBoolean()\n set thyShowHeader(value: boolean) {\n this.thyHeadless = !value;\n }\n\n /**\n * 是否显示左侧 Total\n */\n @Input('thyShowTotal') @InputBoolean() showTotal = false;\n\n /**\n * 是否显示调整每页显示条数下拉框\n */\n @Input('thyShowSizeChanger') @InputBoolean() showSizeChanger = false;\n\n /**\n * 每页显示条数下拉框可选项\n * @type number[]\n */\n @Input('thyPageSizeOptions')\n set pageSizeOptions(value: number[]) {\n this.pagination.sizeOptions = value;\n }\n\n /**\n * thyMode 为 tree 时,设置 Tree 树状数据展示时的缩进\n */\n @Input() @InputNumber() thyIndent = 20;\n\n /**\n * thyMode 为 tree 时,设置 Tree 树状数据对象中的子节点 Key\n * @type string\n */\n @Input() thyChildrenKey = 'children';\n\n /**\n * 开启 Hover 后显示操作,默认不显示操作区内容,鼠标 Hover 时展示\n * @default false\n */\n @HostBinding('class.thy-table-hover-display-operation')\n @Input()\n @InputBoolean()\n thyHoverDisplayOperation: boolean;\n\n @Input() thyDragDisabledPredicate: (item: SafeAny) => boolean = () => false;\n\n /**\n * 表格列的骨架类型\n * @type ThyTableColumnSkeletonType[]\n */\n @Input() thyColumnSkeletonTypes: ThyTableColumnSkeletonType[] = [\n ThyTableColumnSkeletonType.title,\n ThyTableColumnSkeletonType.member,\n ThyTableColumnSkeletonType.default\n ];\n\n /**\n * 切换组件回调事件\n */\n @Output() thyOnSwitchChange: EventEmitter<ThySwitchEvent> = new EventEmitter<ThySwitchEvent>();\n\n /**\n * 表格分页回调事件\n */\n @Output() thyOnPageChange: EventEmitter<PageChangedEvent> = new EventEmitter<PageChangedEvent>();\n\n /**\n * 表格分页当前页改变回调事件\n */\n @Output() thyOnPageIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Output() thyOnPageSizeChange: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * 多选回调事件\n */\n @Output() thyOnMultiSelectChange: EventEmitter<ThyMultiSelectEvent> = new EventEmitter<ThyMultiSelectEvent>();\n\n /**\n * 单选回调事件\n */\n @Output() thyOnRadioSelectChange: EventEmitter<ThyRadioSelectEvent> = new EventEmitter<ThyRadioSelectEvent>();\n\n /**\n * 拖动修改事件\n */\n @Output() thyOnDraggableChange: EventEmitter<ThyTableDraggableEvent> = new EventEmitter<ThyTableDraggableEvent>();\n\n /**\n * 表格行点击触发事件\n */\n @Output() thyOnRowClick: EventEmitter<ThyTableRowEvent> = new EventEmitter<ThyTableRowEvent>();\n\n /**\n * 列排序修改事件\n */\n @Output() thySortChange: EventEmitter<ThyTableSortEvent> = new EventEmitter<ThyTableSortEvent>();\n\n @Output() thyOnRowContextMenu: EventEmitter<ThyTableEvent> = new EventEmitter<ThyTableEvent>();\n\n @ContentChild('group', { static: true }) groupTemplate: TemplateRef<SafeAny>;\n\n @ContentChildren(ThyTableColumnComponent)\n set listOfColumnComponents(components: QueryList<ThyTableColumnComponent>) {\n if (components) {\n this.columns = components.toArray();\n this.hasFixed = !!this.columns.find(item => {\n return item.fixed === this.fixedDirection.left || item.fixed === this.fixedDirection.right;\n });\n this.buildSkeletonColumns();\n this._initializeColumns();\n this._initializeDataModel();\n }\n }\n\n // 数据的折叠展开状态\n public expandStatusMap: Dictionary<boolean> = {};\n\n public expandStatusMapOfGroup: Dictionary<boolean> = {};\n\n private expandStatusMapOfGroupBeforeDrag: Dictionary<boolean> = {};\n\n dragPreviewClass = 'thy-table-drag-preview';\n\n public skeletonColumns: ThyTableSkeletonColumn[] = [];\n\n constructor(\n public elementRef: ElementRef,\n private _differs: IterableDiffers,\n private viewportRuler: ViewportRuler,\n private updateHostClassService: UpdateHostClassService,\n @Inject(DOCUMENT) private document: SafeAny,\n @Inject(PLATFORM_ID) private platformId: string,\n private ngZone: NgZone,\n private renderer: Renderer2,\n private cdr: ChangeDetectorRef\n ) {\n super();\n this._bindTrackFn();\n }\n\n private _initializeColumns() {\n if (!this.columns.some(item => item.expand === true) && this.columns.length > 0) {\n this.columns[0].expand = true;\n }\n this._initializeColumnFixedPositions();\n }\n\n private _initializeColumnFixedPositions() {\n const leftFixedColumns = this.columns.filter(item => item.fixed === ThyFixedDirection.left);\n leftFixedColumns.forEach((item, index) => {\n const previous = leftFixedColumns[index - 1];\n item.left = previous ? previous.left + parseInt(previous.width.toString(), 10) : 0;\n });\n const rightFixedColumns = this.columns.filter(item => item.fixed === ThyFixedDirection.right).reverse();\n rightFixedColumns.forEach((item, index) => {\n const previous = rightFixedColumns[index - 1];\n item.right = previous ? previous.right + parseInt(previous.width.toString(), 10) : 0;\n });\n }\n\n private _initializeDataModel() {\n this.model.forEach(row => {\n this.columns.forEach(column => {\n this._initialSelections(row, column);\n this._initialCustomModelValue(row, column);\n });\n });\n }\n\n private _initialSelections(row: object, column: ThyTableColumnComponent) {\n if (column.selections) {\n if (column.type === 'checkbox') {\n row[column.key] = column.selections.includes(row[this.rowKey]);\n this.onModelChange(row, column);\n }\n if (column.type === 'radio') {\n if (column.selections.includes(row[this.rowKey])) {\n this.selectedRadioRow = row;\n }\n }\n }\n }\n\n private _initialCustomModelValue(row: object, column: ThyTableColumnComponent) {\n if (column.type === customType.switch) {\n row[column.key] = get(row, column.model);\n }\n }\n\n private _refreshCustomModelValue(row: SafeAny) {\n this.columns.forEach(column => {\n this._initialCustomModelValue(row, column);\n });\n }\n\n private _applyDiffChanges(changes: IterableChanges<SafeAny>) {\n if (changes) {\n changes.forEachAddedItem((record: IterableChangeRecord<SafeAny>) => {\n this._refreshCustomModelValue(record.item);\n });\n }\n }\n\n private _bindTrackFn() {\n this.trackByFn = function (this: SafeAny, index: number, row: SafeAny): SafeAny {\n return row && this.rowKey ? row[this.rowKey] : index;\n }.bind(this);\n }\n\n private _destroyInvalidAttribute() {\n this.model.forEach(row => {\n for (const key in row) {\n if (key.includes('[$$column]')) {\n delete row[key];\n }\n }\n });\n }\n\n private _setClass(first = false) {\n if (!first && !this.initialized) {\n return;\n }\n const classNames: string[] = [];\n if (this.size) {\n classNames.push(`table-${this.size}`);\n }\n if (tableThemeMap[this.theme]) {\n classNames.push(tableThemeMap[this.theme]);\n }\n\n this.updateHostClassService.updateClass(classNames);\n }\n\n public updateColumnSelections(key: string, selections: SafeAny): void {\n const column = this.columns.find(item => item.key === key);\n this.model.forEach(row => {\n this._initialSelections(row, column);\n });\n }\n\n public isTemplateRef(ref: SafeAny) {\n return ref instanceof TemplateRef;\n }\n\n public getModelValue(row: SafeAny, path: string) {\n return get(row, path);\n }\n\n public renderRowClassName(row: SafeAny, index: number) {\n if (!this.rowClassName) {\n return null;\n }\n if (isString(this.rowClassName)) {\n return this.rowClassName;\n } else {\n return (this.rowClassName as Function)(row, index);\n }\n }\n\n public onModelChange(row: SafeAny, column: ThyTableColumnComponent) {\n if (column.model) {\n set(row, column.model, row[column.key]);\n }\n }\n\n public onStopPropagation(event: Event) {\n if (this.wholeRowSelect) {\n event.stopPropagation();\n }\n }\n\n public onPageChange(event: PageChangedEvent) {\n this.thyOnPageChange.emit(event);\n }\n\n public onPageIndexChange(event: number) {\n this.thyOnPageIndexChange.emit(event);\n }\n\n public onPageSizeChange(event: number) {\n this.thyOnPageSizeChange.emit(event);\n }\n\n public onCheckboxChange(row: SafeAny, column: ThyTableColumnComponent) {\n this.onModelChange(row, column);\n this.onMultiSelectChange(null, row, column);\n }\n\n public onMultiSelectChange(event: Event, row: SafeAny, column: ThyTableColumnComponent) {\n const rows = this.model.filter(item => {\n return item[column.key];\n });\n const multiSelectEvent: ThyMultiSelectEvent = {\n event: event,\n row: row,\n rows: rows\n };\n this.thyOnMultiSelectChange.emit(multiSelectEvent);\n }\n\n public onRadioSelectChange(event: Event, row: SafeAny) {\n const radioSelectEvent: ThyRadioSelectEvent = {\n event: event,\n row: row\n };\n this.thyOnRadioSelectChange.emit(radioSelectEvent);\n }\n\n public onSwitchChange(event: Event, row: SafeAny, column: SafeAny) {\n const switchEvent: ThySwitchEvent = {\n event: event,\n row: row,\n refresh: (value: SafeAny) => {\n value = value || row;\n setTimeout(() => {\n value[column.key] = get(value, column.model);\n });\n }\n };\n this.thyOnSwitchChange.emit(switchEvent);\n }\n\n showExpand(row: SafeAny) {\n return row[this.thyChildrenKey] && row[this.thyChildrenKey].length > 0;\n }\n\n isExpanded(row: SafeAny) {\n return this.expandStatusMap[row[this.rowKey]];\n }\n\n iconIndentComputed(level: number) {\n if (this.mode === 'tree') {\n return level * this.thyIndent - 5;\n }\n }\n\n tdIndentComputed(level: number) {\n return {\n position: 'relative',\n paddingLeft: `${(level + 1) * this.thyIndent - 5}px`\n };\n }\n\n expandChildren(row: SafeAny) {\n if (this.isExpanded(row)) {\n this.expandStatusMap[row[this.rowKey]] = false;\n } else {\n this.expandStatusMap[row[this.rowKey]] = true;\n }\n }\n\n onDragGroupStarted(event: CdkDragStart<unknown>) {\n this.expandStatusMapOfGroupBeforeDrag = { ...this.expandStatusMapOfGroup };\n const groups = this.groups.filter(group => group.expand);\n this.foldGroups(groups);\n this.onDragStarted(event);\n this.cdr.detectChanges();\n }\n\n onDragGroupEnd(event: CdkDragEnd<unknown>) {\n const groups = this.groups.filter(group => this.expandStatusMapOfGroupBeforeDrag[group.id]);\n this.expandGroups(groups);\n this.cdr.detectChanges();\n }\n\n private onDragGroupDropped(event: CdkDragDrop<unknown>) {\n const group = this.groups.find(group => {\n return event.item.data.id === group.id;\n });\n if (group) {\n // drag group\n const dragEvent: ThyTableDraggableEvent = {\n model: event.item,\n models: this.groups,\n oldIndex: event.previousIndex,\n newIndex: event.currentIndex\n };\n moveItemInArray(this.groups, event.previousIndex, event.currentIndex);\n this.thyOnDraggableChange.emit(dragEvent);\n } else {\n // drag group children\n const group = this.groups.find(group => {\n return event.item.data[this.groupBy] === group.id;\n });\n const groupIndex =\n event.container.getSortedItems().findIndex(item => {\n return item.data.id === event.item.data[this.groupBy];\n }) + 1;\n const dragEvent: ThyTableDraggableEvent = {\n model: event.item,\n models: group.children,\n oldIndex: event.previousIndex - groupIndex,\n newIndex: event.currentIndex - groupIndex\n };\n moveItemInArray(group.children, dragEvent.oldIndex, dragEvent.newIndex);\n this.thyOnDraggableChange.emit(dragEvent);\n }\n }\n\n onDragStarted(event: CdkDragStart<unknown>) {\n this.ngZone.runOutsideAngular(() =>\n setTimeout(() => {\n const preview = this.document.getElementsByClassName(this.dragPreviewClass)[0];\n const originalTds: HTMLCollection = event.source._dragRef.getPlaceholderElement()?.children;\n if (preview) {\n Array.from(preview?.children).forEach((element: HTMLElement, index: number) => {\n element.style.width = `${originalTds[index]?.clientWidth}px`;\n });\n }\n })\n );\n }\n\n dropListEnterPredicate = (index: number, drag: CdkDrag, drop: CdkDropList) => {\n return drop.getSortedItems()[index].data.group_id === drag.data.group_id;\n };\n\n private onDragModelDropped(event: CdkDragDrop<unknown>) {\n const dragEvent: ThyTableDraggableEvent = {\n model: event.item,\n models: this.model,\n oldIndex: event.previousIndex,\n newIndex: event.currentIndex\n };\n moveItemInArray(this.model, event.previousIndex, event.currentIndex);\n this.thyOnDraggableChange.emit(dragEvent);\n }\n\n onDragDropped(event: CdkDragDrop<unknown>) {\n if (this.mode === 'group') {\n this.onDragGroupDropped(event);\n } else if (this.mode === 'list') {\n this.onDragModelDropped(event);\n }\n }\n\n onColumnHeaderClick(event: Event, column: ThyTableColumnComponent) {\n if (column.sortable) {\n const { sortDirection, model, sortChange } = column;\n let direction;\n if (sortDirection === ThyTableSortDirection.default) {\n direction = ThyTableSortDirection.desc;\n } else if (sortDirection === ThyTableSortDirection.desc) {\n direction = ThyTableSortDirection.asc;\n } else {\n direction = ThyTableSortDirection.default;\n }\n column.sortDirection = direction;\n const sortEvent = { event, key: model, direction };\n sortChange.emit(sortEvent);\n this.thySortChange.emit(sortEvent);\n }\n }\n\n public onRowClick(event: Event, row: SafeAny) {\n const next = this.onRowClickPropagationEventHandler(event, row);\n if (next) {\n if (this.wholeRowSelect) {\n const column = this.columns.find(item => {\n return item.type === customType.checkbox || item.type === customType.radio;\n });\n if (column && !column.disabled) {\n if (column.type === customType.checkbox) {\n row[column.key] = !row[column.key];\n this.onModelChange(row, column);\n this.onMultiSelectChange(event, row, column);\n }\n if (column.type === customType.radio) {\n this.selectedRadioRow = row;\n this.onRadioSelectChange(event, row);\n }\n }\n }\n const rowEvent = {\n event: event,\n row: row\n };\n this.thyOnRowClick.emit(rowEvent);\n }\n }\n\n private onRowClickPropagationEventHandler(event: Event, row: SafeAny): boolean {\n if ((event.target as Element).closest('.tree-expand-icon')) {\n this.expandChildren(row);\n return false;\n }\n return true;\n }\n\n public onRowContextMenu(event: Event, row: SafeAny) {\n const contextMenuEvent: ThyTableEvent = {\n event: event,\n row: row\n };\n this.thyOnRowContextMenu.emit(contextMenuEvent);\n }\n\n private _refreshColumns() {\n const components = this.columns || [];\n const _columns = components.map(component => {\n return {\n width: component.width,\n className: component.className\n };\n });\n\n this.columns.forEach((n, i) => {\n Object.assign(n, _columns[i]);\n });\n }\n\n private buildGroups(originGroups: SafeAny) {\n const originGroupsMap = helpers.keyBy(originGroups, 'id');\n this.groups = [];\n originGroups.forEach((origin: SafeAny) => {\n const group: ThyTableGroup = { id: origin[this.rowKey], children: [], origin };\n\n if (this.expandStatusMapOfGroup.hasOwnProperty(group.id)) {\n group.expand = this.expandStatusMapOfGroup[group.id];\n } else {\n group.expand = !!(originGroupsMap[group.id] as SafeAny).expand;\n }\n\n this.groups.push(group);\n });\n }\n\n private buildModel() {\n const groupsMap = keyBy(this.groups, 'id');\n this.model.forEach(row => {\n const group = groupsMap[row[this.groupBy]];\n if (group) {\n group.children.push(row);\n }\n });\n }\n\n public expandGroup(group: ThyTableGroup) {\n group.expand = !group.expand;\n this.expandStatusMapOfGroup[group.id] = group.expand;\n }\n\n private expandGroups(groups: ThyTableGroup[]) {\n groups.forEach(group => {\n this.expandGroup(group);\n });\n }\n\n private foldGroups(groups: ThyTableGroup[]) {\n groups.forEach(group => {\n this.expandGroup(group);\n });\n }\n\n private updateScrollClass() {\n const scrollElement = this.tableScrollElement;\n const maxScrollLeft = scrollElement.scrollWidth - scrollElement.offsetWidth;\n const scrollX = scrollElement.scrollLeft;\n const lastScrollClassName = this.scrollClassName;\n this.scrollClassName = '';\n if (scrollElement.scrollWidth > scrollElement.clientWidth) {\n if (scrollX >= maxScrollLeft) {\n this.scrollClassName = css.tableScrollRight;\n } else if (scrollX === 0) {\n this.scrollClassName = css.tableScrollLeft;\n } else {\n this.scrollClassName = css.tableScrollMiddle;\n }\n }\n if (lastScrollClassName) {\n this.renderer.removeClass(this.tableScrollElement, lastScrollClassName);\n }\n if (this.scrollClassName) {\n this.renderer.addClass(this.tableScrollElement, this.scrollClassName);\n }\n }\n\n ngOnInit() {\n this.updateHostClassService.initializeElement(this.tableElementRef.nativeElement);\n this._setClass(true);\n this.initialized = true;\n\n merge(this.viewportRuler.change(200), of(null).pipe(delay(200)))\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this._refreshColumns();\n this.updateScrollClass();\n this.cdr.detectChanges();\n });\n\n this.ngZone.runOutsideAngular(() => {\n this.scroll$.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n this.updateScrollClass();\n });\n });\n }\n\n private buildSkeletonColumns() {\n this.skeletonColumns = [];\n\n this.columns.forEach((column: ThyTableColumnComponent, index: number) => {\n const item = {\n type: this.thyColumnSkeletonTypes[index] || ThyTableColumnSkeletonType.default,\n width: column.width || 'auto'\n };\n this.skeletonColumns = [...this.skeletonColumns, item];\n });\n }\n\n ngAfterViewInit(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.rows.changes\n .pipe(\n startWith(this.rows),\n switchMap(\n () =>\n new Observable<Event>(subscriber =>\n this.ngZone.runOutsideAngular(() =>\n merge(\n ...this.rows.map(row =>\n fromEvent(\n row.nativeElement,\n // Note: there's no need to add touch, pointer and mouse event listeners together.\n // There can be any number of rows, which will lead to adding N * 3 event listeners.\n // According to the spec (https://www.w3.org/TR/pointerevents/#examples), we can use feature detection\n // to determine if pointer events are available. If pointer events are available, we have to listen only\n // to the `pointerdown` event. Otherwise, we have to determine if we're on a touch device or not.\n // Touch events are handled earlier than mouse events, tho not all user agents dispatch mouse events\n // after touch events. See the spec: https://www.w3.org/TR/touch-events/#mouse-events.\n window.PointerEvent\n ? 'pointerdown'\n : 'ontouchstart' in row.nativeElement\n ? 'touchstart'\n : 'mousedown',\n // Note: since Chrome 56 defaults document level `touchstart` listener to passive.\n // The element `touchstart` listener is not passive by default\n // We never call `preventDefault()` on it, so we're safe making it passive too.\n <AddEventListenerOptions>passiveEventListenerOptions\n )\n )\n ).subscribe(subscriber)\n )\n )\n ),\n takeUntil(this.ngUnsubscribe$)\n )\n .subscribe(event => {\n if (!this.draggable) {\n event.stopPropagation();\n }\n });\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n const modeChange = simpleChanges.thyMode;\n const thyGroupsChange = simpleChanges.thyGroups;\n const isGroupMode = modeChange && modeChange.currentValue === 'group';\n if (isGroupMode && thyGroupsChange && thyGroupsChange.firstChange) {\n this.buildGroups(thyGroupsChange.currentValue);\n this.buildModel();\n }\n\n if (this._diff) {\n const changes = this._diff.diff(this.model);\n this._applyDiffChanges(changes);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this._destroyInvalidAttribute();\n }\n}\n","<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list模式下没有直接使用item模板,是因为使用了模板影响了Angular的依赖树,导致CdkDragDrop排序失效,目前这样修改可以暂时解决线上不能排序的问题,Tree模式的排序暂时不支持 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyPaginationModule } from 'ngx-tethys/pagination';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThySwitchModule } from 'ngx-tethys/switch';\nimport { ThySkeletonModule } from 'ngx-tethys/skeleton';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { TableRowDragDisabledPipe } from './pipes/drag.pipe';\nimport { TableIsValidModelValuePipe } from './pipes/table.pipe';\nimport { ThyTableColumnComponent } from './table-column.component';\nimport { ThyTableComponent } from './table.component';\nimport { ThyTableSkeletonComponent } from './table-skeleton.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThyPaginationModule,\n ThySwitchModule,\n ThyLoadingModule,\n ThyEmptyModule,\n ThySharedModule,\n ThySkeletonModule,\n ThyIconModule,\n DragDropModule,\n ScrollingModule,\n ThyTableComponent,\n ThyTableColumnComponent,\n TableIsValidModelValuePipe,\n TableRowDragDisabledPipe,\n ThyTableSkeletonComponent\n ],\n exports: [ThyTableComponent, ThyTableColumnComponent, ThyTableSkeletonComponent]\n})\nexport class ThyTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('16.2.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('16.2.2');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
|
package/package.json
CHANGED
package/schematics/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "16.2.
|
|
1
|
+
export declare const VERSION = "16.2.2";
|
package/schematics/version.js
CHANGED