@c8y/ngx-components 1021.22.135 → 1021.22.137
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gainsight.service.d.ts","sourceRoot":"","sources":["../../../core/product-experience/gainsight.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,OAAO,EAA4B,MAAM,MAAM,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;;AAOzD;;;;;;GAMG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,aAAa,EAAE,cAAc,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAGa,gBAAgB;IA4BzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,gBAAgB;IA/B1B;;OAEG;IACH,YAAY,uBAA6B;IACzC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAiB;IAElD;;;OAGG;IACH,QAAQ,CAAC,8BAA8B,sBAAsB;IAC7D;;OAEG;IACH,QAAQ,CAAC,0CAA0C,yBAAyB;IAC5E,QAAQ,CAAC,2BAA2B,iBAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+C;IAC7E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IAClD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,0BAA0B,CAA4B;IAC9D,OAAO,CAAC,cAAc,CAAS;gBAGrB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,cAAc,EACvB,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,gBAAgB,EAAE,gBAAgB;IAG5C;;;;OAIG;IACG,8CAA8C,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM9F;;;OAGG;IACH,mBAAmB,CAAC,KAAK,EAAE,OAAO;IAa5B,eAAe;IAOrB;;;OAGG;IACH,IAAI,WAAW,QAEd;IAED;;;;OAIG;IACG,OAAO,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO;IAmDjE;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"gainsight.service.d.ts","sourceRoot":"","sources":["../../../core/product-experience/gainsight.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,7 +135,7 @@ export class GainsightService {
|
|
|
135
135
|
*/
|
|
136
136
|
identify(sendPiiData, identifyData) {
|
|
137
137
|
const windowRef = window;
|
|
138
|
-
const { id: userId, email, roles } = identifyData.user;
|
|
138
|
+
const { id: userId, email, userName, firstName, lastName, roles } = identifyData.user;
|
|
139
139
|
const { name: tenantID, customProperties, domainName } = identifyData.currentTenant;
|
|
140
140
|
const { instanceId, versionUI, versionBE } = identifyData;
|
|
141
141
|
/**
|
|
@@ -146,17 +146,13 @@ export class GainsightService {
|
|
|
146
146
|
* Due to GS limitations (GS does not allow clearing user attr/preferences via the GS tag!),
|
|
147
147
|
* we always need to initialize fields related to PII to prevent leaking this data to GS when the user has disabled functional cookies.
|
|
148
148
|
*/
|
|
149
|
-
const
|
|
149
|
+
const baseIdentify = {
|
|
150
150
|
/**
|
|
151
151
|
* Email was not mandatory form field until 10.14
|
|
152
152
|
*/
|
|
153
153
|
id: email ? email : `${userId}_${tenantID}_${instanceId}`,
|
|
154
154
|
isUserCreatedAfterAnonymizationWasActivated: true,
|
|
155
|
-
tenantID
|
|
156
|
-
email: '--',
|
|
157
|
-
userName: '--',
|
|
158
|
-
firstName: '--',
|
|
159
|
-
lastName: '--',
|
|
155
|
+
tenantID,
|
|
160
156
|
domainName,
|
|
161
157
|
versionUI,
|
|
162
158
|
versionBE,
|
|
@@ -168,22 +164,13 @@ export class GainsightService {
|
|
|
168
164
|
customBranding: this.isCustomBranding(),
|
|
169
165
|
fullTracking: sendPiiData
|
|
170
166
|
};
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
lastName
|
|
179
|
-
};
|
|
180
|
-
windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', extendedIdentify, {
|
|
181
|
-
id: `${tenantID}_${instanceId}`,
|
|
182
|
-
instanceId
|
|
183
|
-
});
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', requiredIdentify);
|
|
167
|
+
const identifyPayload = sendPiiData
|
|
168
|
+
? { ...baseIdentify, email, userName, firstName, lastName }
|
|
169
|
+
: { ...baseIdentify, email: '--', userName: '--', firstName: '--', lastName: '--' };
|
|
170
|
+
windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', identifyPayload, {
|
|
171
|
+
id: `${tenantID}_${instanceId}`,
|
|
172
|
+
instanceId
|
|
173
|
+
});
|
|
187
174
|
}
|
|
188
175
|
/**
|
|
189
176
|
* Triggers an event to be recorded by Gainsight PX.
|
|
@@ -391,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
391
378
|
providedIn: 'root'
|
|
392
379
|
}]
|
|
393
380
|
}], ctorParameters: () => [{ type: i1.AppStateService }, { type: i2.OptionsService }, { type: i3.CookieBannerService }, { type: i4.UserPreferencesService }, { type: i5.TranslateService }] });
|
|
394
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FpbnNpZ2h0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7QUF1QjdGOzs7R0FHRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUEyQjNCLFlBQ1UsUUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUM5QyxnQkFBa0M7UUFKbEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjVDOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWxEOzs7V0FHRztRQUNNLG1DQUE4QixHQUFHLGtCQUFrQixDQUFDO1FBQzdEOztXQUVHO1FBQ00sK0NBQTBDLEdBQUcscUJBQXFCLENBQUM7UUFDbkUsZ0NBQTJCLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsMkNBQTJDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsV0FBVyxDQUFDO1FBQ3JDLCtCQUEwQixHQUFHLEdBQUcsQ0FBQztRQUNqQyx5QkFBb0IsR0FBRyxXQUFXLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBVzVCLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLGNBQXNCO1FBQ3pFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRTVGLE9BQU8saUJBQWlCLEtBQUssS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFjO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQzVCLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixJQUFJLENBQUMsWUFBWTtZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDekIsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsT0FBUSxNQUFjLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQTZCLEVBQUUsV0FBb0I7UUFDL0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDMUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO1lBRUYsTUFBTSxhQUFhLEdBQUcsV0FBVztnQkFDL0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO2dCQUN0RCxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCLElBQUksQ0FDSCxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FDekQ7aUJBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQixNQUFNLENBQUMsSUFBSSxFQUFFLEFBQUQsRUFBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUV4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxTQUFTLEdBQVcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQzFDLE1BQU0sU0FBUyxHQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUM7b0JBQzNDLE1BQU0sb0JBQW9CLEdBQWlCO3dCQUN6QyxJQUFJO3dCQUNKLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixTQUFTO3dCQUNULFNBQVM7cUJBQ1YsQ0FBQztvQkFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxvQkFBb0IsR0FBaUIsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDO29CQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO2dCQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLFdBQW9CLEVBQUUsWUFBMEI7UUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBYSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDcEYsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBRTFEOzs7Ozs7O1dBT0c7UUFDSCxNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCOztlQUVHO1lBQ0gsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFO1lBQ3pELDJDQUEyQyxFQUFFLElBQUk7WUFDakQsUUFBUSxFQUFFLFFBQVE7WUFDbEIsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVO1lBQ1YsU0FBUztZQUNULFNBQVM7WUFDVCxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVc7WUFDL0MsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7WUFDdkQsVUFBVTtZQUNWLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQjtZQUN0RCxTQUFTLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7WUFDMUQsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QyxZQUFZLEVBQUUsV0FBVztTQUMxQixDQUFDO1FBRUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBRTVELE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLEdBQUcsZ0JBQWdCO2dCQUNuQixLQUFLO2dCQUNMLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxRQUFRO2FBQ1QsQ0FBQztZQUVGLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ25FLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxVQUFVLEVBQUU7Z0JBQy9CLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCxPQUFPO1FBQ1QsQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLFNBQWlCLEVBQUUsS0FBbUI7UUFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBdUI7UUFDeEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUU5QyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxXQUFXLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7WUFDbEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixPQUFPLENBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdDQUFnQyxFQUFFO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRTtZQUNwRCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsOENBQThDLENBQ3pELElBQUksQ0FBQyw4QkFBOEIsQ0FDcEMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsS0FBdUM7UUFDdkUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxnQ0FBZ0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMzQyxJQUNFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QixJQUFJLENBQUMsMkNBQTJDLENBQUMsZ0JBQWdCLENBQUMsRUFDbEUsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDN0UsT0FBTyxDQUNMLFlBQVk7WUFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0NBQWdDLEVBQUU7WUFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFDRCwyQ0FBMkM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZDLDZDQUE2QztRQUM3QyxNQUFNLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUvRCwyQ0FBMkM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuRCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUVoRCxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQXlCO1FBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkNBQTJDLENBQUMsZ0JBQW1DO1FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7UUFDL0UsT0FBTyxnQkFBZ0IsS0FBSyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0I7UUFDZCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRSxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxhQUFxQjtRQUM1QyxPQUFPLGFBQWE7YUFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUViLFNBQVMsd0JBQXdCLENBQUMsYUFBcUI7WUFDckQsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUE0QixFQUFFLEdBQVc7UUFDN0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBYSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ25DLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3pELFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLEtBQUssSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUMzRCxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLGdEQUFnRDtvQkFDaEQsVUFBVSxHQUFHLElBQUk7d0JBQ2YsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0YsQ0FBQyxDQUFDO2dCQUNGLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ssdUJBQXVCLENBQUMsV0FBbUI7UUFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FDdEIsZUFBdUIsRUFDdkIsWUFBdUM7UUFFdkMsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUMxQixhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs4R0E5YVUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUN1cnJlbnRUZW5hbnQsIElDdXN0b21Qcm9wZXJ0aWVzLCBJSWRlbnRpZmllZCwgSVVzZXIgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGZsYXRNYXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvb2tpZUJhbm5lclNlcnZpY2UgfSBmcm9tICcuLi9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHhFdmVudERhdGEgfSBmcm9tICcuL3Byb2R1Y3QtZXhwZXJpZW5jZS5tb2RlbCc7XG5cbmludGVyZmFjZSBVc2VyUm9sZSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcHJvcGVydHkgdXNlciBUaGUgdXNlciB3aGljaCBpcyBnaXZlbiB0byBHYWluc2lnaHQuXG4gKiBAcHJvcGVydHkgdGVuYW50IFRoZSB0ZW5hbnQgd2hpY2ggaXMgZ2l2ZW4gdG8gR2FpbnNpZ2h0LlxuICogQHByb3BlcnR5IGluc3RhbmNlSWQgRXh0cmFjdGVkIGRvbWFpbiBwYXJ0IG9mIGFuIFVSTC5cbiAqIEBwcm9wZXJ0eSB2ZXJzaW9uVUkgVGhlIFVJIHZlcnNpb24gdXNlZC5cbiAqIEBwcm9wZXJ0eSB2ZXJzaW9uQkUgVGhlIEJFIHZlcnNpb24gdXNlZC5cbiAqL1xuaW50ZXJmYWNlIElkZW50aWZ5RGF0YSB7XG4gIHVzZXI6IElVc2VyO1xuICBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudDtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICB2ZXJzaW9uVUk/OiBzdHJpbmc7XG4gIHZlcnNpb25CRT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNlcnZpY2UgdG8gbWFuYWdlIHRoZSBHYWluc2lnaHQgaW50ZWdyYXRpb24uIEl0IGFsbG93cyB0byBsb2FkIHRoZVxuICogdGFnIGFuZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHYWluc2lnaHRTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEEgc3ViamVjdCB0aGF0IGVtaXRzIHRoZSB0YWcgZnVuY3Rpb24gYXMgc29vbiBhcyBhIG5ldyB0YWcgaXMgc2V0LlxuICAgKi9cbiAgdGFnRnVuY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgdHJhY2tpbmdMb2FkZWQkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogR2FpbnNpZ2h0IGlzIGFjdGl2YXRlZCBvbmx5IHdoZW4gdGhlIGNvb2tpZSBiYW5uZXIgaXMgcHJlc2VudC4gSWYgZnVuY3Rpb25hbCBjb29raWVzIGFyZSBlbmFibGVkLCBib3RoIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIGFuZCByZXF1aXJlZCBkYXRhIGFyZSBzZW50LlxuICAgKiBPdGhlcndpc2UsIG9ubHkgdGhlIHJlcXVpcmVkIGRhdGEgaXMgdHJhbnNtaXR0ZWQgZHVyaW5nIHRoZSBpZGVudGl0eSBzdGVwIGV4ZWN1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IFVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0tFWSA9ICdnYWluc2lnaHRFbmFibGVkJztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBrZXkgcmVtYWluZWQgdW5jaGFuZ2VkLCBidXQgYXBwbGllcyB0byBhbGwgZW5nYWdlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBVU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVkgPSAnZ2FpbnNpZ2h0Qm90RW5hYmxlZCc7XG4gIHJlYWRvbmx5IEhJREVfR0FJTlNJR0hUX0JPVF9TVFlMRV9JRCA9ICdoaWRlLWdzLWJvdCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgR0FJTlNJR0hUX1VSTCA9ICd3ZWItc2RrLmFwdHJpbnNpYy5jb20vYXBpL2FwdHJpbnNpYy5qcz9hPSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgR0FJTlNJR0hUX0dMT0JBTF9TQ09QRSA9ICdhcHRyaW5zaWMnO1xuICBwcml2YXRlIHJlYWRvbmx5IFNDUklQVF9FWEVDVVRJT05fV0FJVF9USU1FID0gNTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE9QVElPTlNfS0VZX0NBVEVHT1JZID0gJ2dhaW5zaWdodCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgT1BUSU9OU19LRVlfTkFNRSA9ICdhcGkua2V5JztcbiAgcHJpdmF0ZSBpc1NjcmlwdExvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGdhaW5zaWdodEtleTogc3RyaW5nO1xuICBwcml2YXRlIGNhY2hlZFJldmVydGVkVHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIGNhY2hlZExhbmd1YWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uczogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBHYWluc2lnaHQgcHJlZmVyZW5jZSBpcyBkaXNhYmxlZCBpbiB1c2VyIHByZWZlcmVuY2VzLlxuICAgKiBAcGFyYW0gcHJlZmVyZW5jZU5hbWUgLSBOYW1lIG9mIHRoZSBHYWluc2lnaHQgcHJlZmVyZW5jZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGFzeW5jIGlzR2FpbnNpZ2h0UHJlZmVyZW5jZURpc2FibGVkSW5Vc2VyUHJlZmVyZW5jZXMocHJlZmVyZW5jZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXJHYWluc2lnaHRQcmVmID0gYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmdldChwcmVmZXJlbmNlTmFtZSkudG9Qcm9taXNlKCk7XG5cbiAgICByZXR1cm4gdXNlckdhaW5zaWdodFByZWYgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBmdW5jdGlvbmFsIGNvb2tpZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gQSBib29sZWFuIHZhbHVlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGZ1bmN0aW9uYWwgY29va2llIHNob3VsZCBiZSBlbmFibGVkIChgdHJ1ZWApIG9yIGRpc2FibGVkIChgZmFsc2VgKS5cbiAgICovXG4gIHNldEZ1bmN0aW9uYWxDb29raWUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb29raWVzID0gdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmdldFVzZXJDb29raWVQcmVmZXJlbmNlcygpO1xuICAgIGlmIChjb29raWVzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb29raWVzKS5mb3JFYWNoKGNvb2tpZU5hbWUgPT4ge1xuICAgICAgICBpZiAoY29va2llTmFtZSA9PT0gJ2Z1bmN0aW9uYWwnKSB7XG4gICAgICAgICAgY29va2llc1tjb29raWVOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWNjZXB0Q29va2llTm90aWNlJywgSlNPTi5zdHJpbmdpZnkoY29va2llcykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEdhaW5zaWdodEtleSgpIHtcbiAgICB0aGlzLmdhaW5zaWdodEtleSA9XG4gICAgICB0aGlzLm9wdGlvbnMuZ2FpbnNpZ2h0S2V5IHx8XG4gICAgICAoYXdhaXQgdGhpcy5vcHRpb25zLmdldFN5c3RlbU9wdGlvbih0aGlzLk9QVElPTlNfS0VZX0NBVEVHT1JZLCB0aGlzLk9QVElPTlNfS0VZX05BTUUpKTtcbiAgICByZXR1cm4gdGhpcy5nYWluc2lnaHRLZXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFnIGdsb2JhbCBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB1c2VyXG4gICAqIG9yIGFkZCBzcGVjaWFsIGV2ZW50cy5cbiAgICovXG4gIGdldCB0YWdGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpW3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV07XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgc2NyaXB0IHRhZyBhbmQgY2FsbHMgdGhlIGlkZW50aWZ5IGZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSB0cmFja2luZy5cbiAgICogQHBhcmFtIGN1cnJlbnRUZW5hbnQgVGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcGFyYW0gc2VuZFBpaURhdGEgRmxhZyBmb3Igc2VuZGluZyBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiAoUElJKSBkdXJpbmcgaWRlbnRpZmljYXRpb24gaW4gR2FpbnNpZ2h0LlxuICAgKi9cbiAgYXN5bmMgbG9hZFRhZyhjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCwgc2VuZFBpaURhdGE6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzY3JpcHRUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmdldEdhaW5zaWdodEtleSgpO1xuXG4gICAgaWYgKGtleSAmJiAhdGhpcy5pc1NjcmlwdExvYWRlZCkge1xuICAgICAgdGhpcy5sb2FkU2NyaXB0VGFnKHNjcmlwdFRhZywga2V5KTtcblxuICAgICAgY29uc3QgY3VycmVudFVzZXJTdHJlYW0gPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyO1xuICAgICAgY29uc3Qgc2NyaXB0TG9hZFN0cmVhbSA9IGZyb21FdmVudChzY3JpcHRUYWcsICdsb2FkJyk7XG4gICAgICBjb25zdCB2ZXJzaW9uU3RyZWFtID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZSQucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IHZlcnNpb25zIH0pID0+IHZlcnNpb25zLmJhY2tlbmQpLFxuICAgICAgICBtYXAoKHsgdmVyc2lvbnMgfSkgPT4gdmVyc2lvbnMpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzb3VyY2VTdHJlYW1zID0gc2VuZFBpaURhdGFcbiAgICAgICAgPyBbY3VycmVudFVzZXJTdHJlYW0sIHNjcmlwdExvYWRTdHJlYW0sIHZlcnNpb25TdHJlYW1dXG4gICAgICAgIDogW2N1cnJlbnRVc2VyU3RyZWFtLCBzY3JpcHRMb2FkU3RyZWFtXTtcblxuICAgICAgY29tYmluZUxhdGVzdChzb3VyY2VTdHJlYW1zKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSh0aGlzLlNDUklQVF9FWEVDVVRJT05fV0FJVF9USU1FKSxcbiAgICAgICAgICBmaWx0ZXIoKFt1c2VyLCBzY3JpcHRFdmVudF0pID0+ICEhKHNjcmlwdEV2ZW50ICYmIHVzZXIpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoYXJncyA9PiB7XG4gICAgICAgICAgY29uc3QgW3VzZXIsICwgdmVyc2lvbnNdID0gYXJncztcbiAgICAgICAgICB0aGlzLnNldEdsb2JhbENvbnRleHQoKTtcblxuICAgICAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSB0aGlzLmdldEluc3RhbmNlSWRGcm9tVXJsKCk7XG4gICAgICAgICAgaWYgKHNlbmRQaWlEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uVUk6IHN0cmluZyA9IHZlcnNpb25zLnVpLm5neDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb25CRTogc3RyaW5nID0gdmVyc2lvbnMuYmFja2VuZDtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkSWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEgPSB7XG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRUZW5hbnQsXG4gICAgICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIHZlcnNpb25VSSxcbiAgICAgICAgICAgICAgdmVyc2lvbkJFXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmeShzZW5kUGlpRGF0YSwgZXh0ZW5kZWRJZGVudGlmeURhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZElkZW50aWZ5RGF0YTogSWRlbnRpZnlEYXRhID0geyB1c2VyLCBjdXJyZW50VGVuYW50LCBpbnN0YW5jZUlkIH07XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5KHNlbmRQaWlEYXRhLCByZXF1aXJlZElkZW50aWZ5RGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudGFnRnVuY3Rpb24kLm5leHQodGhpcy50YWdGdW5jdGlvbik7XG4gICAgICAgICAgdGhpcy50cmFja2luZ0xvYWRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIHVzZXIvYWNjb3VudCBhdCBHYWluc2lnaHQuXG4gICAqIEBwYXJhbSBzZW5kUGlpRGF0YSBGbGFnIGZvciBzZW5kaW5nIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0gaWRlbnRpZnlEYXRhIE9iamVjdCBjb250YWluaW5nIGlkZW50aWZpY2F0aW9uIGRhdGEuXG4gICAqL1xuICBpZGVudGlmeShzZW5kUGlpRGF0YTogYm9vbGVhbiwgaWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEpIHtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSB3aW5kb3cgYXMgYW55O1xuICAgIGNvbnN0IHsgaWQ6IHVzZXJJZCwgZW1haWwsIHJvbGVzIH0gPSBpZGVudGlmeURhdGEudXNlcjtcbiAgICBjb25zdCB7IG5hbWU6IHRlbmFudElELCBjdXN0b21Qcm9wZXJ0aWVzLCBkb21haW5OYW1lIH0gPSBpZGVudGlmeURhdGEuY3VycmVudFRlbmFudDtcbiAgICBjb25zdCB7IGluc3RhbmNlSWQsIHZlcnNpb25VSSwgdmVyc2lvbkJFIH0gPSBpZGVudGlmeURhdGE7XG5cbiAgICAvKipcbiAgICAgKiBQYXNzaW5nIElEIGlzIGEgbWluaW11bSByZXF1aXJlZCBkYXRhIHRvIG1ha2UgYW4gaWRlbnRpZnkgY2FsbCB0byBHYWluc2lnaHQuXG4gICAgICogaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGxhdGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4gdXNlcnMgY3JlYXRlZCBiZWZvcmUgYW5kIGFmdGVyIGRhdGEgYW5vbnltaXphdGlvbiBkb25lIGJ5IEdhaW5zaWdodC5cbiAgICAgKiB0ZW5hbnRJRCBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGVuYW50cyB3aGVuIHNhbWUgZW1haWwgaXMgdXNlZCBmb3IgZGlmZmVyZW50IHRlbmFudHMuXG4gICAgICpcbiAgICAgKiBEdWUgdG8gR1MgbGltaXRhdGlvbnMgKEdTIGRvZXMgbm90IGFsbG93IGNsZWFyaW5nIHVzZXIgYXR0ci9wcmVmZXJlbmNlcyB2aWEgdGhlIEdTIHRhZyEpLFxuICAgICAqIHdlIGFsd2F5cyBuZWVkIHRvIGluaXRpYWxpemUgZmllbGRzIHJlbGF0ZWQgdG8gUElJIHRvIHByZXZlbnQgbGVha2luZyB0aGlzIGRhdGEgdG8gR1Mgd2hlbiB0aGUgdXNlciBoYXMgZGlzYWJsZWQgZnVuY3Rpb25hbCBjb29raWVzLlxuICAgICAqL1xuICAgIGNvbnN0IHJlcXVpcmVkSWRlbnRpZnkgPSB7XG4gICAgICAvKipcbiAgICAgICAqIEVtYWlsIHdhcyBub3QgbWFuZGF0b3J5IGZvcm0gZmllbGQgdW50aWwgMTAuMTRcbiAgICAgICAqL1xuICAgICAgaWQ6IGVtYWlsID8gZW1haWwgOiBgJHt1c2VySWR9XyR7dGVuYW50SUR9XyR7aW5zdGFuY2VJZH1gLFxuICAgICAgaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZDogdHJ1ZSxcbiAgICAgIHRlbmFudElEOiB0ZW5hbnRJRCxcbiAgICAgIGVtYWlsOiAnLS0nLFxuICAgICAgdXNlck5hbWU6ICctLScsXG4gICAgICBmaXJzdE5hbWU6ICctLScsXG4gICAgICBsYXN0TmFtZTogJy0tJyxcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICB2ZXJzaW9uVUksXG4gICAgICB2ZXJzaW9uQkUsXG4gICAgICB1c2VyTGFuZ3VhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyxcbiAgICAgIGJyb3dzZXJMYW5ndWFnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEJyb3dzZXJMYW5nKCksXG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgZXh0ZXJuYWxSZWZlcmVuY2U6IGN1c3RvbVByb3BlcnRpZXM/LmV4dGVybmFsUmVmZXJlbmNlLFxuICAgICAgdXNlclJvbGVzOiB0aGlzLnRyYW5zZm9ybVVzZXJSb2xlc1RvU3RyKHJvbGVzPy5yZWZlcmVuY2VzKSxcbiAgICAgIGN1c3RvbUJyYW5kaW5nOiB0aGlzLmlzQ3VzdG9tQnJhbmRpbmcoKSxcbiAgICAgIGZ1bGxUcmFja2luZzogc2VuZFBpaURhdGFcbiAgICB9O1xuXG4gICAgaWYgKHNlbmRQaWlEYXRhKSB7XG4gICAgICBjb25zdCB7IHVzZXJOYW1lLCBmaXJzdE5hbWUsIGxhc3ROYW1lIH0gPSBpZGVudGlmeURhdGEudXNlcjtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRJZGVudGlmeSA9IHtcbiAgICAgICAgLi4ucmVxdWlyZWRJZGVudGlmeSxcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHVzZXJOYW1lLFxuICAgICAgICBmaXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lXG4gICAgICB9O1xuXG4gICAgICB3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSgnaWRlbnRpZnknLCBleHRlbmRlZElkZW50aWZ5LCB7XG4gICAgICAgIGlkOiBgJHt0ZW5hbnRJRH1fJHtpbnN0YW5jZUlkfWAsXG4gICAgICAgIGluc3RhbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvd1JlZlt0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdKCdpZGVudGlmeScsIHJlcXVpcmVkSWRlbnRpZnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGFuIGV2ZW50IHRvIGJlIHJlY29yZGVkIGJ5IEdhaW5zaWdodCBQWC5cbiAgICogVGhpcyBtZXRob2QgY2FsbHMgdGhlIEdhaW5zaWdodCBQWCdzIHRyYWNraW5nIG1lY2hhbmlzbSB0byBsb2cgYSBzcGVjaWZpYyBldmVudFxuICAgKiBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBOYW1lIG9mIHRoZSBldmVudCB0byBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIE9wdGlvbmFsIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC5cbiAgICovXG4gIHRyaWdnZXJFdmVudChldmVudE5hbWU6IHN0cmluZywgcHJvcHM/OiBQeEV2ZW50RGF0YSkge1xuICAgIGlmICh0aGlzLnRhZ0Z1bmN0aW9uICYmIGV2ZW50TmFtZSkge1xuICAgICAgZXZlbnROYW1lID0gdGhpcy5wcmVwYXJlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICB0aGlzLnRhZ0Z1bmN0aW9uKCd0cmFjaycsIGV2ZW50TmFtZSwgcHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zbGF0ZVRvRW5nbGlzaCh0ZXh0VG9UcmFuc2xhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBjdXJyZW50TGFuZyB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xuXG4gICAgaWYgKGN1cnJlbnRMYW5nID09PSAnZW4nKSB7XG4gICAgICByZXR1cm4gdGV4dFRvVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TGFuZyAmJiBjdXJyZW50TGFuZyAhPT0gdGhpcy5jYWNoZWRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnMpIHtcbiAgICAgIHRoaXMuY2FjaGVkTGFuZ3VhZ2UgPSBjdXJyZW50TGFuZztcbiAgICAgIHRoaXMuY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnMgPSB0aGlzLmdldFJldmVydGVkVHJhbnNsYXRpb25zKGN1cnJlbnRMYW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRFblRyYW5zbGF0aW9uKHRleHRUb1RyYW5zbGF0ZSwgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIHNob3VsZCBiZSBzZW50IHdoaWxlIGxvYWRpbmcgYSB0YWcuXG4gICAqIFRoZSBkZWNpc2lvbiB0byBhY3RpdmF0ZSBHYWluc2lnaHQgYW5kIHNlbmQgUElJIHJlbGllcyBvbiB3aGV0aGVyIHRoZSBjb29raWVQcmVmZXJlbmNlcyBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MsXG4gICAqIGlmIHRoZSBmdW5jdGlvbmFsIGNvb2tpZSBpcyBlbmFibGVkLCBhbmQgaWYgdGhlIHVzZXIgZ3JhbnRzIHBlcm1pc3Npb24uXG4gICAqL1xuICBhc3luYyBzaG91bGRTZW5kUGlpRGF0YSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmlzQ29uZmlnQ29va2llUHJlZmVyZW5jZXNEZWZpbmVkKCkgJiZcbiAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5pc0Z1bmN0aW9uYWxDb29raWVFbmFibGVkKCkgJiZcbiAgICAgICEoYXdhaXQgdGhpcy5pc0dhaW5zaWdodFByZWZlcmVuY2VEaXNhYmxlZEluVXNlclByZWZlcmVuY2VzKFxuICAgICAgICB0aGlzLlVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0tFWVxuICAgICAgKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzcGVjaWZpYyB1c2VyIGF0dHJpYnV0ZSBpbiB0aGUgR2FpbnNpZ2h0IGdsb2JhbCBzY29wZS5cbiAgICogVGhpcyBtZXRob2QgaW50ZXJmYWNlcyB3aXRoIHRoZSBHYWluc2lnaHQgZ2xvYmFsIG9iamVjdCB0byBzZXQgYSB1c2VyJ3Mgc3BlY2lmaWMgYXR0cmlidXRlIHdpdGggYSBwcm92aWRlZCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSB1c2VyIGF0dHJpYnV0ZSB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBzZXQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciBhdHRyaWJ1dGUuXG4gICAqL1xuICB1cGRhdGVVc2VyQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuKTogdm9pZCB7XG4gICAgd2luZG93W3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0/Lignc2V0JywgJ3VzZXInLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBtb2RpZnkgR2FpbnNpZ2h0IFBYIHNldHRpbmdzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgbXVsdGlwbGUgY29uZGl0aW9uczpcbiAgICogMS4gV2hldGhlciB0cmFja2luZyBoYXMgYmVlbiBkaXNhYmxlZCBnbG9iYWxseSB2aWEgYXBwbGljYXRpb24gb3B0aW9ucy5cbiAgICogMi4gV2hldGhlciBHYWluc2lnaHQgaXMgZGlzYWJsZWQgYXQgdGhlIHRlbmFudCBsZXZlbCB0aHJvdWdoIGN1c3RvbSBwcm9wZXJ0aWVzLlxuICAgKiAzLiBXaGV0aGVyIGEgR2FpbnNpZ2h0IGtleSBpcyBhdmFpbGFibGUsIGVpdGhlciBjdXJyZW50bHkgbG9hZGVkIG9yIGZldGNoZWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIDQuIFdoZXRoZXIgY29va2llIHByZWZlcmVuY2VzIGFyZSBkZWZpbmVkIGFuZCBhdmFpbGFibGUgZm9yIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuLiBUcnVlIGluZGljYXRlcyB0aGUgdXNlciBjYW4gZWRpdCBwcm9kdWN0IGV4cGVyaWVuY2Ugc2V0dGluZ3MsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBjYW5FZGl0UHJvZHVjdEV4cGVyaWVuY2VTZXR0aW5ncygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IHsgY3VzdG9tUHJvcGVydGllcyB9ID0gY3VycmVudFRlbmFudDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVHJhY2tpbmdEaXNhYmxlZCgpIHx8XG4gICAgICB0aGlzLmlzR2FpbnNpZ2h0RGlzYWJsZWRBdFRlbmFudEN1c3RvbVByb3BlcnRpZXMoY3VzdG9tUHJvcGVydGllcylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZ2FpbnNpZ2h0S2V5ID0gISF0aGlzLmdhaW5zaWdodEtleSB8fCAhIShhd2FpdCB0aGlzLmdldEdhaW5zaWdodEtleSgpKTtcbiAgICByZXR1cm4gKFxuICAgICAgZ2FpbnNpZ2h0S2V5ICYmXG4gICAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb25maWdDb29raWVQcmVmZXJlbmNlc0RlZmluZWQoKSAmJlxuICAgICAgISF0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0VXNlckNvb2tpZVByZWZlcmVuY2VzKClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgaGFzaEdyb3VwTmFtZShncm91cE5hbWU6IHN0cmluZykge1xuICAgIGlmICghZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdGhlIGdyb3VwIG5hbWUgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGdyb3VwTmFtZSk7XG5cbiAgICAvLyBVc2UgdGhlIFNIQS0yNTYgYWxnb3JpdGhtIHRvIGhhc2ggdGhlIGRhdGFcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcblxuICAgIC8vIENvbnZlcnQgdGhlIGhhc2ggdG8gYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICBjb25zdCBoYXNoZWROYW1lID0gaGFzaEFycmF5Lm1hcChieXRlID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIGhhc2hlZE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2xvYmFsIGNvbnRleHQgZm9yIEdhaW5zaWdodCB3aXRoIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIFRoZSBnbG9iYWwgY29udGV4dCBjYW4gYmUgdXRpbGl6ZWQgYnkgR2FpbnNpZ2h0IGZvciB2YXJpb3VzIHB1cnBvc2VzLCBzdWNoIGFzIHNlZ21lbnRpbmcgdXNlcnMuXG4gICAqL1xuICBzZXRHbG9iYWxDb250ZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRBcHBTdGF0ZSA9IHRoaXMuYXBwU3RhdGUuc3RhdGUkLnZhbHVlO1xuICAgIGNvbnN0IGN1cnJlbnRBcHBOYW1lID0gY3VycmVudEFwcFN0YXRlLmFwcC5uYW1lO1xuXG4gICAgd2luZG93W3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0/Lignc2V0JywgJ2dsb2JhbENvbnRleHQnLCB7IHByb2plY3ROYW1lOiBjdXJyZW50QXBwTmFtZSB9KTtcbiAgfVxuXG4gIHRyYW5zZm9ybVVzZXJSb2xlc1RvU3RyKHVzZXJSb2xlcz86IElJZGVudGlmaWVkW10pOiBzdHJpbmcge1xuICAgIGlmICghdXNlclJvbGVzKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRNYXAodXNlclJvbGVzLCAodXNlclJvbGU6IHsgcm9sZTogVXNlclJvbGUgfSkgPT4gdXNlclJvbGUucm9sZS5uYW1lKS5qb2luKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIEdhaW5zaWdodCBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0ZW5hbnQgY3VzdG9tIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdXN0b21Qcm9wZXJ0aWVzIC0gVGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgR2FpbnNpZ2h0IGlzIGRpc2FibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc0dhaW5zaWdodERpc2FibGVkQXRUZW5hbnRDdXN0b21Qcm9wZXJ0aWVzKGN1c3RvbVByb3BlcnRpZXM6IElDdXN0b21Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZ2FpbnNpZ2h0RW5hYmxlZCA9IGN1c3RvbVByb3BlcnRpZXMgJiYgY3VzdG9tUHJvcGVydGllcy5nYWluc2lnaHRFbmFibGVkO1xuICAgIHJldHVybiBnYWluc2lnaHRFbmFibGVkID09PSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGN1c3RvbSBicmFuZGluZyBpcyBlbmFibGVkIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIGJyYW5kIGxvZ28uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgY3VzdG9tIGJyYW5kaW5nIGlzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzQ3VzdG9tQnJhbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzID0gdGhpcy5vcHRpb25zLmdldCgnYnJhbmRpbmdDc3NWYXJzJykgfHwge307XG4gICAgcmV0dXJuICEhYnJhbmRpbmdDc3NWYXJzWydicmFuZC1sb2dvLWltZyddO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdHJhY2tpbmcgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGFwcGxpY2F0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0cmFja2luZyBpcyBkaXNhYmxlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1RyYWNraW5nRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaXNhYmxlVHJhY2tpbmcgPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVFdmVudE5hbWUoYmFzZUV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYmFzZUV2ZW50TmFtZVxuICAgICAgLnNwbGl0KCc6JylcbiAgICAgIC5tYXAoZXZlbnROYW1lUGFydCA9PiBjYW1lbENhc2UocmVtb3ZlVHJhbnNsYXRpb25Db250ZXh0KGV2ZW50TmFtZVBhcnQpKSlcbiAgICAgIC5qb2luKCc6Jyk7XG5cbiAgICBmdW5jdGlvbiByZW1vdmVUcmFuc2xhdGlvbkNvbnRleHQoZXZlbnROYW1lUGFydDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBldmVudE5hbWVQYXJ0LnJlcGxhY2UoL2BbXFx3XFxXXSpgL2csICcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTY3JpcHRUYWcoc2NyaXB0VGFnOiBIVE1MU2NyaXB0RWxlbWVudCwga2V5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgd2luZG93UmVmID0gd2luZG93IGFzIGFueTtcbiAgICAgIGNvbnN0IGZpcnN0VGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgY29uc3QgcHJvdG9jb2wgPSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgIGNvbnN0IGdhaW5zaWdodEdsb2JhbFNjb3BlID0gdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFO1xuICAgICAgc2NyaXB0VGFnLnNyYyA9IGAke3Byb3RvY29sfS8vJHt0aGlzLkdBSU5TSUdIVF9VUkx9JHtrZXl9YDtcbiAgICAgICh3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSA9XG4gICAgICAgIHdpbmRvd1JlZlt0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdIHx8XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgICBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICh3aW5kb3dSZWZbZ2FpbnNpZ2h0R2xvYmFsU2NvcGVdLnEgPSB3aW5kb3dSZWZbZ2FpbnNpZ2h0R2xvYmFsU2NvcGVdLnEgfHwgW10pLnB1c2goYXJncyk7XG4gICAgICAgIH0pLFxuICAgICAgICAod2luZG93UmVmW2dhaW5zaWdodEdsb2JhbFNjb3BlXS5wID0ga2V5KTtcbiAgICAgIHNjcmlwdFRhZy5hc3luYyA9IHRydWU7XG4gICAgICBmaXJzdFRhZy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHRUYWcsIGZpcnN0VGFnKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBHYWluc2lnaHQgUFgnLCBleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YW5jZUlkRnJvbVVybCgpIHtcbiAgICBjb25zdCBob3N0TmFtZSA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuICAgIHJldHVybiBob3N0TmFtZS5zdWJzdHJpbmcoaG9zdE5hbWUuaW5kZXhPZignLicpICsgMSk7XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJzZXMgdGhlIHRyYW5zbGF0aW9uIG9iamVjdC5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogeyBBZGQgd2lkZ2V0OiBcIldpZGdldCBoaW56dWbDvGdlblwiIH1cbiAgICpcbiAgICogd2lsbCBiZSBjaGFuZ2VkIHRvOlxuICAgKlxuICAgKiB7IFdpZGdldCBoaW56dWbDvGdlbjogXCJBZGQgd2lkZ2V0XCIgfVxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudExhbmcgTGFuZ3VhZ2Ugd2hvc2UgdHJhbnNsYXRlZCB2YWx1ZXMgYXJlIHRvIGJlIHBsYWNlZCBpbiB0aGUgb2JqZWN0IGtleS5cbiAgICogQHJldHVybnMgUmV0dXJucyBhbiBpbnZlcnRlZCBvYmplY3Qgd2hlcmUgdGhlIGtleXMgaGF2ZSBiZWVuIHN3YXBwZWQgd2l0aCB0aGUgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRSZXZlcnRlZFRyYW5zbGF0aW9ucyhjdXJyZW50TGFuZzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0b3JlLnRyYW5zbGF0aW9uc1tjdXJyZW50TGFuZ107XG5cbiAgICBpZiAoIXRyYW5zbGF0aW9ucykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBzd2FwcGVkS2V5c1dpdGhWYWx1ZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHN3YXBwZWRLZXlzV2l0aFZhbHVlc1t0cmFuc2xhdGlvbnNba2V5XV0gPSBrZXk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN3YXBwZWRLZXlzV2l0aFZhbHVlcztcbiAgfVxuXG4gIC8qKlRyYW5zbGF0ZXMgc3RyaW5nIGJhY2sgaW50byBFbmdsaXNoLlxuICAgKiBJZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBsYW5ndWFnZSBpcyBzZXQgdG8gRW5nbGlzaCwgdGhlIHN0cmluZyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB0ZXh0VG9UcmFuc2xhdGUgc3RyaW5nIHRvIHRyYW5zbGF0ZS5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgc3RyaW5nIHRyYW5zbGF0ZWQgaW50byBFbmdsaXNoLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFblRyYW5zbGF0aW9uKFxuICAgIHRleHRUb1RyYW5zbGF0ZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICApOiBzdHJpbmcge1xuICAgIGxldCBlblRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25zW3RleHRUb1RyYW5zbGF0ZV07XG4gICAgaWYgKCFlblRyYW5zbGF0aW9uKSB7XG4gICAgICByZXR1cm4gdGV4dFRvVHJhbnNsYXRlO1xuICAgIH1cbiAgICAvKiogcmVtb3ZlIHRyYW5zbGF0aW9uIGNvbnRleHQgKi9cbiAgICBjb25zdCByZWdleCA9IC9cXGAoLio/KVxcYC87XG4gICAgZW5UcmFuc2xhdGlvbiA9IGVuVHJhbnNsYXRpb24ucmVwbGFjZShyZWdleCwgJycpO1xuXG4gICAgcmV0dXJuIGVuVHJhbnNsYXRpb247XG4gIH1cbn1cbiJdfQ==
|
|
381
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FpbnNpZ2h0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7QUF1QjdGOzs7R0FHRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUEyQjNCLFlBQ1UsUUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUM5QyxnQkFBa0M7UUFKbEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjVDOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxJ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QUFFLENBQUMsQ0FBQztRQUVqRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzhHQS9aVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZmLE1BQU07OzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQ3VycmVudFRlbmFudCwgSUN1c3RvbVByb3BlcnRpZXMsIElJZGVudGlmaWVkLCBJVXNlciB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNhbWVsQ2FzZSwgZmxhdE1hcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyU2VydmljZSB9IGZyb20gJy4uL2Jvb3RzdHJhcC9jb29raWUtYmFubmVyL2Nvb2tpZS1iYW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQeEV2ZW50RGF0YSB9IGZyb20gJy4vcHJvZHVjdC1leHBlcmllbmNlLm1vZGVsJztcblxuaW50ZXJmYWNlIFVzZXJSb2xlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBwcm9wZXJ0eSB1c2VyIFRoZSB1c2VyIHdoaWNoIGlzIGdpdmVuIHRvIEdhaW5zaWdodC5cbiAqIEBwcm9wZXJ0eSB0ZW5hbnQgVGhlIHRlbmFudCB3aGljaCBpcyBnaXZlbiB0byBHYWluc2lnaHQuXG4gKiBAcHJvcGVydHkgaW5zdGFuY2VJZCBFeHRyYWN0ZWQgZG9tYWluIHBhcnQgb2YgYW4gVVJMLlxuICogQHByb3BlcnR5IHZlcnNpb25VSSBUaGUgVUkgdmVyc2lvbiB1c2VkLlxuICogQHByb3BlcnR5IHZlcnNpb25CRSBUaGUgQkUgdmVyc2lvbiB1c2VkLlxuICovXG5pbnRlcmZhY2UgSWRlbnRpZnlEYXRhIHtcbiAgdXNlcjogSVVzZXI7XG4gIGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50O1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG4gIHZlcnNpb25VST86IHN0cmluZztcbiAgdmVyc2lvbkJFPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2VydmljZSB0byBtYW5hZ2UgdGhlIEdhaW5zaWdodCBpbnRlZ3JhdGlvbi4gSXQgYWxsb3dzIHRvIGxvYWQgdGhlXG4gKiB0YWcgYW5kXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdhaW5zaWdodFNlcnZpY2Uge1xuICAvKipcbiAgICogQSBzdWJqZWN0IHRoYXQgZW1pdHMgdGhlIHRhZyBmdW5jdGlvbiBhcyBzb29uIGFzIGEgbmV3IHRhZyBpcyBzZXQuXG4gICAqL1xuICB0YWdGdW5jdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICB0cmFja2luZ0xvYWRlZCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKlxuICAgKiBHYWluc2lnaHQgaXMgYWN0aXZhdGVkIG9ubHkgd2hlbiB0aGUgY29va2llIGJhbm5lciBpcyBwcmVzZW50LiBJZiBmdW5jdGlvbmFsIGNvb2tpZXMgYXJlIGVuYWJsZWQsIGJvdGggcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24gKFBJSSkgYW5kIHJlcXVpcmVkIGRhdGEgYXJlIHNlbnQuXG4gICAqIE90aGVyd2lzZSwgb25seSB0aGUgcmVxdWlyZWQgZGF0YSBpcyB0cmFuc21pdHRlZCBkdXJpbmcgdGhlIGlkZW50aXR5IHN0ZXAgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgVVNFUl9QUkVGRVJFTkNFU19HQUlOU0lHSFRfS0VZID0gJ2dhaW5zaWdodEVuYWJsZWQnO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGtleSByZW1haW5lZCB1bmNoYW5nZWQsIGJ1dCBhcHBsaWVzIHRvIGFsbCBlbmdhZ2VtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IFVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0VOR0FHRU1FTlRTX0tFWSA9ICdnYWluc2lnaHRCb3RFbmFibGVkJztcbiAgcmVhZG9ubHkgSElERV9HQUlOU0lHSFRfQk9UX1NUWUxFX0lEID0gJ2hpZGUtZ3MtYm90JztcbiAgcHJpdmF0ZSByZWFkb25seSBHQUlOU0lHSFRfVVJMID0gJ3dlYi1zZGsuYXB0cmluc2ljLmNvbS9hcGkvYXB0cmluc2ljLmpzP2E9JztcbiAgcHJpdmF0ZSByZWFkb25seSBHQUlOU0lHSFRfR0xPQkFMX1NDT1BFID0gJ2FwdHJpbnNpYyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgU0NSSVBUX0VYRUNVVElPTl9XQUlUX1RJTUUgPSA1MDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgT1BUSU9OU19LRVlfQ0FURUdPUlkgPSAnZ2FpbnNpZ2h0JztcbiAgcHJpdmF0ZSByZWFkb25seSBPUFRJT05TX0tFWV9OQU1FID0gJ2FwaS5rZXknO1xuICBwcml2YXRlIGlzU2NyaXB0TG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZ2FpbnNpZ2h0S2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgY2FjaGVkTGFuZ3VhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNvb2tpZUJhbm5lclNlcnZpY2U6IENvb2tpZUJhbm5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIEdhaW5zaWdodCBwcmVmZXJlbmNlIGlzIGRpc2FibGVkIGluIHVzZXIgcHJlZmVyZW5jZXMuXG4gICAqIEBwYXJhbSBwcmVmZXJlbmNlTmFtZSAtIE5hbWUgb2YgdGhlIEdhaW5zaWdodCBwcmVmZXJlbmNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHByZWZlcmVuY2UgaXMgZGlzYWJsZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgYXN5bmMgaXNHYWluc2lnaHRQcmVmZXJlbmNlRGlzYWJsZWRJblVzZXJQcmVmZXJlbmNlcyhwcmVmZXJlbmNlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdXNlckdhaW5zaWdodFByZWYgPSBhd2FpdCB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2UuZ2V0KHByZWZlcmVuY2VOYW1lKS50b1Byb21pc2UoKTtcblxuICAgIHJldHVybiB1c2VyR2FpbnNpZ2h0UHJlZiA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RhdGUgb2YgdGhlIGZ1bmN0aW9uYWwgY29va2llLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZnVuY3Rpb25hbCBjb29raWUgc2hvdWxkIGJlIGVuYWJsZWQgKGB0cnVlYCkgb3IgZGlzYWJsZWQgKGBmYWxzZWApLlxuICAgKi9cbiAgc2V0RnVuY3Rpb25hbENvb2tpZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0VXNlckNvb2tpZVByZWZlcmVuY2VzKCk7XG4gICAgaWYgKGNvb2tpZXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNvb2tpZXMpLmZvckVhY2goY29va2llTmFtZSA9PiB7XG4gICAgICAgIGlmIChjb29raWVOYW1lID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgICAgICBjb29raWVzW2Nvb2tpZU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhY2NlcHRDb29raWVOb3RpY2UnLCBKU09OLnN0cmluZ2lmeShjb29raWVzKSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0R2FpbnNpZ2h0S2V5KCkge1xuICAgIHRoaXMuZ2FpbnNpZ2h0S2V5ID1cbiAgICAgIHRoaXMub3B0aW9ucy5nYWluc2lnaHRLZXkgfHxcbiAgICAgIChhd2FpdCB0aGlzLm9wdGlvbnMuZ2V0U3lzdGVtT3B0aW9uKHRoaXMuT1BUSU9OU19LRVlfQ0FURUdPUlksIHRoaXMuT1BUSU9OU19LRVlfTkFNRSkpO1xuICAgIHJldHVybiB0aGlzLmdhaW5zaWdodEtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWcgZ2xvYmFsIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHVzZXJcbiAgICogb3IgYWRkIHNwZWNpYWwgZXZlbnRzLlxuICAgKi9cbiAgZ2V0IHRhZ0Z1bmN0aW9uKCkge1xuICAgIHJldHVybiAod2luZG93IGFzIGFueSlbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBzY3JpcHQgdGFnIGFuZCBjYWxscyB0aGUgaWRlbnRpZnkgZnVuY3Rpb24gdG8gc3RhcnQgdGhlIHRyYWNraW5nLlxuICAgKiBAcGFyYW0gY3VycmVudFRlbmFudCBUaGUgY3VycmVudCB0ZW5hbnQuXG4gICAqIEBwYXJhbSBzZW5kUGlpRGF0YSBGbGFnIGZvciBzZW5kaW5nIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIGR1cmluZyBpZGVudGlmaWNhdGlvbiBpbiBHYWluc2lnaHQuXG4gICAqL1xuICBhc3luYyBsb2FkVGFnKGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50LCBzZW5kUGlpRGF0YTogYm9vbGVhbikge1xuICAgIGNvbnN0IHNjcmlwdFRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMuZ2V0R2FpbnNpZ2h0S2V5KCk7XG5cbiAgICBpZiAoa2V5ICYmICF0aGlzLmlzU2NyaXB0TG9hZGVkKSB7XG4gICAgICB0aGlzLmxvYWRTY3JpcHRUYWcoc2NyaXB0VGFnLCBrZXkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50VXNlclN0cmVhbSA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXI7XG4gICAgICBjb25zdCBzY3JpcHRMb2FkU3RyZWFtID0gZnJvbUV2ZW50KHNjcmlwdFRhZywgJ2xvYWQnKTtcbiAgICAgIGNvbnN0IHZlcnNpb25TdHJlYW0gPSB0aGlzLmFwcFN0YXRlLnN0YXRlJC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHsgdmVyc2lvbnMgfSkgPT4gdmVyc2lvbnMuYmFja2VuZCksXG4gICAgICAgIG1hcCgoeyB2ZXJzaW9ucyB9KSA9PiB2ZXJzaW9ucyksXG4gICAgICAgIHRha2UoMSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNvdXJjZVN0cmVhbXMgPSBzZW5kUGlpRGF0YVxuICAgICAgICA/IFtjdXJyZW50VXNlclN0cmVhbSwgc2NyaXB0TG9hZFN0cmVhbSwgdmVyc2lvblN0cmVhbV1cbiAgICAgICAgOiBbY3VycmVudFVzZXJTdHJlYW0sIHNjcmlwdExvYWRTdHJlYW1dO1xuXG4gICAgICBjb21iaW5lTGF0ZXN0KHNvdXJjZVN0cmVhbXMpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlbGF5KHRoaXMuU0NSSVBUX0VYRUNVVElPTl9XQUlUX1RJTUUpLFxuICAgICAgICAgIGZpbHRlcigoW3VzZXIsIHNjcmlwdEV2ZW50XSkgPT4gISEoc2NyaXB0RXZlbnQgJiYgdXNlcikpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShhcmdzID0+IHtcbiAgICAgICAgICBjb25zdCBbdXNlciwgLCB2ZXJzaW9uc10gPSBhcmdzO1xuICAgICAgICAgIHRoaXMuc2V0R2xvYmFsQ29udGV4dCgpO1xuXG4gICAgICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHRoaXMuZ2V0SW5zdGFuY2VJZEZyb21VcmwoKTtcbiAgICAgICAgICBpZiAoc2VuZFBpaURhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb25VSTogc3RyaW5nID0gdmVyc2lvbnMudWkubmd4O1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbkJFOiBzdHJpbmcgPSB2ZXJzaW9ucy5iYWNrZW5kO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRJZGVudGlmeURhdGE6IElkZW50aWZ5RGF0YSA9IHtcbiAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgY3VycmVudFRlbmFudCxcbiAgICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgICAgdmVyc2lvblVJLFxuICAgICAgICAgICAgICB2ZXJzaW9uQkVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5KHNlbmRQaWlEYXRhLCBleHRlbmRlZElkZW50aWZ5RGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkSWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEgPSB7IHVzZXIsIGN1cnJlbnRUZW5hbnQsIGluc3RhbmNlSWQgfTtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpZnkoc2VuZFBpaURhdGEsIHJlcXVpcmVkSWRlbnRpZnlEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc1NjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy50YWdGdW5jdGlvbiQubmV4dCh0aGlzLnRhZ0Z1bmN0aW9uKTtcbiAgICAgICAgICB0aGlzLnRyYWNraW5nTG9hZGVkJC5uZXh0KHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgdXNlci9hY2NvdW50IGF0IEdhaW5zaWdodC5cbiAgICogQHBhcmFtIHNlbmRQaWlEYXRhIEZsYWcgZm9yIHNlbmRpbmcgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSBpZGVudGlmeURhdGEgT2JqZWN0IGNvbnRhaW5pbmcgaWRlbnRpZmljYXRpb24gZGF0YS5cbiAgICovXG4gIGlkZW50aWZ5KHNlbmRQaWlEYXRhOiBib29sZWFuLCBpZGVudGlmeURhdGE6IElkZW50aWZ5RGF0YSkge1xuICAgIGNvbnN0IHdpbmRvd1JlZiA9IHdpbmRvdyBhcyBhbnk7XG4gICAgY29uc3QgeyBpZDogdXNlcklkLCBlbWFpbCwgdXNlck5hbWUsIGZpcnN0TmFtZSwgbGFzdE5hbWUsIHJvbGVzIH0gPSBpZGVudGlmeURhdGEudXNlcjtcbiAgICBjb25zdCB7IG5hbWU6IHRlbmFudElELCBjdXN0b21Qcm9wZXJ0aWVzLCBkb21haW5OYW1lIH0gPSBpZGVudGlmeURhdGEuY3VycmVudFRlbmFudDtcbiAgICBjb25zdCB7IGluc3RhbmNlSWQsIHZlcnNpb25VSSwgdmVyc2lvbkJFIH0gPSBpZGVudGlmeURhdGE7XG5cbiAgICAvKipcbiAgICAgKiBQYXNzaW5nIElEIGlzIGEgbWluaW11bSByZXF1aXJlZCBkYXRhIHRvIG1ha2UgYW4gaWRlbnRpZnkgY2FsbCB0byBHYWluc2lnaHQuXG4gICAgICogaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGxhdGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4gdXNlcnMgY3JlYXRlZCBiZWZvcmUgYW5kIGFmdGVyIGRhdGEgYW5vbnltaXphdGlvbiBkb25lIGJ5IEdhaW5zaWdodC5cbiAgICAgKiB0ZW5hbnRJRCBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGVuYW50cyB3aGVuIHNhbWUgZW1haWwgaXMgdXNlZCBmb3IgZGlmZmVyZW50IHRlbmFudHMuXG4gICAgICpcbiAgICAgKiBEdWUgdG8gR1MgbGltaXRhdGlvbnMgKEdTIGRvZXMgbm90IGFsbG93IGNsZWFyaW5nIHVzZXIgYXR0ci9wcmVmZXJlbmNlcyB2aWEgdGhlIEdTIHRhZyEpLFxuICAgICAqIHdlIGFsd2F5cyBuZWVkIHRvIGluaXRpYWxpemUgZmllbGRzIHJlbGF0ZWQgdG8gUElJIHRvIHByZXZlbnQgbGVha2luZyB0aGlzIGRhdGEgdG8gR1Mgd2hlbiB0aGUgdXNlciBoYXMgZGlzYWJsZWQgZnVuY3Rpb25hbCBjb29raWVzLlxuICAgICAqL1xuICAgIGNvbnN0IGJhc2VJZGVudGlmeSA9IHtcbiAgICAgIC8qKlxuICAgICAgICogRW1haWwgd2FzIG5vdCBtYW5kYXRvcnkgZm9ybSBmaWVsZCB1bnRpbCAxMC4xNFxuICAgICAgICovXG4gICAgICBpZDogZW1haWwgPyBlbWFpbCA6IGAke3VzZXJJZH1fJHt0ZW5hbnRJRH1fJHtpbnN0YW5jZUlkfWAsXG4gICAgICBpc1VzZXJDcmVhdGVkQWZ0ZXJBbm9ueW1pemF0aW9uV2FzQWN0aXZhdGVkOiB0cnVlLFxuICAgICAgdGVuYW50SUQsXG4gICAgICBkb21haW5OYW1lLFxuICAgICAgdmVyc2lvblVJLFxuICAgICAgdmVyc2lvbkJFLFxuICAgICAgdXNlckxhbmd1YWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcsXG4gICAgICBicm93c2VyTGFuZ3VhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXRCcm93c2VyTGFuZygpLFxuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIGV4dGVybmFsUmVmZXJlbmNlOiBjdXN0b21Qcm9wZXJ0aWVzPy5leHRlcm5hbFJlZmVyZW5jZSxcbiAgICAgIHVzZXJSb2xlczogdGhpcy50cmFuc2Zvcm1Vc2VyUm9sZXNUb1N0cihyb2xlcz8ucmVmZXJlbmNlcyksXG4gICAgICBjdXN0b21CcmFuZGluZzogdGhpcy5pc0N1c3RvbUJyYW5kaW5nKCksXG4gICAgICBmdWxsVHJhY2tpbmc6IHNlbmRQaWlEYXRhXG4gICAgfTtcblxuICAgIGNvbnN0IGlkZW50aWZ5UGF5bG9hZCA9IHNlbmRQaWlEYXRhXG4gICAgICA/IHsgLi4uYmFzZUlkZW50aWZ5LCBlbWFpbCwgdXNlck5hbWUsIGZpcnN0TmFtZSwgbGFzdE5hbWUgfVxuICAgICAgOiB7IC4uLmJhc2VJZGVudGlmeSwgZW1haWw6ICctLScsIHVzZXJOYW1lOiAnLS0nLCBmaXJzdE5hbWU6ICctLScsIGxhc3ROYW1lOiAnLS0nIH07XG5cbiAgICB3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSgnaWRlbnRpZnknLCBpZGVudGlmeVBheWxvYWQsIHtcbiAgICAgIGlkOiBgJHt0ZW5hbnRJRH1fJHtpbnN0YW5jZUlkfWAsXG4gICAgICBpbnN0YW5jZUlkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYW4gZXZlbnQgdG8gYmUgcmVjb3JkZWQgYnkgR2FpbnNpZ2h0IFBYLlxuICAgKiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgR2FpbnNpZ2h0IFBYJ3MgdHJhY2tpbmcgbWVjaGFuaXNtIHRvIGxvZyBhIHNwZWNpZmljIGV2ZW50XG4gICAqIGFsb25nIHdpdGggaXRzIGFzc29jaWF0ZWQgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIGV2ZW50TmFtZSAtIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJlIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHByb3BzIC0gT3B0aW9uYWwgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50LlxuICAgKi9cbiAgdHJpZ2dlckV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wcz86IFB4RXZlbnREYXRhKSB7XG4gICAgaWYgKHRoaXMudGFnRnVuY3Rpb24gJiYgZXZlbnROYW1lKSB7XG4gICAgICBldmVudE5hbWUgPSB0aGlzLnByZXBhcmVFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgIHRoaXMudGFnRnVuY3Rpb24oJ3RyYWNrJywgZXZlbnROYW1lLCBwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlVG9FbmdsaXNoKHRleHRUb1RyYW5zbGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGN1cnJlbnRMYW5nIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XG5cbiAgICBpZiAoY3VycmVudExhbmcgPT09ICdlbicpIHtcbiAgICAgIHJldHVybiB0ZXh0VG9UcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRMYW5nICYmIGN1cnJlbnRMYW5nICE9PSB0aGlzLmNhY2hlZExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmNhY2hlZFJldmVydGVkVHJhbnNsYXRpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucykge1xuICAgICAgdGhpcy5jYWNoZWRMYW5ndWFnZSA9IGN1cnJlbnRMYW5nO1xuICAgICAgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyA9IHRoaXMuZ2V0UmV2ZXJ0ZWRUcmFuc2xhdGlvbnMoY3VycmVudExhbmcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEVuVHJhbnNsYXRpb24odGV4dFRvVHJhbnNsYXRlLCB0aGlzLmNhY2hlZFJldmVydGVkVHJhbnNsYXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24gKFBJSSkgc2hvdWxkIGJlIHNlbnQgd2hpbGUgbG9hZGluZyBhIHRhZy5cbiAgICogVGhlIGRlY2lzaW9uIHRvIGFjdGl2YXRlIEdhaW5zaWdodCBhbmQgc2VuZCBQSUkgcmVsaWVzIG9uIHdoZXRoZXIgdGhlIGNvb2tpZVByZWZlcmVuY2VzIG9wdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5ncyxcbiAgICogaWYgdGhlIGZ1bmN0aW9uYWwgY29va2llIGlzIGVuYWJsZWQsIGFuZCBpZiB0aGUgdXNlciBncmFudHMgcGVybWlzc2lvbi5cbiAgICovXG4gIGFzeW5jIHNob3VsZFNlbmRQaWlEYXRhKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb25maWdDb29raWVQcmVmZXJlbmNlc0RlZmluZWQoKSAmJlxuICAgICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmlzRnVuY3Rpb25hbENvb2tpZUVuYWJsZWQoKSAmJlxuICAgICAgIShhd2FpdCB0aGlzLmlzR2FpbnNpZ2h0UHJlZmVyZW5jZURpc2FibGVkSW5Vc2VyUHJlZmVyZW5jZXMoXG4gICAgICAgIHRoaXMuVVNFUl9QUkVGRVJFTkNFU19HQUlOU0lHSFRfS0VZXG4gICAgICApKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHNwZWNpZmljIHVzZXIgYXR0cmlidXRlIGluIHRoZSBHYWluc2lnaHQgZ2xvYmFsIHNjb3BlLlxuICAgKiBUaGlzIG1ldGhvZCBpbnRlcmZhY2VzIHdpdGggdGhlIEdhaW5zaWdodCBnbG9iYWwgb2JqZWN0IHRvIHNldCBhIHVzZXIncyBzcGVjaWZpYyBhdHRyaWJ1dGUgd2l0aCBhIHByb3ZpZGVkIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIHVzZXIgYXR0cmlidXRlIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHNldCBmb3IgdGhlIHNwZWNpZmllZCB1c2VyIGF0dHJpYnV0ZS5cbiAgICovXG4gIHVwZGF0ZVVzZXJBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB3aW5kb3dbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXT8uKCdzZXQnLCAndXNlcicsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIG1vZGlmeSBHYWluc2lnaHQgUFggc2V0dGluZ3MuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBtdWx0aXBsZSBjb25kaXRpb25zOlxuICAgKiAxLiBXaGV0aGVyIHRyYWNraW5nIGhhcyBiZWVuIGRpc2FibGVkIGdsb2JhbGx5IHZpYSBhcHBsaWNhdGlvbiBvcHRpb25zLlxuICAgKiAyLiBXaGV0aGVyIEdhaW5zaWdodCBpcyBkaXNhYmxlZCBhdCB0aGUgdGVuYW50IGxldmVsIHRocm91Z2ggY3VzdG9tIHByb3BlcnRpZXMuXG4gICAqIDMuIFdoZXRoZXIgYSBHYWluc2lnaHQga2V5IGlzIGF2YWlsYWJsZSwgZWl0aGVyIGN1cnJlbnRseSBsb2FkZWQgb3IgZmV0Y2hlZCBhc3luY2hyb25vdXNseS5cbiAgICogNC4gV2hldGhlciBjb29raWUgcHJlZmVyZW5jZXMgYXJlIGRlZmluZWQgYW5kIGF2YWlsYWJsZSBmb3IgdGhlIHVzZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4uIFRydWUgaW5kaWNhdGVzIHRoZSB1c2VyIGNhbiBlZGl0IHByb2R1Y3QgZXhwZXJpZW5jZSBzZXR0aW5ncywgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGNhbkVkaXRQcm9kdWN0RXhwZXJpZW5jZVNldHRpbmdzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgY29uc3QgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gPSBjdXJyZW50VGVuYW50O1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNUcmFja2luZ0Rpc2FibGVkKCkgfHxcbiAgICAgIHRoaXMuaXNHYWluc2lnaHREaXNhYmxlZEF0VGVuYW50Q3VzdG9tUHJvcGVydGllcyhjdXN0b21Qcm9wZXJ0aWVzKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBnYWluc2lnaHRLZXkgPSAhIXRoaXMuZ2FpbnNpZ2h0S2V5IHx8ICEhKGF3YWl0IHRoaXMuZ2V0R2FpbnNpZ2h0S2V5KCkpO1xuICAgIHJldHVybiAoXG4gICAgICBnYWluc2lnaHRLZXkgJiZcbiAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5pc0NvbmZpZ0Nvb2tpZVByZWZlcmVuY2VzRGVmaW5lZCgpICYmXG4gICAgICAhIXRoaXMuY29va2llQmFubmVyU2VydmljZS5nZXRVc2VyQ29va2llUHJlZmVyZW5jZXMoKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBoYXNoR3JvdXBOYW1lKGdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFncm91cE5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQ29udmVydCB0aGUgZ3JvdXAgbmFtZSB0byBhbiBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZ3JvdXBOYW1lKTtcblxuICAgIC8vIFVzZSB0aGUgU0hBLTI1NiBhbGdvcml0aG0gdG8gaGFzaCB0aGUgZGF0YVxuICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuXG4gICAgLy8gQ29udmVydCB0aGUgaGFzaCB0byBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgIGNvbnN0IGhhc2hlZE5hbWUgPSBoYXNoQXJyYXkubWFwKGJ5dGUgPT4gYnl0ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG5cbiAgICByZXR1cm4gaGFzaGVkTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnbG9iYWwgY29udGV4dCBmb3IgR2FpbnNpZ2h0IHdpdGggdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gbmFtZS5cbiAgICogVGhlIGdsb2JhbCBjb250ZXh0IGNhbiBiZSB1dGlsaXplZCBieSBHYWluc2lnaHQgZm9yIHZhcmlvdXMgcHVycG9zZXMsIHN1Y2ggYXMgc2VnbWVudGluZyB1c2Vycy5cbiAgICovXG4gIHNldEdsb2JhbENvbnRleHQoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudEFwcFN0YXRlID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZSQudmFsdWU7XG4gICAgY29uc3QgY3VycmVudEFwcE5hbWUgPSBjdXJyZW50QXBwU3RhdGUuYXBwLm5hbWU7XG5cbiAgICB3aW5kb3dbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXT8uKCdzZXQnLCAnZ2xvYmFsQ29udGV4dCcsIHsgcHJvamVjdE5hbWU6IGN1cnJlbnRBcHBOYW1lIH0pO1xuICB9XG5cbiAgdHJhbnNmb3JtVXNlclJvbGVzVG9TdHIodXNlclJvbGVzPzogSUlkZW50aWZpZWRbXSk6IHN0cmluZyB7XG4gICAgaWYgKCF1c2VyUm9sZXMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdE1hcCh1c2VyUm9sZXMsICh1c2VyUm9sZTogeyByb2xlOiBVc2VyUm9sZSB9KSA9PiB1c2VyUm9sZS5yb2xlLm5hbWUpLmpvaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgR2FpbnNpZ2h0IGlzIGRpc2FibGVkIGJhc2VkIG9uIHRlbmFudCBjdXN0b20gcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIGN1c3RvbVByb3BlcnRpZXMgLSBUaGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gVHJ1ZSBpZiBHYWluc2lnaHQgaXMgZGlzYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzR2FpbnNpZ2h0RGlzYWJsZWRBdFRlbmFudEN1c3RvbVByb3BlcnRpZXMoY3VzdG9tUHJvcGVydGllczogSUN1c3RvbVByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBnYWluc2lnaHRFbmFibGVkID0gY3VzdG9tUHJvcGVydGllcyAmJiBjdXN0b21Qcm9wZXJ0aWVzLmdhaW5zaWdodEVuYWJsZWQ7XG4gICAgcmV0dXJuIGdhaW5zaWdodEVuYWJsZWQgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgY3VzdG9tIGJyYW5kaW5nIGlzIGVuYWJsZWQgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGEgYnJhbmQgbG9nby5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gVHJ1ZSBpZiBjdXN0b20gYnJhbmRpbmcgaXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNDdXN0b21CcmFuZGluZygpOiBib29sZWFuIHtcbiAgICBjb25zdCBicmFuZGluZ0Nzc1ZhcnMgPSB0aGlzLm9wdGlvbnMuZ2V0KCdicmFuZGluZ0Nzc1ZhcnMnKSB8fCB7fTtcbiAgICByZXR1cm4gISFicmFuZGluZ0Nzc1ZhcnNbJ2JyYW5kLWxvZ28taW1nJ107XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0cmFja2luZyBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgYXBwbGljYXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRyYWNraW5nIGlzIGRpc2FibGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzVHJhY2tpbmdEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRpc2FibGVUcmFja2luZyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUV2ZW50TmFtZShiYXNlRXZlbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBiYXNlRXZlbnROYW1lXG4gICAgICAuc3BsaXQoJzonKVxuICAgICAgLm1hcChldmVudE5hbWVQYXJ0ID0+IGNhbWVsQ2FzZShyZW1vdmVUcmFuc2xhdGlvbkNvbnRleHQoZXZlbnROYW1lUGFydCkpKVxuICAgICAgLmpvaW4oJzonKTtcblxuICAgIGZ1bmN0aW9uIHJlbW92ZVRyYW5zbGF0aW9uQ29udGV4dChldmVudE5hbWVQYXJ0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGV2ZW50TmFtZVBhcnQucmVwbGFjZSgvYFtcXHdcXFddKmAvZywgJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFNjcmlwdFRhZyhzY3JpcHRUYWc6IEhUTUxTY3JpcHRFbGVtZW50LCBrZXk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3aW5kb3dSZWYgPSB3aW5kb3cgYXMgYW55O1xuICAgICAgY29uc3QgZmlyc3RUYWcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgICBjb25zdCBwcm90b2NvbCA9IGxvY2F0aW9uLnByb3RvY29sO1xuICAgICAgY29uc3QgZ2FpbnNpZ2h0R2xvYmFsU2NvcGUgPSB0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEU7XG4gICAgICBzY3JpcHRUYWcuc3JjID0gYCR7cHJvdG9jb2x9Ly8ke3RoaXMuR0FJTlNJR0hUX1VSTH0ke2tleX1gO1xuICAgICAgKHdpbmRvd1JlZlt0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdID1cbiAgICAgICAgd2luZG93UmVmW3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0gfHxcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICAgIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgKHdpbmRvd1JlZltnYWluc2lnaHRHbG9iYWxTY29wZV0ucSA9IHdpbmRvd1JlZltnYWluc2lnaHRHbG9iYWxTY29wZV0ucSB8fCBbXSkucHVzaChhcmdzKTtcbiAgICAgICAgfSksXG4gICAgICAgICh3aW5kb3dSZWZbZ2FpbnNpZ2h0R2xvYmFsU2NvcGVdLnAgPSBrZXkpO1xuICAgICAgc2NyaXB0VGFnLmFzeW5jID0gdHJ1ZTtcbiAgICAgIGZpcnN0VGFnLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNjcmlwdFRhZywgZmlyc3RUYWcpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIEdhaW5zaWdodCBQWCcsIGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEluc3RhbmNlSWRGcm9tVXJsKCkge1xuICAgIGNvbnN0IGhvc3ROYW1lID0gbG9jYXRpb24uaG9zdG5hbWU7XG4gICAgcmV0dXJuIGhvc3ROYW1lLnN1YnN0cmluZyhob3N0TmFtZS5pbmRleE9mKCcuJykgKyAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZlcnNlcyB0aGUgdHJhbnNsYXRpb24gb2JqZWN0LlxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiB7IEFkZCB3aWRnZXQ6IFwiV2lkZ2V0IGhpbnp1ZsO8Z2VuXCIgfVxuICAgKlxuICAgKiB3aWxsIGJlIGNoYW5nZWQgdG86XG4gICAqXG4gICAqIHsgV2lkZ2V0IGhpbnp1ZsO8Z2VuOiBcIkFkZCB3aWRnZXRcIiB9XG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50TGFuZyBMYW5ndWFnZSB3aG9zZSB0cmFuc2xhdGVkIHZhbHVlcyBhcmUgdG8gYmUgcGxhY2VkIGluIHRoZSBvYmplY3Qga2V5LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGFuIGludmVydGVkIG9iamVjdCB3aGVyZSB0aGUga2V5cyBoYXZlIGJlZW4gc3dhcHBlZCB3aXRoIHRoZSB2YWx1ZXMuXG4gICAqL1xuICBwcml2YXRlIGdldFJldmVydGVkVHJhbnNsYXRpb25zKGN1cnJlbnRMYW5nOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RvcmUudHJhbnNsYXRpb25zW2N1cnJlbnRMYW5nXTtcblxuICAgIGlmICghdHJhbnNsYXRpb25zKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHN3YXBwZWRLZXlzV2l0aFZhbHVlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgc3dhcHBlZEtleXNXaXRoVmFsdWVzW3RyYW5zbGF0aW9uc1trZXldXSA9IGtleTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3dhcHBlZEtleXNXaXRoVmFsdWVzO1xuICB9XG5cbiAgLyoqVHJhbnNsYXRlcyBzdHJpbmcgYmFjayBpbnRvIEVuZ2xpc2guXG4gICAqIElmIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGxhbmd1YWdlIGlzIHNldCB0byBFbmdsaXNoLCB0aGUgc3RyaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVudCBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHRleHRUb1RyYW5zbGF0ZSBzdHJpbmcgdG8gdHJhbnNsYXRlLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBzdHJpbmcgdHJhbnNsYXRlZCBpbnRvIEVuZ2xpc2guXG4gICAqL1xuICBwcml2YXRlIGdldEVuVHJhbnNsYXRpb24oXG4gICAgdGV4dFRvVHJhbnNsYXRlOiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGVuVHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnNbdGV4dFRvVHJhbnNsYXRlXTtcbiAgICBpZiAoIWVuVHJhbnNsYXRpb24pIHtcbiAgICAgIHJldHVybiB0ZXh0VG9UcmFuc2xhdGU7XG4gICAgfVxuICAgIC8qKiByZW1vdmUgdHJhbnNsYXRpb24gY29udGV4dCAqL1xuICAgIGNvbnN0IHJlZ2V4ID0gL1xcYCguKj8pXFxgLztcbiAgICBlblRyYW5zbGF0aW9uID0gZW5UcmFuc2xhdGlvbi5yZXBsYWNlKHJlZ2V4LCAnJyk7XG5cbiAgICByZXR1cm4gZW5UcmFuc2xhdGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -9744,7 +9744,7 @@ class GainsightService {
|
|
|
9744
9744
|
*/
|
|
9745
9745
|
identify(sendPiiData, identifyData) {
|
|
9746
9746
|
const windowRef = window;
|
|
9747
|
-
const { id: userId, email, roles } = identifyData.user;
|
|
9747
|
+
const { id: userId, email, userName, firstName, lastName, roles } = identifyData.user;
|
|
9748
9748
|
const { name: tenantID, customProperties, domainName } = identifyData.currentTenant;
|
|
9749
9749
|
const { instanceId, versionUI, versionBE } = identifyData;
|
|
9750
9750
|
/**
|
|
@@ -9755,17 +9755,13 @@ class GainsightService {
|
|
|
9755
9755
|
* Due to GS limitations (GS does not allow clearing user attr/preferences via the GS tag!),
|
|
9756
9756
|
* we always need to initialize fields related to PII to prevent leaking this data to GS when the user has disabled functional cookies.
|
|
9757
9757
|
*/
|
|
9758
|
-
const
|
|
9758
|
+
const baseIdentify = {
|
|
9759
9759
|
/**
|
|
9760
9760
|
* Email was not mandatory form field until 10.14
|
|
9761
9761
|
*/
|
|
9762
9762
|
id: email ? email : `${userId}_${tenantID}_${instanceId}`,
|
|
9763
9763
|
isUserCreatedAfterAnonymizationWasActivated: true,
|
|
9764
|
-
tenantID
|
|
9765
|
-
email: '--',
|
|
9766
|
-
userName: '--',
|
|
9767
|
-
firstName: '--',
|
|
9768
|
-
lastName: '--',
|
|
9764
|
+
tenantID,
|
|
9769
9765
|
domainName,
|
|
9770
9766
|
versionUI,
|
|
9771
9767
|
versionBE,
|
|
@@ -9777,22 +9773,13 @@ class GainsightService {
|
|
|
9777
9773
|
customBranding: this.isCustomBranding(),
|
|
9778
9774
|
fullTracking: sendPiiData
|
|
9779
9775
|
};
|
|
9780
|
-
|
|
9781
|
-
|
|
9782
|
-
|
|
9783
|
-
|
|
9784
|
-
|
|
9785
|
-
|
|
9786
|
-
|
|
9787
|
-
lastName
|
|
9788
|
-
};
|
|
9789
|
-
windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', extendedIdentify, {
|
|
9790
|
-
id: `${tenantID}_${instanceId}`,
|
|
9791
|
-
instanceId
|
|
9792
|
-
});
|
|
9793
|
-
return;
|
|
9794
|
-
}
|
|
9795
|
-
windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', requiredIdentify);
|
|
9776
|
+
const identifyPayload = sendPiiData
|
|
9777
|
+
? { ...baseIdentify, email, userName, firstName, lastName }
|
|
9778
|
+
: { ...baseIdentify, email: '--', userName: '--', firstName: '--', lastName: '--' };
|
|
9779
|
+
windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', identifyPayload, {
|
|
9780
|
+
id: `${tenantID}_${instanceId}`,
|
|
9781
|
+
instanceId
|
|
9782
|
+
});
|
|
9796
9783
|
}
|
|
9797
9784
|
/**
|
|
9798
9785
|
* Triggers an event to be recorded by Gainsight PX.
|