@smartbit4all/ng-client 3.2.45 → 3.2.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +1 -1
- package/esm2020/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
- package/esm2020/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
- package/esm2020/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
- package/esm2020/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +1 -1
- package/esm2020/lib/smart-grid/smart-grid.component.mjs +13 -4
- package/fesm2015/smartbit4all-ng-client.mjs +15 -6
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +12 -3
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +1 -0
- package/lib/smart-grid/smart-grid.component.d.ts +3 -1
- package/package.json +1 -1
- package/smartbit4all-ng-client-3.2.47.tgz +0 -0
- package/smartbit4all-ng-client-3.2.45.tgz +0 -0
|
@@ -18,4 +18,4 @@ export var GridDataAccessConfig;
|
|
|
18
18
|
Invocations: 'INVOCATIONS'
|
|
19
19
|
};
|
|
20
20
|
})(GridDataAccessConfig || (GridDataAccessConfig = {}));
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZERhdGFBY2Nlc3NDb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL2FwaS9ncmlkLWFwaS9tb2RlbC9ncmlkRGF0YUFjY2Vzc0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBMEJILE1BQU0sS0FBVyxvQkFBb0IsQ0FRcEM7QUFSRCxXQUFpQixvQkFBb0I7SUFFcEIsNkJBQVEsR0FBRztRQUNwQixTQUFTLEVBQUUsV0FBdUI7UUFDbEMsVUFBVSxFQUFFLFlBQXdCO1FBQ3BDLFFBQVEsRUFBRSxVQUFzQjtRQUNoQyxXQUFXLEVBQUUsYUFBeUI7S0FDekMsQ0FBQztBQUNOLENBQUMsRUFSZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQVFwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3JpZCBhcGlcbiAqIFRoZSBncmlkIGFwaSBpcyByZXNwb3NpYmxlIGZvciB0aGUgZ3JpZCBjb21wb25lbnRzIHRoYXQgc2hvd3MgYSBsaXN0IG9mIGl0ZW0uIFxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjAuMFxuICogQ29udGFjdDogaW5mb0BpdDRhbGwuaHVcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cblxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhY2tlbmQgb2JqZWN0IHRvIHNldHVwIHRoZSBncmlkIGFjY2VzcyBhcGkuIFRoZSBwYXJhbWV0ZXJpemF0aW9uIGNvbnRhaW4gYWxsIHRoZSBwb3NzaWJsZSBwYXJhbWV0ZXJzIHJlcXVpZXJlZCB0byBpZGVudGlmeSB0aGUgQVBJIHRvIGNhbGwgb3IgZXZlbiB0aGUgSW52b2NhdGlvblJlcXVlc3QgdG8gdXNlLiBSZWdpc3RlciBpbnRvIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBWaWV3IHBhcmFtZXRlcnMgYXMgZ3JpZC5pZGVudGlmaWVyLmNvbmZpZyBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmlkRGF0YUFjY2Vzc0NvbmZpZyB7IFxuICAgIC8qKlxuICAgICAqIFRoZSB1cmkgb2YgdGhlIHRhYmxlIGRhdGEgdGhhdCBjb250YWlucyB0aGUgZGF0YSBvZiB0aGUgbGlzdC5cbiAgICAgKi9cbiAgICBkYXRhVXJpPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHRvIGFjY2VzcyB0aGUgaWRlbnRpZmllciBHcmlkUm93LmRhdGFcbiAgICAgKi9cbiAgICBpZGVudGlmaWVyUGF0aD86IEFycmF5PHN0cmluZz47XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudGVkIGFzIFRSRUUsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSB1c2VkIGFzIGlkIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGlkUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudGVkIGFzIFRSRUUsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSB1c2VkIGFzIHBhcmVudElkIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHBhcmVudElkUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgYXBpQ2xhc3M/OiBzdHJpbmc7XG4gICAga2luZD86IEdyaWREYXRhQWNjZXNzQ29uZmlnLktpbmRFbnVtO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBHcmlkRGF0YUFjY2Vzc0NvbmZpZyB7XG4gICAgZXhwb3J0IHR5cGUgS2luZEVudW0gPSAnVEFCTEVEQVRBJyB8ICdPQkpFQ1RMSVNUJyB8ICdBUElCQVNFRCcgfCAnSU5WT0NBVElPTlMnO1xuICAgIGV4cG9ydCBjb25zdCBLaW5kRW51bSA9IHtcbiAgICAgICAgVGFibGVkYXRhOiAnVEFCTEVEQVRBJyBhcyBLaW5kRW51bSxcbiAgICAgICAgT2JqZWN0bGlzdDogJ09CSkVDVExJU1QnIGFzIEtpbmRFbnVtLFxuICAgICAgICBBcGliYXNlZDogJ0FQSUJBU0VEJyBhcyBLaW5kRW51bSxcbiAgICAgICAgSW52b2NhdGlvbnM6ICdJTlZPQ0FUSU9OUycgYXMgS2luZEVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZE1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9hcGkvZ3JpZC1hcGkvbW9kZWwvZ3JpZE1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdyaWQgYXBpXG4gKiBUaGUgZ3JpZCBhcGkgaXMgcmVzcG9zaWJsZSBmb3IgdGhlIGdyaWQgY29tcG9uZW50cyB0aGF0IHNob3dzIGEgbGlzdCBvZiBpdGVtLiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wLjBcbiAqIENvbnRhY3Q6IGluZm9AaXQ0YWxsLmh1XG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5pbXBvcnQgeyBHcmlkRGF0YUFjY2Vzc0NvbmZpZyB9IGZyb20gJy4vZ3JpZERhdGFBY2Nlc3NDb25maWcnO1xuaW1wb3J0IHsgR3JpZFBhZ2UgfSBmcm9tICcuL2dyaWRQYWdlJztcbmltcG9ydCB7IEdyaWRWaWV3IH0gZnJvbSAnLi9ncmlkVmlldyc7XG5cblxuLyoqXG4gKiBUaGlzIG9iamVjdCByZXByZXNlbnRzIHRoZSBjbGllbnQgbW9kZWwgb2YgYSBncmlkIGNvbXBvbmVudC4gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZE1vZGVsIHsgXG4gICAgdmlld1V1aWQ/OiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlVmlld3M/OiBBcnJheTxHcmlkVmlldz47XG4gICAgdmlldz86IEdyaWRWaWV3O1xuICAgIGFjY2Vzc0NvbmZpZz86IEdyaWREYXRhQWNjZXNzQ29uZmlnO1xuICAgIHBhZ2U6IEdyaWRQYWdlO1xuICAgIHRvdGFsUm93Q291bnQ/OiBudW1iZXI7XG4gICAgc2VsZWN0ZWRSb3dDb3VudD86IG51bWJlcjtcbiAgICBhbGxSb3dzU2VsZWN0ZWQ/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZE1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9hcGkvZ3JpZC1hcGkvbW9kZWwvZ3JpZE1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdyaWQgYXBpXG4gKiBUaGUgZ3JpZCBhcGkgaXMgcmVzcG9zaWJsZSBmb3IgdGhlIGdyaWQgY29tcG9uZW50cyB0aGF0IHNob3dzIGEgbGlzdCBvZiBpdGVtLiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wLjBcbiAqIENvbnRhY3Q6IGluZm9AaXQ0YWxsLmh1XG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5pbXBvcnQgeyBHcmlkRGF0YUFjY2Vzc0NvbmZpZyB9IGZyb20gJy4vZ3JpZERhdGFBY2Nlc3NDb25maWcnO1xuaW1wb3J0IHsgR3JpZFBhZ2UgfSBmcm9tICcuL2dyaWRQYWdlJztcbmltcG9ydCB7IEdyaWRWaWV3IH0gZnJvbSAnLi9ncmlkVmlldyc7XG5cblxuLyoqXG4gKiBUaGlzIG9iamVjdCByZXByZXNlbnRzIHRoZSBjbGllbnQgbW9kZWwgb2YgYSBncmlkIGNvbXBvbmVudC4gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZE1vZGVsIHsgXG4gICAgdmlld1V1aWQ/OiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlVmlld3M/OiBBcnJheTxHcmlkVmlldz47XG4gICAgdmlldz86IEdyaWRWaWV3O1xuICAgIGFjY2Vzc0NvbmZpZz86IEdyaWREYXRhQWNjZXNzQ29uZmlnO1xuICAgIHBhZ2U6IEdyaWRQYWdlO1xuICAgIHRvdGFsUm93Q291bnQ/OiBudW1iZXI7XG4gICAgc2VsZWN0ZWRSb3dDb3VudD86IG51bWJlcjtcbiAgICBhbGxSb3dzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHBhZ2VJbmRleD86IG51bWJlcjtcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBwYWdlU2l6ZU9wdGlvbnM/OiBBcnJheTxudW1iZXI+O1xuICAgIGRlZmF1bHRSb3dBY3Rpb25zPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZFJvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWdyaWQvYXBpL2dyaWQtYXBpL21vZGVsL2dyaWRSb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3JpZCBhcGlcbiAqIFRoZSBncmlkIGFwaSBpcyByZXNwb3NpYmxlIGZvciB0aGUgZ3JpZCBjb21wb25lbnRzIHRoYXQgc2hvd3MgYSBsaXN0IG9mIGl0ZW0uIFxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjAuMFxuICogQ29udGFjdDogaW5mb0BpdDRhbGwuaHVcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbmltcG9ydCB7IEltYWdlUmVzb3VyY2UgfSBmcm9tICcuLi8uLi8uLi8uLi92aWV3LWNvbnRleHQvYXBpJztcbmltcG9ydCB7IFVpQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vdmlldy1jb250ZXh0L2FwaSc7XG5cblxuLyoqXG4gKiBUaGlzIG9iamVjdCBpcyBhIGdyaWQgcm93IGNvbnRhaW5lbmluZyB0aGUgaWRlbnRpZmllciBhbmQgYWN0aW9ucyByZWxldGVkIHdpdGggdGhlIHJvdy4gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFJvdyB7IFxuICAgIGlkPzogc3RyaW5nO1xuICAgIGFjdGlvbnM6IEFycmF5PFVpQWN0aW9uPjtcbiAgICBkYXRhPzogb2JqZWN0O1xuICAgIHNlbGVjdGFibGU/OiBib29sZWFuO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBpY29uczogeyBba2V5OiBzdHJpbmddOiBBcnJheTxJbWFnZVJlc291cmNlPjsgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZ3JpZCBjYW4gYmUgaGllcmFyY2hpY2FsIHRoZW4gdGhlIHBhcmVudCBjb250YWlucyB0aGUgaWRlbnRpZmllcnMgb2YgdGhlIHBhcmVudCByb3cuIFxuICAgICAqL1xuICAgIHBhcmVudD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZ3JpZCBjYW4gYmUgaGllcmFyY2hpY2FsIHRoZW4gdGhlIGNoaWxkcmVuIGxpc3QgY29udGFpbnMgdGhlIGlkZW50aWZpZXJzIG9mIHRoZSBjaGlsZHJlbiByb3dzLiBUaGUgcm93cyBhcmUgbm90IG5lY2Vzc2FyaWx5IGluY2x1ZGVkIGluIHRoZSBwYWdlIGJ1dCB0aGUgY2xpZW50IGNhbiBhc2sgZm9yIHRoaXMuIFRoZSBjaGlsZHJlbiBpcyBub3QgcmVxdWlyZWQgdG8gc2VlIGlmIGl0IGlzIGVtcHR5IG9yIG5vdCBzZXQuIFxuICAgICAqL1xuICAgIGNoaWxkcmVuPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZFVwZGF0ZURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL2FwaS9ncmlkLWFwaS9tb2RlbC9ncmlkVXBkYXRlRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHcmlkIGFwaVxuICogVGhlIGdyaWQgYXBpIGlzIHJlc3Bvc2libGUgZm9yIHRoZSBncmlkIGNvbXBvbmVudHMgdGhhdCBzaG93cyBhIGxpc3Qgb2YgaXRlbS4gXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMC4wXG4gKiBDb250YWN0OiBpbmZvQGl0NGFsbC5odVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkgfSBmcm9tICcuLi8uLi8uLi8uLi9zbWFydC1maWx0ZXIvcHJvamVjdHMnO1xuXG5cbi8qKlxuICogVXBkYXRlIHJlcXVlc3QgZm9yIGdyaWRcXCdzIGN1cnJlbnQgdmlld1xcJ3MgYmVoYXZpb3VyLiBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmlkVXBkYXRlRGF0YSB7IFxuICAgIG9yZGVyZWRDb2x1bW5OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICBvcmRlckJ5TGlzdDogQXJyYXk8RmlsdGVyRXhwcmVzc2lvbk9yZGVyQnk+O1xuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xufVxuXG4iXX0=
|
|
@@ -6,4 +6,4 @@ export var GridViewDescriptor;
|
|
|
6
6
|
Tree: 'TREE'
|
|
7
7
|
};
|
|
8
8
|
})(GridViewDescriptor || (GridViewDescriptor = {}));
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZFZpZXdEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9hcGkvZ3JpZC1hcGkvbW9kZWwvZ3JpZFZpZXdEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtDQSxNQUFNLEtBQVcsa0JBQWtCLENBT2xDO0FBUEQsV0FBaUIsa0JBQWtCO0lBRWxCLDJCQUFRLEdBQUc7UUFDcEIsS0FBSyxFQUFFLE9BQW1CO1FBQzFCLGdCQUFnQixFQUFFLGtCQUE4QjtRQUNoRCxJQUFJLEVBQUUsTUFBa0I7S0FDM0IsQ0FBQztBQUNOLENBQUMsRUFQZ0Isa0JBQWtCLEtBQWxCLGtCQUFrQixRQU9sQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3JpZCBhcGlcbiAqIFRoZSBncmlkIGFwaSBpcyByZXNwb3NpYmxlIGZvciB0aGUgZ3JpZCBjb21wb25lbnRzIHRoYXQgc2hvd3MgYSBsaXN0IG9mIGl0ZW0uIFxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjAuMFxuICogQ29udGFjdDogaW5mb0BpdDRhbGwuaHVcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9ncmlkU2VsZWN0aW9uVHlwZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4vZ3JpZFNlbGVjdGlvbk1vZGUnO1xuaW1wb3J0IHsgR3JpZENvbHVtbk1ldGEgfSBmcm9tICcuL2dyaWRDb2x1bW5NZXRhJztcblxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBncmlkIHZpZXcuIEl0IGNhbiBiZSBhIHNpbXBsZSB0YWJsZSBncmlkIGJ1dCBhIGNvbXBsZXggY2FyZCByZXByZXNlbnRhdGlvbiBhbHNvLiBBIG1vZGVsIGhhcyBvbmUgb3IgbW9yZSB2aWV3IG9wdGlvbiB0byByZW5kZXIgdGhlIGNvbnRlbnQuIFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRWaWV3RGVzY3JpcHRvciB7IFxuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAga2luZD86IEdyaWRWaWV3RGVzY3JpcHRvci5LaW5kRW51bTtcbiAgICAvKipcbiAgICAgKiBJbiB0aGUgdGFibGUgdGhlIGNvbHVtbnMgYXJlIHRoZSBjb2x1bW5zIG9mIHRoZSB0YWJsZS4gSW4gdGhlIHRyZWUgdGhlIGNvbHVtbnMgY2FuIGJlIHVzZWQgdG8gYXBwZW5kIHRoZSB0aXRsZSBvZiBhIHRyZWUgbm9kZS4gXG4gICAgICovXG4gICAgY29sdW1uczogQXJyYXk8R3JpZENvbHVtbk1ldGE+O1xuICAgIHNlbGVjdGlvbk1vZGU/OiBHcmlkU2VsZWN0aW9uTW9kZTtcbiAgICBzZWxlY3Rpb25UeXBlPzogR3JpZFNlbGVjdGlvblR5cGU7XG4gICAgcHJlc2VydmVTZWxlY3Rpb25PblBhZ2VDaGFuZ2U/OiBib29sZWFuO1xuICAgIHNob3dFZGl0Q29sdW1ucz86IGJvb2xlYW47XG4gICAgaGlnaGxpZ2h0UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgaGlnaGxpZ2h0Q2xhc3M/OiBzdHJpbmc7XG59XG5leHBvcnQgbmFtZXNwYWNlIEdyaWRWaWV3RGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IHR5cGUgS2luZEVudW0gPSAnVEFCTEUnIHwgJ0VYUEFOREFCTEVDQVJEUzEnIHwgJ1RSRUUnO1xuICAgIGV4cG9ydCBjb25zdCBLaW5kRW51bSA9IHtcbiAgICAgICAgVGFibGU6ICdUQUJMRScgYXMgS2luZEVudW0sXG4gICAgICAgIEV4cGFuZGFibGVjYXJkczE6ICdFWFBBTkRBQkxFQ0FSRFMxJyBhcyBLaW5kRW51bSxcbiAgICAgICAgVHJlZTogJ1RSRUUnIGFzIEtpbmRFbnVtXG4gICAgfTtcbn1cblxuXG4iXX0=
|
|
@@ -109,6 +109,7 @@ export class SmartGridComponent {
|
|
|
109
109
|
if (gridModel) {
|
|
110
110
|
this.length = gridModel.totalRowCount;
|
|
111
111
|
this.pageSize = gridModel.pageSize;
|
|
112
|
+
this.pageIndex = gridModel.pageIndex ?? 0;
|
|
112
113
|
if (gridModel.pageSizeOptions && gridModel.pageSizeOptions.length > 0) {
|
|
113
114
|
this.pageSizeOptions = gridModel.pageSizeOptions;
|
|
114
115
|
}
|
|
@@ -557,8 +558,9 @@ export class SmartGridComponent {
|
|
|
557
558
|
return header;
|
|
558
559
|
}
|
|
559
560
|
async onChangePage(event) {
|
|
560
|
-
let offset = event
|
|
561
|
+
let offset = event.pageSize * event.pageIndex;
|
|
561
562
|
let limit = event.pageSize;
|
|
563
|
+
this.pageIndex = event.pageIndex;
|
|
562
564
|
await this.service.setPage(this.smartGrid.gridModel.viewUuid, this.smartGrid.gridIdentifier, offset.toString(), limit.toString());
|
|
563
565
|
}
|
|
564
566
|
async execute(args, row, uiAction) {
|
|
@@ -586,6 +588,13 @@ export class SmartGridComponent {
|
|
|
586
588
|
}
|
|
587
589
|
buttonTranslator(uiAction) {
|
|
588
590
|
let desc = this.uiActionDescriptors.get(uiAction.code);
|
|
591
|
+
if (!desc) {
|
|
592
|
+
desc = {
|
|
593
|
+
title: uiAction.code,
|
|
594
|
+
type: 'FLAT',
|
|
595
|
+
color: 'primary',
|
|
596
|
+
};
|
|
597
|
+
}
|
|
589
598
|
if (uiAction.descriptor) {
|
|
590
599
|
this.uiActionDescriptorService.mergeActionDescriptorIntoClient(uiAction.descriptor, desc);
|
|
591
600
|
}
|
|
@@ -657,10 +666,10 @@ export class SmartGridComponent {
|
|
|
657
666
|
}
|
|
658
667
|
}
|
|
659
668
|
SmartGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartGridComponent, deps: [{ token: i1.SmartGridService }, { token: i2.ComponentFactoryService }, { token: i3.MatDialog }, { token: i4.UiActionDescriptorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
660
|
-
SmartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-edit-button\" *ngIf=\"smartGrid.showEditColumns\">\r\n <button (click)=\"editColumns()\" mat-raised-button color=\"primary\">\r\n Oszlopok testreszab\u00E1sa\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;grid-gap:1rem;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-edit-button{display:flex;flex-direction:row;justify-content:flex-end}.tree-button{width:24px!important;height:24px!important}\n"], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { type: i7.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid"] }, { type: i8.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { type: i8.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { type: i8.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { type: i8.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }] });
|
|
669
|
+
SmartGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-edit-button\" *ngIf=\"smartGrid.showEditColumns\">\r\n <button (click)=\"editColumns()\" mat-raised-button color=\"primary\">\r\n Oszlopok testreszab\u00E1sa\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;grid-gap:1rem;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-edit-button{display:flex;flex-direction:row;justify-content:flex-end}.tree-button{width:24px!important;height:24px!important}\n"], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { type: i7.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid"] }, { type: i8.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { type: i8.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { type: i8.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { type: i8.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }] });
|
|
661
670
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartGridComponent, decorators: [{
|
|
662
671
|
type: Component,
|
|
663
|
-
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-edit-button\" *ngIf=\"smartGrid.showEditColumns\">\r\n <button (click)=\"editColumns()\" mat-raised-button color=\"primary\">\r\n Oszlopok testreszab\u00E1sa\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;grid-gap:1rem;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-edit-button{display:flex;flex-direction:row;justify-content:flex-end}.tree-button{width:24px!important;height:24px!important}\n"] }]
|
|
672
|
+
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-edit-button\" *ngIf=\"smartGrid.showEditColumns\">\r\n <button (click)=\"editColumns()\" mat-raised-button color=\"primary\">\r\n Oszlopok testreszab\u00E1sa\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;grid-gap:1rem;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-edit-button{display:flex;flex-direction:row;justify-content:flex-end}.tree-button{width:24px!important;height:24px!important}\n"] }]
|
|
664
673
|
}], ctorParameters: function () { return [{ type: i1.SmartGridService }, { type: i2.ComponentFactoryService }, { type: i3.MatDialog }, { type: i4.UiActionDescriptorService }]; }, propDecorators: { smartGrid: [{
|
|
665
674
|
type: Input
|
|
666
675
|
}], uuid: [{
|
|
@@ -671,4 +680,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
671
680
|
type: ViewChild,
|
|
672
681
|
args: ['table', { read: ViewContainerRef }]
|
|
673
682
|
}] } });
|
|
674
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysb0JBQW9CLEVBRXBCLDRCQUE0QixFQUU1QiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUcvRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQVksa0JBQWtCLEVBQXNCLE1BQU0scUJBQXFCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8s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cEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUcwQyxVQUFVO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0VGFibGUsXHJcbiAgU21hcnRUYWJsZUJ1dHRvblR5cGUsXHJcbiAgU21hcnRUYWJsZUhlYWRlcixcclxuICBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2UsXHJcbiAgU21hcnRUYWJsZUludGVyZmFjZVR5cGVFbnVtLFxyXG4gIFNtYXJ0VGFibGVPcmRlcixcclxuICBTbWFydFRhYmxlVHlwZSxcclxuICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgR3JpZENvbHVtbk1ldGEsXHJcbiAgR3JpZFJvdyxcclxuICBHcmlkU2VsZWN0aW9uTW9kZSxcclxuICBHcmlkU2VsZWN0aW9uVHlwZSxcclxuICBHcmlkVXBkYXRlRGF0YSxcclxufSBmcm9tICcuL2FwaS9ncmlkLWFwaSc7XHJcbmltcG9ydCB7IEdyaWRVaUFjdGlvblR5cGUsIFNtYXJ0R3JpZCwgU21hcnRMYXlvdXREZWYgfSBmcm9tICcuL21vZGVscy9tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0R3JpZFNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LWdyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlTGF5b3V0RGVmaW5lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1sYXlvdXQtZGVmaW5lci90YWJsZS1sYXlvdXQtZGVmaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFeHBhbmRhYmxlU2VjdGlvbiB9IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5IH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vc21hcnQtZGlhbG9nL3Byb2plY3RzJztcclxuaW1wb3J0IHsgVWlBY3Rpb24sIFVpQWN0aW9uQnV0dG9uVHlwZSwgVWlBY3Rpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L2FwaSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU21hcnRHcmlkU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemU6IG51bWJlciA9IDEwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MF07XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBASW5wdXQoKSBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcbiAgQElucHV0KCkgdXVpZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBkZXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gdGFibGVcclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSB2Y1JlZlRhYmxlPzogVmlld0NvbnRhaW5lclJlZjtcclxuICBjb21wb25lbnRSZWZUYWJsZSE6IENvbXBvbmVudFJlZjxTbWFydHRhYmxlQ29tcG9uZW50PjtcclxuICBzbWFydFRhYmxlITogU21hcnRUYWJsZTxHcmlkUm93PjtcclxuXHJcbiAgLy8gZXhwYW5kYWJsZVxyXG4gIC8vIGdyaWREYXRhXHJcbiAgZXhwYW5kYWJsZVNlY3Rpb25zPzogRXhwYW5kYWJsZVNlY3Rpb248YW55PltdO1xyXG5cclxuICBwYWdlRXZlbnQ/OiBQYWdlRXZlbnQ7XHJcbiAgZGF0YXNvdXJjZT86IG51bGw7XHJcbiAgcGFnZVNpemU/OiBudW1iZXI7XHJcbiAgbGVuZ3RoPzogbnVtYmVyO1xyXG4gIHZhbHVlczogYW55O1xyXG4gIGdyaWRUYWJsZSE6IFNtYXJ0VGFibGU8YW55PjtcclxuXHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCbG9ja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gdHJlZVxyXG4gIHRyZWVDb250cm9sPzogRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+O1xyXG4gIHRyZWVGbGF0dGVuZXI/OiBNYXRUcmVlRmxhdHRlbmVyPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVEYXRhU291cmNlPzogTWF0VHJlZUZsYXREYXRhU291cmNlPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVDaGVja2xpc3RTZWxlY3Rpb24/OiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0R3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBjYWxsZWQgYWZ0ZXIgZXZlcnkgc2VydmljZSBjYWxsIChsb2FkLCBzYXZlLCByZWZyZXNoLCBldGMuKVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NtYXJ0R3JpZCddKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gY2hhbmdlc1snc21hcnRHcmlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQ/LnBhZ2luYXRvcjtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyd1dWlkJ10pIHtcclxuICAgICAgdGhpcy51dWlkID0gY2hhbmdlc1sndXVpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCAmJiB0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gZm9yIGRldiBwdXJwb3Nlc1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkICYmICF0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIHJvd3Mgb2YgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZSEuc2VsZWN0aW9uITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIGdlbmVyaWMgR3JpZEFQSSBhbmQgcmVmcmVzaGVzIHRoZSBwcmVzZW50ZWRcclxuICAgKiBncmlkIHdpdGggdGhlIG5ld2VzdCBvbmUuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyB3aWxsIGNhdXNlIHRoaXMuc2VydmljZS5ncmlkTW9kZWxDaGFuZ2VkIHRvIGZpcmVcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5sb2FkKHRoaXMudXVpZCwgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbDtcclxuICAgIGlmIChncmlkTW9kZWwpIHtcclxuICAgICAgdGhpcy5sZW5ndGggPSBncmlkTW9kZWwudG90YWxSb3dDb3VudDtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IGdyaWRNb2RlbC5wYWdlU2l6ZTtcclxuICAgICAgaWYgKGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnMgJiYgZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNob3dFZGl0Q29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zaG93RWRpdENvbHVtbnMgPSBncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNob3dFZGl0Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignR3JpZE1vZGVsIGlzIHVuZGVmaW5lZCBpbiBjb21wb25lbnQhJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdGFibGVSb3cgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsIS5wYWdlLnJvd3MhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0YWJsZVJvdy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBsYWNlSG9sZGVyUm93OiBhbnkgPSB7fTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5jb2x1bW5zLm1hcCgobWV0YTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgICBwbGFjZUhvbGRlclJvd1ttZXRhLnByb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyA9IFtwbGFjZUhvbGRlclJvd107XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRhYmxlVHlwZTtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LnRhYmxlVHlwZSkge1xyXG4gICAgICB0YWJsZVR5cGUgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcudGFibGVUeXBlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25UeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3Iuc2VsZWN0aW9uVHlwZSA9PT0gR3JpZFNlbGVjdGlvblR5cGUuQ2hlY2tib3hcclxuICAgICAgICAgID8gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YXHJcbiAgICAgICAgICA6IFNtYXJ0VGFibGVUeXBlLlJPV19TRUxFQ1Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YWJsZVR5cGUgPSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRBQkxFKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbmZpZzogU21hcnRUYWJsZUludGVyZmFjZTxHcmlkUm93PiA9IHtcclxuICAgICAgICAuLi50aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcsXHJcbiAgICAgICAgdGFibGVSb3dzOiB0YWJsZVJvdyxcclxuICAgICAgICB0YWJsZVR5cGUsXHJcbiAgICAgICAgY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM6IGF3YWl0IHRoaXMuY29uc3RydWN0SGVhZGVyKCkhLFxyXG4gICAgICAgIGV4cGFuZGFibGU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlLFxyXG4gICAgICAgIGV4cGFuZGVkQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kZWRDb21wb25lbnQsXHJcbiAgICAgICAgdHlwZTogU21hcnRUYWJsZUludGVyZmFjZVR5cGVFbnVtLk5PUk1BTCxcclxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uQ29kZXM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMhLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25zOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zPy5tYXAoKGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTpcclxuICAgICAgICAgICAgICBjb2RlID09PSAnX2FjdGlvblNlcGFyYXRvcl8nXHJcbiAgICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVCdXR0b25UeXBlLlNFUEFSQVRPUlxyXG4gICAgICAgICAgICAgICAgOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgY29kZTogY29kZSxcclxuICAgICAgICAgICAgLy8gbGFiZWw6IHRoaXMuYnV0dG9uVHJhbnNsYXRvcih7IGNvZGU6IGNvZGUgfSksXHJcbiAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAvLyBhcmdzOiBbXHJcbiAgICAgICAgICAgIC8vICAge1xyXG4gICAgICAgICAgICAvLyAgICAgY29kZTogY29kZSxcclxuICAgICAgICAgICAgLy8gICB9LFxyXG4gICAgICAgICAgICAvLyBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodFByb3BlcnR5ICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRDbGFzc1xyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRDbGFzcyA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0Q2xhc3M7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0UHJvcGVydHkgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodFByb3BlcnR5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNlcnZpY2VUb1VzZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcub25TZWxlY3Rpb24gPSB0aGlzLm9uU2VsZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGFibGVDb25maWcub25BbGxTZWxlY3Rpb24gPSB0aGlzLm9uU2VsZWN0QWxsLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBhcmVkIGZvciBzaW1wbGUgY2xpY2tzXHJcbiAgICAgIC8vIGlmICghdGFibGVDb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAvLyAgIHRhYmxlQ29uZmlnLm9uUm93Q2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljayA9IHRoaXMub25Eb3VibGVDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLmlzUm93RGlzYWJsZWRQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3RhYmxlUHJvcGVydHlOYW1lID0gJ3NlbGVjdGFibGUnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGFibGVDb25maWcuYXN5bmNPbkV4cGFuZCkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnJvd0V4cGFuZGVyID0gdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VydmljZSEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvbk1vZGU7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvbiAmJlxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSAmJlxyXG4gICAgICAgIHNlbGVjdGlvbk1vZGUgIT09IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSA9ICdpZCc7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlXHJcbiAgICAgICAgICAucm93cyEuZmlsdGVyKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LnNlbGVjdGVkKVxyXG4gICAgICAgICAgLm1hcCgoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5pZCEpO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPihpc011bHRpcGxlLCBzZWxlY3RlZElkcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZSA9IG5ldyBTbWFydFRhYmxlPGFueT4odGFibGVDb25maWcpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmVGFibGUpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnVwZGF0ZVNtYXJ0VGFibGUodGhpcy5zbWFydFRhYmxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZjUmVmVGFibGU/LmNsZWFyKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52Y1JlZlRhYmxlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgICB0aGlzLnZjUmVmVGFibGUhLFxyXG4gICAgICAgICAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxuICAgICAgICAgIG5ldyBNYXA8c3RyaW5nLCBhbnk+KFtbJ3NtYXJ0VGFibGUnLCB0aGlzLnNtYXJ0VGFibGVdXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5zb3J0RXZlbnRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLnByb3BlcnR5TmFtZSA9IGhlYWRlci5wcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDUpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChoZWFkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5BU0M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIFNtYXJ0VGFibGVPcmRlci5BU0M6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSBTbWFydFRhYmxlT3JkZXIuREVTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkRFU0M6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGZpbHRlciA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZChcclxuICAgICAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyICYmICFoZWFkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0LmluZGV4T2YoZmlsdGVyKTtcclxuICAgICAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0LnNwbGljZShpbmRleCEsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5vcmRlciA9IGhlYWRlci5vcmRlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgb3JkZXI6IGhlYWRlci5vcmRlcixcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogaGVhZGVyLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGdyaWRVcGRhdGVEYXRhOiBHcmlkVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgICAgICBvcmRlckJ5TGlzdDogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdCxcclxuICAgICAgICAgICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJlZENvbHVtbk5hbWVzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uuc29ydCh0aGlzLnNtYXJ0R3JpZCEsIGdyaWRVcGRhdGVEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNtYXJ0VGFibGUuc2VsZWN0aW9uPy5jaGFuZ2VkXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VzLm5leHQocm93KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kKHJvd0lkOiBudW1iZXIpOiBhbnkge31cclxuXHJcbiAgcHVibGljIGFzeW5jIGV4cGFuZEFzeW5jKHJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzKSB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93c1tyb3dJbmRleF07XHJcbiAgICAgIGlmIChyb3cgJiYgcm93LmlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmQodGhpcy5zbWFydEdyaWQhLCByb3cuaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvd0luZGV4LnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJFeHBhbmRhYmxlU2VjdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9ucyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgaGVhZGVyQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50LFxyXG4gICAgICAgIGhlYWRlcklucHV0TmFtZTogdGhpcy5zbWFydEdyaWQhLmhlYWRlckNvbXBvbmVudElucHV0TmFtZSxcclxuICAgICAgICBoZWFkZXJEYXRhOiBpdGVtLFxyXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgaW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudElucHV0TmFtZSxcclxuICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckNhcmRzKCk6IHZvaWQge1xyXG4gICAgLy8gVE9ET1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc011bHRpcGxlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VydmljZSEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvbk1vZGU7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1lcixcclxuICAgICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxyXG4gICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5cclxuICAgICAgKTtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgICB0aGlzLnRyZWVEYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8R3JpZFJvdz4odGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzO1xyXG4gICAgbGV0IGV4cGFuZGVkTm9kZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XHJcbiAgICBpZiAobm9kZXMpIHtcclxuICAgICAgZXhwYW5kZWROb2RlcyA9IG5vZGVzXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQobm9kZSkpXHJcbiAgICAgICAgLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyEuZm9yRWFjaCgocm93OiBhbnkpID0+IChyb3cubGV2ZWwgPSB1bmRlZmluZWQpKTtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5maWx0ZXIoKHJvdykgPT4gIXJvdy5wYXJlbnQpO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5jbGVhcigpO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LnNlbGVjdChub2RlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5jb2xsYXBzZUFsbCgpO1xyXG4gICAgZXhwYW5kZWROb2Rlcy5mb3JFYWNoKChyb3dJZCkgPT4ge1xyXG4gICAgICBsZXQgcm93ID0gdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzLmZpbmQoKHJvdykgPT4gcm93SWQgPT09IHJvdy5pZCk7XHJcbiAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sPy5leHBhbmQocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMZXZlbCA9IChub2RlOiBhbnkpID0+IG5vZGUubGV2ZWwgPz8gMDtcclxuXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyaWRSb3cpID0+IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSk7XHJcblxyXG4gIGdldENoaWxkcmVuID0gKG5vZGU6IEdyaWRSb3cpOiBHcmlkUm93W10gPT4ge1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgbGV0IHJvd3MgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2Uucm93cz8uZmlsdGVyKChyb3cpID0+XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uc29tZSgoY2hpbGQpID0+IGNoaWxkID09PSByb3cuaWQhKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAocm93cykge1xyXG4gICAgICAgIHJldHVybiByb3dzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfTtcclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZURhdGE6IEdyaWRSb3cpID0+IHRoaXMuaXNFeHBhbmRhYmxlKF9ub2RlRGF0YSk7XHJcblxyXG4gIHRyYW5zZm9ybWVyID0gKHJvdzogR3JpZFJvdywgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgKHJvdyBhcyBhbnkpLmxldmVsID0gbGV2ZWw7XHJcbiAgICByZXR1cm4gcm93O1xyXG4gIH07XHJcblxyXG4gIGdldFRyZWVJdGVtKHJvdzogR3JpZFJvdyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29sdW1uczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcztcclxuICAgIGxldCBkYXRhOiBhbnkgPSByb3cuZGF0YSE7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IGRhdGFbY29sXSkuam9pbignICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdy5pZCE7XHJcbiAgfVxyXG5cclxuICAvKiogVG9nZ2xlIHRoZSB0cmVlTm9kZSBzZWxlY3Rpb24uIFNlbGVjdC9kZXNlbGVjdCBhbGwgdGhlIGRlc2NlbmRhbnRzIG5vZGUgKi9cclxuICB0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQmVmb3JlID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLm1hcCgocm93KSA9PiByb3cuaWQpO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xyXG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2whLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxyXG4gICAgICAgID8gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cylcclxuICAgICAgICA6IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNjZW5kYW50cyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGlvbkFmdGVyID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLm1hcCgocm93KSA9PiByb3cuaWQpO1xyXG5cclxuICAgIGxldCBzZWxlY3RlZElkcyA9IHNlbGVjdGlvbkFmdGVyLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkJlZm9yZS5pbmNsdWRlcyhzKSk7XHJcbiAgICBsZXQgdW5zZWxlY3RlZElkcyA9IHNlbGVjdGlvbkJlZm9yZS5maWx0ZXIoKHMpID0+ICFzZWxlY3Rpb25BZnRlci5pbmNsdWRlcyhzKSk7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gd2hlbiBzZXJ2aWNlIGNhbGwgaXMgYWN0aXZlICghZGV2KSwgb25TZWxlY3Qgd2lsbCB0b2dnbGUgcm93LnNlbGVjdGVkXHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93LmlkKSlcclxuICAgICAgICAuZm9yRWFjaCgocm93KSA9PiAocm93LnNlbGVjdGVkID0gdHJ1ZSkpO1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93c1xyXG4gICAgICAgID8uZmlsdGVyKChyb3cpID0+IHVuc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93LmlkKSlcclxuICAgICAgICAuZm9yRWFjaCgocm93KSA9PiAocm93LnNlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgIH1cclxuICAgIGxldCB1bmlvbiA9IHNlbGVjdGVkSWRzLmNvbmNhdCh1bnNlbGVjdGVkSWRzKTtcclxuICAgIHRoaXMub25TZWxlY3RMaXN0KHVuaW9uKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgcGFyZW50OiBHcmlkUm93IHwgbnVsbCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgdGhpcy5jaGVja1BhcmVudE5vZGVTZWxlY3Rpb24ocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKHBhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1BhcmVudE5vZGVTZWxlY3Rpb24obm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBpZiAobm9kZVNlbGVjdGVkICYmICFkZXNjQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xyXG4gICAgfSBlbHNlIGlmICghbm9kZVNlbGVjdGVkICYmIGRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogR2V0IHRoZSBwYXJlbnQgbm9kZSBvZiBhIG5vZGUgKi9cclxuICBnZXRQYXJlbnROb2RlKG5vZGU6IEdyaWRSb3cpOiBHcmlkUm93IHwgbnVsbCB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG5cclxuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbCEuZGF0YU5vZGVzW2ldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBXaGV0aGVyIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIG5vZGUgYXJlIHNlbGVjdGVkLiAqL1xyXG4gIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogR3JpZFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sIHx8ICF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID1cclxuICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICBkZXNjZW5kYW50cy5ldmVyeSgoY2hpbGQpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKTtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgcGFydCBvZiB0aGUgZGVzY2VuZGFudHMgYXJlIHNlbGVjdGVkICovXHJcbiAgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gZGVzY2VuZGFudHMuc29tZSgoY2hpbGQpID0+IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiEuaXNTZWxlY3RlZChjaGlsZCkpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY29uc3RydWN0SGVhZGVyKCk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcltdPiB7XHJcbiAgICBsZXQgaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MgJiYgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzLm1hcChhc3luYyAoZ3JpZFJvdzogR3JpZFJvdykgPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld1VpQWN0aW9ucyA9IGdyaWRSb3cuYWN0aW9ucz8uZmlsdGVyKFxyXG4gICAgICAgICAgICAodWlBY3Rpb246IGFueSkgPT4gIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChuZXdVaUFjdGlvbnMpIHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgbmV3VWlBY3Rpb25zLm1hcChhc3luYyAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVzY3JpcHRvcjogVWlBY3Rpb25EZXNjcmlwdG9yID1cclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U/LmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVpQWN0aW9uLmNvZGUgPz8gJ0NPREUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5vcm1hbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5zZXQodWlBY3Rpb24uY29kZSEsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKGFzeW5jIChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBkZXNjQ29sdW1uOiBhbnkgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLmRlc2NyaXB0b3IhLmNvbHVtbnMhLmZpbmQoXHJcbiAgICAgICAgICAoY29sRGVzY3JpcHRvcjogR3JpZENvbHVtbk1ldGEpID0+IGNvbERlc2NyaXB0b3IucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlciA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICAgICAoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZXNjQ29sdW1uKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdD8uZmluZChcclxuICAgICAgICAgICAgKGZpbHRlckV4cHJlc3Npb246IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PlxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGxldCBvcmRlcjtcclxuICAgICAgICAgIGxldCBvcmRlck51bWJlcjtcclxuICAgICAgICAgIGlmIChmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0pIHtcclxuICAgICAgICAgICAgb3JkZXIgPVxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbS5vcmRlciA9PT0gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkuT3JkZXJFbnVtLkFzY1xyXG4gICAgICAgICAgICAgICAgPyBTbWFydFRhYmxlT3JkZXIuQVNDXHJcbiAgICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgb3JkZXJOdW1iZXIgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PiBmaWx0ZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgb3JkZXJOdW1iZXIrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgb3JpZ25hbExhYmVsID0gY3VzdG9tVGFibGVIZWFkZXI/LmxhYmVsID8/IGRlc2NDb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgICBsZXQgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudHJhbnNsYXRlU2VydmljZT8uZ2V0KG9yaWduYWxMYWJlbCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsYWJlbCA9IG9yaWduYWxMYWJlbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IGN1c3RvbVRhYmxlSGVhZGVyPy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlVGltZScpIHtcclxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFVElNRSxcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eXl5Lk1NLmRkIEg6bW0nLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuT2Zmc2V0RGF0ZScpIHtcclxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFVElNRSxcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eXl5Lk1NLmRkJyxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5jdXN0b21UYWJsZUhlYWRlcixcclxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdkYXRhLicgKyBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgICAgIG9yZGVyTnVtYmVyLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgY29tcGxlbWVudCA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbHRlcihcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PlxyXG4gICAgICAgICFoZWFkZXIuc29tZSgodEg6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRILnByb3BlcnR5TmFtZS5pbmNsdWRlcyh0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUpKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY29tcGxlbWVudCkge1xyXG4gICAgICBoZWFkZXIucHVzaCguLi5jb21wbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnNpbXBsZUJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLm9wdGlvbnMuc2ltcGxlQnV0dG9ucy5mb3JFYWNoKCh1aUFjdGlvbkNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3NpbXBsZV9idXR0b25zJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLlJBSVNFRCxcclxuICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgLy8gbGFiZWw6IHRoaXMuYnV0dG9uVHJhbnNsYXRvcih7IGNvZGU6IHVpQWN0aW9uQ29kZSB9KSxcclxuICAgICAgICAgICAgICBhcmdzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGNvZGU6IHVpQWN0aW9uQ29kZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgIHNob3dCdXR0b25JZjogKHJvdzogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgcm93LmFjdGlvbnMuc29tZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmNvZGUgPT09IHVpQWN0aW9uQ29kZTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFoZWFkZXIuc29tZSgoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSAnbXlfbWVudScpKSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8ucm93VWlBY3Rpb25UeXBlID09PSBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUpIHtcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdteV9tZW51JyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlUsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGljb246ICdtb3JlX3ZlcnQnLFxyXG4gICAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZTogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGlzU29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50Py5wYWdlU2l6ZSAqIGV2ZW50Py5wYWdlSW5kZXg7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBhbnlbXSwgcm93OiBhbnksIHVpQWN0aW9uOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBfdWlBY3Rpb246IFVpQWN0aW9uO1xyXG5cclxuICAgIGlmICghdWlBY3Rpb24pIHtcclxuICAgICAgdWlBY3Rpb24gPSByb3cuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlID09PSBhcmdzWzBdLmNvZGUpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIF91aUFjdGlvbiA9IHsgLi4udWlBY3Rpb24gfTtcclxuICAgIF91aUFjdGlvbi5wYXJhbXMgPSB7XHJcbiAgICAgIC4uLnVpQWN0aW9uLnBhcmFtcyxcclxuICAgICAgbW9kZWw6IHJvdyxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHVpQWN0aW9uTW9kZWw6IGFueSA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlLFxyXG4gICAgICB1aUFjdGlvbjogX3VpQWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnVpQWN0aW9uTW9kZWxDYWxsYmFjaykge1xyXG4gICAgICB1aUFjdGlvbk1vZGVsID0gdGhpcy5zbWFydEdyaWQhLm9wdGlvbnMhLnVpQWN0aW9uTW9kZWxDYWxsYmFjayh1aUFjdGlvbk1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB1aUFjdGlvbk1vZGVsO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKF91aUFjdGlvbiwge1xyXG4gICAgICB3aWRnZXRJZDogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBub2RlSWQ6IHJvdy5pZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidXR0b25UcmFuc2xhdG9yKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICBsZXQgZGVzYyA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpO1xyXG4gICAgaWYgKHVpQWN0aW9uLmRlc2NyaXB0b3IpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLm1lcmdlQWN0aW9uRGVzY3JpcHRvckludG9DbGllbnQodWlBY3Rpb24uZGVzY3JpcHRvciEsIGRlc2MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc2M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGF5b3V0RGVmKCk6IHR5cGVvZiBTbWFydExheW91dERlZiB7XHJcbiAgICByZXR1cm4gU21hcnRMYXlvdXREZWY7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbkRvdWJsZUNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlT25DbGljayhncmlkUm93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgZGVmYXVsdFJvd0FjdGlvbjogVWlBY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8uZGVmYXVsdFJvd0FjdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuc2VydmljZS5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJvd0FjdGlvbkNvZGUgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zW2luZGV4XTtcclxuXHJcbiAgICAgICAgZGVmYXVsdFJvd0FjdGlvbiA9IGdyaWRSb3cuYWN0aW9ucy5maW5kKFxyXG4gICAgICAgICAgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gdWlBY3Rpb24uY29kZSA9PT0gZGVmYXVsdFJvd0FjdGlvbkNvZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Um93QWN0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGUoW10sIGdyaWRSb3csIGRlZmF1bHRSb3dBY3Rpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLm9uU2VsZWN0TGlzdChbcm93SWRdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0Um93SW50ZXJuYWwocm93SWQ6IGFueSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbmQoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQgPT09IHJvd0lkKTtcclxuICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdCh0aGlzLnNtYXJ0R3JpZCEsIHJvdyEpO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdExpc3Qocm93SWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0lkcy5mb3JFYWNoKChyb3dJZCkgPT4gdGhpcy5zZWxlY3RSb3dJbnRlcm5hbChyb3dJZCkpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIGVkaXRDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgbGV0IGRpYWxvZ0RhdGE6IFNtYXJ0RGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29udGVudDoge1xyXG4gICAgICAgIHRpdGxlOiAnT3N6bG9wb2sgdGVzdHJlc3phYsOhc2EnLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7fSxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0czoge1xyXG4gICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgdXVpZDogdGhpcy51dWlkLFxyXG4gICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICAgICAgdmlldzogdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LFxyXG4gICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsIHsgZGF0YTogZGlhbG9nRGF0YSB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwic21hcnRHcmlkLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWFydC1ncmlkLWVkaXQtYnV0dG9uXCIgKm5nSWY9XCJzbWFydEdyaWQuc2hvd0VkaXRDb2x1bW5zXCI+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0Q29sdW1ucygpXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgIE9zemxvcG9rIHRlc3RyZXN6YWLDoXNhXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgID48L2FwcC1zbWFydC1ncmlkLWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5UUkVFICYmIHRyZWVDb250cm9sXCJcclxuICAgICAgY2xhc3M9XCJ0cmVlLWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJ3JlcGVhdCgnICsgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICsgJywgMWZyKSdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICB9XCJcclxuICAgID5cclxuICAgICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cInRyZWVEYXRhU291cmNlIVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbCFcIj5cclxuICAgICAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50PVwiMjRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkIGNsYXNzPVwidHJlZS1idXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja2xpc3QtbGVhZi1ub2RlXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+e3sgZ2V0VHJlZUl0ZW0obm9kZSkgfX08L21hdC1jaGVja2JveFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICBjbGFzcz1cInRyZWUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBub2RlLml0ZW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAge3sgdHJlZUNvbnRyb2whLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgIDwvbWF0LXRyZWU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLnBhZ2luYXRvciAmJiAhdHJlZUNvbnRyb2xcIlxyXG4gICAgI3BhZ2luYXRvclxyXG4gICAgW2xlbmd0aF09XCJsZW5ndGhcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChwYWdlKT1cIm9uQ2hhbmdlUGFnZSgkZXZlbnQpXCJcclxuICA+PC9tYXQtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxuIl19
|
|
683
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysb0JBQW9CLEVBRXBCLDRCQUE0QixFQUU1QiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUcvRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQVksa0JBQWtCLEVBQXNCLE1BQU0scUJBQXFCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNqRixNQUFNLE9BQU8sa0JBQWtCO0lBeUM3QixZQUNVLE9BQXlCLEVBQ3pCLFNBQWtDLEVBQ2xDLE1BQWlCLEVBQ2pCLHlCQUFvRDtRQUhwRCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUE1QzlELGlEQUFpRDtRQUNoQywyQkFBc0IsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVELGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUd4QyxRQUFHLEdBQVksS0FBSyxDQUFDO1FBbUI5QixvQkFBZSxHQUFhLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUV4RCxxQkFBZ0IsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUvQyx3QkFBbUIsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVqRSwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsY0FBUyxHQUFZLElBQUksQ0FBQztRQTBWMUIsYUFBUSxHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUUxQyxpQkFBWSxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdGLGdCQUFXLEdBQUcsQ0FBQyxJQUFhLEVBQWEsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDN0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRyxDQUFDLENBQ2xELENBQUM7Z0JBQ0YsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBRUYsYUFBUSxHQUFHLENBQUMsQ0FBUyxFQUFFLFNBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFM0UsZ0JBQVcsR0FBRyxDQUFDLEdBQVksRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUMzQyxHQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMzQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztRQWpXQSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0MsOERBQThEO1lBQzlELElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzdELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxVQUFXLENBQUMsU0FBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNsQixtREFBbUQ7UUFDbkQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLEtBQUssQ0FBQyxNQUFNO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQzVDLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksU0FBUyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQzthQUNsRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzthQUNwRDtZQUNELElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsU0FBVSxDQUFDLGVBQWUsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUM7YUFDaEY7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUNsRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtZQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBVSxDQUFDLElBQUksQ0FBQyxJQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3BCLElBQUksY0FBYyxHQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFvQixFQUFFLEVBQUU7Z0JBQy9FLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRTtZQUMxQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ25EO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRTtZQUNsRSxTQUFTO2dCQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLGlCQUFpQixDQUFDLFFBQVE7b0JBQ2pGLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUztvQkFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDakM7YUFBTTtZQUNMLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ3RELElBQUksV0FBVyxHQUFpQztnQkFDOUMsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFdBQVc7Z0JBQzlCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixTQUFTO2dCQUNULHVCQUF1QixFQUFFLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRztnQkFDdEQsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsVUFBVTtnQkFDdEMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxpQkFBaUI7Z0JBQ3BELElBQUksRUFBRSwyQkFBMkIsQ0FBQyxNQUFNO2dCQUN4QyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxpQkFBa0I7Z0JBQ2hFLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtvQkFDaEYsT0FBTzt3QkFDTCxJQUFJLEVBQ0YsSUFBSSxLQUFLLG1CQUFtQjs0QkFDMUIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFNBQVM7NEJBQ2hDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO3dCQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNqQyxJQUFJLEVBQUUsSUFBSTt3QkFDVixnREFBZ0Q7d0JBQ2hELFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDNUMsVUFBVTt3QkFDVixNQUFNO3dCQUNOLGtCQUFrQjt3QkFDbEIsT0FBTzt3QkFDUCxLQUFLO3FCQUNOLENBQUM7Z0JBQ0osQ0FBQyxDQUFDO2FBQ0gsQ0FBQztZQUVGLElBQ0UsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUI7Z0JBQzdELElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUMxRDtnQkFDQSxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO2dCQUNyRixXQUFXLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQzthQUM1RjtZQUVELElBQ0UsSUFBSSxDQUFDLFNBQVUsQ0FBQyxlQUFlO2dCQUMvQixJQUFJLENBQUMsU0FBVSxDQUFDLHlCQUF5QjtnQkFDekMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZO2dCQUM1QixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixFQUNsQztnQkFDQSxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRCxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFEO1lBRUQsNkJBQTZCO1lBQzdCLGlDQUFpQztZQUNqQyxzREFBc0Q7WUFDdEQsSUFBSTtZQUVKLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2pDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5RDtZQUVELElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUU7Z0JBQzFDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxZQUFZLENBQUM7YUFDbkQ7WUFFRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUU7Z0JBQzdCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO1lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUM7WUFFOUUsSUFDRSxDQUFDLFdBQVcsQ0FBQyxTQUFTO2dCQUN0QixDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7Z0JBQzlCLGFBQWEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQ3hDO2dCQUNBLE1BQU0sVUFBVSxHQUFHLGFBQWEsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7Z0JBRWhFLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBRXJDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7cUJBQzVDLElBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO3FCQUNwRCxHQUFHLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRyxDQUFDLENBQUM7Z0JBRTFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQzdFO1lBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBTSxXQUFXLENBQUMsQ0FBQztZQUVuRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbkU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFFekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3BCLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNyRCxJQUFJLENBQUMsVUFBVyxFQUNoQixtQkFBbUIsRUFDbkIsSUFBSSxHQUFHLENBQWMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO2dCQUVGLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUztxQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRCxTQUFTLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXZELFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRTt3QkFDcEIsS0FBSyxTQUFTOzRCQUNaLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQzs0QkFDbkMsTUFBTTt3QkFDUixLQUFLLGVBQWUsQ0FBQyxHQUFHOzRCQUN0QixNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7NEJBQ3BDLE1BQU07d0JBQ1IsS0FBSyxlQUFlLENBQUMsSUFBSTs0QkFDdkIsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7NEJBQ3pCLE1BQU07cUJBQ1Q7b0JBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzNELENBQUMsZ0JBQXlDLEVBQUUsRUFBRSxDQUM1QyxnQkFBZ0IsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLFlBQVksQ0FDeEQsQ0FBQztvQkFDRixJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7d0JBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN4RSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQy9EO3lCQUFNLElBQUksTUFBTSxFQUFFO3dCQUNqQixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7cUJBQzdCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDOzRCQUMvQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7NEJBQ25CLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTt5QkFDbEMsQ0FBQyxDQUFDO3FCQUNKO29CQUVELElBQUksY0FBYyxHQUFtQjt3QkFDbkMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxXQUFXO3dCQUN4RCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsa0JBQWtCO3FCQUN2RSxDQUFDO29CQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxDQUFDO2dCQUVMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPO3FCQUMxRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQzFELFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWEsSUFBUSxDQUFDO0lBRTdCLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2hGLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsZUFBZTtnQkFDaEQsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsd0JBQXdCO2dCQUN6RCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsbUJBQW1CO2dCQUNwRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyw0QkFBNEI7Z0JBQ3ZELElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVc7UUFDakIsT0FBTztJQUNULENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUM7UUFDOUUsT0FBTyxhQUFhLEtBQUssaUJBQWlCLENBQUMsUUFBUSxDQUFDO0lBQ3RELENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDdkMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUFVLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7U0FDdkY7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztRQUN4QyxJQUFJLGFBQXFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxhQUFhLEdBQUcsS0FBSztpQkFDbEIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNMLGFBQWEsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDaEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzlCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RSxJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXlCRCxXQUFXLENBQUMsR0FBWTtRQUN0QixJQUFJLE9BQU8sR0FBeUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDO1FBQ3ZGLElBQUksSUFBSSxHQUFRLEdBQUcsQ0FBQyxJQUFLLENBQUM7UUFDMUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLEdBQUcsQ0FBQyxFQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSx1QkFBdUIsQ0FBQyxJQUFhO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0UsSUFBSSxXQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxhQUFhLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osd0VBQXdFO1lBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUM5QixFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzlDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQzlCLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDaEQsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBYTtRQUNwQyxJQUFJLE1BQU0sR0FBbUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsT0FBTztTQUNSO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxZQUFZLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QzthQUFNLElBQUksQ0FBQyxZQUFZLElBQUksZUFBZSxFQUFFO1lBQzNDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLGFBQWEsQ0FBQyxJQUFhO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpFLEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksRUFBRTtnQkFDN0MsT0FBTyxXQUFXLENBQUM7YUFDcEI7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxzQkFBc0IsQ0FBQyxJQUFhO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ3JELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FDbkIsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsc0JBQXVCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCw0QkFBNEIsQ0FBQyxJQUFhO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ3JELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXVCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUM5QixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLElBQUksTUFBTSxHQUF1QixFQUFFLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO2dCQUNqRSxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FDeEMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSyxDQUFDLENBQ2pFLENBQUM7Z0JBRUYsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFrQixFQUFFLEVBQUU7d0JBQzVDLElBQUksVUFBVSxHQUNaLE1BQU0sSUFBSSxDQUFDLFNBQVUsQ0FBQyx5QkFBeUIsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDakYsSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDZixVQUFVLEdBQUc7Z0NBQ1gsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksTUFBTTtnQ0FDOUIsS0FBSyxFQUFFLFNBQVM7Z0NBQ2hCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxNQUFNOzZCQUNoQyxDQUFDO3lCQUNIO3dCQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFvQixFQUFFLEVBQUU7WUFDcEYsSUFBSSxVQUFVLEdBQVEsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLFVBQVcsQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUM3RSxDQUFDLGFBQTZCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUMvRSxDQUFDO1lBQ0YsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQ2hGLENBQUMsTUFBd0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksS0FBSyxZQUFZLENBQ25FLENBQUM7WUFDRixJQUFJLFVBQVUsRUFBRTtnQkFDZCxJQUFJLDJCQUEyQixHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUNqRixDQUFDLGdCQUF5QyxFQUFFLEVBQUUsQ0FDNUMsZ0JBQWdCLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQzVELENBQUM7Z0JBQ0YsSUFBSSxLQUFLLENBQUM7Z0JBQ1YsSUFBSSxXQUFXLENBQUM7Z0JBQ2hCLElBQUksMkJBQTJCLEVBQUU7b0JBQy9CLEtBQUs7d0JBQ0gsMkJBQTJCLENBQUMsS0FBSyxLQUFLLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHOzRCQUN6RSxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUc7NEJBQ3JCLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO29CQUMzQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDdkQsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUM5RCxDQUFDLE1BQStCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxDQUFDLFlBQVksQ0FDckYsQ0FBQzt3QkFDRixXQUFXLEVBQUUsQ0FBQztxQkFDZjtpQkFDRjtnQkFDRCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsRUFBRSxLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDbEUsSUFBSSxLQUFhLENBQUM7Z0JBRWxCLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDcEMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQy9FO3FCQUFNO29CQUNMLEtBQUssR0FBRyxZQUFZLENBQUM7aUJBQ3RCO2dCQUVELElBQUksVUFBVSxHQUFHLGlCQUFpQixFQUFFLFVBQVUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDZixJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssMEJBQTBCLEVBQUU7d0JBQ3ZELFVBQVUsR0FBRzs0QkFDWCxJQUFJLEVBQUUsNEJBQTRCLENBQUMsUUFBUTs0QkFDM0MsVUFBVSxFQUFFLGlCQUFpQjt5QkFDOUIsQ0FBQztxQkFDSDt5QkFBTSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssc0JBQXNCLEVBQUU7d0JBQzFELFVBQVUsR0FBRzs0QkFDWCxJQUFJLEVBQUUsNEJBQTRCLENBQUMsUUFBUTs0QkFDM0MsVUFBVSxFQUFFLFlBQVk7eUJBQ3pCLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixHQUFHLGlCQUFpQjtvQkFDcEIsS0FBSyxFQUFFLEtBQUs7b0JBQ1osWUFBWSxFQUFFLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWTtvQkFDL0MsS0FBSztvQkFDTCxXQUFXO29CQUNYLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUMzRSxDQUFDLFdBQTZCLEVBQUUsRUFBRSxDQUNoQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFvQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDN0YsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQW9CLEVBQUUsRUFBRTtnQkFDckUsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixLQUFLLEVBQUUsRUFBRTtvQkFDVCxZQUFZLEVBQUUsZ0JBQWdCO29CQUM5QixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLG9CQUFvQixDQUFDLE1BQU07NEJBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ2pDLHdEQUF3RDs0QkFDeEQsSUFBSSxFQUFFO2dDQUNKO29DQUNFLElBQUksRUFBRSxZQUFZO2lDQUNuQjs2QkFDRjs0QkFDRCxLQUFLLEVBQUUsU0FBUzs0QkFDaEIsWUFBWSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDekIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQ0FDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQzs0QkFDcEMsQ0FBQyxDQUFDO3lCQUNMO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDLEVBQUU7WUFDakYsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLE9BQU8sRUFBRSxlQUFlLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxFQUFFO2dCQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLEtBQUssRUFBRSxFQUFFO29CQUNULFlBQVksRUFBRSxTQUFTO29CQUN2QixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLG9CQUFvQixDQUFDLElBQUk7NEJBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ2pDLElBQUksRUFBRSxXQUFXOzRCQUNqQiwyQkFBMkIsRUFBRSxTQUFTOzRCQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQzVDLElBQUksRUFBRSxFQUFFO3lCQUNUO3FCQUNGO29CQUNELFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBZ0I7UUFDeEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzlDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3hCLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLFFBQVMsRUFDbkMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxjQUFjLEVBQzlCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFDakIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBVyxFQUFFLEdBQVEsRUFBRSxRQUFhO1FBQ3hELElBQUksU0FBbUIsQ0FBQztRQUV4QixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBZ0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEY7UUFFRCxTQUFTLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxNQUFNLEdBQUc7WUFDakIsR0FBRyxRQUFRLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUM7UUFFRixJQUFJLGFBQWEsR0FBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZO1lBQzFDLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFO1lBQ2xELGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLE9BQVEsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksQ0FBQyxTQUFVLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDOUQsSUFBSSxDQUFDLFNBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNqRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxjQUFjO1lBQ3hDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFrQjtRQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsSUFBSSxHQUFHO2dCQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSztnQkFDckIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLENBQUMsVUFBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sU0FBUztRQUNkLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxPQUFPLENBQUMsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ00sYUFBYSxDQUFDLE9BQWdCO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUFnQjtRQUNwQyxJQUFJLGdCQUFzQyxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7WUFDN0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDcEYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFN0UsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3JDLENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FDL0QsQ0FBQztnQkFDRixJQUFJLGdCQUFnQixFQUFFO29CQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFDNUMsT0FBTztpQkFDUjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBVTtRQUN4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDL0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsR0FBSSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFNBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBOEI7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7YUFBTTtZQUNMLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWlCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxTQUFVLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksVUFBVSxHQUFvQjtZQUNoQyxPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLHdCQUF3QjthQUNoQztZQUNELElBQUksRUFBRSxFQUFFO1lBQ1IsZUFBZSxFQUFFLDJCQUEyQjtZQUM1QyxxQkFBcUIsRUFBRTtnQkFDckIsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxjQUFjO29CQUMxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSTtvQkFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2lCQUN0QjthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQzs7K0dBdHhCVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixtR0FGbEIsQ0FBQyxnQkFBZ0IsQ0FBQywwR0FZRCxnQkFBZ0Isa0RDN0Q5QywydUhBMEdBOzJGRHZEYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsWUFBWSxhQUdYLENBQUMsZ0JBQWdCLENBQUM7Nk1BT3BCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFHMEMsVUFBVTtzQkFBekQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bSxcclxuICBTbWFydFRhYmxlT3JkZXIsXHJcbiAgU21hcnRUYWJsZVR5cGUsXHJcbiAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxufSBmcm9tICcuLi9zbWFydC10YWJsZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRDb2x1bW5NZXRhLFxyXG4gIEdyaWRSb3csXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgR3JpZFVwZGF0ZURhdGEsXHJcbn0gZnJvbSAnLi9hcGkvZ3JpZC1hcGknO1xyXG5pbXBvcnQgeyBHcmlkVWlBY3Rpb25UeXBlLCBTbWFydEdyaWQsIFNtYXJ0TGF5b3V0RGVmIH0gZnJvbSAnLi9tb2RlbHMvbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtbGF5b3V0LWRlZmluZXIvdGFibGUtbGF5b3V0LWRlZmluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXhwYW5kYWJsZVNlY3Rpb24gfSBmcm9tICcuLi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0RGlhbG9nRGF0YSB9IGZyb20gJy4uL3NtYXJ0LWRpYWxvZy9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uLCBVaUFjdGlvbkJ1dHRvblR5cGUsIFVpQWN0aW9uRGVzY3JpcHRvciB9IGZyb20gJy4uL3ZpZXctY29udGV4dC9hcGknO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LWdyaWQuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1NtYXJ0R3JpZFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplOiBudW1iZXIgPSAxMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyNSwgNTBdO1xyXG5cclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQElucHV0KCkgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG4gIEBJbnB1dCgpIHV1aWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGV2OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHRhYmxlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdmNSZWZUYWJsZT86IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29tcG9uZW50UmVmVGFibGUhOiBDb21wb25lbnRSZWY8U21hcnR0YWJsZUNvbXBvbmVudD47XHJcbiAgc21hcnRUYWJsZSE6IFNtYXJ0VGFibGU8R3JpZFJvdz47XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuXHJcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xyXG4gIGRhdGFzb3VyY2U/OiBudWxsO1xyXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xyXG4gIGxlbmd0aD86IG51bWJlcjtcclxuICBwYWdlSW5kZXg/OiBudW1iZXI7XHJcbiAgdmFsdWVzOiBhbnk7XHJcbiAgZ3JpZFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG5cclxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2VzOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1aUFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhZnRlclZpZXdJbml0RXhlY3V0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0Jsb2NrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyB0cmVlXHJcbiAgdHJlZUNvbnRyb2w/OiBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz47XHJcbiAgdHJlZUZsYXR0ZW5lcj86IE1hdFRyZWVGbGF0dGVuZXI8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZURhdGFTb3VyY2U/OiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZUNoZWNrbGlzdFNlbGVjdGlvbj86IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogU21hcnRHcmlkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWxDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIGNhbGxlZCBhZnRlciBldmVyeSBzZXJ2aWNlIGNhbGwgKGxvYWQsIHNhdmUsIHJlZnJlc2gsIGV0Yy4pXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsO1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snc21hcnRHcmlkJ10pIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSBjaGFuZ2VzWydzbWFydEdyaWQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZD8ucGFnaW5hdG9yO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3V1aWQnXSkge1xyXG4gICAgICB0aGlzLnV1aWQgPSBjaGFuZ2VzWyd1dWlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkICYmIHRoaXMudXVpZCAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyBmb3IgZGV2IHB1cnBvc2VzXHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsO1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQgJiYgIXRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0RXhlY3V0ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgcm93cyBvZiB0aGUgdGFibGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dzKCk6IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+IHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlIS5zZWxlY3Rpb24hO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBHRVQgcmVxdWVzdCB0byB0aGUgZ2VuZXJpYyBHcmlkQVBJIGFuZCByZWZyZXNoZXMgdGhlIHByZXNlbnRlZFxyXG4gICAqIGdyaWQgd2l0aCB0aGUgbmV3ZXN0IG9uZS5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIHdpbGwgY2F1c2UgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbENoYW5nZWQgdG8gZmlyZVxyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmxvYWQodGhpcy51dWlkLCB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsO1xyXG4gICAgaWYgKGdyaWRNb2RlbCkge1xyXG4gICAgICB0aGlzLmxlbmd0aCA9IGdyaWRNb2RlbC50b3RhbFJvd0NvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gZ3JpZE1vZGVsLnBhZ2VTaXplO1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IGdyaWRNb2RlbC5wYWdlSW5kZXggPz8gMDtcclxuICAgICAgaWYgKGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnMgJiYgZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNob3dFZGl0Q29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zaG93RWRpdENvbHVtbnMgPSBncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNob3dFZGl0Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignR3JpZE1vZGVsIGlzIHVuZGVmaW5lZCBpbiBjb21wb25lbnQhJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdGFibGVSb3cgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsIS5wYWdlLnJvd3MhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0YWJsZVJvdy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBsYWNlSG9sZGVyUm93OiBhbnkgPSB7fTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5jb2x1bW5zLm1hcCgobWV0YTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgICBwbGFjZUhvbGRlclJvd1ttZXRhLnByb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyA9IFtwbGFjZUhvbGRlclJvd107XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRhYmxlVHlwZTtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LnRhYmxlVHlwZSkge1xyXG4gICAgICB0YWJsZVR5cGUgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcudGFibGVUeXBlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25UeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3Iuc2VsZWN0aW9uVHlwZSA9PT0gR3JpZFNlbGVjdGlvblR5cGUuQ2hlY2tib3hcclxuICAgICAgICAgID8gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YXHJcbiAgICAgICAgICA6IFNtYXJ0VGFibGVUeXBlLlJPV19TRUxFQ1Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YWJsZVR5cGUgPSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRBQkxFKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbmZpZzogU21hcnRUYWJsZUludGVyZmFjZTxHcmlkUm93PiA9IHtcclxuICAgICAgICAuLi50aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcsXHJcbiAgICAgICAgdGFibGVSb3dzOiB0YWJsZVJvdyxcclxuICAgICAgICB0YWJsZVR5cGUsXHJcbiAgICAgICAgY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM6IGF3YWl0IHRoaXMuY29uc3RydWN0SGVhZGVyKCkhLFxyXG4gICAgICAgIGV4cGFuZGFibGU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlLFxyXG4gICAgICAgIGV4cGFuZGVkQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kZWRDb21wb25lbnQsXHJcbiAgICAgICAgdHlwZTogU21hcnRUYWJsZUludGVyZmFjZVR5cGVFbnVtLk5PUk1BTCxcclxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uQ29kZXM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMhLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25zOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zPy5tYXAoKGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTpcclxuICAgICAgICAgICAgICBjb2RlID09PSAnX2FjdGlvblNlcGFyYXRvcl8nXHJcbiAgICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVCdXR0b25UeXBlLlNFUEFSQVRPUlxyXG4gICAgICAgICAgICAgICAgOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgY29kZTogY29kZSxcclxuICAgICAgICAgICAgLy8gbGFiZWw6IHRoaXMuYnV0dG9uVHJhbnNsYXRvcih7IGNvZGU6IGNvZGUgfSksXHJcbiAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAvLyBhcmdzOiBbXHJcbiAgICAgICAgICAgIC8vICAge1xyXG4gICAgICAgICAgICAvLyAgICAgY29kZTogY29kZSxcclxuICAgICAgICAgICAgLy8gICB9LFxyXG4gICAgICAgICAgICAvLyBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodFByb3BlcnR5ICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRDbGFzc1xyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRDbGFzcyA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0Q2xhc3M7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0UHJvcGVydHkgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodFByb3BlcnR5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNlcnZpY2VUb1VzZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcub25TZWxlY3Rpb24gPSB0aGlzLm9uU2VsZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGFibGVDb25maWcub25BbGxTZWxlY3Rpb24gPSB0aGlzLm9uU2VsZWN0QWxsLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBhcmVkIGZvciBzaW1wbGUgY2xpY2tzXHJcbiAgICAgIC8vIGlmICghdGFibGVDb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAvLyAgIHRhYmxlQ29uZmlnLm9uUm93Q2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljayA9IHRoaXMub25Eb3VibGVDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLmlzUm93RGlzYWJsZWRQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3RhYmxlUHJvcGVydHlOYW1lID0gJ3NlbGVjdGFibGUnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGFibGVDb25maWcuYXN5bmNPbkV4cGFuZCkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnJvd0V4cGFuZGVyID0gdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VydmljZSEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvbk1vZGU7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvbiAmJlxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSAmJlxyXG4gICAgICAgIHNlbGVjdGlvbk1vZGUgIT09IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSA9ICdpZCc7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlXHJcbiAgICAgICAgICAucm93cyEuZmlsdGVyKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LnNlbGVjdGVkKVxyXG4gICAgICAgICAgLm1hcCgoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5pZCEpO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPihpc011bHRpcGxlLCBzZWxlY3RlZElkcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZSA9IG5ldyBTbWFydFRhYmxlPGFueT4odGFibGVDb25maWcpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmVGFibGUpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnVwZGF0ZVNtYXJ0VGFibGUodGhpcy5zbWFydFRhYmxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZjUmVmVGFibGU/LmNsZWFyKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52Y1JlZlRhYmxlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgICB0aGlzLnZjUmVmVGFibGUhLFxyXG4gICAgICAgICAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxuICAgICAgICAgIG5ldyBNYXA8c3RyaW5nLCBhbnk+KFtbJ3NtYXJ0VGFibGUnLCB0aGlzLnNtYXJ0VGFibGVdXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5zb3J0RXZlbnRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLnByb3BlcnR5TmFtZSA9IGhlYWRlci5wcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDUpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChoZWFkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5BU0M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIFNtYXJ0VGFibGVPcmRlci5BU0M6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSBTbWFydFRhYmxlT3JkZXIuREVTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkRFU0M6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGZpbHRlciA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZChcclxuICAgICAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyICYmICFoZWFkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0LmluZGV4T2YoZmlsdGVyKTtcclxuICAgICAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0LnNwbGljZShpbmRleCEsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5vcmRlciA9IGhlYWRlci5vcmRlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgb3JkZXI6IGhlYWRlci5vcmRlcixcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogaGVhZGVyLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGdyaWRVcGRhdGVEYXRhOiBHcmlkVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgICAgICBvcmRlckJ5TGlzdDogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdCxcclxuICAgICAgICAgICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJlZENvbHVtbk5hbWVzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uuc29ydCh0aGlzLnNtYXJ0R3JpZCEsIGdyaWRVcGRhdGVEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNtYXJ0VGFibGUuc2VsZWN0aW9uPy5jaGFuZ2VkXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VzLm5leHQocm93KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kKHJvd0lkOiBudW1iZXIpOiBhbnkge31cclxuXHJcbiAgcHVibGljIGFzeW5jIGV4cGFuZEFzeW5jKHJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzKSB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93c1tyb3dJbmRleF07XHJcbiAgICAgIGlmIChyb3cgJiYgcm93LmlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmQodGhpcy5zbWFydEdyaWQhLCByb3cuaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvd0luZGV4LnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJFeHBhbmRhYmxlU2VjdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9ucyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgaGVhZGVyQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50LFxyXG4gICAgICAgIGhlYWRlcklucHV0TmFtZTogdGhpcy5zbWFydEdyaWQhLmhlYWRlckNvbXBvbmVudElucHV0TmFtZSxcclxuICAgICAgICBoZWFkZXJEYXRhOiBpdGVtLFxyXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgaW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudElucHV0TmFtZSxcclxuICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckNhcmRzKCk6IHZvaWQge1xyXG4gICAgLy8gVE9ET1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc011bHRpcGxlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VydmljZSEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvbk1vZGU7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1lcixcclxuICAgICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxyXG4gICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5cclxuICAgICAgKTtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgICB0aGlzLnRyZWVEYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8R3JpZFJvdz4odGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzO1xyXG4gICAgbGV0IGV4cGFuZGVkTm9kZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XHJcbiAgICBpZiAobm9kZXMpIHtcclxuICAgICAgZXhwYW5kZWROb2RlcyA9IG5vZGVzXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQobm9kZSkpXHJcbiAgICAgICAgLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyEuZm9yRWFjaCgocm93OiBhbnkpID0+IChyb3cubGV2ZWwgPSB1bmRlZmluZWQpKTtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5maWx0ZXIoKHJvdykgPT4gIXJvdy5wYXJlbnQpO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5jbGVhcigpO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LnNlbGVjdChub2RlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5jb2xsYXBzZUFsbCgpO1xyXG4gICAgZXhwYW5kZWROb2Rlcy5mb3JFYWNoKChyb3dJZCkgPT4ge1xyXG4gICAgICBsZXQgcm93ID0gdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzLmZpbmQoKHJvdykgPT4gcm93SWQgPT09IHJvdy5pZCk7XHJcbiAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sPy5leHBhbmQocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMZXZlbCA9IChub2RlOiBhbnkpID0+IG5vZGUubGV2ZWwgPz8gMDtcclxuXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyaWRSb3cpID0+IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSk7XHJcblxyXG4gIGdldENoaWxkcmVuID0gKG5vZGU6IEdyaWRSb3cpOiBHcmlkUm93W10gPT4ge1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgbGV0IHJvd3MgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2Uucm93cz8uZmlsdGVyKChyb3cpID0+XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uc29tZSgoY2hpbGQpID0+IGNoaWxkID09PSByb3cuaWQhKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAocm93cykge1xyXG4gICAgICAgIHJldHVybiByb3dzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfTtcclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZURhdGE6IEdyaWRSb3cpID0+IHRoaXMuaXNFeHBhbmRhYmxlKF9ub2RlRGF0YSk7XHJcblxyXG4gIHRyYW5zZm9ybWVyID0gKHJvdzogR3JpZFJvdywgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgKHJvdyBhcyBhbnkpLmxldmVsID0gbGV2ZWw7XHJcbiAgICByZXR1cm4gcm93O1xyXG4gIH07XHJcblxyXG4gIGdldFRyZWVJdGVtKHJvdzogR3JpZFJvdyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29sdW1uczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcztcclxuICAgIGxldCBkYXRhOiBhbnkgPSByb3cuZGF0YSE7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IGRhdGFbY29sXSkuam9pbignICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdy5pZCE7XHJcbiAgfVxyXG5cclxuICAvKiogVG9nZ2xlIHRoZSB0cmVlTm9kZSBzZWxlY3Rpb24uIFNlbGVjdC9kZXNlbGVjdCBhbGwgdGhlIGRlc2NlbmRhbnRzIG5vZGUgKi9cclxuICB0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQmVmb3JlID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLm1hcCgocm93KSA9PiByb3cuaWQpO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xyXG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2whLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxyXG4gICAgICAgID8gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cylcclxuICAgICAgICA6IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNjZW5kYW50cyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGlvbkFmdGVyID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLm1hcCgocm93KSA9PiByb3cuaWQpO1xyXG5cclxuICAgIGxldCBzZWxlY3RlZElkcyA9IHNlbGVjdGlvbkFmdGVyLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkJlZm9yZS5pbmNsdWRlcyhzKSk7XHJcbiAgICBsZXQgdW5zZWxlY3RlZElkcyA9IHNlbGVjdGlvbkJlZm9yZS5maWx0ZXIoKHMpID0+ICFzZWxlY3Rpb25BZnRlci5pbmNsdWRlcyhzKSk7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gd2hlbiBzZXJ2aWNlIGNhbGwgaXMgYWN0aXZlICghZGV2KSwgb25TZWxlY3Qgd2lsbCB0b2dnbGUgcm93LnNlbGVjdGVkXHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93LmlkKSlcclxuICAgICAgICAuZm9yRWFjaCgocm93KSA9PiAocm93LnNlbGVjdGVkID0gdHJ1ZSkpO1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93c1xyXG4gICAgICAgID8uZmlsdGVyKChyb3cpID0+IHVuc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93LmlkKSlcclxuICAgICAgICAuZm9yRWFjaCgocm93KSA9PiAocm93LnNlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgIH1cclxuICAgIGxldCB1bmlvbiA9IHNlbGVjdGVkSWRzLmNvbmNhdCh1bnNlbGVjdGVkSWRzKTtcclxuICAgIHRoaXMub25TZWxlY3RMaXN0KHVuaW9uKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgcGFyZW50OiBHcmlkUm93IHwgbnVsbCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgdGhpcy5jaGVja1BhcmVudE5vZGVTZWxlY3Rpb24ocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKHBhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1BhcmVudE5vZGVTZWxlY3Rpb24obm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBpZiAobm9kZVNlbGVjdGVkICYmICFkZXNjQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xyXG4gICAgfSBlbHNlIGlmICghbm9kZVNlbGVjdGVkICYmIGRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogR2V0IHRoZSBwYXJlbnQgbm9kZSBvZiBhIG5vZGUgKi9cclxuICBnZXRQYXJlbnROb2RlKG5vZGU6IEdyaWRSb3cpOiBHcmlkUm93IHwgbnVsbCB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG5cclxuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbCEuZGF0YU5vZGVzW2ldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBXaGV0aGVyIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIG5vZGUgYXJlIHNlbGVjdGVkLiAqL1xyXG4gIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogR3JpZFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sIHx8ICF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID1cclxuICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICBkZXNjZW5kYW50cy5ldmVyeSgoY2hpbGQpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKTtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgcGFydCBvZiB0aGUgZGVzY2VuZGFudHMgYXJlIHNlbGVjdGVkICovXHJcbiAgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gZGVzY2VuZGFudHMuc29tZSgoY2hpbGQpID0+IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiEuaXNTZWxlY3RlZChjaGlsZCkpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY29uc3RydWN0SGVhZGVyKCk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcltdPiB7XHJcbiAgICBsZXQgaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MgJiYgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzLm1hcChhc3luYyAoZ3JpZFJvdzogR3JpZFJvdykgPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld1VpQWN0aW9ucyA9IGdyaWRSb3cuYWN0aW9ucz8uZmlsdGVyKFxyXG4gICAgICAgICAgICAodWlBY3Rpb246IGFueSkgPT4gIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChuZXdVaUFjdGlvbnMpIHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgbmV3VWlBY3Rpb25zLm1hcChhc3luYyAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVzY3JpcHRvcjogVWlBY3Rpb25EZXNjcmlwdG9yID1cclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U/LmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVpQWN0aW9uLmNvZGUgPz8gJ0NPREUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5vcm1hbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5zZXQodWlBY3Rpb24uY29kZSEsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKGFzeW5jIChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBkZXNjQ29sdW1uOiBhbnkgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLmRlc2NyaXB0b3IhLmNvbHVtbnMhLmZpbmQoXHJcbiAgICAgICAgICAoY29sRGVzY3JpcHRvcjogR3JpZENvbHVtbk1ldGEpID0+IGNvbERlc2NyaXB0b3IucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlciA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICAgICAoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZXNjQ29sdW1uKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdD8uZmluZChcclxuICAgICAgICAgICAgKGZpbHRlckV4cHJlc3Npb246IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PlxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGxldCBvcmRlcjtcclxuICAgICAgICAgIGxldCBvcmRlck51bWJlcjtcclxuICAgICAgICAgIGlmIChmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0pIHtcclxuICAgICAgICAgICAgb3JkZXIgPVxyXG4gICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbS5vcmRlciA9PT0gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkuT3JkZXJFbnVtLkFzY1xyXG4gICAgICAgICAgICAgICAgPyBTbWFydFRhYmxlT3JkZXIuQVNDXHJcbiAgICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgb3JkZXJOdW1iZXIgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PiBmaWx0ZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgb3JkZXJOdW1iZXIrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgb3JpZ25hbExhYmVsID0gY3VzdG9tVGFibGVIZWFkZXI/LmxhYmVsID8/IGRlc2NDb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgICBsZXQgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudHJhbnNsYXRlU2VydmljZT8uZ2V0KG9yaWduYWxMYWJlbCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsYWJlbCA9IG9yaWduYWxMYWJlbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IGN1c3RvbVRhYmxlSGVhZGVyPy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlVGltZScpIHtcclxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFVElNRSxcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eXl5Lk1NLmRkIEg6bW0nLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuT2Zmc2V0RGF0ZScpIHtcclxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFVElNRSxcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eXl5Lk1NLmRkJyxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5jdXN0b21UYWJsZUhlYWRlcixcclxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdkYXRhLicgKyBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgICAgIG9yZGVyTnVtYmVyLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgY29tcGxlbWVudCA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbHRlcihcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PlxyXG4gICAgICAgICFoZWFkZXIuc29tZSgodEg6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRILnByb3BlcnR5TmFtZS5pbmNsdWRlcyh0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUpKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY29tcGxlbWVudCkge1xyXG4gICAgICBoZWFkZXIucHVzaCguLi5jb21wbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnNpbXBsZUJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLm9wdGlvbnMuc2ltcGxlQnV0dG9ucy5mb3JFYWNoKCh1aUFjdGlvbkNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3NpbXBsZV9idXR0b25zJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLlJBSVNFRCxcclxuICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgLy8gbGFiZWw6IHRoaXMuYnV0dG9uVHJhbnNsYXRvcih7IGNvZGU6IHVpQWN0aW9uQ29kZSB9KSxcclxuICAgICAgICAgICAgICBhcmdzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGNvZGU6IHVpQWN0aW9uQ29kZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgIHNob3dCdXR0b25JZjogKHJvdzogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgcm93LmFjdGlvbnMuc29tZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmNvZGUgPT09IHVpQWN0aW9uQ29kZTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFoZWFkZXIuc29tZSgoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSAnbXlfbWVudScpKSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8ucm93VWlBY3Rpb25UeXBlID09PSBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUpIHtcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdteV9tZW51JyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlUsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGljb246ICdtb3JlX3ZlcnQnLFxyXG4gICAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZTogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGlzU29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50LnBhZ2VTaXplICogZXZlbnQucGFnZUluZGV4O1xyXG4gICAgbGV0IGxpbWl0ID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBhbnlbXSwgcm93OiBhbnksIHVpQWN0aW9uOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBfdWlBY3Rpb246IFVpQWN0aW9uO1xyXG5cclxuICAgIGlmICghdWlBY3Rpb24pIHtcclxuICAgICAgdWlBY3Rpb24gPSByb3cuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlID09PSBhcmdzWzBdLmNvZGUpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIF91aUFjdGlvbiA9IHsgLi4udWlBY3Rpb24gfTtcclxuICAgIF91aUFjdGlvbi5wYXJhbXMgPSB7XHJcbiAgICAgIC4uLnVpQWN0aW9uLnBhcmFtcyxcclxuICAgICAgbW9kZWw6IHJvdyxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHVpQWN0aW9uTW9kZWw6IGFueSA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlLFxyXG4gICAgICB1aUFjdGlvbjogX3VpQWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnVpQWN0aW9uTW9kZWxDYWxsYmFjaykge1xyXG4gICAgICB1aUFjdGlvbk1vZGVsID0gdGhpcy5zbWFydEdyaWQhLm9wdGlvbnMhLnVpQWN0aW9uTW9kZWxDYWxsYmFjayh1aUFjdGlvbk1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB1aUFjdGlvbk1vZGVsO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKF91aUFjdGlvbiwge1xyXG4gICAgICB3aWRnZXRJZDogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBub2RlSWQ6IHJvdy5pZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidXR0b25UcmFuc2xhdG9yKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICBsZXQgZGVzYyA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpO1xyXG4gICAgaWYgKCFkZXNjKSB7XHJcbiAgICAgIGRlc2MgPSB7XHJcbiAgICAgICAgdGl0bGU6IHVpQWN0aW9uLmNvZGUhLFxyXG4gICAgICAgIHR5cGU6ICdGTEFUJyxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHVpQWN0aW9uLmRlc2NyaXB0b3IpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLm1lcmdlQWN0aW9uRGVzY3JpcHRvckludG9DbGllbnQodWlBY3Rpb24uZGVzY3JpcHRvciEsIGRlc2MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc2M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGF5b3V0RGVmKCk6IHR5cGVvZiBTbWFydExheW91dERlZiB7XHJcbiAgICByZXR1cm4gU21hcnRMYXlvdXREZWY7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbkRvdWJsZUNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlT25DbGljayhncmlkUm93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgZGVmYXVsdFJvd0FjdGlvbjogVWlBY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8uZGVmYXVsdFJvd0FjdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuc2VydmljZS5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJvd0FjdGlvbkNvZGUgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zW2luZGV4XTtcclxuXHJcbiAgICAgICAgZGVmYXVsdFJvd0FjdGlvbiA9IGdyaWRSb3cuYWN0aW9ucy5maW5kKFxyXG4gICAgICAgICAgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gdWlBY3Rpb24uY29kZSA9PT0gZGVmYXVsdFJvd0FjdGlvbkNvZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Um93QWN0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGUoW10sIGdyaWRSb3csIGRlZmF1bHRSb3dBY3Rpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLm9uU2VsZWN0TGlzdChbcm93SWRdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0Um93SW50ZXJuYWwocm93SWQ6IGFueSkge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbmQoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQgPT09IHJvd0lkKTtcclxuICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdCh0aGlzLnNtYXJ0R3JpZCEsIHJvdyEpO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdExpc3Qocm93SWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0lkcy5mb3JFYWNoKChyb3dJZCkgPT4gdGhpcy5zZWxlY3RSb3dJbnRlcm5hbChyb3dJZCkpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIGVkaXRDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgbGV0IGRpYWxvZ0RhdGE6IFNtYXJ0RGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29udGVudDoge1xyXG4gICAgICAgIHRpdGxlOiAnT3N6bG9wb2sgdGVzdHJlc3phYsOhc2EnLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7fSxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0czoge1xyXG4gICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgdXVpZDogdGhpcy51dWlkLFxyXG4gICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICAgICAgdmlldzogdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LFxyXG4gICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsIHsgZGF0YTogZGlhbG9nRGF0YSB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwic21hcnRHcmlkLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWFydC1ncmlkLWVkaXQtYnV0dG9uXCIgKm5nSWY9XCJzbWFydEdyaWQuc2hvd0VkaXRDb2x1bW5zXCI+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0Q29sdW1ucygpXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgIE9zemxvcG9rIHRlc3RyZXN6YWLDoXNhXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgID48L2FwcC1zbWFydC1ncmlkLWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5UUkVFICYmIHRyZWVDb250cm9sXCJcclxuICAgICAgY2xhc3M9XCJ0cmVlLWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJ3JlcGVhdCgnICsgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICsgJywgMWZyKSdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICB9XCJcclxuICAgID5cclxuICAgICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cInRyZWVEYXRhU291cmNlIVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbCFcIj5cclxuICAgICAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50PVwiMjRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkIGNsYXNzPVwidHJlZS1idXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja2xpc3QtbGVhZi1ub2RlXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+e3sgZ2V0VHJlZUl0ZW0obm9kZSkgfX08L21hdC1jaGVja2JveFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICBjbGFzcz1cInRyZWUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBub2RlLml0ZW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAge3sgdHJlZUNvbnRyb2whLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgIDwvbWF0LXRyZWU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLnBhZ2luYXRvciAmJiAhdHJlZUNvbnRyb2xcIlxyXG4gICAgI3BhZ2luYXRvclxyXG4gICAgW2xlbmd0aF09XCJsZW5ndGhcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChwYWdlKT1cIm9uQ2hhbmdlUGFnZSgkZXZlbnQpXCJcclxuICA+PC9tYXQtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxuIl19
|