verben-ng-ui 1.2.55 → 1.2.56
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/esm2022/src/lib/components/data-table/data-table.component.mjs +2 -2
- package/esm2022/src/lib/components/data-table/data-table.types.mjs +1 -1
- package/esm2022/src/lib/components/date-picker/date-picker.component.mjs +44 -11
- package/esm2022/src/lib/components/date-picker/date-picker.module.mjs +8 -4
- package/esm2022/src/lib/components/pop-up/pop-up.component.mjs +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs +51 -14
- package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs.map +1 -1
- package/package.json +19 -19
- package/src/lib/components/data-table/data-table.types.d.ts +1 -0
- package/src/lib/components/date-picker/date-picker.component.d.ts +4 -1
- package/src/lib/components/date-picker/date-picker.module.d.ts +2 -1
- package/src/lib/components/pop-up/pop-up.component.d.ts +1 -1
|
@@ -35,7 +35,7 @@ export class DataTableComponent {
|
|
|
35
35
|
displayColumns;
|
|
36
36
|
constructor() {
|
|
37
37
|
this.displayColumns = computed(() => {
|
|
38
|
-
return this.columns().map((column) => {
|
|
38
|
+
return this.columns().filter(({ isHidden }) => !isHidden).map((column) => {
|
|
39
39
|
const matchingTemplate = this.columnTemplates().find((t) => t.columnId === column.id);
|
|
40
40
|
if (matchingTemplate) {
|
|
41
41
|
console.log('Found matching template:', matchingTemplate);
|
|
@@ -539,4 +539,4 @@ const defaultTableStyles = {
|
|
|
539
539
|
borderTop: '2px solid #e0e0e0',
|
|
540
540
|
},
|
|
541
541
|
};
|
|
542
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLE1BQU0sRUFDTixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQVFsRSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLHdDQUF3QztJQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ2xELE9BQU8sR0FBRyxLQUFLLEVBQVcsQ0FBQyxDQUFDLDJDQUEyQztJQUN2RSxlQUFlLEdBQUcsS0FBSyxFQUlwQixDQUFDO0lBRUosT0FBTyxHQUFHLEtBQUssRUFBK0IsQ0FBQztJQUMvQyxnQkFBZ0IsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDekMscUJBQXFCLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsR0FB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LFNBQVM7U0FDM0I7UUFDRCxHQUFHLEVBQUU7WUFDSCxlQUFlLEVBQUUsU0FBUztTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILFFBQVEsRUFBRSxDQUFDO1lBQ1gsS0FBSyxFQUFFO2dCQUNMLGVBQWUsRUFBRSxTQUFTO2FBQzNCO1NBQ0Y7S0FDRjtJQUNELEtBQUssRUFBRTtRQUNMLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFlBQVksRUFBRSxtQkFBbUI7S0FDbEM7SUFDRCxNQUFNLEVBQUU7UUFDTixlQUFlLEVBQUUsU0FBUztRQUMxQixVQUFVLEVBQUUsTUFBTTtRQUNsQixLQUFLLEVBQUUsTUFBTTtRQUNiLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFNBQVMsRUFBRSxtQkFBbUI7S0FDL0I7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBFdmVudEVtaXR0ZXIsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbHVtbkRlZmluaXRpb24sXG4gIERhdGFXaXRoS2V5LFxuICBGb3JtR3JvdXBDb25maWcsXG4gIEdyb3VwZWREYXRhUm93LFxufSBmcm9tICcuL2RhdGEtdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRhYmxlU3R5bGVzIH0gZnJvbSAnLi9zdHlsZS50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50LmNzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQ8VD4ge1xuICAvLyBNb2RpZnkgZGF0YSBpbnB1dCB0byB1c2UgZ3JvdXBlZCBkYXRhXG4gIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxUW10+KCk7XG4gIGNvbHVtbnMgPSBpbnB1dC5yZXF1aXJlZDxDb2x1bW5EZWZpbml0aW9uPFQ+W10+KCk7XG4gIGRhdGFLZXkgPSBpbnB1dDxrZXlvZiBUPigpOyAvLyBOZXcgcmVxdWlyZWQgaW5wdXQgZm9yIHVuaXF1ZSBpZGVudGlmaWVyXG4gIGZvcm1Hcm91cENvbmZpZyA9IGlucHV0PFxuICAgIEZvcm1Hcm91cENvbmZpZzx7XG4gICAgICBbSyBpbiBrZXlvZiBUXTogQWJzdHJhY3RDb250cm9sO1xuICAgIH0+XG4gID4oKTtcblxuICBncm91cEJ5ID0gaW5wdXQ8a2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpPigpO1xuICB1c2VWaXJ0dWFsU2Nyb2xsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBpbnB1dDxudW1iZXI+KDQ4KTtcbiAgdmlld1BvcnQgPSB2aWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KTtcblxuICBASW5wdXQoKSBzdHlsZUNvbmZpZzogVGFibGVTdHlsZXMgPSBkZWZhdWx0VGFibGVTdHlsZXM7XG5cbiAgY29sdW1uVGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKENvbHVtbkRpcmVjdGl2ZSk7XG5cbiAgQE91dHB1dCgpIHJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByb3dTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcm93UmV2ZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBUO1xuICB9PigpO1xuICBAT3V0cHV0KCkgcm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLyoqIEludGVybmFsbHkgbWFpbnRhaW5lZCBkYXRhLCB3aXRoIGd1YXJhbnRlZWQgdW5pcXVlbmVzcyBkdWUgdG8ga2V5IHByb3BlcnR5ICovXG4gIHRhYmxlRGF0YTogU2lnbmFsPERhdGFXaXRoS2V5PFQ+W10+O1xuXG4gIHByaXZhdGUgZWRpdGluZ1Jvd3NTaWduYWwgPSBzaWduYWw8U2V0PHN0cmluZyB8IG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRSb3dzU2lnbmFsID0gc2lnbmFsPFNldDxzdHJpbmcgfCBudW1iZXI+PihuZXcgU2V0KCkpO1xuICAvLyBwcml2YXRlIGVkaXRlZERhdGFTaWduYWwgPSBzaWduYWw8TWFwPHN0cmluZyB8IG51bWJlciwgRWRpdGVkRGF0YTxUPj4+KFxuICAvLyAgIG5ldyBNYXAoKVxuICAvLyApO1xuICBwcml2YXRlIHVuRWRpdGVkRGF0YVNpZ25hbCA9IHNpZ25hbDxNYXA8c3RyaW5nIHwgbnVtYmVyLCBUPj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSBmb3JtR3JvdXBzU2lnbmFsID0gc2lnbmFsPE1hcDxzdHJpbmcgfCBudW1iZXIsIEZvcm1Hcm91cD4+KG5ldyBNYXAoKSk7XG5cbiAgLy8gY29sdW1uc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29sdW1ucygpKTtcblxuICBkaXNwbGF5Q29sdW1uczogU2lnbmFsPENvbHVtbkRlZmluaXRpb248VD5bXT47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICh0KSA9PiB0LmNvbHVtbklkID09PSBjb2x1bW4uaWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRm91bmQgbWF0Y2hpbmcgdGVtcGxhdGU6JywgbWF0Y2hpbmdUZW1wbGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUgPz8gY29sdW1uLmNlbGxUZW1wbGF0ZSxcbiAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6XG4gICAgICAgICAgICAgIG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSA/PyBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlOlxuICAgICAgICAgICAgICBtYXRjaGluZ1RlbXBsYXRlLmhlYWRlclRlbXBsYXRlID8/IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOlxuICAgICAgICAgICAgICBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlID8/IGNvbHVtbi5mb290ZXJUZW1wbGF0ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGVEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgY29uc3QgZGF0YUtleSA9IHRoaXMuX2dldFJvd0lkQnlEYXRhS2V5KGl0ZW0pO1xuICAgICAgICBpZiAoZGF0YUtleSkge1xuICAgICAgICAgIGtleSA9IGRhdGFLZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gaW5kZXggYXMgRGF0YVdpdGhLZXk8VD5bJ19rZXknXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9yaWdpbmFsRGF0YTogaXRlbSxcbiAgICAgICAgICBfa2V5OiBrZXksXG4gICAgICAgICAgX2tleV9wcm9wOiB0aGlzLmRhdGFLZXkoKSA/PyAnX2luZGV4JyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhKCk7XG5cbiAgICAgIGlmICh0aGlzLnVzZVZpcnR1YWxTY3JvbGwoKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0KCkge1xuICAgIGNvbnN0IHZpZXdwb3J0SW5zdGFuY2UgPSB0aGlzLnZpZXdQb3J0KCk7XG4gICAgaWYgKHZpZXdwb3J0SW5zdGFuY2UpIHtcbiAgICAgIHZpZXdwb3J0SW5zdGFuY2UuY2hlY2tWaWV3cG9ydFNpemUoKTsgLy8gRXhhbXBsZSB1c2FnZVxuICAgIH1cbiAgfVxuXG4gIGhhc0Zvb3RlciA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucygpLnNvbWUoKGNvbCkgPT4gY29sLmZvb3RlclRlbXBsYXRlICE9PSB1bmRlZmluZWQpXG4gICk7XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgcm93XG4gIHByaXZhdGUgX2dldFJvd0lkQnlEYXRhS2V5KHJvdzogVCk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5kYXRhS2V5KCk7XG4gICAgaWYgKGtleSkge1xuICAgICAgY29uc3QgdmFsdWUgPSByb3dba2V5XTtcblxuICAgICAgLy8gQ29udmVydCB0byBzdHJpbmcgb3IgbnVtYmVyIGlmIHBvc3NpYmxlLCBvdGhlcndpc2Ugc3RyaW5naWZ5XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFR5cGUgZ3VhcmQgbWV0aG9kIHRvIGNoZWNrIGZvciBncm91cCByb3dzXG4gIGlzR3JvdXBSb3cocm93OiBUKTogcm93IGlzIFQgJiB7IGlzR3JvdXBSb3c6IHRydWU7IGdyb3VwVGl0bGU6IGFueSB9IHtcbiAgICByZXR1cm4gISEocm93IGFzIGFueSkuaXNHcm91cFJvdztcbiAgfVxuXG4gIHRyYWNrQnlSb3dLZXkoaW5kZXg6IG51bWJlciwgcm93OiBhbnkpIHtcbiAgICByZXR1cm4gcm93Ll9rZXk7XG4gIH1cblxuICAvLyBDb21wdXRlZCBwcm9wZXJ0eSBmb3IgZ3JvdXBlZCBkYXRhXG5cbiAgZ3JvdXBlZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmdyb3VwQnkoKSkgcmV0dXJuIHRoaXMudGFibGVEYXRhKCkgYXMgR3JvdXBlZERhdGFSb3c8VD5bXTtcblxuICAgIGNvbnN0IGdldEdyb3VwVmFsdWUgPVxuICAgICAgdHlwZW9mIHRoaXMuZ3JvdXBCeSgpID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gKHRoaXMuZ3JvdXBCeSgpIGFzIChyb3c6IFQpID0+IGFueSlcbiAgICAgICAgOiAocm93OiBUKSA9PiByb3dbdGhpcy5ncm91cEJ5KCkgYXMga2V5b2YgVF07XG5cbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPGFueSwgRGF0YVdpdGhLZXk8VD5bXT4oKTtcblxuICAgIHRoaXMudGFibGVEYXRhKCkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoZ2V0R3JvdXBWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSBnZXRHcm91cFZhbHVlKHJvdy5vcmlnaW5hbERhdGEpO1xuICAgICAgICBjb25zdCBleGlzdGluZ0dyb3VwID0gZ3JvdXBzLmdldChncm91cFZhbHVlKSB8fCBbXTtcbiAgICAgICAgZ3JvdXBzLnNldChncm91cFZhbHVlLCBbLi4uZXhpc3RpbmdHcm91cCwgcm93XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBncm91cGVkRGF0YUFycmF5OiBHcm91cGVkRGF0YVJvdzxUPltdID0gW107XG5cbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXBSb3dzLCBncm91cFZhbHVlKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgZ3JvdXAgaGVhZGVyIHJvd1xuICAgICAgY29uc3QgZ3JvdXBSb3c6IEdyb3VwZWREYXRhUm93PFQ+ID0ge1xuICAgICAgICAuLi4oe30gYXMgRGF0YVdpdGhLZXk8VD4pLCAvLyBDcmVhdGUgZW1wdHkgb2JqZWN0IG9mIHR5cGUgVCBhcyBiYXNlXG4gICAgICAgIF9rZXk6IGBncm91cC0ke2dyb3VwVmFsdWV9YCxcbiAgICAgICAgaXNHcm91cFJvdzogdHJ1ZSxcbiAgICAgICAgZ3JvdXBWYWx1ZSxcbiAgICAgICAgZ3JvdXBUaXRsZTogZ3JvdXBWYWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIGdyb3VwZWREYXRhQXJyYXkucHVzaChncm91cFJvdyk7XG4gICAgICAvLyBBZGQgcmVndWxhciByb3dzIHdpdGggdGhlIG9wdGlvbmFsIGlzR3JvdXBSb3cgcHJvcGVydHkgKHVuZGVmaW5lZCBieSBkZWZhdWx0KVxuICAgICAgZ3JvdXBlZERhdGFBcnJheS5wdXNoKC4uLihncm91cFJvd3MgYXMgR3JvdXBlZERhdGFSb3c8VD5bXSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdyb3VwZWREYXRhQXJyYXk7XG4gIH0pO1xuXG4gIGdldENlbGxWYWx1ZSA9IChyb3c6IFQsIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPik6IGFueSA9PiB7XG4gICAgLy8gRm9yIGdyb3VwIHJvd3MsIHJldHVybiB0aGUgZ3JvdXAgdGl0bGUgaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMuaXNHcm91cFJvdyhyb3cpKSB7XG4gICAgICByZXR1cm4gKHJvdyBhcyBhbnkpLmdyb3VwVGl0bGU7XG4gICAgfVxuXG4gICAgLy8gRXhpc3RpbmcgbG9naWMgZm9yIG5vcm1hbCByb3dzXG4gICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uYWNjZXNzb3JLZXldO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uLmFjY2Vzc29yRm4gPyBjb2x1bW4uYWNjZXNzb3JGbihyb3cpIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIHB1YmxpYyBpc1Jvd0VkaXRpbmcgPSAocm93S2V5OiBEYXRhV2l0aEtleTxUPlsnX2tleSddKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ1Jvd3NTaWduYWwoKS5oYXMocm93S2V5KTtcbiAgfTtcblxuICBwdWJsaWMgdG9nZ2xlUm93RWRpdCA9IChyb3dJZDogRGF0YVdpdGhLZXk8VD5bJ19rZXknXSkgPT4ge1xuICAgIGxldCBkYXRhOiBEYXRhV2l0aEtleTxUPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IC0xO1xuXG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChkYXR1bSwgaSkgPT4ge1xuICAgICAgaWYgKGRhdHVtLl9rZXkgPT09IHJvd0lkKSB7XG4gICAgICAgIGRhdGEgPSBkYXR1bTtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnRvZ2dsZVJvd0VkaXRJbnRlcm5hbChkYXRhLCBpbmRleCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgdG9nZ2xlUm93RWRpdEludGVybmFsID0gKHJvdzogRGF0YVdpdGhLZXk8VD4sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmVkaXRpbmdSb3dzU2lnbmFsLnVwZGF0ZSgoc2V0KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHNldCk7XG4gICAgICBpZiAobmV3U2V0Lmhhcyhyb3cuX2tleSkpIHtcbiAgICAgICAgbmV3U2V0LmRlbGV0ZShyb3cuX2tleSk7XG4gICAgICAgIHRoaXMuc2F2ZVJvdyhyb3cuX2tleSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2V0LmFkZChyb3cuX2tleSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRlZERhdGEocm93KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTZXQ7XG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRWRpdGVkRGF0YShyb3c6IERhdGFXaXRoS2V5PFQ+KSB7XG4gICAgY29uc3Qgcm93SWQgPSByb3cuX2tleTtcbiAgICB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgbmV3TWFwLnNldChyb3dJZCwgeyAuLi5yb3cub3JpZ2luYWxEYXRhIH0pO1xuICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtR3JvdXBDb25maWcgPSB0aGlzLmZvcm1Hcm91cENvbmZpZygpO1xuICAgIGlmIChmb3JtR3JvdXBDb25maWcpIHtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoXG4gICAgICAgIGZvcm1Hcm91cENvbmZpZy5jb250cm9scyxcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLnZhbGlkYXRvck9yT3B0cyxcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLmFzeW5jVmFsaWRhdG9yXG4gICAgICApO1xuICAgICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUocm93Lm9yaWdpbmFsRGF0YSBhcyBhbnkpO1xuICAgICAgdGhpcy5mb3JtR3JvdXBzU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgICAgbmV3TWFwLnNldChyb3dJZCwgZm9ybUdyb3VwKTtcbiAgICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVJvdyhyb3dJZDogc3RyaW5nIHwgbnVtYmVyLCByb3dJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZWRpdGVkRm9ybSA9IHRoaXMuZm9ybUdyb3Vwc1NpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgdW5FZGl0ZWREYXRhID0gdGhpcy51bkVkaXRlZERhdGFTaWduYWwoKS5nZXQocm93SWQpO1xuXG4gICAgLy8gaWYgKGVkaXRlZERhdGEpIHtcbiAgICAvLyAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy50YWJsZURhdGEoKS5maW5kKChyb3cpID0+IHJvdy5fa2V5ID09PSByb3dJZCk7XG4gICAgLy8gICBpZiAob3JpZ2luYWxSb3cpIHtcbiAgICAvLyAgICAgY29uc3QgdXBkYXRlZFJvdyA9IHsgLi4ub3JpZ2luYWxSb3csIC4uLmVkaXRlZERhdGEgfTtcbiAgICAvLyAgICAgdGhpcy5yb3dTYXZlLmVtaXQodXBkYXRlZFJvdyk7XG4gICAgLy8gICAgIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgICAgICBuZXdNYXAuZGVsZXRlKHJvd0lkKTtcbiAgICAvLyAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmZvcm1Hcm91cENvbmZpZygpKTtcbiAgICAvLyBjb25zb2xlLmxvZyhlZGl0ZWRGb3JtKTtcbiAgICAvLyBjb25zb2xlLmxvZyh1bkVkaXRlZERhdGEpO1xuXG4gICAgaWYgKGVkaXRlZEZvcm0pIHtcbiAgICAgIGVkaXRlZEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIGVkaXRlZEZvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cHNTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgICBuZXdNYXAuZGVsZXRlKHJvd0lkKTtcbiAgICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb3dTYXZlLmVtaXQoe1xuICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgIGtleTogcm93SWQsXG4gICAgICAgIGRhdGE6IGVkaXRlZEZvcm0udmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodW5FZGl0ZWREYXRhKSB7XG4gICAgICB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvd1JldmVydC5lbWl0KHtcbiAgICAgICAgaW5kZXg6IHJvd0luZGV4LFxuICAgICAgICBrZXk6IHJvd0lkLFxuICAgICAgICBkYXRhOiB1bkVkaXRlZERhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUm93U2VsZWN0ZWQgPSAocm93SWQ6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLmhhcyhyb3dJZCk7XG4gIH07XG5cbiAgcHJpdmF0ZSB0b2dnbGVSb3dTZWxlY3Rpb24gPSAocm93SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsLnVwZGF0ZSgoc2V0KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHNldCk7XG4gICAgICBpZiAobmV3U2V0Lmhhcyhyb3dJZCkpIHtcbiAgICAgICAgbmV3U2V0LmRlbGV0ZShyb3dJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHJvd0lkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgcmV0dXJuIG5ld1NldDtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIGFsbFJvd3NTZWxlY3RlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBub25Hcm91cFJvd3MgPSB0aGlzLmRhdGEoKS5maWx0ZXIoKHJvdykgPT4gIXRoaXMuaXNHcm91cFJvdyhyb3cpKTtcbiAgICByZXR1cm4gKFxuICAgICAgbm9uR3JvdXBSb3dzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA9PT0gbm9uR3JvdXBSb3dzLmxlbmd0aFxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzb21lUm93c1NlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdykpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLnNpemUgPiAwICYmXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLnNpemUgPCBub25Hcm91cFJvd3MubGVuZ3RoXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZUFsbFJvd3MgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuYWxsUm93c1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsLnNldChuZXcgU2V0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25Hcm91cFJvd3MgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbHRlcihcbiAgICAgICAgKHJvdykgPT4gIXRoaXMuaXNHcm91cFJvdyhyb3cub3JpZ2luYWxEYXRhKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsLnNldChuZXcgU2V0KG5vbkdyb3VwUm93cy5tYXAoKHJvdykgPT4gcm93Ll9rZXkpKSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpO1xuICB9O1xuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwoKS5oYXMocm93Ll9rZXkpXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KFxuICAgICAgc2VsZWN0ZWRSb3dzLm1hcCgoeyBvcmlnaW5hbERhdGEgfSkgPT4gb3JpZ2luYWxEYXRhKVxuICAgICk7XG4gIH1cblxuICBnZXRIZWFkZXJDb250ZXh0KGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPikge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgIGNvbHVtbixcbiAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hbGxSb3dzU2VsZWN0ZWQsXG4gICAgICBzb21lUm93c1NlbGVjdGVkOiB0aGlzLnNvbWVSb3dzU2VsZWN0ZWQsXG4gICAgICB0b2dnbGVBbGxSb3dzOiB0aGlzLnRvZ2dsZUFsbFJvd3MsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZFZhbHVlKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHZhbHVlOiBhbnlcbiAgKSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkge1xuICAgIC8vICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvd0RhdGEsIFtjb2x1bW4uYWNjZXNzb3JLZXldOiB2YWx1ZSB9KTtcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGNvbnNvbGUud2FybihcbiAgICAvLyAgICAgICAnQ2Fubm90IHVwZGF0ZSB2YWx1ZSBmb3IgY29sdW1uIHdpdGhvdXQgYWNjZXNzb3JLZXk6JyxcbiAgICAvLyAgICAgICBjb2x1bW4uaWRcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gfSk7XG4gIH1cblxuICB1cGRhdGVFZGl0ZWRWYWx1ZUZuKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgdmFsdWVGbjogKHZhbHVlOiBhbnkpID0+IFQsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvd0RhdGEsIC4uLnZhbHVlRm4odmFsdWUpIH0pO1xuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZERhdGEocm93SWQ6IHN0cmluZyB8IG51bWJlciwgZGF0YTogUGFydGlhbDxUPikge1xuICAgIC8vIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgY29uc3Qgcm93RGF0YSA9IG5ld01hcC5nZXQocm93SWQpIHx8ICh7fSBhcyBFZGl0ZWREYXRhPFQ+KTtcbiAgICAvLyAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgLi4uZGF0YSB9KTtcbiAgICAvLyAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gfSk7XG4gIH1cblxuICB1cGRhdGVOZXN0ZWRFZGl0ZWRWYWx1ZShcbiAgICByb3dJZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICBuZXN0ZWRGaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbiAgKSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkge1xuICAgIC8vICAgICBjb25zdCBjb2x1bW5EYXRhID0gKHJvd0RhdGFbY29sdW1uLmFjY2Vzc29yS2V5XSBhcyBhbnkpIHx8IHt9O1xuICAgIC8vICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7XG4gICAgLy8gICAgICAgLi4ucm93RGF0YSxcbiAgICAvLyAgICAgICBbY29sdW1uLmFjY2Vzc29yS2V5XToge1xuICAgIC8vICAgICAgICAgLi4uY29sdW1uRGF0YSxcbiAgICAvLyAgICAgICAgIFtuZXN0ZWRGaWVsZF06IHZhbHVlLFxuICAgIC8vICAgICAgIH0sXG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFxuICAgIC8vICAgICAgICdDYW5ub3QgdXBkYXRlIG5lc3RlZCB2YWx1ZSBmb3IgY29sdW1uIHdpdGhvdXQgYWNjZXNzb3JLZXk6JyxcbiAgICAvLyAgICAgICBjb2x1bW4uaWRcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gfSk7XG4gIH1cblxuICBnZXRDZWxsQ29udGV4dChcbiAgICByb3c6IERhdGFXaXRoS2V5PFQ+LFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICByb3dJbmRleDogbnVtYmVyXG4gICkge1xuICAgIGNvbnN0IHJvd0lkID0gcm93Ll9rZXk7XG4gICAgY29uc3QgaXNFZGl0aW5nID0gdGhpcy5pc1Jvd0VkaXRpbmcocm93Ll9rZXkpO1xuICAgIC8vIGNvbnN0IGVkaXRlZERhdGEgPSB0aGlzLmVkaXRlZERhdGFTaWduYWwoKS5nZXQocm93SWQpO1xuICAgIGNvbnN0IGVkaXRlZEZvcm0gPSB0aGlzLmZvcm1Hcm91cHNTaWduYWwoKS5nZXQocm93SWQpO1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gZWRpdGVkRm9ybT8uZ2V0KGNvbHVtbi5mb3JtQ29udHJvbE5hbWUgfHwgJycpO1xuXG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGlzRWRpdGluZykge1xuICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgIHZhbHVlID0gZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGNvbHVtbik7XG4gICAgICB9XG4gICAgICAvLyBlbHNlIGlmIChlZGl0ZWREYXRhKSB7XG4gICAgICAvLyAgIGlmIChjb2x1bW4uYWNjZXNzb3JLZXkgJiYgY29sdW1uLmFjY2Vzc29yS2V5IGluIGVkaXRlZERhdGEpIHtcbiAgICAgIC8vICAgICAvLyBJZiBjb2x1bW4gaGFzIGFuIGFjY2Vzc29yS2V5IGFuZCBpdCBleGlzdHMgaW4gZWRpdGVkIGRhdGEsIHVzZSB0aGF0XG4gICAgICAvLyAgICAgdmFsdWUgPSBlZGl0ZWREYXRhW2NvbHVtbi5hY2Nlc3NvcktleV07XG4gICAgICAvLyAgIH0gZWxzZSBpZiAoY29sdW1uLmFjY2Vzc29yRm4pIHtcbiAgICAgIC8vICAgICAvLyBJZiBjb2x1bW4gaGFzIGFuIGFjY2Vzc29yRm4sIGFwcGx5IGl0IHRvIHRoZSBlZGl0ZWQgZGF0YVxuICAgICAgLy8gICAgIHZhbHVlID0gY29sdW1uLmFjY2Vzc29yRm4oeyAuLi5yb3csIC4uLmVkaXRlZERhdGEgfSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgLy8gRmFsbGJhY2sgdG8gZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgb3JpZ2luYWwgcm93XG4gICAgICAvLyAgICAgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHZhbHVlLFxuICAgICAgdmFsdWUsXG4gICAgICByb3c6IHJvdy5vcmlnaW5hbERhdGEsXG4gICAgICBjb2x1bW4sXG4gICAgICByb3dJbmRleCxcbiAgICAgIHJvd0lkLFxuICAgICAgaXNFZGl0aW5nLFxuICAgICAgZm9ybUNvbnRyb2wsXG4gICAgICBpc1NlbGVjdGVkOiB0aGlzLmlzUm93U2VsZWN0ZWQocm93SWQpLFxuICAgICAgdG9nZ2xlUm93U2VsZWN0aW9uOiAoKSA9PiB0aGlzLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3dJZCksXG4gICAgICB0b2dnbGVSb3dFZGl0OiAoKSA9PiB0aGlzLnRvZ2dsZVJvd0VkaXRJbnRlcm5hbChyb3csIHJvd0luZGV4KSxcbiAgICAgIGRlbGV0ZVJvdzogKCkgPT4gdGhpcy5kZWxldGVSb3cocm93SWQpLFxuICAgICAgdXBkYXRlVmFsdWU6IChuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUVkaXRlZFZhbHVlKHJvd0lkLCBjb2x1bW4sIG5ld1ZhbHVlKSxcbiAgICAgIHVwZGF0ZU5lc3RlZFZhbHVlOiAobmVzdGVkRmllbGQ6IHN0cmluZywgbmV3VmFsdWU6IGFueSkgPT5cbiAgICAgICAgdGhpcy51cGRhdGVOZXN0ZWRFZGl0ZWRWYWx1ZShyb3dJZCwgY29sdW1uLCBuZXN0ZWRGaWVsZCwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlVmFsdWVGbjogKHZhbHVlRm46ICh2YWx1ZTogYW55KSA9PiBULCBuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUVkaXRlZFZhbHVlRm4ocm93SWQsIHZhbHVlRm4sIG5ld1ZhbHVlKSxcbiAgICAgIHVwZGF0ZURhdGE6IChuZXdEYXRhOiBQYXJ0aWFsPFQ+KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUVkaXRlZERhdGEocm93SWQsIG5ld0RhdGEpLFxuICAgIH07XG4gIH1cblxuICBkZWxldGVSb3cgPSAocm93SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHJvd1RvRGVsZXRlID0gdGhpcy50YWJsZURhdGEoKS5maW5kKChyb3cpID0+IHJvdy5fa2V5ID09PSByb3dJZCk7XG4gICAgaWYgKHJvd1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLnJvd0RlbGV0ZS5lbWl0KHJvd1RvRGVsZXRlLm9yaWdpbmFsRGF0YSk7XG4gICAgfVxuICB9O1xuXG4gIGdldEZvb3RlckNvbnRleHQoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgY29sdW1uLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgIH07XG4gIH1cblxuICBnZXRUYWJsZVN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLnN0eWxlQ29uZmlnLmZvbnRGYW1pbHksXG4gICAgICBmb250U2l6ZTogdGhpcy5zdHlsZUNvbmZpZy5mb250U2l6ZSxcbiAgICAgIHdoaXRlU3BhY2U6IHRoaXMuc3R5bGVDb25maWcud2hpdGVTcGFjZSxcbiAgICAgIG1hcmdpbjogdGhpcy5zdHlsZUNvbmZpZy5tYXJnaW4sXG4gICAgICBib3JkZXI6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyLFxuICAgICAgYm9yZGVyQ29sbGFwc2U6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyQ29sbGFwc2UsXG4gICAgICBib3JkZXJTcGFjaW5nOiB0aGlzLnN0eWxlQ29uZmlnLmJvcmRlclNwYWNpbmcsXG4gICAgICB0YWJsZUxheW91dDogdGhpcy5zdHlsZUNvbmZpZy50YWJsZUxheW91dCxcbiAgICAgIHdpZHRoOiB0aGlzLnN0eWxlQ29uZmlnLndpZHRoLFxuICAgIH07XG4gIH1cblxuICBnZXRIZWFkZXJTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnN0eWxlQ29uZmlnLmhlYWRlcixcbiAgICAgIHBvc2l0aW9uOiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uc3RpY2t5VG9wID8gJ3N0aWNreScgOiAnc3RhdGljJyxcbiAgICAgIHRvcDogdGhpcy5zdHlsZUNvbmZpZy5oZWFkZXI/LnN0aWNreVRvcCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgIHpJbmRleDogdGhpcy5zdHlsZUNvbmZpZy5oZWFkZXI/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgfTtcbiAgfVxuXG4gIGdldEZvb3RlclN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcuZm9vdGVyLFxuICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy5zdGlja3lCb3R0b20gPyAnc3RpY2t5JyA6ICdzdGF0aWMnLFxuICAgICAgYm90dG9tOiB0aGlzLnN0eWxlQ29uZmlnLmZvb3Rlcj8uc3RpY2t5Qm90dG9tID8gJzAnIDogJ2F1dG8nLFxuICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmZvb3Rlcj8uekluZGV4IHx8ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Um93U3R5bGUocm93SW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3Qgcm93U3R5bGVzID0gdGhpcy5zdHlsZUNvbmZpZy5yb3dzO1xuICAgIGlmIChyb3dTdHlsZXMgJiYgJ2V2ZW4nIGluIHJvd1N0eWxlcyAmJiAnb2RkJyBpbiByb3dTdHlsZXMpIHtcbiAgICAgIHJldHVybiByb3dJbmRleCAlIDIgPT09IDAgPyByb3dTdHlsZXMuZXZlbiA6IHJvd1N0eWxlcy5vZGQ7XG4gICAgfSBlbHNlIGlmIChyb3dTdHlsZXMgJiYgJ250aCcgaW4gcm93U3R5bGVzICYmIHJvd1N0eWxlcy5udGgpIHtcbiAgICAgIGNvbnN0IHsgaW50ZXJ2YWwsIHN0eWxlIH0gPSByb3dTdHlsZXMubnRoO1xuICAgICAgcmV0dXJuIChyb3dJbmRleCArIDEpICUgKGludGVydmFsIHx8IDEpID09PSAwID8gc3R5bGUgOiB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJvd1N0eWxlcyB8fCB7fTtcbiAgICB9XG4gIH1cblxuICBnZXRDZWxsU3R5bGUocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgaXNGaXJzdENvbHVtbiA9IGNvbEluZGV4ID09PSAwO1xuICAgIGNvbnN0IGlzTGFzdENvbHVtbiA9IGNvbEluZGV4ID09PSB0aGlzLmRpc3BsYXlDb2x1bW5zKCkubGVuZ3RoIC0gMTtcblxuICAgIGxldCBjZWxsU3R5bGUgPSB7IC4uLnRoaXMuc3R5bGVDb25maWcuY2VsbHMgfTtcblxuICAgIGlmIChpc0ZpcnN0Q29sdW1uKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbixcbiAgICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuZmlyc3RDb2x1bW4/LnN0aWNreUxlZnRcbiAgICAgICAgICA/ICdzdGlja3knXG4gICAgICAgICAgOiAnc3RhdGljJyxcbiAgICAgICAgbGVmdDogdGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbj8uc3RpY2t5TGVmdCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzTGFzdENvbHVtbikge1xuICAgICAgY2VsbFN0eWxlID0ge1xuICAgICAgICAuLi5jZWxsU3R5bGUsXG4gICAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcubGFzdENvbHVtbixcbiAgICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcubGFzdENvbHVtbj8uc3RpY2t5UmlnaHRcbiAgICAgICAgICA/ICdzdGlja3knXG4gICAgICAgICAgOiAnc3RhdGljJyxcbiAgICAgICAgcmlnaHQ6IHRoaXMuc3R5bGVDb25maWcubGFzdENvbHVtbj8uc3RpY2t5UmlnaHQgPyAnMCcgOiAnYXV0bycsXG4gICAgICAgIHpJbmRleDogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgLy8gQXBwbHkgYm9keSBzdHlsZXMgdG8gYWxsIGNlbGxzXG4gICAgICBjZWxsU3R5bGUgPSB7IC4uLmNlbGxTdHlsZSwgLi4udGhpcy5zdHlsZUNvbmZpZy5ib2R5IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNlbGxTdHlsZSA9IHsgLi4udGhpcy5zdHlsZUNvbmZpZy5oZWFkZXIgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFN0eWxlO1xuICB9XG59XG5cbi8vIERlZmF1bHQgc3R5bGVzXG5jb25zdCBkZWZhdWx0VGFibGVTdHlsZXM6IFRhYmxlU3R5bGVzID0ge1xuICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gIGJvcmRlclJhZGl1czogJzRweCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgYm94U2hhZG93OiAnMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xKScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlYWRlcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNmNWY1ZjUnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBjb2xvcjogJyMzMzMnLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlckJvdHRvbTogJzJweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbiAgcm93czoge1xuICAgIGV2ZW46IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIH0sXG4gICAgb2RkOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmOWY5JyxcbiAgICB9LFxuICAgIG50aDoge1xuICAgICAgaW50ZXJ2YWw6IDUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgY2VsbHM6IHtcbiAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2UwZTBlMCcsXG4gIH0sXG4gIGZvb3Rlcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNmNWY1ZjUnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBjb2xvcjogJyMzMzMnLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlclRvcDogJzJweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbn07XG4iLCJAaWYgKHVzZVZpcnR1YWxTY3JvbGwoKSkge1xuPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICBbaXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplKClcIlxuICBjbGFzcz1cInZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XCJcbiAgW3N0eWxlLmhlaWdodC5weF09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSAqIDEwXCJcbj5cbiAgPHRhYmxlIFtuZ1N0eWxlXT1cImdldFRhYmxlU3R5bGUoKVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDwhLS0gPHRyIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKClcIj5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAxPC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMVwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAyPC90aD5cbiAgICA8L3RyPiAtLT5cblxuICAgICAgPHRyIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKClcIj5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICA8dGggW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChjb2x1bW4uaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEhlYWRlckNvbnRleHQoY29sdW1uKVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfX1cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICA8dHJcbiAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJcbiAgICAgICAgICBsZXQgcm93IG9mIHRhYmxlRGF0YSgpO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlSb3dLZXk7XG4gICAgICAgICAgbGV0IHJvd0luZGV4ID0gaW5kZXhcbiAgICAgICAgXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Um93U3R5bGUocm93SW5kZXgpXCJcbiAgICAgID5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZDsgbGV0IGNvbEluZGV4ID1cbiAgICAgICAgJGluZGV4KSB7XG4gICAgICAgIDx0ZCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIGNvbEluZGV4KVwiPlxuICAgICAgICAgIEBpZiAoaXNSb3dFZGl0aW5nKHJvdy5fa2V5KSAmJiBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDZWxsQ29udGV4dChyb3csIGNvbHVtbiwgcm93SW5kZXgpXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSBpZiAoY29sdW1uLmNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENlbGxDb250ZXh0KHJvdywgY29sdW1uLCByb3dJbmRleClcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICB7eyBnZXRDZWxsVmFsdWUocm93Lm9yaWdpbmFsRGF0YSwgY29sdW1uKSB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuXG4gICAgQGlmIChoYXNGb290ZXIoKSkge1xuICAgIDx0Zm9vdD5cbiAgICAgIDx0ciBbbmdTdHlsZV09XCJnZXRGb290ZXJTdHlsZSgpXCI+XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiBkaXNwbGF5Q29sdW1ucygpOyB0cmFjayBjb2x1bW4uaWQpIHtcbiAgICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZSgtMSwgJGluZGV4KVwiPlxuICAgICAgICAgIEBpZiAoY29sdW1uLmZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZvb3RlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRGb290ZXJDb250ZXh0KGNvbHVtbilcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cblxuICAgIH1cbiAgPC90YWJsZT5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxufSBAZWxzZSB7XG48dGFibGUgW25nU3R5bGVdPVwiZ2V0VGFibGVTdHlsZSgpXCI+XG4gIDx0aGVhZD5cbiAgICA8IS0tIDx0ciBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZSgpXCI+XG4gICAgICA8dGggY29sc3Bhbj1cIjJcIiBzY29wZT1cImNvbGdyb3VwXCI+R3JvdXAgMTwvdGg+XG4gICAgICA8dGggY29sc3Bhbj1cIjFcIiBzY29wZT1cImNvbGdyb3VwXCI+R3JvdXAgMjwvdGg+XG4gICAgPC90cj4gLS0+XG5cbiAgICA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPHRoIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZSgtMSwgJGluZGV4KVwiPlxuICAgICAgICBAaWYgKGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICB9XG4gICAgICA8L3RoPlxuICAgICAgfVxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICBAZm9yIChyb3cgb2YgdGFibGVEYXRhKCk7IHRyYWNrIHJvdy5fa2V5OyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHsgQGlmXG4gICAgKGlzR3JvdXBSb3cocm93Lm9yaWdpbmFsRGF0YSkpIHtcbiAgICA8dHIgY2xhc3M9XCJncm91cC1yb3dcIiBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIj5cbiAgICAgIDx0ZFxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImRpc3BsYXlDb2x1bW5zKCkubGVuZ3RoXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKHJvd0luZGV4LCAwKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBkaXNwbGF5Q29sdW1ucygpWzBdKSB9fVxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIH0gQGVsc2Uge1xuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIj5cbiAgICAgIEBmb3IgKGNvbHVtbiBvZiBkaXNwbGF5Q29sdW1ucygpOyB0cmFjayBjb2x1bW4uaWQ7IGxldCBjb2xJbmRleCA9ICRpbmRleClcbiAgICAgIHtcbiAgICAgIDx0ZCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIGNvbEluZGV4KVwiPlxuICAgICAgICBAaWYgKGlzUm93RWRpdGluZyhyb3cuX2tleSkgJiYgY29sdW1uLmNlbGxFZGl0VGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSBpZiAoY29sdW1uLmNlbGxUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENlbGxDb250ZXh0KHJvdywgY29sdW1uLCByb3dJbmRleClcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBnZXRDZWxsVmFsdWUocm93Lm9yaWdpbmFsRGF0YSwgY29sdW1uKSB9fVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICAgfVxuICAgIDwvdHI+XG4gICAgfSB9XG4gIDwvdGJvZHk+XG5cbiAgQGlmIChoYXNGb290ZXIoKSkge1xuICA8dGZvb3Q+XG4gICAgPHRyIFtuZ1N0eWxlXT1cImdldEZvb3RlclN0eWxlKClcIj5cbiAgICAgIEBmb3IgKGNvbHVtbiBvZiBkaXNwbGF5Q29sdW1ucygpOyB0cmFjayBjb2x1bW4uaWQpIHtcbiAgICAgIDx0ZCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUoLTEsICRpbmRleClcIj5cbiAgICAgICAgQGlmIChjb2x1bW4uZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5mb290ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEZvb3RlckNvbnRleHQoY29sdW1uKVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC90ZD5cbiAgICAgIH1cbiAgICA8L3RyPlxuICA8L3Rmb290PlxuXG4gIH1cbjwvdGFibGU+XG59XG4iXX0=
|
|
542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLE1BQU0sRUFDTixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQVFsRSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLHdDQUF3QztJQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ2xELE9BQU8sR0FBRyxLQUFLLEVBQVcsQ0FBQyxDQUFDLDJDQUEyQztJQUN2RSxlQUFlLEdBQUcsS0FBSyxFQUlwQixDQUFDO0lBRUosT0FBTyxHQUFHLEtBQUssRUFBK0IsQ0FBQztJQUMvQyxnQkFBZ0IsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDekMscUJBQXFCLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsR0FB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QVksRUFBRSxtQkFBbUI7S0FDbEM7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixlQUFlLEVBQUUsU0FBUztTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILGVBQWUsRUFBRSxTQUFTO1NBQzNCO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsUUFBUSxFQUFFLENBQUM7WUFDWCxLQUFLLEVBQUU7Z0JBQ0wsZUFBZSxFQUFFLFNBQVM7YUFDM0I7U0FDRjtLQUNGO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsWUFBWSxFQUFFLG1CQUFtQjtLQUNsQztJQUNELE1BQU0sRUFBRTtRQUNOLGVBQWUsRUFBRSxTQUFTO1FBQzFCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLEtBQUssRUFBRSxNQUFNO1FBQ2IsU0FBUyxFQUFFLE1BQU07UUFDakIsT0FBTyxFQUFFLFdBQVc7UUFDcEIsU0FBUyxFQUFFLG1CQUFtQjtLQUMvQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkcmVuLFxuICBlZmZlY3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YVdpdGhLZXksXG4gIEZvcm1Hcm91cENvbmZpZyxcbiAgR3JvdXBlZERhdGFSb3csXG59IGZyb20gJy4vZGF0YS10YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFibGVTdHlsZXMgfSBmcm9tICcuL3N0eWxlLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudDxUPiB7XG4gIC8vIE1vZGlmeSBkYXRhIGlucHV0IHRvIHVzZSBncm91cGVkIGRhdGFcbiAgZGF0YSA9IGlucHV0LnJlcXVpcmVkPFRbXT4oKTtcbiAgY29sdW1ucyA9IGlucHV0LnJlcXVpcmVkPENvbHVtbkRlZmluaXRpb248VD5bXT4oKTtcbiAgZGF0YUtleSA9IGlucHV0PGtleW9mIFQ+KCk7IC8vIE5ldyByZXF1aXJlZCBpbnB1dCBmb3IgdW5pcXVlIGlkZW50aWZpZXJcbiAgZm9ybUdyb3VwQ29uZmlnID0gaW5wdXQ8XG4gICAgRm9ybUdyb3VwQ29uZmlnPHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfT5cbiAgPigpO1xuXG4gIGdyb3VwQnkgPSBpbnB1dDxrZXlvZiBUIHwgKChyb3c6IFQpID0+IGFueSk+KCk7XG4gIHVzZVZpcnR1YWxTY3JvbGwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IGlucHV0PG51bWJlcj4oNDgpO1xuICB2aWV3UG9ydCA9IHZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpO1xuXG4gIEBJbnB1dCgpIHN0eWxlQ29uZmlnOiBUYWJsZVN0eWxlcyA9IGRlZmF1bHRUYWJsZVN0eWxlcztcblxuICBjb2x1bW5UZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKTtcblxuICBAT3V0cHV0KCkgcm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJvd1NhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFBhcnRpYWw8VD47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSByb3dSZXZlcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFQ7XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSByb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcblxuICAvKiogSW50ZXJuYWxseSBtYWludGFpbmVkIGRhdGEsIHdpdGggZ3VhcmFudGVlZCB1bmlxdWVuZXNzIGR1ZSB0byBrZXkgcHJvcGVydHkgKi9cbiAgdGFibGVEYXRhOiBTaWduYWw8RGF0YVdpdGhLZXk8VD5bXT47XG5cbiAgcHJpdmF0ZSBlZGl0aW5nUm93c1NpZ25hbCA9IHNpZ25hbDxTZXQ8c3RyaW5nIHwgbnVtYmVyPj4obmV3IFNldCgpKTtcbiAgcHJpdmF0ZSBzZWxlY3RlZFJvd3NTaWduYWwgPSBzaWduYWw8U2V0PHN0cmluZyB8IG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIC8vIHByaXZhdGUgZWRpdGVkRGF0YVNpZ25hbCA9IHNpZ25hbDxNYXA8c3RyaW5nIHwgbnVtYmVyLCBFZGl0ZWREYXRhPFQ+Pj4oXG4gIC8vICAgbmV3IE1hcCgpXG4gIC8vICk7XG4gIHByaXZhdGUgdW5FZGl0ZWREYXRhU2lnbmFsID0gc2lnbmFsPE1hcDxzdHJpbmcgfCBudW1iZXIsIFQ+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIGZvcm1Hcm91cHNTaWduYWwgPSBzaWduYWw8TWFwPHN0cmluZyB8IG51bWJlciwgRm9ybUdyb3VwPj4obmV3IE1hcCgpKTtcblxuICAvLyBjb2x1bW5zU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb2x1bW5zKCkpO1xuXG4gIGRpc3BsYXlDb2x1bW5zOiBTaWduYWw8Q29sdW1uRGVmaW5pdGlvbjxUPltdPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucygpLmZpbHRlcigoeyBpc0hpZGRlbiB9KSA9PiAhaXNIaWRkZW4pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVGVtcGxhdGUgPSB0aGlzLmNvbHVtblRlbXBsYXRlcygpLmZpbmQoXG4gICAgICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAobWF0Y2hpbmdUZW1wbGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdGb3VuZCBtYXRjaGluZyB0ZW1wbGF0ZTonLCBtYXRjaGluZ1RlbXBsYXRlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmNlbGxUZW1wbGF0ZSA/PyBjb2x1bW4uY2VsbFRlbXBsYXRlLFxuICAgICAgICAgICAgY2VsbEVkaXRUZW1wbGF0ZTpcbiAgICAgICAgICAgICAgbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsRWRpdFRlbXBsYXRlID8/IGNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlLFxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6XG4gICAgICAgICAgICAgIG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUgPz8gY29sdW1uLmhlYWRlclRlbXBsYXRlLFxuICAgICAgICAgICAgZm9vdGVyVGVtcGxhdGU6XG4gICAgICAgICAgICAgIG1hdGNoaW5nVGVtcGxhdGUuZm9vdGVyVGVtcGxhdGUgPz8gY29sdW1uLmZvb3RlclRlbXBsYXRlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy50YWJsZURhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhKCkubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBjb25zdCBkYXRhS2V5ID0gdGhpcy5fZ2V0Um93SWRCeURhdGFLZXkoaXRlbSk7XG4gICAgICAgIGlmIChkYXRhS2V5KSB7XG4gICAgICAgICAga2V5ID0gZGF0YUtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSBpbmRleCBhcyBEYXRhV2l0aEtleTxUPlsnX2tleSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3JpZ2luYWxEYXRhOiBpdGVtLFxuICAgICAgICAgIF9rZXk6IGtleSxcbiAgICAgICAgICBfa2V5X3Byb3A6IHRoaXMuZGF0YUtleSgpID8/ICdfaW5kZXgnLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdGFibGVEYXRhID0gdGhpcy50YWJsZURhdGEoKTtcblxuICAgICAgaWYgKHRoaXMudXNlVmlydHVhbFNjcm9sbCgpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnQoKSB7XG4gICAgY29uc3Qgdmlld3BvcnRJbnN0YW5jZSA9IHRoaXMudmlld1BvcnQoKTtcbiAgICBpZiAodmlld3BvcnRJbnN0YW5jZSkge1xuICAgICAgdmlld3BvcnRJbnN0YW5jZS5jaGVja1ZpZXdwb3J0U2l6ZSgpOyAvLyBFeGFtcGxlIHVzYWdlXG4gICAgfVxuICB9XG5cbiAgaGFzRm9vdGVyID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zKCkuc29tZSgoY29sKSA9PiBjb2wuZm9vdGVyVGVtcGxhdGUgIT09IHVuZGVmaW5lZClcbiAgKTtcblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSByb3dcbiAgcHJpdmF0ZSBfZ2V0Um93SWRCeURhdGFLZXkocm93OiBUKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmRhdGFLZXkoKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBvciBudW1iZXIgaWYgcG9zc2libGUsIG90aGVyd2lzZSBzdHJpbmdpZnlcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHlwZSBndWFyZCBtZXRob2QgdG8gY2hlY2sgZm9yIGdyb3VwIHJvd3NcbiAgaXNHcm91cFJvdyhyb3c6IFQpOiByb3cgaXMgVCAmIHsgaXNHcm91cFJvdzogdHJ1ZTsgZ3JvdXBUaXRsZTogYW55IH0ge1xuICAgIHJldHVybiAhIShyb3cgYXMgYW55KS5pc0dyb3VwUm93O1xuICB9XG5cbiAgdHJhY2tCeVJvd0tleShpbmRleDogbnVtYmVyLCByb3c6IGFueSkge1xuICAgIHJldHVybiByb3cuX2tleTtcbiAgfVxuXG4gIC8vIENvbXB1dGVkIHByb3BlcnR5IGZvciBncm91cGVkIGRhdGFcblxuICBncm91cGVkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeSgpKSByZXR1cm4gdGhpcy50YWJsZURhdGEoKSBhcyBHcm91cGVkRGF0YVJvdzxUPltdO1xuXG4gICAgY29uc3QgZ2V0R3JvdXBWYWx1ZSA9XG4gICAgICB0eXBlb2YgdGhpcy5ncm91cEJ5KCkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAodGhpcy5ncm91cEJ5KCkgYXMgKHJvdzogVCkgPT4gYW55KVxuICAgICAgICA6IChyb3c6IFQpID0+IHJvd1t0aGlzLmdyb3VwQnkoKSBhcyBrZXlvZiBUXTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8YW55LCBEYXRhV2l0aEtleTxUPltdPigpO1xuXG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChnZXRHcm91cFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZSA9IGdldEdyb3VwVmFsdWUocm93Lm9yaWdpbmFsRGF0YSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwVmFsdWUpIHx8IFtdO1xuICAgICAgICBncm91cHMuc2V0KGdyb3VwVmFsdWUsIFsuLi5leGlzdGluZ0dyb3VwLCByb3ddKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwZWREYXRhQXJyYXk6IEdyb3VwZWREYXRhUm93PFQ+W10gPSBbXTtcblxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cFJvd3MsIGdyb3VwVmFsdWUpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBncm91cCBoZWFkZXIgcm93XG4gICAgICBjb25zdCBncm91cFJvdzogR3JvdXBlZERhdGFSb3c8VD4gPSB7XG4gICAgICAgIC4uLih7fSBhcyBEYXRhV2l0aEtleTxUPiksIC8vIENyZWF0ZSBlbXB0eSBvYmplY3Qgb2YgdHlwZSBUIGFzIGJhc2VcbiAgICAgICAgX2tleTogYGdyb3VwLSR7Z3JvdXBWYWx1ZX1gLFxuICAgICAgICBpc0dyb3VwUm93OiB0cnVlLFxuICAgICAgICBncm91cFZhbHVlLFxuICAgICAgICBncm91cFRpdGxlOiBncm91cFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBlZERhdGFBcnJheS5wdXNoKGdyb3VwUm93KTtcbiAgICAgIC8vIEFkZCByZWd1bGFyIHJvd3Mgd2l0aCB0aGUgb3B0aW9uYWwgaXNHcm91cFJvdyBwcm9wZXJ0eSAodW5kZWZpbmVkIGJ5IGRlZmF1bHQpXG4gICAgICBncm91cGVkRGF0YUFycmF5LnB1c2goLi4uKGdyb3VwUm93cyBhcyBHcm91cGVkRGF0YVJvdzxUPltdKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBlZERhdGFBcnJheTtcbiAgfSk7XG5cbiAgZ2V0Q2VsbFZhbHVlID0gKHJvdzogVCwgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogYW55ID0+IHtcbiAgICAvLyBGb3IgZ3JvdXAgcm93cywgcmV0dXJuIHRoZSBncm91cCB0aXRsZSBpZiBpdCBleGlzdHNcbiAgICBpZiAodGhpcy5pc0dyb3VwUm93KHJvdykpIHtcbiAgICAgIHJldHVybiAocm93IGFzIGFueSkuZ3JvdXBUaXRsZTtcbiAgICB9XG5cbiAgICAvLyBFeGlzdGluZyBsb2dpYyBmb3Igbm9ybWFsIHJvd3NcbiAgICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5hY2Nlc3NvcktleV07XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW4uYWNjZXNzb3JGbiA/IGNvbHVtbi5hY2Nlc3NvckZuKHJvdykgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcHVibGljIGlzUm93RWRpdGluZyA9IChyb3dLZXk6IERhdGFXaXRoS2V5PFQ+Wydfa2V5J10pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nUm93c1NpZ25hbCgpLmhhcyhyb3dLZXkpO1xuICB9O1xuXG4gIHB1YmxpYyB0b2dnbGVSb3dFZGl0ID0gKHJvd0lkOiBEYXRhV2l0aEtleTxUPlsnX2tleSddKSA9PiB7XG4gICAgbGV0IGRhdGE6IERhdGFXaXRoS2V5PFQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICB0aGlzLnRhYmxlRGF0YSgpLmZvckVhY2goKGRhdHVtLCBpKSA9PiB7XG4gICAgICBpZiAoZGF0dW0uX2tleSA9PT0gcm93SWQpIHtcbiAgICAgICAgZGF0YSA9IGRhdHVtO1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKGRhdGEsIGluZGV4KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSB0b2dnbGVSb3dFZGl0SW50ZXJuYWwgPSAocm93OiBEYXRhV2l0aEtleTxUPiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuZWRpdGluZ1Jvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvdy5fa2V5KSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvdy5fa2V5KTtcbiAgICAgICAgdGhpcy5zYXZlUm93KHJvdy5fa2V5LCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHJvdy5fa2V5KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdGVkRGF0YShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1NldDtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIGluaXRpYWxpemVFZGl0ZWREYXRhKHJvdzogRGF0YVdpdGhLZXk8VD4pIHtcbiAgICBjb25zdCByb3dJZCA9IHJvdy5fa2V5O1xuICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvdy5vcmlnaW5hbERhdGEgfSk7XG4gICAgICByZXR1cm4gbmV3TWFwO1xuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1Hcm91cENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwQ29uZmlnKCk7XG4gICAgaWYgKGZvcm1Hcm91cENvbmZpZykge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLmNvbnRyb2xzLFxuICAgICAgICBmb3JtR3JvdXBDb25maWcudmFsaWRhdG9yT3JPcHRzLFxuICAgICAgICBmb3JtR3JvdXBDb25maWcuYXN5bmNWYWxpZGF0b3JcbiAgICAgICk7XG4gICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShyb3cub3JpZ2luYWxEYXRhIGFzIGFueSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cHNTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgICBuZXdNYXAuc2V0KHJvd0lkLCBmb3JtR3JvdXApO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUm93KHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBlZGl0ZWRGb3JtID0gdGhpcy5mb3JtR3JvdXBzU2lnbmFsKCkuZ2V0KHJvd0lkKTtcbiAgICBjb25zdCB1bkVkaXRlZERhdGEgPSB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG5cbiAgICAvLyBpZiAoZWRpdGVkRGF0YSkge1xuICAgIC8vICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICAvLyAgIGlmIChvcmlnaW5hbFJvdykge1xuICAgIC8vICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5vcmlnaW5hbFJvdywgLi4uZWRpdGVkRGF0YSB9O1xuICAgIC8vICAgICB0aGlzLnJvd1NhdmUuZW1pdCh1cGRhdGVkUm93KTtcbiAgICAvLyAgICAgdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgIC8vICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZm9ybUdyb3VwQ29uZmlnKCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKGVkaXRlZEZvcm0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHVuRWRpdGVkRGF0YSk7XG5cbiAgICBpZiAoZWRpdGVkRm9ybSkge1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3Vwc1NpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvd1NhdmUuZW1pdCh7XG4gICAgICAgIGluZGV4OiByb3dJbmRleCxcbiAgICAgICAga2V5OiByb3dJZCxcbiAgICAgICAgZGF0YTogZWRpdGVkRm9ybS52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh1bkVkaXRlZERhdGEpIHtcbiAgICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgICAgbmV3TWFwLmRlbGV0ZShyb3dJZCk7XG4gICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucm93UmV2ZXJ0LmVtaXQoe1xuICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgIGtleTogcm93SWQsXG4gICAgICAgIGRhdGE6IHVuRWRpdGVkRGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNSb3dTZWxlY3RlZCA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuaGFzKHJvd0lkKTtcbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZVJvd1NlbGVjdGlvbiA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvd0lkKSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvd0lkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocm93SWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdykpO1xuICAgIHJldHVybiAoXG4gICAgICBub25Hcm91cFJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwoKS5zaXplID09PSBub25Hcm91cFJvd3MubGVuZ3RoXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIHNvbWVSb3dzU2VsZWN0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgbm9uR3JvdXBSb3dzID0gdGhpcy5kYXRhKCkuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzR3JvdXBSb3cocm93KSk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA8IG5vbkdyb3VwUm93cy5sZW5ndGhcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgdG9nZ2xlQWxsUm93cyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKFxuICAgICAgICAocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdy5vcmlnaW5hbERhdGEpXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQobm9uR3JvdXBSb3dzLm1hcCgocm93KSA9PiByb3cuX2tleSkpKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKChyb3cpID0+XG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLmhhcyhyb3cuX2tleSlcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoXG4gICAgICBzZWxlY3RlZFJvd3MubWFwKCh7IG9yaWdpbmFsRGF0YSB9KSA9PiBvcmlnaW5hbERhdGEpXG4gICAgKTtcbiAgfVxuXG4gIGdldEhlYWRlckNvbnRleHQoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgY29sdW1uLFxuICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFsbFJvd3NTZWxlY3RlZCxcbiAgICAgIHNvbWVSb3dzU2VsZWN0ZWQ6IHRoaXMuc29tZVJvd3NTZWxlY3RlZCxcbiAgICAgIHRvZ2dsZUFsbFJvd3M6IHRoaXMudG9nZ2xlQWxsUm93cyxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkVmFsdWUoXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4sXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgW2NvbHVtbi5hY2Nlc3NvcktleV06IHZhbHVlIH0pO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFxuICAgIC8vICAgICAgICdDYW5ub3QgdXBkYXRlIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZFZhbHVlRm4oXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICB2YWx1ZUZuOiAodmFsdWU6IGFueSkgPT4gVCxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIC8vIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgY29uc3Qgcm93RGF0YSA9IG5ld01hcC5nZXQocm93SWQpIHx8ICh7fSBhcyBFZGl0ZWREYXRhPFQ+KTtcbiAgICAvLyAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgLi4udmFsdWVGbih2YWx1ZSkgfSk7XG4gICAgLy8gICByZXR1cm4gbmV3TWFwO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkRGF0YShyb3dJZDogc3RyaW5nIHwgbnVtYmVyLCBkYXRhOiBQYXJ0aWFsPFQ+KSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgbmV3TWFwLnNldChyb3dJZCwgeyAuLi5yb3dEYXRhLCAuLi5kYXRhIH0pO1xuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIG5lc3RlZEZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIGNvbnN0IGNvbHVtbkRhdGEgPSAocm93RGF0YVtjb2x1bW4uYWNjZXNzb3JLZXldIGFzIGFueSkgfHwge307XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHtcbiAgICAvLyAgICAgICAuLi5yb3dEYXRhLFxuICAgIC8vICAgICAgIFtjb2x1bW4uYWNjZXNzb3JLZXldOiB7XG4gICAgLy8gICAgICAgICAuLi5jb2x1bW5EYXRhLFxuICAgIC8vICAgICAgICAgW25lc3RlZEZpZWxkXTogdmFsdWUsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICBjb25zb2xlLndhcm4oXG4gICAgLy8gICAgICAgJ0Nhbm5vdCB1cGRhdGUgbmVzdGVkIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldENlbGxDb250ZXh0KFxuICAgIHJvdzogRGF0YVdpdGhLZXk8VD4sXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHJvd0luZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qgcm93SWQgPSByb3cuX2tleTtcbiAgICBjb25zdCBpc0VkaXRpbmcgPSB0aGlzLmlzUm93RWRpdGluZyhyb3cuX2tleSk7XG4gICAgLy8gY29uc3QgZWRpdGVkRGF0YSA9IHRoaXMuZWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZWRpdGVkRm9ybSA9IHRoaXMuZm9ybUdyb3Vwc1NpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBlZGl0ZWRGb3JtPy5nZXQoY29sdW1uLmZvcm1Db250cm9sTmFtZSB8fCAnJyk7XG5cbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdmFsdWUgPSBmb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93Lm9yaWdpbmFsRGF0YSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKGVkaXRlZERhdGEpIHtcbiAgICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSAmJiBjb2x1bW4uYWNjZXNzb3JLZXkgaW4gZWRpdGVkRGF0YSkge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JLZXkgYW5kIGl0IGV4aXN0cyBpbiBlZGl0ZWQgZGF0YSwgdXNlIHRoYXRcbiAgICAgIC8vICAgICB2YWx1ZSA9IGVkaXRlZERhdGFbY29sdW1uLmFjY2Vzc29yS2V5XTtcbiAgICAgIC8vICAgfSBlbHNlIGlmIChjb2x1bW4uYWNjZXNzb3JGbikge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JGbiwgYXBwbHkgaXQgdG8gdGhlIGVkaXRlZCBkYXRhXG4gICAgICAvLyAgICAgdmFsdWUgPSBjb2x1bW4uYWNjZXNzb3JGbih7IC4uLnJvdywgLi4uZWRpdGVkRGF0YSB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAvLyBGYWxsYmFjayB0byBnZXR0aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBvcmlnaW5hbCByb3dcbiAgICAgIC8vICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdmFsdWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvdzogcm93Lm9yaWdpbmFsRGF0YSxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd0luZGV4LFxuICAgICAgcm93SWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBmb3JtQ29udHJvbCxcbiAgICAgIGlzU2VsZWN0ZWQ6IHRoaXMuaXNSb3dTZWxlY3RlZChyb3dJZCksXG4gICAgICB0b2dnbGVSb3dTZWxlY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlUm93U2VsZWN0aW9uKHJvd0lkKSxcbiAgICAgIHRvZ2dsZVJvd0VkaXQ6ICgpID0+IHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKHJvdywgcm93SW5kZXgpLFxuICAgICAgZGVsZXRlUm93OiAoKSA9PiB0aGlzLmRlbGV0ZVJvdyhyb3dJZCksXG4gICAgICB1cGRhdGVWYWx1ZTogKG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWUocm93SWQsIGNvbHVtbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlTmVzdGVkVmFsdWU6IChuZXN0ZWRGaWVsZDogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKHJvd0lkLCBjb2x1bW4sIG5lc3RlZEZpZWxkLCBuZXdWYWx1ZSksXG4gICAgICB1cGRhdGVWYWx1ZUZuOiAodmFsdWVGbjogKHZhbHVlOiBhbnkpID0+IFQsIG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWVGbihyb3dJZCwgdmFsdWVGbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlRGF0YTogKG5ld0RhdGE6IFBhcnRpYWw8VD4pID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkRGF0YShyb3dJZCwgbmV3RGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgcm93VG9EZWxldGUgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICBpZiAocm93VG9EZWxldGUpIHtcbiAgICAgIHRoaXMucm93RGVsZXRlLmVtaXQocm93VG9EZWxldGUub3JpZ2luYWxEYXRhKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBjb2x1bW4sXG4gICAgICBjb2x1bW4sXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIGdldFRhYmxlU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZyxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuc3R5bGVDb25maWcuZm9udEZhbWlseSxcbiAgICAgIGZvbnRTaXplOiB0aGlzLnN0eWxlQ29uZmlnLmZvbnRTaXplLFxuICAgICAgd2hpdGVTcGFjZTogdGhpcy5zdHlsZUNvbmZpZy53aGl0ZVNwYWNlLFxuICAgICAgbWFyZ2luOiB0aGlzLnN0eWxlQ29uZmlnLm1hcmdpbixcbiAgICAgIGJvcmRlcjogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXIsXG4gICAgICBib3JkZXJDb2xsYXBzZTogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXJDb2xsYXBzZSxcbiAgICAgIGJvcmRlclNwYWNpbmc6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyU3BhY2luZyxcbiAgICAgIHRhYmxlTGF5b3V0OiB0aGlzLnN0eWxlQ29uZmlnLnRhYmxlTGF5b3V0LFxuICAgICAgd2lkdGg6IHRoaXMuc3R5bGVDb25maWcud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGdldEhlYWRlclN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcuaGVhZGVyLFxuICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuaGVhZGVyPy5zdGlja3lUb3AgPyAnc3RpY2t5JyA6ICdzdGF0aWMnLFxuICAgICAgdG9wOiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uc3RpY2t5VG9wID8gJzAnIDogJ2F1dG8nLFxuICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uekluZGV4IHx8ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Rm9vdGVyU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5mb290ZXIsXG4gICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5mb290ZXI/LnN0aWNreUJvdHRvbSA/ICdzdGlja3knIDogJ3N0YXRpYycsXG4gICAgICBib3R0b206IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy5zdGlja3lCb3R0b20gPyAnMCcgOiAnYXV0bycsXG4gICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICBnZXRSb3dTdHlsZShyb3dJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCByb3dTdHlsZXMgPSB0aGlzLnN0eWxlQ29uZmlnLnJvd3M7XG4gICAgaWYgKHJvd1N0eWxlcyAmJiAnZXZlbicgaW4gcm93U3R5bGVzICYmICdvZGQnIGluIHJvd1N0eWxlcykge1xuICAgICAgcmV0dXJuIHJvd0luZGV4ICUgMiA9PT0gMCA/IHJvd1N0eWxlcy5ldmVuIDogcm93U3R5bGVzLm9kZDtcbiAgICB9IGVsc2UgaWYgKHJvd1N0eWxlcyAmJiAnbnRoJyBpbiByb3dTdHlsZXMgJiYgcm93U3R5bGVzLm50aCkge1xuICAgICAgY29uc3QgeyBpbnRlcnZhbCwgc3R5bGUgfSA9IHJvd1N0eWxlcy5udGg7XG4gICAgICByZXR1cm4gKHJvd0luZGV4ICsgMSkgJSAoaW50ZXJ2YWwgfHwgMSkgPT09IDAgPyBzdHlsZSA6IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcm93U3R5bGVzIHx8IHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldENlbGxTdHlsZShyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBpc0ZpcnN0Q29sdW1uID0gY29sSW5kZXggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0Q29sdW1uID0gY29sSW5kZXggPT09IHRoaXMuZGlzcGxheUNvbHVtbnMoKS5sZW5ndGggLSAxO1xuXG4gICAgbGV0IGNlbGxTdHlsZSA9IHsgLi4udGhpcy5zdHlsZUNvbmZpZy5jZWxscyB9O1xuXG4gICAgaWYgKGlzRmlyc3RDb2x1bW4pIHtcbiAgICAgIGNlbGxTdHlsZSA9IHtcbiAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAuLi50aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbj8uc3RpY2t5TGVmdFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICBsZWZ0OiB0aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uPy5zdGlja3lMZWZ0ID8gJzAnIDogJ2F1dG8nLFxuICAgICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZmlyc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0Q29sdW1uKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICByaWdodDogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmxhc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAvLyBBcHBseSBib2R5IHN0eWxlcyB0byBhbGwgY2VsbHNcbiAgICAgIGNlbGxTdHlsZSA9IHsgLi4uY2VsbFN0eWxlLCAuLi50aGlzLnN0eWxlQ29uZmlnLmJvZHkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VsbFN0eWxlID0geyAuLi50aGlzLnN0eWxlQ29uZmlnLmhlYWRlciB9O1xuICAgIH1cblxuICAgIHJldHVybiBjZWxsU3R5bGU7XG4gIH1cbn1cblxuLy8gRGVmYXVsdCBzdHlsZXNcbmNvbnN0IGRlZmF1bHRUYWJsZVN0eWxlczogVGFibGVTdHlsZXMgPSB7XG4gIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBib3hTaGFkb3c6ICcwIDJweCA0cHggcmdiYSgwLDAsMCwwLjEpJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVhZGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyQm90dG9tOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxuICByb3dzOiB7XG4gICAgZXZlbjoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgfSxcbiAgICBvZGQ6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgIH0sXG4gICAgbnRoOiB7XG4gICAgICBpbnRlcnZhbDogNSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBjZWxsczoge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbiAgZm9vdGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyVG9wOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxufTtcbiIsIkBpZiAodXNlVmlydHVhbFNjcm9sbCgpKSB7XG48Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUoKVwiXG4gIGNsYXNzPVwidmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIlxuICBbc3R5bGUuaGVpZ2h0LnB4XT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpICogMTBcIlxuPlxuICA8dGFibGUgW25nU3R5bGVdPVwiZ2V0VGFibGVTdHlsZSgpXCI+XG4gICAgPHRoZWFkPlxuICAgICAgPCEtLSA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgPHRoIGNvbHNwYW49XCIyXCIgc2NvcGU9XCJjb2xncm91cFwiPkdyb3VwIDE8L3RoPlxuICAgICAgPHRoIGNvbHNwYW49XCIxXCIgc2NvcGU9XCJjb2xncm91cFwiPkdyb3VwIDI8L3RoPlxuICAgIDwvdHI+IC0tPlxuXG4gICAgICA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICAgIDx0aCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUoLTEsICRpbmRleClcIj5cbiAgICAgICAgICBAaWYgKGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC90aD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIDx0clxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cIlxuICAgICAgICAgIGxldCByb3cgb2YgdGFibGVEYXRhKCk7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeVJvd0tleTtcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSBpbmRleFxuICAgICAgICBcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIlxuICAgICAgPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkOyBsZXQgY29sSW5kZXggPVxuICAgICAgICAkaW5kZXgpIHtcbiAgICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChpc1Jvd0VkaXRpbmcocm93Ll9rZXkpICYmIGNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENlbGxDb250ZXh0KHJvdywgY29sdW1uLCByb3dJbmRleClcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG5cbiAgICBAaWYgKGhhc0Zvb3RlcigpKSB7XG4gICAgPHRmb290PlxuICAgICAgPHRyIFtuZ1N0eWxlXT1cImdldEZvb3RlclN0eWxlKClcIj5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICA8dGQgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChjb2x1bW4uZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEZvb3RlckNvbnRleHQoY29sdW1uKVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3Rmb290PlxuXG4gICAgfVxuICA8L3RhYmxlPlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG59IEBlbHNlIHtcbjx0YWJsZSBbbmdTdHlsZV09XCJnZXRUYWJsZVN0eWxlKClcIj5cbiAgPHRoZWFkPlxuICAgIDwhLS0gPHRyIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKClcIj5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAxPC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMVwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAyPC90aD5cbiAgICA8L3RyPiAtLT5cblxuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZSgpXCI+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICA8dGggW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmhlYWRlclRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNvbHVtbilcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgICB9XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIEBmb3IgKHJvdyBvZiB0YWJsZURhdGEoKTsgdHJhY2sgcm93Ll9rZXk7IGxldCByb3dJbmRleCA9ICRpbmRleCkgeyBAaWZcbiAgICAoaXNHcm91cFJvdyhyb3cub3JpZ2luYWxEYXRhKSkge1xuICAgIDx0ciBjbGFzcz1cImdyb3VwLXJvd1wiIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgPHRkXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheUNvbHVtbnMoKS5sZW5ndGhcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIDApXCJcbiAgICAgID5cbiAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGRpc3BsYXlDb2x1bW5zKClbMF0pIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgfSBAZWxzZSB7XG4gICAgPHRyIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KVxuICAgICAge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgIEBpZiAoaXNSb3dFZGl0aW5nKHJvdy5fa2V5KSAmJiBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDZWxsQ29udGV4dChyb3csIGNvbHVtbiwgcm93SW5kZXgpXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGQ+XG4gICAgICB9XG4gICAgPC90cj5cbiAgICB9IH1cbiAgPC90Ym9keT5cblxuICBAaWYgKGhhc0Zvb3RlcigpKSB7XG4gIDx0Zm9vdD5cbiAgICA8dHIgW25nU3R5bGVdPVwiZ2V0Rm9vdGVyU3R5bGUoKVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZSgtMSwgJGluZGV4KVwiPlxuICAgICAgICBAaWYgKGNvbHVtbi5mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZvb3RlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICAgfVxuICAgIDwvdHI+XG4gIDwvdGZvb3Q+XG5cbiAgfVxuPC90YWJsZT5cbn1cbiJdfQ==
|
|
@@ -35,4 +35,4 @@ export {};
|
|
|
35
35
|
// | { [K in keyof T]: ColumnDefinitionWithKey<T, K> }[keyof T]
|
|
36
36
|
// | ColumnDefinitionWithFn<T>
|
|
37
37
|
// | ColumnDefinitionWithNeither<T>;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUEyREEsdUNBQXVDO0FBRXZDLDBDQUEwQztBQUMxQyxnQkFBZ0I7QUFDaEIsOENBQThDO0FBQzlDLHFDQUFxQztBQUNyQyx5Q0FBeUM7QUFDekMsdUNBQXVDO0FBQ3ZDLHVDQUF1QztBQUN2QyxpQ0FBaUM7QUFDakMsOEJBQThCO0FBQzlCLHdCQUF3QjtBQUN4QixLQUFLO0FBRUwsNEVBQTRFO0FBQzVFLHVDQUF1QztBQUN2QyxPQUFPO0FBQ1Asc0JBQXNCO0FBQ3RCLGtDQUFrQztBQUNsQyxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBQ3hCLDRDQUE0QztBQUM1QyxLQUFLO0FBRUwsK0VBQStFO0FBQy9FLHlCQUF5QjtBQUN6QiwrQkFBK0I7QUFDL0IseUNBQXlDO0FBQ3pDLEtBQUs7QUFFTCwyRUFBMkU7QUFDM0UseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekIsS0FBSztBQUVMLHdFQUF3RTtBQUN4RSxvQ0FBb0M7QUFDcEMsaUVBQWlFO0FBQ2pFLGdDQUFnQztBQUNoQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBYnN0cmFjdENvbnRyb2xPcHRpb25zLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBGb3JtQ29udHJvbCxcbiAgVmFsaWRhdG9yRm4sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5EZWZpbml0aW9uPFQ+IHtcbiAgaWQ6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmcgfCAoKGNvbnRleHQ6IGFueSkgPT4gYW55KTtcbiAgYWNjZXNzb3JLZXk/OiBrZXlvZiBUO1xuICBhY2Nlc3NvckZuPzogKHJvdzogVCkgPT4gYW55O1xuICBjZWxsVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBjZWxsRWRpdFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIHNvcnRBY3Rpb24/OiAnQVNDJyB8ICdERVNDJztcbiAgZm9ybUNvbnRyb2xOYW1lPzogc3RyaW5nO1xuICBncm91cE5hbWU/OiBzdHJpbmc7XG4gIHZhbGlkYXRvckZuPzogKHZhbHVlOiBUW2tleW9mIFRdKSA9PiBib29sZWFuO1xuICBpbXBvcnRLZXk/OiBrZXlvZiBUO1xuICBjYW5JbXBvcnQ/OiBib29sZWFuO1xuICBjYW5FeHBvcnQ/OiBib29sZWFuO1xuICBpbXBvcnRCeT86IGtleW9mIFQgfCAoKGltcG9ydGVkUm93OiBhbnkpID0+IFRba2V5b2YgVF0pO1xuICBleHBvcnRCeT86IGtleW9mIFQgfCAoKHJvdzogVCkgPT4gYW55KTtcbiAgaXNIaWRkZW4/OiBib29sZWFuO1xufVxuXG4vLyBEZWZpbmUgYSB0eXBlIHRoYXQgZXh0ZW5kcyBUIHdpdGggYSBfa2V5IHByb3BlcnR5XG5leHBvcnQgdHlwZSBEYXRhV2l0aEtleTxUPiA9IHtcbiAgX2tleTogc3RyaW5nIHwgbnVtYmVyO1xuICBfa2V5X3Byb3A6IGtleW9mIFQgfCAnX2luZGV4JztcbiAgb3JpZ2luYWxEYXRhOiBUO1xufTtcblxuZXhwb3J0IHR5cGUgR3JvdXBlZERhdGFSb3c8VD4gPSBEYXRhV2l0aEtleTxUPiAmIHtcbiAgaXNHcm91cFJvdz86IGJvb2xlYW47XG4gIGdyb3VwVmFsdWU/OiBhbnk7XG4gIGdyb3VwVGl0bGU/OiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29udHJvbE9mPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXT86IEZvcm1Db250cm9sO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtR3JvdXBDb25maWc8XG4gIFRDb250cm9sIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfVxuPiB7XG4gIGNvbnRyb2xzOiBUQ29udHJvbDtcbiAgdmFsaWRhdG9yT3JPcHRzPzogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGw7XG4gIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIEVkaXRlZERhdGE8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdPzogVFtLXSBleHRlbmRzIG9iamVjdCA/IFBhcnRpYWw8VFtLXT4gOiBUW0tdO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb25CYXNlPFQ+ID0ge1xuLy8gICBpZDogc3RyaW5nO1xuLy8gICBoZWFkZXI6IHN0cmluZyB8ICgoY29udGV4dDogYW55KSA9PiBhbnkpO1xuLy8gICBjZWxsVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuLy8gICBjZWxsRWRpdFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbi8vICAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuLy8gICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4vLyAgIHNvcnRBY3Rpb24/OiAnQVNDJyB8ICdERVNDJztcbi8vICAgZm9ybUNvbnRyb2xOYW1lPzogc3RyaW5nO1xuLy8gICBncm91cE5hbWU/OiBzdHJpbmc7XG4vLyB9O1xuXG4vLyAvLyBIZWxwZXIgdHlwZSB0byBjcmVhdGUgYSBjb2x1bW4gZGVmaW5pdGlvbiB3aXRoIGEgc3BlY2lmaWMgYWNjZXNzb3Iga2V5XG4vLyBleHBvcnQgdHlwZSBDb2x1bW5EZWZpbml0aW9uV2l0aEtleTxcbi8vICAgVCxcbi8vICAgSyBleHRlbmRzIGtleW9mIFRcbi8vID4gPSBDb2x1bW5EZWZpbml0aW9uQmFzZTxUPiAmIHtcbi8vICAgYWNjZXNzb3JLZXk6IEs7XG4vLyAgIGFjY2Vzc29yRm4/OiBuZXZlcjtcbi8vICAgdmFsaWRhdG9yRm4/OiAodmFsdWU6IFRbS10pID0+IGJvb2xlYW47XG4vLyB9O1xuXG4vLyBleHBvcnQgdHlwZSBDb2x1bW5EZWZpbml0aW9uV2l0aEZuPFQsIFIgPSBhbnk+ID0gQ29sdW1uRGVmaW5pdGlvbkJhc2U8VD4gJiB7XG4vLyAgIGFjY2Vzc29yS2V5PzogbmV2ZXI7XG4vLyAgIGFjY2Vzc29yRm46IChyb3c6IFQpID0+IFI7XG4vLyAgIHZhbGlkYXRvckZuPzogKHZhbHVlOiBSKSA9PiBib29sZWFuO1xuLy8gfTtcblxuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbldpdGhOZWl0aGVyPFQ+ID0gQ29sdW1uRGVmaW5pdGlvbkJhc2U8VD4gJiB7XG4vLyAgIGFjY2Vzc29yS2V5PzogbmV2ZXI7XG4vLyAgIGFjY2Vzc29yRm4/OiBuZXZlcjtcbi8vICAgdmFsaWRhdG9yRm4/OiBuZXZlcjtcbi8vIH07XG5cbi8vIC8vIFVuaW9uIHR5cGUgdGhhdCByZXByZXNlbnRzIGFsbCBwb3NzaWJsZSBjb2x1bW4gZGVmaW5pdGlvbiB2YXJpYW50c1xuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbjxUPiA9XG4vLyAgIHwgeyBbSyBpbiBrZXlvZiBUXTogQ29sdW1uRGVmaW5pdGlvbldpdGhLZXk8VCwgSz4gfVtrZXlvZiBUXVxuLy8gICB8IENvbHVtbkRlZmluaXRpb25XaXRoRm48VD5cbi8vICAgfCBDb2x1bW5EZWZpbml0aW9uV2l0aE5laXRoZXI8VD47XG4iXX0=
|