@openziti/ziti-console-lib 0.7.1 → 0.8.1
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/assets/fonts/icomoon.eot +0 -0
- package/assets/fonts/icomoon.svg +118 -0
- package/assets/fonts/icomoon.ttf +0 -0
- package/assets/fonts/icomoon.woff +0 -0
- package/assets/fonts/icomoon.woff2 +0 -0
- package/assets/styles/global.scss +147 -3
- package/assets/styles/icons.css +13 -0
- package/esm2022/lib/features/card-list/card-list.component.mjs +12 -11
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +1 -1
- package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +13 -3
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +1 -1
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +13 -3
- package/esm2022/lib/features/login/login-dialog.component.mjs +123 -0
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +4 -4
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +404 -0
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +96 -0
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +222 -0
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +55 -0
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +24 -3
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +15 -3
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +24 -4
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +24 -4
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +6 -6
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -15
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +3 -3
- package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
- package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +1 -4
- package/esm2022/lib/models/certificate-authority.mjs +16 -0
- package/esm2022/lib/models/jwt-signer.mjs +2 -1
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +3 -3
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +120 -0
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +240 -0
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -1
- package/esm2022/lib/services/login-service.class.mjs +5 -1
- package/esm2022/lib/services/node-data.service.mjs +8 -13
- package/esm2022/lib/services/validation.service.mjs +3 -12
- package/esm2022/lib/services/ziti-controller-data.service.mjs +23 -5
- package/esm2022/lib/services/ziti-data.service.mjs +27 -2
- package/esm2022/lib/shared/list-page-service.class.mjs +9 -4
- package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +1493 -303
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/card-list/card-list.component.d.ts +3 -2
- package/lib/features/card-list/card-list.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts +3 -1
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +3 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
- package/lib/features/login/login-dialog.component.d.ts +29 -0
- package/lib/features/login/login-dialog.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +81 -0
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +37 -0
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +1 -0
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +63 -0
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +28 -0
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +1 -0
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +5 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts +5 -1
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +4 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +5 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +3 -2
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
- package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
- package/lib/models/certificate-authority.d.ts +14 -0
- package/lib/models/certificate-authority.d.ts.map +1 -0
- package/lib/models/jwt-signer.d.ts +1 -0
- package/lib/models/jwt-signer.d.ts.map +1 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +30 -0
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +1 -0
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +35 -0
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -0
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
- package/lib/services/login-service.class.d.ts +6 -2
- package/lib/services/login-service.class.d.ts.map +1 -1
- package/lib/services/node-data.service.d.ts +1 -0
- package/lib/services/node-data.service.d.ts.map +1 -1
- package/lib/services/validation.service.d.ts.map +1 -1
- package/lib/services/ziti-controller-data.service.d.ts +2 -2
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +6 -2
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/shared/list-page-service.class.d.ts +1 -0
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +22 -18
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/public-api.d.ts.map +1 -1
|
@@ -44,20 +44,8 @@ class JwtSignerFormService {
|
|
|
44
44
|
return false;
|
|
45
45
|
});
|
|
46
46
|
}).catch((resp) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
errorMessage = resp?.error?.error?.cause?.message;
|
|
50
|
-
}
|
|
51
|
-
else if (resp?.error?.error?.cause?.reason) {
|
|
52
|
-
errorMessage = resp?.error?.error?.cause?.reason;
|
|
53
|
-
}
|
|
54
|
-
else if (resp?.error?.message) {
|
|
55
|
-
errorMessage = resp?.error?.message;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
errorMessage = 'An unknown error occurred';
|
|
59
|
-
}
|
|
60
|
-
const growlerData = new GrowlerModel('error', 'Error', `Error Creating JWT Signer`, errorMessage);
|
|
47
|
+
const errorMessage = this.dataService.getErrorMessage(resp);
|
|
48
|
+
const growlerData = new GrowlerModel('error', 'Error', `Error ${isUpdate ? 'Updating' : 'Creating'} JWT Signer`, errorMessage);
|
|
61
49
|
this.growlerService.show(growlerData);
|
|
62
50
|
throw resp;
|
|
63
51
|
});
|
|
@@ -89,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
89
77
|
type: Inject,
|
|
90
78
|
args: [SHAREDZ_EXTENSION]
|
|
91
79
|
}] }, { type: i1.GrowlerService }, { type: i2.ValidationService }]; } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXNpZ25lci1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvand0LXNpZ25lci9qd3Qtc2lnbmVyLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDdkYsT0FBTyxFQUEyQixPQUFPLEVBQVMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFFN0YsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUVyRCxNQUdhLG9CQUFvQjtJQU03QixZQUN1QyxXQUE0QixFQUM3QixVQUE0QixFQUN0RCxjQUE4QixFQUM5QixpQkFBb0M7UUFIVCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDdEQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFSaEQsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBUXJCLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUTtRQUNULE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBUSxJQUFJLENBQUMscUJBQXFC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LENBQUM7K0dBbkVRLG9CQUFvQixrQkFPakIsaUJBQWlCLGFBQ2pCLGlCQUFpQjttSEFScEIsb0JBQW9CLGNBRmpCLE1BQU07O1NBRVQsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFRUSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7ZGVmZXIsIGludmVydCwgaXNCb29sZWFuLCBpc0VtcHR5LCBpc05pbCwga2V5c30gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZSwgU0hBUkVEWl9FWFRFTlNJT059IGZyb20gXCIuLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge1ZhbGlkYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge0p3dFNpZ25lcn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9qd3Qtc2lnbmVyXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSnd0U2lnbmVyRm9ybVNlcnZpY2Uge1xuXG4gICAgaXRlbXM6IGFueVtdID0gW107XG4gICAgZXJyb3JzOiBhbnlbXSA9IFtdO1xuICAgIHNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgZGF0YVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgICAgQEluamVjdChTSEFSRURaX0VYVEVOU0lPTilwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIHNhdmUoZm9ybURhdGEpIHtcbiAgICAgICAgY29uc3QgaXNVcGRhdGUgPSAhaXNFbXB0eShmb3JtRGF0YS5pZCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZ2V0Snd0U2lnbmVyRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLmRhdGFTZXJ2aWNlLnB1dCgnZXh0ZXJuYWwtand0LXNpZ25lcnMnLCBkYXRhLCBmb3JtRGF0YS5pZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9tID0gdGhpcy5kYXRhU2VydmljZS5wb3N0KCdleHRlcm5hbC1qd3Qtc2lnbmVycycsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb20udGhlbihhc3luYyAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXNVcGRhdGUgPyBmb3JtRGF0YS5pZCA6IChyZXN1bHQ/LmRhdGE/LmlkIHx8IHJlc3VsdD8uaWQpO1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZ2V0U3ViZGF0YSgnZXh0ZXJuYWwtand0LXNpZ25lcnMnLCBpZCwgJycpLnRoZW4oKHN2Y0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ZjRGF0YS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhU2F2ZWQoY29uZmlnKS50aGVuKChmb3JtU2F2ZWRSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZm9ybVNhdmVkUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBKV1QgU2lnbmVyICR7aXNVcGRhdGUgPyAnVXBkYXRlZCcgOiAnQ3JlYXRlZCd9YCxcbiAgICAgICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSAke2lzVXBkYXRlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnfSBKV1QgU2lnbmVyOiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHJlc3ApO1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBKV1QgU2lnbmVyYCxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRocm93IHJlc3A7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0Snd0U2lnbmVyRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgSnd0U2lnbmVyKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IGtleXMoc2F2ZU1vZGVsKTtcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIHN3aXRjaChwcm9wKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2F2ZU1vZGVsO1xuICAgIH1cblxufVxuIl19
|
|
@@ -21,11 +21,13 @@ import { SHAREDZ_EXTENSION } from "../extendable/extensions-noop.service";
|
|
|
21
21
|
import { ZITI_DATA_SERVICE } from "../../services/ziti-data.service";
|
|
22
22
|
import { NavigationEnd } from "@angular/router";
|
|
23
23
|
import { Subscription } from "rxjs";
|
|
24
|
+
import { SETTINGS_SERVICE } from "../../services/settings.service";
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
25
26
|
import * as i1 from "../messaging/growler.service";
|
|
26
27
|
import * as i2 from "@angular/router";
|
|
27
28
|
import * as i3 from "@angular/common";
|
|
28
29
|
import * as i4 from "../../services/ziti-data.service";
|
|
30
|
+
import * as i5 from "../../services/settings.service";
|
|
29
31
|
// @ts-ignore
|
|
30
32
|
const { context, tags, resources, service, app } = window;
|
|
31
33
|
export class Entity {
|
|
@@ -37,7 +39,7 @@ export const KEY_CODES = {
|
|
|
37
39
|
DOWN_ARROW: 40
|
|
38
40
|
};
|
|
39
41
|
class ProjectableForm extends ExtendableComponent {
|
|
40
|
-
constructor(growlerService, extService, zitiService, router, route, location) {
|
|
42
|
+
constructor(growlerService, extService, zitiService, router, route, location, settingsService) {
|
|
41
43
|
super();
|
|
42
44
|
this.growlerService = growlerService;
|
|
43
45
|
this.extService = extService;
|
|
@@ -45,6 +47,7 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
45
47
|
this.router = router;
|
|
46
48
|
this.route = route;
|
|
47
49
|
this.location = location;
|
|
50
|
+
this.settingsService = settingsService;
|
|
48
51
|
this.isModal = false;
|
|
49
52
|
this.dataChange = new EventEmitter();
|
|
50
53
|
this.errors = {};
|
|
@@ -60,7 +63,9 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
60
63
|
this.apiOptions = [{ id: 'cli', label: 'Copy as CLI' }, { id: 'curl', label: 'Copy as CURL' }];
|
|
61
64
|
this.basePath = '';
|
|
62
65
|
this.showMore = false;
|
|
66
|
+
this._settings = {};
|
|
63
67
|
this.checkDataChangeDebounced = debounce(this.checkDataChange, 100, { maxWait: 100 });
|
|
68
|
+
this.ignoreDataChange = false;
|
|
64
69
|
this.subscription = new Subscription();
|
|
65
70
|
this.previousRoute = this.router.getCurrentNavigation().previousNavigation?.finalUrl?.toString();
|
|
66
71
|
this.subscription.add(this.route?.params?.subscribe(params => {
|
|
@@ -78,6 +83,15 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
78
83
|
this.basePath = pathSegments[0];
|
|
79
84
|
}
|
|
80
85
|
}));
|
|
86
|
+
this.subscription.add(this.settingsService.settingsChange?.subscribe(params => {
|
|
87
|
+
const newSettings = cloneDeep(this.settingsService.settings);
|
|
88
|
+
if (!isEmpty(this.formData?.id) && (isEmpty(this._settings) || this._settings.session?.id === newSettings.session?.id)) {
|
|
89
|
+
this._settings = newSettings;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this._settings = newSettings;
|
|
93
|
+
this.ngOnInit();
|
|
94
|
+
}));
|
|
81
95
|
}
|
|
82
96
|
ngAfterViewInit() {
|
|
83
97
|
super.ngAfterViewInit();
|
|
@@ -212,6 +226,9 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
212
226
|
this.checkDataChangeDebounced();
|
|
213
227
|
}
|
|
214
228
|
checkDataChange() {
|
|
229
|
+
if (this.ignoreDataChange) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
215
232
|
let initData = cloneDeep(this.initData);
|
|
216
233
|
initData = this.omitEmptyData(initData);
|
|
217
234
|
let formData = cloneDeep(this.formData);
|
|
@@ -277,7 +294,7 @@ class ProjectableForm extends ExtendableComponent {
|
|
|
277
294
|
return results.data;
|
|
278
295
|
});
|
|
279
296
|
}
|
|
280
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, deps: [{ token: i1.GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: ZITI_DATA_SERVICE }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
297
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, deps: [{ token: i1.GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: ZITI_DATA_SERVICE }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Location }, { token: SETTINGS_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
281
298
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProjectableForm, selector: "ng-component", inputs: { isModal: "isModal", entityId: "entityId", formData: "formData" }, outputs: { close: "close", dataChange: "dataChange" }, viewQueries: [{ propertyName: "nameFieldInput", first: true, predicate: ["nameFieldInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [""] }); }
|
|
282
299
|
}
|
|
283
300
|
export { ProjectableForm };
|
|
@@ -290,7 +307,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
290
307
|
}] }, { type: i4.ZitiDataService, decorators: [{
|
|
291
308
|
type: Inject,
|
|
292
309
|
args: [ZITI_DATA_SERVICE]
|
|
293
|
-
}] }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Location }
|
|
310
|
+
}] }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Location }, { type: i5.SettingsService, decorators: [{
|
|
311
|
+
type: Inject,
|
|
312
|
+
args: [SETTINGS_SERVICE]
|
|
313
|
+
}] }]; }, propDecorators: { isModal: [{
|
|
294
314
|
type: Input
|
|
295
315
|
}], entityId: [{
|
|
296
316
|
type: Input
|
|
@@ -304,4 +324,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
304
324
|
type: ViewChild,
|
|
305
325
|
args: ['nameFieldInput']
|
|
306
326
|
}] } });
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGFibGUtZm9ybS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNILFNBQVMsRUFHVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sUUFBUSxDQUFDO0FBQ2xJLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsYUFBYSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBR2xDLGFBQWE7QUFDYixNQUFNLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBQyxHQUFHLE1BQU0sQ0FBQztBQUV4RCxNQUFNLE9BQU8sTUFBTTtDQUVsQjtBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUNyQixVQUFVLEVBQUUsRUFBRTtJQUNkLFFBQVEsRUFBRSxFQUFFO0lBQ1osV0FBVyxFQUFFLEVBQUU7SUFDZixVQUFVLEVBQUUsRUFBRTtDQUNqQixDQUFDO0FBRUYsTUFJc0IsZUFBZ0IsU0FBUSxtQkFBbUI7SUE4QjdELFlBQ2MsY0FBOEIsRUFDSCxVQUE0QixFQUM1QixXQUE0QixFQUN2RCxNQUFlLEVBQ2YsS0FBc0IsRUFDdEIsUUFBbUI7UUFFN0IsS0FBSyxFQUFFLENBQUM7UUFQRSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUNmLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFuQ3hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFJZixlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFNM0QsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNkLGVBQVUsR0FBRyxZQUFZLENBQUM7UUFDMUIsZ0JBQVcsR0FBUSxNQUFNLENBQUM7UUFDMUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUM1QixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixlQUFVLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQztRQUN0RixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQiw2QkFBd0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUUvRSxpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBVzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNqRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25DLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ25DLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO29CQUNyQyxPQUFPO2lCQUNWO2dCQUNELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25DO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFUSxlQUFlO1FBQ3BCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNqRixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBUTtRQUNwQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFFLEtBQUssQ0FBQztRQUN4RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU87UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUM7WUFDVCxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBRSxDQUFDLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3hDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLEtBQUssR0FBRztvQkFDVixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2lCQUNoQixDQUFBO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQy9CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUztRQUNMLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRztRQUNiLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksR0FBRyxDQUFDLEtBQUssSUFBRSxRQUFRLEVBQUU7WUFDckIsSUFBSSxJQUFJLGlCQUFpQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsMEJBQTBCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxpQ0FBaUMsR0FBQyxHQUFHLENBQUMsV0FBVyxHQUFDLE1BQU0sQ0FBQztTQUMvSDthQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBRSxTQUFTLEVBQUU7WUFDN0IsSUFBSSxJQUFJLGlCQUFpQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsOEJBQThCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxNQUFNLENBQUM7U0FDakY7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUUsS0FBSyxFQUFFO1lBQ3pCLElBQUksSUFBSSxlQUFlLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxrQkFBa0IsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLHNCQUFzQixDQUFDO1lBQ2hGLElBQUksSUFBSSxpQkFBaUIsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLDBCQUEwQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsaUNBQWlDLEdBQUMsR0FBRyxDQUFDLFdBQVcsR0FBQyxNQUFNLENBQUM7U0FDL0g7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUUsUUFBUSxFQUFFO1lBQzVCLElBQUksSUFBSSx1QkFBdUIsQ0FBQztZQUNoQyxJQUFJLElBQUksZUFBZSxHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsYUFBYSxHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsZ0VBQWdFLEdBQUMsR0FBRyxDQUFDLFdBQVcsR0FBQyxpQ0FBaUMsR0FBQyxHQUFHLENBQUMsT0FBTyxHQUFDLGtDQUFrQyxHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsK0JBQStCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxrQ0FBa0MsQ0FBQztZQUN2UyxJQUFJLElBQUksaUJBQWlCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxvQkFBb0IsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLG1CQUFtQixDQUFDO1lBQ2pGLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFFLE1BQU0sRUFBRTtZQUMxQixJQUFJLElBQUksdUJBQXVCLENBQUM7WUFDaEMsSUFBSSxJQUFJLGVBQWUsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLGFBQWEsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLHNEQUFzRCxHQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUMsaUNBQWlDLEdBQUMsR0FBRyxDQUFDLE9BQU8sR0FBQyxrQ0FBa0MsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLCtCQUErQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsZ0NBQWdDLENBQUM7WUFDM1IsSUFBSSxJQUFJLGlCQUFpQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsb0JBQW9CLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxtQkFBbUIsQ0FBQztZQUNqRixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6RDthQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBRSxPQUFPLEVBQUU7WUFDM0IsSUFBSSxJQUFJLGVBQWUsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLG1CQUFtQixDQUFDO1lBQ25ELElBQUksSUFBSSxpQkFBaUIsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLDBCQUEwQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsZ0JBQWdCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxpQ0FBaUMsR0FBQyxHQUFHLENBQUMsV0FBVyxHQUFDLE1BQU0sQ0FBQztTQUN2SjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLGFBQWEsR0FBRyxLQUFLLEVBQUUsSUFBSyxFQUFFLEtBQU07UUFDMUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx5R0FBeUcsQ0FBQyxDQUFDO1lBQ3JJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsYUFBYSxHQUFHLEtBQUssRUFBRSxJQUFLLEVBQUUsS0FBTTtRQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEI7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFUyxlQUFlO1FBQ3JCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNoQixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3pCLElBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNLElBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRztRQUNoQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQUc7UUFDZixTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsU0FBUyxFQUNULFNBQVMsRUFDVCxhQUFhLEVBQ2Isa0NBQWtDLENBQ3JDLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsYUFBYTtRQUM3QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxJQUFJLEdBQUcsQ0FBQzthQUNuQjtZQUNELFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsYUFBYTtRQUM5QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxJQUFJLElBQUksQ0FBQzthQUNwQjtZQUNELFFBQVEsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7UUFDM0IsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTyxPQUFPLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUM3SDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxhQUFhO1FBQ25CLE9BQU87SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FuUmlCLGVBQWUsZ0RBZ0NyQixpQkFBaUIsYUFDakIsaUJBQWlCO21HQWpDWCxlQUFlLGdVQUh2QixFQUFFOztTQUdNLGVBQWU7NEZBQWYsZUFBZTtrQkFKcEMsU0FBUzsrQkFDSSxFQUFFOzswQkFtQ1AsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLGlCQUFpQjtxSEFoQ3BCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNZLFFBQVE7c0JBQXpCLEtBQUs7Z0JBQ2EsS0FBSztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNzQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7RXh0ZW5kYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2V4dGVuZGFibGUvZXh0ZW5kYWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge2RlZmVyLCBpc0VxdWFsLCB1bnNldCwgZGVib3VuY2UsIGNsb25lRGVlcCwgZm9yRWFjaCwgaXNBcnJheSwgaXNFbXB0eSwgaXNPYmplY3QsIGlzTmlsLCBtYXAsIG9taXRCeSwgc2xpY2V9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2UsIFNIQVJFRFpfRVhURU5TSU9OfSBmcm9tIFwiLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtJZGVudGl0eX0gZnJvbSBcIi4uLy4uL21vZGVscy9pZGVudGl0eVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHtjb250ZXh0LCB0YWdzLCByZXNvdXJjZXMsIHNlcnZpY2UsIGFwcH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHkge1xuICAgIG5hbWU6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBLRVlfQ09ERVMgPSB7XG4gICAgTEVGVF9BUlJPVzogMzcsXG4gICAgVVBfQVJST1c6IDM4LFxuICAgIFJJR0hUX0FSUk9XOiAzOSxcbiAgICBET1dOX0FSUk9XOiA0MFxufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2plY3RhYmxlLWZvcm0uY2xhc3Muc2NzcyddXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plY3RhYmxlRm9ybSBleHRlbmRzIEV4dGVuZGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzTW9kYWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlbnRpdHlJZDogU3RyaW5nO1xuICAgIEBJbnB1dCgpIGFic3RyYWN0IGZvcm1EYXRhOiBhbnk7XG4gICAgQE91dHB1dCgpIGFic3RyYWN0IGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCkgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAVmlld0NoaWxkKCduYW1lRmllbGRJbnB1dCcpIG5hbWVGaWVsZElucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgYWJzdHJhY3QgY2xlYXIoKTogdm9pZDtcbiAgICBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICBwcm90ZWN0ZWQgZW50aXR5VHlwZSA9ICdpZGVudGl0aWVzJztcbiAgICBwcm90ZWN0ZWQgZW50aXR5Q2xhc3M6IGFueSA9IEVudGl0eTtcbiAgICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgbW9yZUFjdGlvbnM6IGFueVtdID0gW107XG4gICAgdGFnRWxlbWVudHM6IGFueSA9IFtdO1xuICAgIHRhZ0RhdGE6IGFueSA9IFtdO1xuICAgIGhpZGVUYWdzID0gZmFsc2U7XG4gICAgaW5pdERhdGE6IGFueSA9IHt9O1xuICAgIF9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgYXBpT3B0aW9ucyA9IFt7aWQ6ICdjbGknLCBsYWJlbDogJ0NvcHkgYXMgQ0xJJ30sIHtpZDogJ2N1cmwnLCBsYWJlbDogJ0NvcHkgYXMgQ1VSTCd9XTtcbiAgICBiYXNlUGF0aCA9ICcnO1xuICAgIHByZXZpb3VzUm91dGU7XG4gICAgc2hvd01vcmUgPSBmYWxzZTtcblxuICAgIGNoZWNrRGF0YUNoYW5nZURlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMuY2hlY2tEYXRhQ2hhbmdlLCAxMDAsIHttYXhXYWl0OiAxMDB9KTtcblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNIQVJFRFpfRVhURU5TSU9OKSBwcm90ZWN0ZWQgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJvdGVjdGVkIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI/OiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgbG9jYXRpb24/OiBMb2NhdGlvblxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnByZXZpb3VzUm91dGUgPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpLnByZXZpb3VzTmF2aWdhdGlvbj8uZmluYWxVcmw/LnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMucm91dGU/LnBhcmFtcz8uc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXNbJ2lkJ107XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eUlkID0gaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQ/LnNuYXBzaG90Py5yb3V0ZUNvbmZpZz8ucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHBhdGhTZWdtZW50c1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHRoaXMubmFtZUZpZWxkSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBpZiAodGhpcy5leHRTZXJ2aWNlPy5tb3JlQWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tb3JlQWN0aW9ucyA9IFsuLi50aGlzLm1vcmVBY3Rpb25zLCAuLi50aGlzLmV4dFNlcnZpY2UubW9yZUFjdGlvbnNdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0eUlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnRpdHlJZCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gbmV3IHRoaXMuZW50aXR5Q2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5VXBkYXRlZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSh0aGlzLmVudGl0eVR5cGUsIHRoaXMuZW50aXR5SWQsICcnKS50aGVuKChlbnRpdHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBlbnRpdHk/LmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0eVVwZGF0ZWQoKTtcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dNb3JlQ2hhbmdlZChzaG93TW9yZSkge1xuICAgICAgICBpZiAoIXNob3dNb3JlIHx8IHRoaXMuaGlkZVRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0VGFncygpXG4gICAgfVxuXG4gICAgbG9hZFRhZ3MoKSB7XG4gICAgICAgIHRoaXMuaGlkZVRhZ3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhpZGVUYWdzXCIpPT1cInllc1wiO1xuICAgICAgICBpZiAodGhpcy5oaWRlVGFncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZpY2UuY2FsbChcInRhZ3NcIiwge30sIHRoaXMudGFnc0xvYWRlZC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0YWdzTG9hZGVkKHJlc3VsdHMpIHtcbiAgICAgICAgdGFncy5kYXRhID0gcmVzdWx0cztcbiAgICAgICAgY29udGV4dC5zZXQodGFncy5uYW1lLCB0YWdzLmRhdGEpO1xuICAgICAgICB0YWdzLnRhZ0RhdGEgPSBbXTtcbiAgICAgICAgdGFncy5kYXRhLmZvckVhY2goKHRhZykgPT4ge1xuICAgICAgICAgICAgbGV0IGh0bWw7XG4gICAgICAgICAgICBpZiAodGFnLm9iamVjdHM9PVwiYWxsXCIgfHwgdGFnLm9iamVjdHMuaW5kZXhPZih0aGlzLmVudGl0eVR5cGUpPj0wKSB7XG4gICAgICAgICAgICAgICAgdGFncy50YWdEYXRhW3RhZ3MudGFnRGF0YS5sZW5ndGhdID0gdGFnO1xuICAgICAgICAgICAgICAgIGh0bWwgPSB0aGlzLmdldFRhZ0NvbnRlbnQodGFnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdFbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRhZy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogaHRtbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0VsZW1lbnRzLnB1c2godGFnRWwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0VGFncygpIHtcbiAgICAgICAgdW5zZXQodGFncywgJ21hcCcpO1xuICAgICAgICBpZiAodGhpcy5oaWRlVGFncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRhZ3MucmVzZXQodGhpcy5mb3JtRGF0YSk7XG4gICAgICAgICAgICB0YWdzLmV2ZW50cygpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFRhZ0NvbnRlbnQodGFnKSB7XG4gICAgICAgIGxldCBodG1sID0gJyc7XG4gICAgICAgIGlmICh0YWcudmFsdWU9PVwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxpbnB1dCBpZD1cIlRhZ18nK3RhZy5pZCsnXCIgdHlwZT1cInRleHRcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiBtYXhsZW5ndGg9XCI1MDBcIiBwbGFjZWhvbGRlcj1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiAvPic7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cImJvb2xlYW5cIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiAvPic7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cIm1hcFwiKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8ZGl2IGlkPVwiVGFnXycrdGFnLmlkKydfTWFwXCIgZGF0YS1tYXA9XCInK3RhZy5pZCsnXCIgY2xhc3M9XCJtYXBcIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwidGV4dFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIG1heGxlbmd0aD1cIjUwMFwiIHBsYWNlaG9sZGVyPVwiJyt0YWcuZGVzY3JpcHRpb24rJ1wiIC8+JztcbiAgICAgICAgfSBlbHNlIGlmICh0YWcudmFsdWU9PVwiYXZhdGFyXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJmb3JtUm93XCI+JztcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIGRhdGEtaWQ9XCInK3RhZy5pZCsnXCIgZGF0YS1yZXNvdXJjZT1cImF2YXRhclwiIGNsYXNzPVwicmVzb3VyY2UgaWNvbiBwcm9maWxlXCIgdGl0bGU9XCInK3RhZy5kZXNjcmlwdGlvbisnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyt0YWcuZGVmYXVsdCsnKVwiPjwvZGl2PjxkaXYgaWQ9XCJUYWdfUmVzb3VyY2VzXycrdGFnLmlkKydcIiBjbGFzcz1cInJlc291cmNlc1wiIGRhdGEtaWQ9XCInK3RhZy5pZCsnXCIgZGF0YS1yZXNvdXJjZXM9XCJhdmF0YXJcIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydfSGlkZXJcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiB0eXBlPVwiaGlkZGVuXCIvPic7XG4gICAgICAgICAgICByZXNvdXJjZXMuZ2V0KHRhZy5pZCk7XG4gICAgICAgICAgICBjb250ZXh0LmFkZExpc3RlbmVyKFwicmVzb3VyY2VzLVwiK3RhZy5pZCwgdGFncy5sb2FkZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZy52YWx1ZT09XCJpY29uXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJmb3JtUm93XCI+JztcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIGRhdGEtaWQ9XCInK3RhZy5pZCsnXCIgZGF0YS1yZXNvdXJjZT1cImljb25cIiBjbGFzcz1cInJlc291cmNlIGljb25cIiB0aXRsZT1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiBzdHlsZT1cImJhY2tncm91bmQtaW1hZ2U6IHVybCgnK3RhZy5kZWZhdWx0KycpXCI+PC9kaXY+PGRpdiBpZD1cIlRhZ19SZXNvdXJjZXNfJyt0YWcuaWQrJ1wiIGNsYXNzPVwicmVzb3VyY2VzXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlcz1cImljb25cIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydfSGlkZXJcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiB0eXBlPVwiaGlkZGVuXCIvPic7XG4gICAgICAgICAgICByZXNvdXJjZXMuZ2V0KHRhZy5pZCk7XG4gICAgICAgICAgICBjb250ZXh0LmFkZExpc3RlbmVyKFwicmVzb3VyY2VzLVwiK3RhZy5pZCwgdGFncy5sb2FkZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZy52YWx1ZT09XCJhcnJheVwiKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8ZGl2IGlkPVwiVGFnXycrdGFnLmlkKydfU2VsZWN0ZWRcIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwidGV4dFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIGRhdGEtYXJyYXk9XCInK3RhZy5pZCsnXCIgbWF4bGVuZ3RoPVwiNTAwXCIgcGxhY2Vob2xkZXI9XCInK3RhZy5kZXNjcmlwdGlvbisnXCIgLz4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgIH1cblxuICAgIGdldFRhZ1ZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRhZ3MudmFsKCk7XG4gICAgfVxuXG4gICAgY2xvc2VGb3JtKHJlZnJlc2ggPSB0cnVlLCBpZ25vcmVDaGFuZ2VzID0gZmFsc2UsIGRhdGE/LCBldmVudD8pIHtcbiAgICAgICAgaWYgKCFpZ25vcmVDaGFuZ2VzICYmIHRoaXMuX2RhdGFDaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbChyZWZyZXNoLCBpZ25vcmVDaGFuZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVG9MaXN0UGFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VNb2RhbChyZWZyZXNoID0gdHJ1ZSwgaWdub3JlQ2hhbmdlcyA9IGZhbHNlLCBkYXRhPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdCh7cmVmcmVzaDogcmVmcmVzaH0pO1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuVG9MaXN0UGFnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYXRpb24gJiYgdGhpcy5wcmV2aW91c1JvdXRlKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyPy5uYXZpZ2F0ZUJ5VXJsKGAke3RoaXMuYmFzZVBhdGh9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEYXRhQ2hhbmdlRGVib3VuY2VkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNoZWNrRGF0YUNoYW5nZSgpIHtcbiAgICAgICAgbGV0IGluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdERhdGEpO1xuICAgICAgICBpbml0RGF0YSA9IHRoaXMub21pdEVtcHR5RGF0YShpbml0RGF0YSk7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgZm9ybURhdGEgPSB0aGlzLm9taXRFbXB0eURhdGEoZm9ybURhdGEpO1xuICAgICAgICBjb25zdCBkYXRhQ2hhbmdlID0gIWlzRXF1YWwoaW5pdERhdGEsIGZvcm1EYXRhKTtcbiAgICAgICAgaWYgKGRhdGFDaGFuZ2UgIT09IHRoaXMuX2RhdGFDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBkYXRhQ2hhbmdlO1xuICAgICAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9taXRFbXB0eURhdGEob2JqZWN0KSB7XG4gICAgICAgIGZvckVhY2gob2JqZWN0LCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMub21pdERhdGFJdGVyYXRlZSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQob2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9taXRFbXB0eURhdGEodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgb21pdERhdGFJdGVyYXRlZSh2YWwpIHtcbiAgICAgICAgcmV0dXJuIGlzTmlsKHZhbCkgfHwgKGlzQXJyYXkodmFsKSAmJiBpc0VtcHR5KHZhbCkpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWwpIHtcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsKTtcbiAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgYFRleHQgQ29waWVkYCxcbiAgICAgICAgICAgIGBBUEkgY2FsbCBVUkwgY29waWVkIHRvIGNsaXBib2FyZGAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0Um9sZXNDTElWYXJpYWJsZShzZWxlY3RlZFJvbGVzKSB7XG4gICAgICAgIGxldCByb2xlc1ZhciA9ICcnO1xuICAgICAgICBzZWxlY3RlZFJvbGVzLmZvckVhY2goKHJvbGUsIGluZGV4KT0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByb2xlc1ZhciArPSAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSByb2xlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzVmFyO1xuICAgIH1cblxuICAgIGdldFJvbGVzQ1VSTFZhcmlhYmxlKHNlbGVjdGVkUm9sZXMpIHtcbiAgICAgICAgbGV0IHJvbGVzVmFyID0gJyc7XG4gICAgICAgIHNlbGVjdGVkUm9sZXMuZm9yRWFjaCgocm9sZSwgaW5kZXgpPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJvbGVzVmFyICs9ICcsICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSBgXCIke3JvbGV9XCJgO1xuICAgICAgICB9KTtcbiAgICAgICAgcm9sZXNWYXIgPSBgWyR7cm9sZXNWYXJ9XWA7XG4gICAgICAgIHJldHVybiByb2xlc1ZhcjtcbiAgICB9XG5cbiAgICBjYW5EZWFjdGl2YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fZGF0YUNoYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW50aXR5VXBkYXRlZCgpIHtcbiAgICAgICAgLy9uby1vcFxuICAgIH1cblxuICAgIGdldFJvbGVBdHRyaWJ1dGVzKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQodHlwZSwge30sIFtdKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGFibGUtZm9ybS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNILFNBQVMsRUFHVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sUUFBUSxDQUFDO0FBQ2xJLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsYUFBYSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7QUFFbEYsYUFBYTtBQUNiLE1BQU0sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLEdBQUcsTUFBTSxDQUFDO0FBRXhELE1BQU0sT0FBTyxNQUFNO0NBRWxCO0FBRUQsTUFBTSxDQUFD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cEIsQ0FBQztJQUVELGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTyxPQUFPLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUM3SDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxhQUFhO1FBQ25CLE9BQU87SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FwU2lCLGVBQWUsZ0RBa0NyQixpQkFBaUIsYUFDakIsaUJBQWlCLHlGQUlqQixnQkFBZ0I7bUdBdkNWLGVBQWUsZ1VBSHZCLEVBQUU7O1NBR00sZUFBZTs0RkFBZixlQUFlO2tCQUpwQyxTQUFTOytCQUNJLEVBQUU7OzBCQXFDUCxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJeEIsTUFBTTsyQkFBQyxnQkFBZ0I7NENBdENuQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDWSxRQUFRO3NCQUF6QixLQUFLO2dCQUNhLEtBQUs7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDc0IsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0V4dGVuZGFibGVDb21wb25lbnR9IGZyb20gXCIuLi9leHRlbmRhYmxlL2V4dGVuZGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHtkZWZlciwgaXNFcXVhbCwgdW5zZXQsIGRlYm91bmNlLCBjbG9uZURlZXAsIGZvckVhY2gsIGlzQXJyYXksIGlzRW1wdHksIGlzT2JqZWN0LCBpc05pbCwgbWFwLCBvbWl0QnksIHNsaWNlfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7SWRlbnRpdHl9IGZyb20gXCIuLi8uLi9tb2RlbHMvaWRlbnRpdHlcIjtcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHtjb250ZXh0LCB0YWdzLCByZXNvdXJjZXMsIHNlcnZpY2UsIGFwcH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHkge1xuICAgIG5hbWU6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBLRVlfQ09ERVMgPSB7XG4gICAgTEVGVF9BUlJPVzogMzcsXG4gICAgVVBfQVJST1c6IDM4LFxuICAgIFJJR0hUX0FSUk9XOiAzOSxcbiAgICBET1dOX0FSUk9XOiA0MFxufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2plY3RhYmxlLWZvcm0uY2xhc3Muc2NzcyddXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plY3RhYmxlRm9ybSBleHRlbmRzIEV4dGVuZGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzTW9kYWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlbnRpdHlJZDogU3RyaW5nO1xuICAgIEBJbnB1dCgpIGFic3RyYWN0IGZvcm1EYXRhOiBhbnk7XG4gICAgQE91dHB1dCgpIGFic3RyYWN0IGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCkgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAVmlld0NoaWxkKCduYW1lRmllbGRJbnB1dCcpIG5hbWVGaWVsZElucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgYWJzdHJhY3QgY2xlYXIoKTogdm9pZDtcbiAgICBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICBwcm90ZWN0ZWQgZW50aXR5VHlwZSA9ICdpZGVudGl0aWVzJztcbiAgICBwcm90ZWN0ZWQgZW50aXR5Q2xhc3M6IGFueSA9IEVudGl0eTtcbiAgICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgbW9yZUFjdGlvbnM6IGFueVtdID0gW107XG4gICAgdGFnRWxlbWVudHM6IGFueSA9IFtdO1xuICAgIHRhZ0RhdGE6IGFueSA9IFtdO1xuICAgIGhpZGVUYWdzID0gZmFsc2U7XG4gICAgaW5pdERhdGE6IGFueSA9IHt9O1xuICAgIF9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgYXBpT3B0aW9ucyA9IFt7aWQ6ICdjbGknLCBsYWJlbDogJ0NvcHkgYXMgQ0xJJ30sIHtpZDogJ2N1cmwnLCBsYWJlbDogJ0NvcHkgYXMgQ1VSTCd9XTtcbiAgICBiYXNlUGF0aCA9ICcnO1xuICAgIHByZXZpb3VzUm91dGU7XG4gICAgc2hvd01vcmUgPSBmYWxzZTtcblxuICAgIF9zZXR0aW5nczogYW55ID0ge307XG4gICAgY2hlY2tEYXRhQ2hhbmdlRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy5jaGVja0RhdGFDaGFuZ2UsIDEwMCwge21heFdhaXQ6IDEwMH0pO1xuICAgIGlnbm9yZURhdGFDaGFuZ2UgPSBmYWxzZTtcblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNIQVJFRFpfRVhURU5TSU9OKSBwcm90ZWN0ZWQgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJvdGVjdGVkIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI/OiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgbG9jYXRpb24/OiBMb2NhdGlvbixcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwcm90ZWN0ZWQgc2V0dGluZ3NTZXJ2aWNlPzogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnByZXZpb3VzUm91dGUgPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpLnByZXZpb3VzTmF2aWdhdGlvbj8uZmluYWxVcmw/LnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMucm91dGU/LnBhcmFtcz8uc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXNbJ2lkJ107XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eUlkID0gaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQ/LnNuYXBzaG90Py5yb3V0ZUNvbmZpZz8ucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHBhdGhTZWdtZW50c1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5nc0NoYW5nZT8uc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSBjbG9uZURlZXAodGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLmZvcm1EYXRhPy5pZCkgJiYgKGlzRW1wdHkodGhpcy5fc2V0dGluZ3MpIHx8IHRoaXMuX3NldHRpbmdzLnNlc3Npb24/LmlkID09PSBuZXdTZXR0aW5ncy5zZXNzaW9uPy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBuZXdTZXR0aW5ncztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ld1NldHRpbmdzO1xuICAgICAgICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgdGhpcy5uYW1lRmllbGRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGlmICh0aGlzLmV4dFNlcnZpY2U/Lm1vcmVBY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1vcmVBY3Rpb25zID0gWy4uLnRoaXMubW9yZUFjdGlvbnMsIC4uLnRoaXMuZXh0U2VydmljZS5tb3JlQWN0aW9uc107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5SWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVudGl0eUlkID09PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBuZXcgdGhpcy5lbnRpdHlDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdERhdGEgPSBjbG9uZURlZXAodGhpcy5mb3JtRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlVcGRhdGVkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKHRoaXMuZW50aXR5VHlwZSwgdGhpcy5lbnRpdHlJZCwgJycpLnRoZW4oKGVudGl0eTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IGVudGl0eT8uZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5VXBkYXRlZCgpO1xuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd01vcmVDaGFuZ2VkKHNob3dNb3JlKSB7XG4gICAgICAgIGlmICghc2hvd01vcmUgfHwgdGhpcy5oaWRlVGFncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRUYWdzKClcbiAgICB9XG5cbiAgICBsb2FkVGFncygpIHtcbiAgICAgICAgdGhpcy5oaWRlVGFncyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGlkZVRhZ3NcIik9PVwieWVzXCI7XG4gICAgICAgIGlmICh0aGlzLmhpZGVUYWdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VydmljZS5jYWxsKFwidGFnc1wiLCB7fSwgdGhpcy50YWdzTG9hZGVkLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRhZ3NMb2FkZWQocmVzdWx0cykge1xuICAgICAgICB0YWdzLmRhdGEgPSByZXN1bHRzO1xuICAgICAgICBjb250ZXh0LnNldCh0YWdzLm5hbWUsIHRhZ3MuZGF0YSk7XG4gICAgICAgIHRhZ3MudGFnRGF0YSA9IFtdO1xuICAgICAgICB0YWdzLmRhdGEuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgICBsZXQgaHRtbDtcbiAgICAgICAgICAgIGlmICh0YWcub2JqZWN0cz09XCJhbGxcIiB8fCB0YWcub2JqZWN0cy5pbmRleE9mKHRoaXMuZW50aXR5VHlwZSk+PTApIHtcbiAgICAgICAgICAgICAgICB0YWdzLnRhZ0RhdGFbdGFncy50YWdEYXRhLmxlbmd0aF0gPSB0YWc7XG4gICAgICAgICAgICAgICAgaHRtbCA9IHRoaXMuZ2V0VGFnQ29udGVudCh0YWcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ0VsID0ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGFnLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBodG1sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudGFnRWxlbWVudHMucHVzaCh0YWdFbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzZXRUYWdzKCkge1xuICAgICAgICB1bnNldCh0YWdzLCAnbWFwJyk7XG4gICAgICAgIGlmICh0aGlzLmhpZGVUYWdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGFncy5yZXNldCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgICAgIHRhZ3MuZXZlbnRzKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0VGFnQ29udGVudCh0YWcpIHtcbiAgICAgICAgbGV0IGh0bWwgPSAnJztcbiAgICAgICAgaWYgKHRhZy52YWx1ZT09XCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwidGV4dFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIG1heGxlbmd0aD1cIjUwMFwiIHBsYWNlaG9sZGVyPVwiJyt0YWcuZGVzY3JpcHRpb24rJ1wiIC8+JztcbiAgICAgICAgfSBlbHNlIGlmICh0YWcudmFsdWU9PVwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIC8+JztcbiAgICAgICAgfSBlbHNlIGlmICh0YWcudmFsdWU9PVwibWFwXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ19NYXBcIiBkYXRhLW1hcD1cIicrdGFnLmlkKydcIiBjbGFzcz1cIm1hcFwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIHR5cGU9XCJ0ZXh0XCIgZGF0YS10YWc9XCInK3RhZy5pZCsnXCIgbWF4bGVuZ3RoPVwiNTAwXCIgcGxhY2Vob2xkZXI9XCInK3RhZy5kZXNjcmlwdGlvbisnXCIgLz4nO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZy52YWx1ZT09XCJhdmF0YXJcIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImZvcm1Sb3dcIj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBpZD1cIlRhZ18nK3RhZy5pZCsnXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlPVwiYXZhdGFyXCIgY2xhc3M9XCJyZXNvdXJjZSBpY29uIHByb2ZpbGVcIiB0aXRsZT1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiBzdHlsZT1cImJhY2tncm91bmQtaW1hZ2U6IHVybCgnK3RhZy5kZWZhdWx0KycpXCI+PC9kaXY+PGRpdiBpZD1cIlRhZ19SZXNvdXJjZXNfJyt0YWcuaWQrJ1wiIGNsYXNzPVwicmVzb3VyY2VzXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlcz1cImF2YXRhclwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ19IaWRlclwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIHR5cGU9XCJoaWRkZW5cIi8+JztcbiAgICAgICAgICAgIHJlc291cmNlcy5nZXQodGFnLmlkKTtcbiAgICAgICAgICAgIGNvbnRleHQuYWRkTGlzdGVuZXIoXCJyZXNvdXJjZXMtXCIrdGFnLmlkLCB0YWdzLmxvYWRlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cImljb25cIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImZvcm1Sb3dcIj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBpZD1cIlRhZ18nK3RhZy5pZCsnXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlPVwiaWNvblwiIGNsYXNzPVwicmVzb3VyY2UgaWNvblwiIHRpdGxlPVwiJyt0YWcuZGVzY3JpcHRpb24rJ1wiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCcrdGFnLmRlZmF1bHQrJylcIj48L2Rpdj48ZGl2IGlkPVwiVGFnX1Jlc291cmNlc18nK3RhZy5pZCsnXCIgY2xhc3M9XCJyZXNvdXJjZXNcIiBkYXRhLWlkPVwiJyt0YWcuaWQrJ1wiIGRhdGEtcmVzb3VyY2VzPVwiaWNvblwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ19IaWRlclwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIHR5cGU9XCJoaWRkZW5cIi8+JztcbiAgICAgICAgICAgIHJlc291cmNlcy5nZXQodGFnLmlkKTtcbiAgICAgICAgICAgIGNvbnRleHQuYWRkTGlzdGVuZXIoXCJyZXNvdXJjZXMtXCIrdGFnLmlkLCB0YWdzLmxvYWRlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cImFycmF5XCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ19TZWxlY3RlZFwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIHR5cGU9XCJ0ZXh0XCIgZGF0YS10YWc9XCInK3RhZy5pZCsnXCIgZGF0YS1hcnJheT1cIicrdGFnLmlkKydcIiBtYXhsZW5ndGg9XCI1MDBcIiBwbGFjZWhvbGRlcj1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiAvPic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuXG4gICAgZ2V0VGFnVmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGFncy52YWwoKTtcbiAgICB9XG5cbiAgICBjbG9zZUZvcm0ocmVmcmVzaCA9IHRydWUsIGlnbm9yZUNoYW5nZXMgPSBmYWxzZSwgZGF0YT8sIGV2ZW50Pykge1xuICAgICAgICBpZiAoIWlnbm9yZUNoYW5nZXMgJiYgdGhpcy5fZGF0YUNoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlybWVkID0gY29uZmlybSgnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGRpc2NhcmQgeW91ciBjaGFuZ2VzIG9yIHN0YXkgb24gdGhpcyBwYWdlPycpO1xuICAgICAgICAgICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNNb2RhbCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKHJlZnJlc2gsIGlnbm9yZUNoYW5nZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKHJlZnJlc2ggPSB0cnVlLCBpZ25vcmVDaGFuZ2VzID0gZmFsc2UsIGRhdGE/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHtyZWZyZXNoOiByZWZyZXNofSk7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm5Ub0xpc3RQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2NhdGlvbiAmJiB0aGlzLnByZXZpb3VzUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoYCR7dGhpcy5iYXNlUGF0aH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5jaGVja0RhdGFDaGFuZ2VEZWJvdW5jZWQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tEYXRhQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVEYXRhQ2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdERhdGEpO1xuICAgICAgICBpbml0RGF0YSA9IHRoaXMub21pdEVtcHR5RGF0YShpbml0RGF0YSk7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgZm9ybURhdGEgPSB0aGlzLm9taXRFbXB0eURhdGEoZm9ybURhdGEpO1xuICAgICAgICBjb25zdCBkYXRhQ2hhbmdlID0gIWlzRXF1YWwoaW5pdERhdGEsIGZvcm1EYXRhKTtcbiAgICAgICAgaWYgKGRhdGFDaGFuZ2UgIT09IHRoaXMuX2RhdGFDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBkYXRhQ2hhbmdlO1xuICAgICAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9taXRFbXB0eURhdGEob2JqZWN0KSB7XG4gICAgICAgIGZvckVhY2gob2JqZWN0LCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMub21pdERhdGFJdGVyYXRlZSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQob2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9taXRFbXB0eURhdGEodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgb21pdERhdGFJdGVyYXRlZSh2YWwpIHtcbiAgICAgICAgcmV0dXJuIGlzTmlsKHZhbCkgfHwgKGlzQXJyYXkodmFsKSAmJiBpc0VtcHR5KHZhbCkpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWwpIHtcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsKTtcbiAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgYFRleHQgQ29waWVkYCxcbiAgICAgICAgICAgIGBBUEkgY2FsbCBVUkwgY29waWVkIHRvIGNsaXBib2FyZGAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0Um9sZXNDTElWYXJpYWJsZShzZWxlY3RlZFJvbGVzKSB7XG4gICAgICAgIGxldCByb2xlc1ZhciA9ICcnO1xuICAgICAgICBzZWxlY3RlZFJvbGVzLmZvckVhY2goKHJvbGUsIGluZGV4KT0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByb2xlc1ZhciArPSAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSByb2xlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzVmFyO1xuICAgIH1cblxuICAgIGdldFJvbGVzQ1VSTFZhcmlhYmxlKHNlbGVjdGVkUm9sZXMpIHtcbiAgICAgICAgbGV0IHJvbGVzVmFyID0gJyc7XG4gICAgICAgIHNlbGVjdGVkUm9sZXMuZm9yRWFjaCgocm9sZSwgaW5kZXgpPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJvbGVzVmFyICs9ICcsICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSBgXCIke3JvbGV9XCJgO1xuICAgICAgICB9KTtcbiAgICAgICAgcm9sZXNWYXIgPSBgWyR7cm9sZXNWYXJ9XWA7XG4gICAgICAgIHJldHVybiByb2xlc1ZhcjtcbiAgICB9XG5cbiAgICBjYW5EZWFjdGl2YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fZGF0YUNoYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW50aXR5VXBkYXRlZCgpIHtcbiAgICAgICAgLy9uby1vcFxuICAgIH1cblxuICAgIGdldFJvbGVBdHRyaWJ1dGVzKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQodHlwZSwge30sIFtdKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|