@churchillliving/se-ui-toolkit 6.53.732 → 6.53.733
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.
|
@@ -995,6 +995,7 @@ export class GridService {
|
|
|
995
995
|
}
|
|
996
996
|
setHyperlinks(fetchResponse, columns) {
|
|
997
997
|
let records = [];
|
|
998
|
+
let linkResponses = [];
|
|
998
999
|
let data = fetchResponse && fetchResponse.records.length > 0
|
|
999
1000
|
? this.setDataFields(fetchResponse.records)
|
|
1000
1001
|
: [];
|
|
@@ -1002,6 +1003,7 @@ export class GridService {
|
|
|
1002
1003
|
return this.hyperlinkService
|
|
1003
1004
|
.addHyperlinks(columns)
|
|
1004
1005
|
.then((linksResponse) => {
|
|
1006
|
+
linkResponses.push(linksResponse);
|
|
1005
1007
|
data.forEach((row) => {
|
|
1006
1008
|
newRow = { ...row };
|
|
1007
1009
|
columns.forEach((col) => {
|
|
@@ -1016,16 +1018,15 @@ export class GridService {
|
|
|
1016
1018
|
newRow[field].dialogData = utilities.findKeysAndValue(col.data.data, row);
|
|
1017
1019
|
}
|
|
1018
1020
|
}
|
|
1019
|
-
if (Array.isArray(
|
|
1020
|
-
|
|
1021
|
+
if (Array.isArray(linkResponses) && linkResponses?.length > 0) {
|
|
1022
|
+
linkResponses.forEach((linkResponse) => {
|
|
1021
1023
|
if ((col.type === EGridColumnType.LINK ||
|
|
1022
1024
|
col.type === EGridColumnType.IFRAME ||
|
|
1023
1025
|
col.type === EGridColumnType.LOOKUP_INPUT) &&
|
|
1024
1026
|
col.linkId &&
|
|
1025
|
-
col.params
|
|
1026
|
-
col.linkId === linkResponse.linkId) {
|
|
1027
|
+
col.params) {
|
|
1027
1028
|
const paramKeys = Object.keys(col.params);
|
|
1028
|
-
const link = utilities.setHyperlink(keys, row, linkResponse
|
|
1029
|
+
const link = utilities.setHyperlink(keys, row, linkResponse, paramKeys, col.params);
|
|
1029
1030
|
let field = col.field?.toLowerCase() + '_obj';
|
|
1030
1031
|
newRow[field] = { ...col };
|
|
1031
1032
|
newRow[field].hyperlink = link;
|
|
@@ -1421,4 +1422,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
1421
1422
|
providedIn: 'root',
|
|
1422
1423
|
}]
|
|
1423
1424
|
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.HyperlinkService }, { type: i3.DropdownService }, { type: i4.AlertService }, { type: i5.RequestService }, { type: i6.ActivatedRoute }]; } });
|
|
1424
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsR0FFZixNQUFNLHNCQUFzQixDQUFDO0FBSTlCLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBU2pELE1BQU0sT0FBTyxXQUFXO0lBS3RCLFlBQ1MsUUFBa0IsRUFDakIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLGNBQThCLEVBQzlCLEtBQXFCO1FBTHRCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBVi9CLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUNwQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFRdEMsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsS0FBb0IsRUFBRSxPQUFzQjtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLE9BQXNCO1FBQzNDLE9BQU8sT0FBTzthQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDakIsR0FBRyxDQUFDLElBQUksQ0FDTixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNULENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUNqRTtZQUNDLENBQUMsQ0FBQztnQkFDRSxHQUFHLENBQUM7Z0JBQ0osS0FBSyxFQUFFLEdBQUc7cUJBQ1AsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQ3pEO3FCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztxQkFDbkIsSUFBSSxFQUFFO2FBQ1Y7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUNOO2FBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsbUJBQW1CLENBQ2pCLEtBQW9CLEVBQ3BCLE9BQXNCO1FBRXRCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CLENBQUMsYUFBOEI7UUFDakQsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUVyQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFO1lBQy9DLElBQ0UsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN0QixDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRO29CQUMvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDZixDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7Z0JBQzVELE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYyxFQUNwRDtnQkFDQSxJQUNFLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYztvQkFDcEQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3ZDO29CQUNBLDRCQUE0QjtvQkFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQzt3QkFDeEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ3RELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLO3dCQUNuRCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQzt3QkFDeEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO3FCQUM5QixDQUFDLENBQUM7b0JBRUgsMEJBQTBCO29CQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzt3QkFDL0MsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ3RELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLO3dCQUNuRCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7d0JBQy9DLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtxQkFDOUIsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUU7b0JBQy9ELFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7d0JBQ3hDLFNBQVMsRUFDUCxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFdBQVc7NEJBQy9DLENBQUMsQ0FBQyxJQUFJOzRCQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUzt3QkFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ25ELEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzlCLENBQUMsQ0FBQztpQkFDSjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVyxFQUFFLGNBQXVCLElBQUk7UUFDM0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtZQUN4RCxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ3ZCO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsb0JBQW9CLENBQ2xCLE1BQXFCLEVBQ3JCLGNBQXVCLElBQUk7UUFFM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUsscUJBQXFCLENBQUMsV0FBVztnQkFDcEMsT0FBUSxNQUFNLENBQUMsS0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxLQUFLLHFCQUFxQixDQUFDLFFBQVE7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFhLENBQUMsQ0FBQztZQUNyRCxLQUFLLHFCQUFxQixDQUFDLGNBQWM7Z0JBQ3ZDLElBQUksVUFBVSxHQUFhLE1BQU0sQ0FBQyxLQUFLO29CQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUNwQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUN4QyxJQUFJLFNBQVMsR0FBUyxXQUFXO3dCQUMvQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QztxQkFBTTtvQkFDTCxPQUFPLEVBQUUsQ0FBQztpQkFDWDtZQUNILEtBQUsscUJBQXFCLENBQUMsUUFBUTtnQkFDakMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNyQztnQkFDRSxPQUFPLE1BQU0sQ0FBQyxLQUFlLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQXNCLEVBQUUsR0FBUSxFQUFFLGFBQXNCLEtBQUs7UUFDekUsSUFBSSxPQUFPLEdBQVksSUFBSSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDaEQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixDQUNuRCxJQUFJLEVBQ0osR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDZixDQUFDLENBQ0YsQ0FBQztvQkFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQzlDLElBQ0UsQ0FBQyxVQUFVO3dCQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxRQUFRO3dCQUNuRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNoQixDQUFDLElBQUksQ0FBQyxNQUFNO3dCQUNaLEtBQUssRUFDTDt3QkFDQSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7NEJBQ3ZCLENBQUMsQ0FBQyxJQUFJOzRCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssY0FBYyxDQUFDLENBQUM7d0JBQ3ZELE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsU0FBUzt3QkFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQ3ZEO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUNyRCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsYUFBYSxDQUN0RSxDQUFDO3dCQUNSLE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsU0FBUzt3QkFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQ3ZEO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUNyRCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsYUFBYSxDQUN0RSxDQUFDO3dCQUNSLE1BQU07cUJBQ1A7eUJBQ0ksSUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsVUFBVSxFQUVyRDt3QkFDQSxJQUFJLE9BQU8sR0FBUSxDQUFDLENBQUM7d0JBQ3JCLElBQUksS0FBSyxHQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDekMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO2dDQUNuQixPQUFPLEVBQUUsQ0FBQzs2QkFDWDt5QkFDRjt3QkFDRCxzQkFBc0I7d0JBQ3RCLE9BQU87NEJBQ0wscUJBQXFCOzRCQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUN2QyxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsVUFBVSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsRUFBRSxFQUFFLENBQzVHLENBQUM7d0JBQ1IsTUFBTTtxQkFDUDt5QkFFSSxJQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxPQUFPLEVBQ1A7d0JBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLE9BQU87Z0NBQ0wsZUFBZSxLQUFLLFNBQVM7b0NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDckQ7b0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDWjs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQzNELE9BQU87Z0NBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO29DQUNyRCxDQUFDLENBQUMsSUFBSTtvQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEUsQ0FBQzt5QkFDVDtxQkFDRjt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxPQUFPLEVBQ1A7d0JBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLE9BQU87Z0NBQ0wsZUFBZSxLQUFLLFNBQVM7b0NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDckQ7b0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDWjs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQzNELE9BQU87Z0NBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO29DQUNyRCxDQUFDLENBQUMsSUFBSTtvQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEUsQ0FBQzt5QkFDVDtxQkFDRjt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQ3REO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0NBQ25ELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQ3pELE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsT0FBTzt3QkFDbEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUN0RDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0NBQ3hELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLEVBQUUsQ0FDakQsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEtBQUs7d0JBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFDaEU7d0JBQ0EsT0FBTzs0QkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQ0FDZixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztnQ0FDM0QsQ0FBQyxDQUFDLElBQUk7Z0NBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDekQsTUFBTTtxQkFDUDt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEVBQy9EO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUM7Z0NBQ3pELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLEVBQUUsQ0FDakQsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEtBQUs7d0JBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7NEJBQ2QsRUFBRSxRQUFRLEVBQUU7NkJBQ1gsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLEVBQzNEO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2IsRUFBRSxRQUFRLEVBQUU7cUNBQ1gsS0FBSyxDQUFDLGlEQUFpRCxDQUFDO2dDQUN6RCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBaUIsRUFBRSxZQUFvQjtRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsbUJBQW1CLENBQUMsTUFBVztRQUM3QixJQUFJLE1BQU0sWUFBWSxJQUFJLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7YUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN0QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FDVixFQUFFLGFBQWEsRUFBaUIsRUFDaEMsT0FBc0I7UUFFdEIsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsS0FBSztZQUNMLFNBQVMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDdkUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztTQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEtBQVUsRUFBRSxPQUFzQjtRQUMzQyxNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBTSxFQUFFLEVBQUU7WUFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixLQUF1QixDQUFDLE9BQU8sQ0FDOUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7b0JBQ3pDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTt3QkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQzs0QkFDWCxLQUFLOzRCQUNMLFNBQVM7NEJBQ1QsUUFBUTs0QkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQzs0QkFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQzt5QkFDL0MsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBQzFCLEtBQUssU0FBUzs0QkFDWixPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEtBQUs7Z0NBQ0wsU0FBUyxFQUFFLFFBQVE7Z0NBQ25CLFFBQVEsRUFBRSxLQUFLO2dDQUNmLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0NBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7NkJBQy9DLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEtBQUs7Z0NBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dDQUMxQixRQUFRLEVBQUUsS0FBSztnQ0FDZixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0NBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7NkJBQy9DLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEtBQUs7Z0NBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dDQUMxQixRQUFRLEVBQUUsS0FBSztnQ0FDZixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0NBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7NkJBQy9DLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFO2dDQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO29DQUNYLEtBQUs7b0NBQ0wsU0FBUyxFQUFFLE9BQU87b0NBQ2xCLFFBQVEsRUFBRSxLQUFLO29DQUNmLEtBQUssRUFDSCxLQUFLLENBQUMsS0FBSyxZQUFZLElBQUk7d0NBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt3Q0FDcEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLO29DQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2lDQUMvQyxDQUFDLENBQUM7NkJBQ0o7aUNBQU07Z0NBQ0wsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29DQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dDQUNYLEtBQUs7d0NBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO3dDQUMxQixRQUFRLEVBQUUsS0FBSzt3Q0FDZixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7d0NBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztxQ0FDL0MsQ0FBQyxDQUFDO2dDQUNMLENBQUMsQ0FBQyxDQUFDOzZCQUNKOzRCQUNELE1BQU07d0JBQ1I7NEJBQ0UsSUFBSSxDQUFDO3FCQUNSO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsZ0JBQWdCLENBQUMsS0FBVztRQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFQSxtRUFBbUU7SUFDbkUsV0FBVyxDQUFDLE9BQVk7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUcsR0FBRyxLQUFLLGNBQWMsQ0FBQyxTQUFTLElBQUksR0FBRyxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUM7Z0JBQ3BFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJLElBQ0gsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDZixPQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUNwQztnQkFDQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELCtDQUErQztJQUMvQyxjQUFjLENBQUMsT0FBTztRQUNwQixJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUM7WUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNyQixHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsbUJBQW1CLENBQUMsV0FBa0IsRUFBRSxFQUFFLE9BQXNCO1FBQzlELFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFtQixFQUFFLEVBQUU7WUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ3RCLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO2dCQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3ZCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNCLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25CLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDaEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQ0FDcEQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ2Y7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7b0JBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTt3QkFDNUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztxQkFDbkc7eUJBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUU7d0JBQ3RELEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7cUJBQ25HO3lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO3dCQUN0RCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3FCQUN0RztnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFO2dCQUMvQywrQkFBK0I7Z0JBQy9CLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7d0JBQzFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7cUJBQzdEO3lCQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7d0JBQzlDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztxQkFDekU7eUJBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7d0JBQ2hFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztxQkFDOUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxlQUFlLENBQUMsVUFBYyxFQUFFLEVBQUUsT0FBc0I7UUFDdEQsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLEdBQUcsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDekMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFO2dCQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQ3BELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNmO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQjthQUNGO2lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RFLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDdEIsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7aUJBQ25HO3FCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO29CQUN0RCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2lCQUNuRztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRTtvQkFDdEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDdEc7YUFDRjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQkFDL0MsK0JBQStCO2dCQUMvQixJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDMUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDN0Q7cUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2lCQUN6RTtxQkFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDaEUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUM5QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBc0I7UUFDN0MsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDbEIsSUFBRyxHQUFHLEtBQUssS0FBSyxHQUFHLE9BQU8sSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLGFBQWEsSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLE1BQU0sRUFBQztvQkFDcEYsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2pCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzdDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQUcsRUFBRSxPQUFzQjtRQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUcsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNsQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO2dCQUM1RixJQUFHLENBQUMsUUFBUSxFQUFDO29CQUNYLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsU0FBUyxDQUFDLFVBQXFCO1FBQzdCLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ2hELFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7Z0JBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNaLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7Z0JBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUNiO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUM5QjtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNyQztTQUNGO1FBQ0QsTUFBTSxNQUFNLEdBQWdCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVyxJQUFJLEtBQUs7WUFDNUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxxQkFBcUI7WUFDdkQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztZQUN2QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3ZCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFdBQVcsRUFBQyxVQUFVLENBQUMsV0FBVztZQUNsQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtZQUNqQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO1lBQzNDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtZQUN6QixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDakMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtZQUN6QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtZQUNyQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1lBQzNCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDakMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO1lBQ3JDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYTtZQUN2QyxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7WUFDckMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztZQUN2QixFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDakIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3ZCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztTQUNwQyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxZQUFZLENBQUMsVUFBMEI7UUFDckMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsY0FBYyxDQUNaLGdCQUEyQixFQUMzQixhQUFzQixJQUFJO1FBRTFCLElBQUksVUFBVSxFQUFFO1lBQ2QsZ0JBQWdCLENBQUMsTUFBTSxHQUFHO2dCQUN4QixJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSztnQkFDakMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7YUFDbEQsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxnQkFBZ0IsQ0FDZCxVQUFxQixFQUNyQixhQUFzQixJQUFJO1FBRTFCLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE1BQU0sR0FBRztnQkFDbEIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFlBQVk7Z0JBQ3hDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUM1QyxDQUFDO1NBQ0g7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCLENBQ2YsVUFBcUIsRUFDckIsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO2dCQUNwQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDNUMsQ0FBQztTQUNIO1FBQ0QsVUFBVSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQVc7UUFDdkIsSUFBSSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzNDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFHRCx5Q0FBeUM7SUFDekMsZ0JBQWdCLENBQ2QsVUFBcUIsRUFDckIsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO2dCQUN6QyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUc7b0JBQ25CLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO29CQUNwQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7aUJBQzVDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRiw2QkFBNkI7SUFDN0IsZUFBZSxDQUFDLFVBQXlCLEVBQUUsYUFBc0IsSUFBSTtRQUNwRSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDL0c7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCw2QkFBNkI7SUFDNUIsZUFBZSxDQUFDLFVBQXlCLEVBQUUsYUFBc0IsSUFBSTtRQUNwRSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDeEc7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFQSw2QkFBNkI7SUFDN0IsZUFBZSxDQUFDLFVBQXFCO1FBQ25DLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDMUU7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxlQUFlLENBQUMsVUFBcUI7UUFDbkMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLG1CQUFtQixDQUNqQixNQUFZLEVBQ1osU0FBa0IsRUFDbEIsT0FBZSxFQUNmLFNBQWlCLEVBQUU7UUFFbkIsSUFBSSxDQUFDLGNBQWM7YUFDaEIsR0FBRyxDQUFhLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDakUsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQ3hDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztvQkFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUU7d0JBQ3BELE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FDMUIsQ0FBQztnQkFDRixJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQzdEO2FBQ0Y7WUFDRCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNGLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxTQUE0QixFQUFFLEtBQVMsRUFBRSxNQUFVLEVBQUUsR0FBTztRQUN0RixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSSxJQUFJLENBQUMsR0FBRSxDQUFDLEVBQUMsQ0FBQyxHQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO1lBQzFDLElBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFDO2dCQUNqSixRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBQyxLQUFLLENBQUM7YUFFMUM7aUJBQUk7Z0JBQ0gsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2FBQzNGO1NBQ0Y7UUFHQyxJQUFJLENBQUMsY0FBYzthQUNoQixHQUFHLENBQWEsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO2FBQzlFLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzNCLENBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFBO1lBQ2QsQ0FBQyxDQUFBO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEdBQUc7UUFDM0IsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUM7WUFDaEUsS0FBSyxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdEYsV0FBVyxHQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjthQUFJO1lBQ0gsV0FBVyxHQUFDLEtBQUssQ0FBQTtTQUNsQjtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCLENBQ2YsVUFBcUIsRUFDckIsYUFBc0IsSUFBSSxFQUMxQixZQUErQjtRQUUvQixVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDM0MsVUFBVSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVztZQUM3QyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNaLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7WUFDN0MsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXO1lBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO2dCQUNwQyxJQUFJLEVBQ0YsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSTtvQkFDM0QsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO29CQUNqQixDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJO3dCQUMxQixDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJO3dCQUMxQixDQUFDLENBQUMsRUFBRTtnQkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDNUMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxZQUFZLEVBQUU7WUFDaEIsVUFBVSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFDRCxzQ0FBc0M7SUFDdEMsNEJBQTRCLENBQzFCLFVBQXFCLEVBQ3JCLGFBQXNCLElBQUksRUFDMUIsZUFBa0M7UUFFbEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVztZQUM3QyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNaLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7WUFDN0MsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXO1lBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDOUMsSUFBSSxVQUFVLEVBQUU7WUFDZCxVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsQixJQUFJLEVBQUUscUJBQXFCLENBQUMsV0FBVztnQkFDdkMsSUFBSSxFQUNGLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksVUFBVSxDQUFDLElBQUk7b0JBQzlELENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtvQkFDakIsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSTt3QkFDMUIsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSTt3QkFDMUIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQzVDLENBQUM7U0FDSDtRQUNELElBQUksZUFBZSxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDO1lBQzFDLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDMUMsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7WUFDdEMsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxDQUNSLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQXFCO1FBQ2xDLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNyRCxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FDYixNQUFtQixFQUNuQixTQUFpQixFQUNqQixTQUFpQixFQUNqQixTQUFpQixFQUNqQixPQUFjLEVBQ2QsR0FBNEI7UUFFNUIsT0FBTyxJQUFJLENBQUMsZUFBZTthQUN4QixlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDO2FBQ3pELElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2pCLElBQUksR0FBRyxFQUFFO2dCQUNQLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDbEIsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxFQUFFO29CQUNqRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7aUJBQzFCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsZUFBZSxDQUFDLGdCQUFpQztRQUMvQyxNQUFNLE1BQU0sR0FBUTtZQUNsQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ3pDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTO1lBQ3JDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO1lBQy9CLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQzdCLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO1lBQ3ZDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXO1NBQzFDLENBQUM7UUFFRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLGFBQWEsQ0FBQyxjQUErQjtRQUMzQyxNQUFNLE1BQU0sR0FBZ0I7WUFDMUIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzNCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM3QixJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDdEUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUU7WUFDaEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztZQUMzQixVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7WUFDckMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1lBQ3pCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtTQUM5QixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsYUFBa0IsRUFBRSxxQkFBOEIsS0FBSztRQUNsRixJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7WUFDeEIsSUFBSSxTQUFTLEdBQVUsRUFBRSxDQUFDO1lBQzFCLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7WUFDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3RDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7cUJBQ2hCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUM1QixNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFDOUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzFCLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxFQUFFLFFBQWtDLENBQUM7WUFDdkUsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1RCxnQkFBZ0IsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDMUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ25CLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN0QjtnQkFDRCxJQUFJLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNoRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO3dCQUNoQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFOzRCQUN0QyxJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUU7Z0NBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7NkJBQ25CO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksR0FBRyxFQUFFO29CQUNQLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDMUUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDekIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUNyQyxNQUFNLEVBQ04sTUFBTSxFQUFFLGFBQWEsRUFDckIsR0FBRyxDQUNKLENBQUM7b0JBQ0YsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFOzRCQUMvQixNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt5QkFDekI7d0JBQ0QsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSzs0QkFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLOzRCQUNiLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7d0JBQzdCLE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3RFLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNqQzt5QkFBTTt3QkFDTCxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxLQUFLOzRCQUMvQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7NEJBQ2IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztxQkFDOUI7aUJBQ0Y7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxFQUFFLEtBQUssRUFBTyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLG1CQUFtQixDQUFDLE9BQVksRUFBRSxLQUFhLEVBQUUsUUFBYTtRQUM1RCxJQUNFLE9BQU87WUFDUCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbEIsS0FBSztZQUNMLFFBQVEsQ0FBQyxPQUFPO1lBQ2hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0I7WUFDQSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDeEQsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtvQkFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDeEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUMvRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQ0FDeEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7aUNBQ2hCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2lDQUNoQixXQUFXLEVBQUUsQ0FBQzs0QkFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzlCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFzQjtRQUNyQyxPQUFPLENBQ0wsT0FBTztZQUNQLE9BQU8sQ0FBQyxJQUFJLENBQ1YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLElBQUk7Z0JBQzlCLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FDdkQsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxhQUFrQixFQUFFLE9BQXNCO1FBQ3RELElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksR0FDTixhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQVcsQ0FBQztRQUVoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0I7YUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUN0QixJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN4QixNQUFNLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQzNCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO3dCQUN2QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQzt3QkFDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzt3QkFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVzs0QkFDekMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNwQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzt3QkFDakMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FDbkQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQ2IsR0FBRyxDQUNKLENBQUM7eUJBQ0g7cUJBQ0Y7b0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3RCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFOzRCQUMxQyxJQUNFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSTtnQ0FDaEMsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTTtnQ0FDbkMsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsWUFBWSxDQUFDO2dDQUM1QyxHQUFHLENBQUMsTUFBTTtnQ0FDVixHQUFHLENBQUMsTUFBTTtnQ0FDVixHQUFHLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQ2xDO2dDQUNBLE1BQU0sU0FBUyxHQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNwRCxNQUFNLElBQUksR0FBUSxTQUFTLENBQUMsWUFBWSxDQUN0QyxJQUFJLEVBQ0osR0FBRyxFQUNILFlBQVksQ0FBQyxHQUFHLEVBQ2hCLFNBQVMsRUFDVCxHQUFHLENBQUMsTUFBTSxDQUNYLENBQUM7Z0NBRUYsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7Z0NBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0NBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dDQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXO29DQUN6QyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7b0NBQ3BDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDOzZCQUNsQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztxQkFDSjtnQkFFSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGtCQUFrQixDQUFDLGNBQTJCO1FBQzVDLE1BQU0sTUFBTSxHQUFnQjtZQUMxQixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO1lBQ3ZDLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtZQUN6QixJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7WUFDekIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzNCLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNyQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO1lBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNyQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM3QixRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTztZQUMvQixhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWE7WUFDM0MsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO1lBQ3ZDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDN0IsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM3QixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLGFBQWEsRUFBRSxZQUFZO1NBQzVCLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGtCQUFrQixDQUFDLGNBQTJCO1FBQzVDLGNBQWMsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxpQ0FBaUM7SUFDakMscUJBQXFCLENBQ25CLGNBQTJCLEVBQzNCLFlBQStCO1FBRS9CLGNBQWMsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ3JELElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDbkMsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUMvQixJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxPQUFPLEVBQ1AsS0FBSyxDQUNOLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsb0JBQW9CLENBQUMsY0FBMkI7UUFDOUMsY0FBYyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxvQkFBb0IsQ0FBQyxjQUEyQjtRQUM5QyxjQUFjLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLHFCQUFxQixDQUFDLGNBQTJCO1FBQy9DLGNBQWMsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsbUJBQW1CLENBQUMsY0FBMkI7UUFDN0MsY0FBYyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUE7UUFDeEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxlQUFlLENBQUMsZ0JBQWlDO1FBQy9DLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxZQUFZLEVBQUMsZ0JBQWdCLENBQUMsWUFBWTtZQUMxQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtZQUN2QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN4QyxPQUFPLEVBQUMsZ0JBQWdCLENBQUMsT0FBTztZQUNqQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtZQUN2QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztZQUNqQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsYUFBYTtZQUM3QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtTQUNoQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixvQkFBb0IsQ0FBQyxnQkFBaUM7UUFDcEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLHVCQUF1QixDQUNyQixnQkFBK0IsRUFDL0IsWUFBK0I7UUFFL0IsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ25DLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxFQUNQLEtBQUssQ0FDTixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLDJCQUEyQixDQUFDLGdCQUFpQztRQUMzRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCx5Q0FBeUM7SUFDekMsa0NBQWtDLENBQ2hDLGdCQUErQixFQUMvQixlQUFrQztRQUVsQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDO1FBQzFELElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDMUMsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7WUFDdEMsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxPQUFPLEVBQ1AsS0FBSyxDQUNOLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxlQUFlLENBQ2IsU0FBYyxFQUNkLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQVksRUFDWixRQUFxQixFQUFFO1FBRXZCLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDaEUsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDakIsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdDQUFnQztJQUNoQyx5QkFBeUIsQ0FBQyxnQkFBaUM7UUFDekQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLHNCQUFzQixDQUFDLGdCQUFpQztRQUN0RCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsY0FBYyxDQUFDLGdCQUFpQztRQUM5QyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsY0FBYyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsd0JBQXdCLENBQUMsZ0JBQWlDO1FBQ3hELGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELDZDQUE2QztJQUM3QywyQkFBMkIsQ0FBQyxnQkFBaUM7UUFDM0QsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0Qsc0NBQXNDO0lBQ3RDLHFCQUFxQixDQUFDLGdCQUFpQztRQUNyRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxxQ0FBcUM7SUFDckMscUJBQXFCLENBQUMsZ0JBQWlDO1FBQ3JELGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVBLHVDQUF1QztJQUN2QyxtQkFBbUIsQ0FBQyxnQkFBaUM7UUFDcEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWEsRUFBRSxVQUFrQixFQUFFO1FBQy9DLElBQUksSUFBSSxHQUFRLEVBQUUsQ0FBQztRQUNuQixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEtBQWEsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BDLE1BQU0sTUFBTSxHQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUN4QyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ2xCLEdBQUcsSUFBSTt3QkFDUCxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7cUJBQ3BDLENBQUMsRUFDRixFQUFFLENBQ0gsQ0FBQztvQkFDRixJQUNFLE9BQU87d0JBQ1AsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUNsQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUN2Qzt3QkFDQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUN6QjtvQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNuQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBYztRQUM1QixJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsU0FBUyxDQUNQLE9BQXNCLEVBQ3RCLEtBQWEsRUFDYixNQUFjLEVBQ2QsTUFBVyxFQUNYLEtBQVUsRUFDVixTQUFjLElBQUksRUFDbEIsYUFBc0IsS0FBSztRQUUzQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3ZELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUN2QixJQUFJLE1BQU0sRUFBRTt3QkFDVixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztxQkFDeEI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUN6QixDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDbkUsQ0FBQztnQkFDRixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFO3dCQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFNBQVM7NEJBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO3FCQUNwQztpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOERBQThEO0lBQzlELHNCQUFzQixDQUFDLE9BQVksRUFBRSxVQUFlO1FBQ2xELElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxJQUFJLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25DLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUU7d0JBQzFILElBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQ3JDOzRCQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQy9COzZCQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFOzRCQUM1RSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWEsRUFBRSxPQUFzQjtRQUNqRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUN6QixDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQzNELENBQUM7WUFFRixJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZFLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQzthQUMxQjtTQUNGO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsaUJBQWlCLENBQ2YsT0FBc0IsRUFDdEIsS0FBa0IsRUFDbEIsTUFBd0IsRUFDeEIsT0FBZTtRQUVmLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5RCxJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUM7WUFDL0IsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNELFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUN0QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxLQUFLLENBQ2YsQ0FBQzthQUNIO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFO2dCQUM1QixJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7b0JBQzlDLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUNoQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUM1RCxDQUFDO2lCQUNIO3FCQUFNLElBQUksU0FBUyxFQUFFO29CQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQzVELENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQy9ELENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDN0I7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixtQkFBbUIsQ0FBQyxHQUEyQixFQUFFLEtBQXFCLEVBQUUsVUFBeUIsRUFBRTtRQUNqRyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUMxRixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ25HLElBQUksWUFBWSxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztvQkFDOUcsSUFBSSxDQUFDLFNBQVMsRUFBRTt3QkFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQzt3QkFDbkQsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDck8sSUFBSSxZQUFZLEVBQUU7NEJBQ2hCLFNBQVMsR0FBRyxZQUFZLENBQUM7eUJBQzFCO3FCQUNGO29CQUNELElBQUksU0FBUyxFQUFFO3dCQUNiLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7NEJBQzVDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNyRzs2QkFBTTs0QkFDTCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt5QkFDL0U7cUJBQ0Y7eUJBQU0sSUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTt3QkFDaEcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzt3QkFDNUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQzt3QkFDeEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTs0QkFDNUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUN0Rzs2QkFBTTs0QkFDTCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7eUJBQ2hGO3FCQUNGO29CQUFBLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLGNBQWMsQ0FBQyxTQUFTLEVBQUU7d0JBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztxQkFDbkM7eUJBQ0ksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztxQkFDbkM7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLGdCQUFnQixDQUFDLE9BQU87UUFDdEIsSUFBSSxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRTtvQkFDakIsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7aUlBbm9EVSxXQUFXO3FJQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgSUF1dG9Db21wbGV0ZVNhdmUsIElEcm9wRG93blJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkU29ydCxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBhZGRDb2x1bW4sXG4gIGFkZEZpbHRlckNvbHVtbixcbiAgYWRkR2xvYmFsRmlsdGVyLFxuICBJR3JpZENvbHVtbixcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIElHcmlkUHJvcCxcbiAgSUdyaWRQcm9wRmlsdGVyLFxuICBJR3JpZFJvd1Byb3AsXG4gIElHcmlkUmVwb3J0QnRuLFxuICBFR3JpZFJvd0FjdGlvbixcbiAgSURpYWxvZ0NvbHVtbixcbiAgRUdyaWRGb3JtYXR0ZXIsXG4gIElHcmlkVXBkYXRlLFxufSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi9kcm9wZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcbiAgc29mdENhY2hpbmdGaWx0ZXJzOiBhbnkgPSB7fTtcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XG4gIHJvd1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29sdW1uRm9jdXNlZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZTogUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgYWZ0ZXIgcHJvcGVyIG1hcHBpbmdcbiAgICovXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBSZWNlaXZlcyBmaWx0ZXJzIGFuZCByZXR1cm5zIGFycmF5IGFmdGVyIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAgICogYW5kIGNyZWF0aW5nIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgZm9yIHNhbWUgZmlsdGVyc1xuICAgKi9cbiAgaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzOiBJR3JpZEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgICAgIC5tYXAoKHgsIGksIGFycikgPT5cbiAgICAgICAgYXJyLnNvbWUoXG4gICAgICAgICAgKHksIGlkeCkgPT5cbiAgICAgICAgICAgIHkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgJiYgaSAhPT0gaWR4XG4gICAgICAgIClcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgdmFsdWU6IGFyclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoeikgPT4gei5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLnZhbHVlKVxuICAgICAgICAgICAgICAgIC5qb2luKCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB4XG4gICAgICApXG4gICAgICAuZmlsdGVyKChmLCBpLCBhcnIpID0+IGFyci5maW5kSW5kZXgoKHgpID0+IHgudmFsdWUgPT09IGYudmFsdWUpID09PSBpKTtcbiAgfVxuXG4gIC8vIFByZXBhcmUgYmFzaWMgZ3JpZCBmaWx0ZXJzXG4gIHByZXBhcmVCYXNpY0ZpbHRlcnMoXG4gICAgZXZlbnQ6IExhenlMb2FkRXZlbnQsXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxuICApOiBJR3JpZEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZmlsdGVycyBoYXMgdmFsdWVzIHRoZW4gY29udmVydHMgZ2xvYmFsIGZpbHRlciB2YWx1ZXMgdHlwZSBpbnRvIElHcmlkRmlsdGVyLlxuICAgKi9cbiAgcHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gICAgZ2xvYmFsRmlsdGVycz8uZm9yRWFjaCgoZmlsdGVyOiBJR2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICgodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpKSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUpIHx8XG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnYm9vbGVhbicgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsKSB8fFxuICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCd8JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3Igc3RhcnQgZGF0ZVxuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdndGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3IgZW5kIGRhdGVcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2x0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci50eXBlICE9PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTpcbiAgICAgICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgICAgID8gJ2luJ1xuICAgICAgICAgICAgICAgIDogZmlsdGVyLm1hdGNoTW9kZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnbG9iYWxEYXRhO1xuICB9XG5cbiAgc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyOiBhbnksIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgIGlmIChpc1N0YXJ0RGF0ZSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyLmZyb21GaWVsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIudG9GaWVsZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlci5maWVsZDtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxuICBzZXRHbG9iYWxGaWx0ZXJWYWx1ZShcbiAgICBmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsXG4gICAgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHN0cmluZyB8IG51bWJlciB8IERhdGUgfCBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDpcbiAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgYXMgYW55W10pLmpvaW4oJywnKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlci52YWx1ZSBhcyBEYXRlKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFOlxuICAgICAgICBsZXQgZGF0ZVZhbHVlczogc3RyaW5nW10gPSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICA/IGZpbHRlci52YWx1ZS50b1N0cmluZygpLnNwbGl0KCd8JylcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoZGF0ZVZhbHVlcyAmJiBkYXRlVmFsdWVzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSA9IGlzU3RhcnREYXRlXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMF0pXG4gICAgICAgICAgICA6IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMV0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZGF0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YOlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWYWxpZGl0eShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByb3c6IGFueSwgc2luZ2xlQ2VsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChpdGVtLnZhbGlkYXRpb25zICYmICFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIGl0ZW0uaXN2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS52YWxpZGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG1pbk1heFZhbGlkRGF0ZSA9IHV0aWxpdGllcy5jYWxlbmRhck1pbk1heFZhbHVlKFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSxcbiAgICAgICAgICAgIGlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXRlbS52YWxpZGF0aW9ucyAmJiBpdGVtLmhlYWRlcjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhc2luZ2xlQ2VsbCAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAhaXRlbS5oaWRkZW4gJiZcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGAke3ZhbGlkfSBpcyByZXF1aXJlZGApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTkxFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1pbmltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWExFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1heGltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWE9QVElPTlMgXG5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zOm51bWJlcj0xO1xuICAgICAgICAgICAgdmFyIHZhbHVlPXJvd1tpdGVtLmZpZWxkXTtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdmFsdWUubGVuZ3RoIC0gMTsgeCsrKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVt4XSA9PSAnOycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vYmx1ZTtyZWQ7Z3JlZW4gbWF4PTNcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAvLyByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgb3B0aW9ucyA8PSBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gbWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gb3B0aW9uJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24+MT8ncyc6Jyd9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTklNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ21pbmltdW0nXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWElNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ2dyZWF0ZXInXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1heGltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBBVFRFUk4gJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTlVNRVJJQyAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubWF0Y2goL14oMHxbMS05XVxcZCopJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBIT05FICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzK3hdKyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuREVDSU1BTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFstKCkxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFsxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkVNQUlMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBzZXRFcnJvck1lc3NhZ2UoaXRlbTogSUdyaWRDb2x1bW4sIGVycm9yTWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaXRlbS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgaXRlbS5pc3ZhbGlkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gc2V0IGJhc2ljIGZpbHRlciB2YWx1ZVxuICBzZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlcjogYW55KTogYW55IHtcbiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZmlsdGVyID8gMSA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHNvcnQgYXJyYXlcbiAgICovXG4gIGdldEdyaWRTb3J0cyhcbiAgICB7IG11bHRpU29ydE1ldGEgfTogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkU29ydFtdIHtcbiAgICByZXR1cm4gKG11bHRpU29ydE1ldGEgfHwgW10pLm1hcCgoeyBmaWVsZCwgb3JkZXIgfSwgaSk6IGFueSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBkaXJlY3Rpb246IG9yZGVyID4gMCA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0MgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQyxcbiAgICAgIHByaW9yaXR5OiBpICsgMSxcbiAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBIYW5kbGVzIGRlZmF1bHQgYW5kIGxvb2t1cCBmaWx0ZXJzXG4gICAqL1xuICBtYXBGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBJR3JpZEZpbHRlcltdID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycykuZm9yRWFjaCgoW2ZpZWxkLCB2YWx1ZV06IGFueSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBJR3JpZEZpbHRlcltdKS5mb3JFYWNoKFxuICAgICAgICAgICh7IG1hdGNoTW9kZSwgb3BlcmF0b3IsIHZhbHVlOiBmaWx0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKHZhbHVlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICh2YWx1ZS52YWx1ZSB8fCBbXSkuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgcGFnZSBudW1iZXJcbiAgICovXG4gIGdldEdyaWRQYWdpbmF0aW9uKGV2ZW50OiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiBpc05hTihldmVudC5maXJzdCAvIGV2ZW50LnJvd3MpID8gMSA6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDE7XG4gIH1cblxuICAvLyBnZXQgZm9ybWF0dGVkIGRhdGVcbiAgZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGAke3ZhbHVlfSBaYCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cblxuICAgLy8gY2hhbmdlIHJvdyBrZXkgYW5kIHZhbHVlIHdoZW4gdXNpbmcgc2V0R3JpZFJvd1Byb3BWYWx1ZSBmdW5jdGlvblxuICAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XG4gICAgT2JqZWN0LmtleXMocm93RGF0YSk/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3Qgcm93T2JqID0gcm93Kydfb2JqJztcbiAgICAgIGlmKHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uREVMRVRFQlROIHx8IHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTil7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgcm93RGF0YVtyb3dPYmpdICYmXG4gICAgICAgIHR5cGVvZihyb3dEYXRhW3Jvd09ial0pID09PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd09ial07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBjb252ZXJ0IHJvdyBhY3Rpb25zIG9iamVjdCBpbnRvIHNpbXBsZSB2YWx1ZVxuICBzZXRHcmlkUm93RGF0YShyb3dEYXRhKXtcbiAgICBpZihBcnJheS5pc0FycmF5KHJvd0RhdGEpKXtcbiAgICAgIHJvd0RhdGEuZm9yRWFjaCgocm93KT0+e1xuICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dEYXRhID0gdGhpcy5zZXRSb3dWYWx1ZShyb3dEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgcm93IGxpc3RcbiAgZ2V0QWxsb3dTYXZlUm93bGlzdChyb3dzRGF0YTogYW55W10gPSBbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIHJvd3NEYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJvd3NEYXRhKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnMpO1xuICAgICAgfSlcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSkge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICBpZiAob2JqPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvYmouZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIHJvd1tmaWVsZF07XG4gICAgICAgICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvd3NEYXRhO1xuICB9XG5cbiAgLy8gZ2V0IGFsbG93U2F2ZSB0cnVlIHx8IHVuZGVmaW5lIHJvd1xuICBnZXRBbGxvd1NhdmVSb3cocm93SW5mbzoge30gPSB7fSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGxldCByb3cgPSB7IC4uLnJvd0luZm8gfTtcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zKTtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpXG4gICAgICAgIGtleXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgIGlmICh4LmluY2x1ZGVzKCdfb2JqJykgJiYgdHlwZW9mIHJvd1t4XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByb3dbeF07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzLmZpbmQoKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICcxJyA6ICcwJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5CT09MRUFOKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyByZW1vdmUgb2JqLCBkYXRhIGFuZCBzZWNvbmR0eXBlIGRhdGEgZnJvbSByb3dcbiAgcmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pe1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZihrZXlzPy5sZW5ndGggPiAwKXtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBpZihrZXkgPT09IGZpZWxkICsgJy1kYXRhJyB8fCBrZXkgPT09IGZpZWxkICsgJ19zZWNvbmRUeXBlJyB8fCBrZXkgPT09IGZpZWxkICsgJ19vYmonKXtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJvdyA9IHRoaXMucmVtb3ZlRXh0cmFOZXdSb3dPYmoocm93LCBjb2x1bW5zKVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICByZW1vdmVFeHRyYU5ld1Jvd09iaihyb3csIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pe1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmKGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYga2V5cz8ubGVuZ3RoID4gMCl7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSBjb2x1bW5zLnNvbWUoKGNvbHVtbik9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgaWYoIW1hdGNoS2V5KXtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoY29sdW1uSW5mby50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgICA6ICdsYWJlbCc7XG4gICAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgOiAndmFsdWUnO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uSW5mby50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICBpZiAoIWNvbHVtbkluZm8uZmlsdGVyaW5nICYmICFjb2x1bW5JbmZvLmZpbHRlcikge1xuICAgICAgICBjb2x1bW5JbmZvLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbkluZm8ucGFyYW1zICYmICFjb2x1bW5JbmZvLmRhdGEpIHtcbiAgICAgICAgY29sdW1uSW5mby5kYXRhID0gY29sdW1uSW5mby5wYXJhbXM7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XG4gICAgICBhbGxvd1RvZ2dsZTogY29sdW1uSW5mby5hbGxvd1RvZ2dsZSB8fCBmYWxzZSxcbiAgICAgIGFsbG93U2VhcmNoOiBjb2x1bW5JbmZvLmFsbG93U2VhcmNoLFxuICAgICAgYWxsb3dBdXRvQ29tcGxldGVTYXZlOiBjb2x1bW5JbmZvLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSxcbiAgICAgIHVuaXF1ZUtleTogY29sdW1uSW5mby51bmlxdWVLZXksXG4gICAgICBmaWVsZDogY29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogY29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBzdHlsZTogY29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHR5cGU6IGNvbHVtbkluZm8udHlwZSxcbiAgICAgIGZvcm1hdDogY29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBkYXRhOiBjb2x1bW5JbmZvLmRhdGEsXG4gICAgICBmaWx0ZXJWYWx1ZTpjb2x1bW5JbmZvLmZpbHRlclZhbHVlLFxuICAgICAgZmlsdGVyaW5nOiBjb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGhpZGRlbjogY29sdW1uSW5mby5oaWRkZW4sXG4gICAgICBzb3J0aW5nOiBjb2x1bW5JbmZvLnNvcnRpbmcsXG4gICAgICBmaWx0ZXI6IGNvbHVtbkluZm8uZmlsdGVyLFxuICAgICAgaHlwZXJsaW5rOiBjb2x1bW5JbmZvLmh5cGVybGluayxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIGxpbmtJZDogY29sdW1uSW5mby5saW5rSWQsXG4gICAgICBtaW51dGVzSW50ZXJ2YWw6IGNvbHVtbkluZm8ubWludXRlc0ludGVydmFsLFxuICAgICAgcGFyYW1zOiBjb2x1bW5JbmZvLnBhcmFtcyxcbiAgICAgIHNob3dPcHRpb246IGNvbHVtbkluZm8uc2hvd09wdGlvbixcbiAgICAgIGRpc3BsYXlUZXh0OiBjb2x1bW5JbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdGFyZ2V0OiBjb2x1bW5JbmZvLnRhcmdldCxcbiAgICAgIGRpc2FibGVkOiBjb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBjb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIGFsbG93RWRpdDogY29sdW1uSW5mby5hbGxvd0VkaXQsXG4gICAgICBlZGl0YWJsZTogY29sdW1uSW5mby5lZGl0YWJsZSxcbiAgICAgIGVkaXRMaW5rOiBjb2x1bW5JbmZvLmVkaXRMaW5rLFxuICAgICAgc2F2ZUFzU3RyaW5nOiBjb2x1bW5JbmZvLnNhdmVBc1N0cmluZyxcbiAgICAgIGNvbXBvbmVudDogY29sdW1uSW5mby5jb21wb25lbnQsXG4gICAgICBvbkNsaWNrOiBjb2x1bW5JbmZvLm9uQ2xpY2ssXG4gICAgICBvblJldHVybjogY29sdW1uSW5mby5vblJldHVybixcbiAgICAgIG9uRm9jdXNPdXQ6IGNvbHVtbkluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uQ2hhbmdlOiBjb2x1bW5JbmZvLm9uQ2hhbmdlLFxuICAgICAgYWdncmVnYXRlOiBjb2x1bW5JbmZvLmFnZ3JlZ2F0ZSxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uSW5mby5mb3JtYXR0ZXIsXG4gICAgICBwZXJtaXNzaW9uczogY29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIG9wdGlvbkxhYmVsOiBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGNvbHVtbkluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBkcm9wRG93blByb3A6IGNvbHVtbkluZm8uZHJvcERvd25Qcm9wLFxuICAgICAgb25Ib3ZlcjogY29sdW1uSW5mby5vbkhvdmVyLFxuICAgICAgc2hvd1RpbWU6IGNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogY29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uSW5mby5kaXNwbGF5RmllbGQsXG4gICAgICBpY29uOiBjb2x1bW5JbmZvLmljb24sXG4gICAgICBjb2xvcjogY29sdW1uSW5mby5jb2xvcixcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxuICAgICAgdmFsdWU6IGNvbHVtbkluZm8udmFsdWUsXG4gICAgICB2YWxpZGF0aW9uczogY29sdW1uSW5mby52YWxpZGF0aW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXG4gIGFkZFJlcG9ydEJ0bihjb2x1bW5JbmZvOiBJR3JpZFJlcG9ydEJ0bikge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5SRVBPUlQ7XG4gICAgcmV0dXJuIGNvbHVtbkluZm87XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGlucHV0IGdyaWQgY29sdW1uXG4gIGFkZElucHV0Q29sdW1uKFxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGZpbHRlckNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oZmlsdGVyQ29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIG51bWVyaWMgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGROdW1lcmljQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUM7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBjYWxlbmRhciBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZENhbGVuZGFyQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBjb2x1bW5JbmZvLnR5cGUgPyBjb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICBzZXRDb25maWdEYXRhKGNvbmZpZzogYW55KSB7XG4gICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9IHt9O1xuICAgIGlmIChjb25maWc/LmRhdGEgJiYgT2JqZWN0LmtleXMoY29uZmlnPy5kYXRhKT8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uZmlnRGF0YSA9IGNvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHBhcmFtICYmIE9iamVjdC5rZXlzKHBhcmFtKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2RhdGEnXSA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnRGF0YTtcbiAgfVxuICAgICBcblxuICAvLyBhZGQgc2ltcGxlIGJvb2xlYW4gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRCb29sZWFuQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIChjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiksXG4gICAgICAgIChjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXG4gICAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gLy8gYWRkIExvb2tVcCBjb2x1bW4gZm9yIEdyaWRcbiBhZGRMb29rVXBDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcbiAgfVxuICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUO1xuICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG59XG5cbi8vIGFkZCBkaWFsb2cgY29sdW1uIGZvciBHcmlkXG4gYWRkRGlhbG9nQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcbiAgfVxuICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRElBTE9HO1xuICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gfVxuXG4gIC8vIGFkZCBCdXR0b24gZm9yIGdyaWQgY29sdW1uXG4gIGFkZEJ1dHRvbkNvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFERF9CVVRUT047XG4gICAgaWYgKCFjb2x1bW5JbmZvLmZpZWxkKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpZWxkID0gY29sdW1uSW5mby52YWx1ZSA/IGNvbHVtbkluZm8udmFsdWUgOiBjb2x1bW5JbmZvLmljb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIEF1dG9Db21wbGV0ZSBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQXV0b0NvbXBsZXRlKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIFNlYXJjaCBBdXRvQ29tcGxldGUgRGF0YSBmb3IgR3JpZFxuICBnZXRBdXRvQ29tcGxldGVEYXRhKFxuICAgIGNvbHVtbj86IGFueSxcbiAgICB1bmlxdWVLZXk/OiBzdHJpbmcsXG4gICAgZmlsdGVycz86IGFueVtdLFxuICAgIHNlYXJjaDogc3RyaW5nID0gJydcbiAgKTogYW55IHtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9GZXRjaCcsIHsgdW5pcXVlS2V5OiB1bmlxdWVLZXksIGZpbHRlcnMgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGxldCBleGlzdEluUmVjb3JkID0gcmVzcG9uc2UucmVjb3Jkcz8uc29tZShcbiAgICAgICAgICAgIChyZWNvcmQpID0+XG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4uZGlzcGxheUZpZWxkXSAmJlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLmRpc3BsYXlGaWVsZF0/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgc2VhcmNoPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWV4aXN0SW5SZWNvcmQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMudW5zaGlmdCh7IFtjb2x1bW4uZGlzcGxheUZpZWxkXTogc2VhcmNoIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0pO1xuICB9XG4gYXN5bmMgYWRkQXV0b0NvbXBsZXRlVmFsdWUodW5pcXVlS2V5OiBJQXV0b0NvbXBsZXRlU2F2ZSwgdmFsdWU6YW55LCBjb2x1bW46YW55LCByb3c6YW55KSB7XG4gIGxldCBuZXdWYWx1ZSA9IHt9XG5cbiAgZm9yKHZhciBpID0wO2k8dW5pcXVlS2V5LnZhbHVlcy5sZW5ndGg7IGkrKyl7XG4gICAgaWYodW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKXx8dW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpe1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT12YWx1ZTtcbiAgICBcbiAgICB9ZWxzZXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dGhpcy5nZXRTb2Z0Q29kaW5nVmFsdWUodW5pcXVlS2V5LnZhbHVlc1tpXS52YWx1ZSwgcm93KVxuICAgIH0gXG4gIH1cblxuXG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvU2F2ZScsIHsgdW5pcXVlS2V5OnVuaXF1ZUtleS5uYW1lLCAgdmFsdWVzOiBuZXdWYWx1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAoe2Vycm9yfSk9PntcbiAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSk7XG4gIH1cbiAgZ2V0U29mdENvZGluZ1ZhbHVlKHZhbHVlLCByb3cpe1xuICAgIGxldCByZXR1cm5WYWx1ZTtcbiAgICBpZih2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykmJnZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSl7XG4gICAgICB2YWx1ZT12YWx1ZS5yZXBsYWNlKFwie1wiLFwiXCIpLnJlcGxhY2UoXCJ9XCIsXCJcIik7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuVmFsdWU9cm93W2tleV07XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm5WYWx1ZT12YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGRyb3Bkb3duIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkRHJvcGRvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTjtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOLFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIWRyb3BEb3duUHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IGRyb3BEb3duUHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG4gIC8vIGFkZCBNdWx0aVNlbGVjdERyb3BEb3duIGdyaWQgY29sdW1uXG4gIGFkZE11bHRpU2VsZWN0RHJvcERvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNULFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIW11bHRpU2VsZWN0UHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IG11bHRpU2VsZWN0UHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbzogYWRkQ29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbkluZm8uZmlsdGVyICYmIGNvbHVtbkluZm8uZmlsdGVyLnNob3dGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2V0RHJvcGRvd25EYXRhKFxuICAgIGNvbHVtbjogSUdyaWRDb2x1bW4sXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55W10sXG4gICAgcm93PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApOiBQcm9taXNlPGFueT4gfCBhbnkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19kYXRhJ10gPSByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uLmRhdGEgPSByZXM7XG4gICAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgKGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnKSkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5kYXRhID0gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEZpbHRlckNvbHVtbihmaWx0ZXJDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBhbnkgPSB7XG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZmlsdGVyQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgfSxcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGZpbHRlckNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc3R5bGU6IGZpbHRlckNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBwZXJtaXNzaW9uczogZmlsdGVyQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBkYXRlIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgZmllbGQ6IGRhdGVDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICB0eXBlOiBkYXRlQ29sdW1uSW5mby50eXBlID8gZGF0ZUNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFLFxuICAgICAgZmlsdGVyaW5nOiBkYXRlQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXG4gICAgICBmb3JtYXQ6IGRhdGVDb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIHN0eWxlOiBkYXRlQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBkaXNhYmxlZDogZGF0ZUNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGRhdGVDb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIGNvbXBvbmVudDogZGF0ZUNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgc2hvd1RpbWU6IGRhdGVDb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgZGF0YTogZGF0ZUNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGhpZGRlbjogZGF0ZUNvbHVtbkluZm8uaGlkZGVuLFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIHNldExvb2tVcEZpbHRlcihjb2x1bW46IGFueSwgZGlhbG9nU2VydmljZTogYW55LCBnbG9iYWxGaWx0ZXJMb29rdXA6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xuICAgICAgbGV0IGRhdGFWYWx1ZTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhS2V5OiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGEgPSBjb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVtrZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcbiAgICAgICAgICAgIGRhdGFLZXkudW5zaGlmdChrZXkpO1xuICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50LFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICApO1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGFLZXkuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IHZhbHVlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInKT8uZm9jdXMoKTtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW4/Lmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChnbG9iYWxGaWx0ZXJMb29rdXApIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZVR3byA9IHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBIeXBlcmxpbmsgZmllbGQgYXMgYSBwYXJhbSBWYWx1ZVxuICBzZXRGaWVsZEFzTGlua1BhcmFtKGNvbHVtbnM6IGFueSwgZmllbGQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgZmllbGQgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpLmZvckVhY2goKHJlczogYW55KSA9PiB7XG4gICAgICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqLnBhcmFtcyk7XG4gICAgICAgICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9iai5wYXJhbXNba2V5XSAmJiBvYmoucGFyYW1zW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9iai5wYXJhbXNba2V5XVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgb2JqLnBhcmFtc1trZXldID0gcmVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFzQW55TGlua0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMuc29tZShcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICAgICh4LmxpbmtJZCAmJiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rcyhmZXRjaFJlc3BvbnNlOiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBhbnkge1xuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZGF0YSA9XG4gICAgICBmZXRjaFJlc3BvbnNlICYmIGZldGNoUmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXREYXRhRmllbGRzKGZldGNoUmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgOiBbXTtcbiAgICBsZXQgbmV3Um93OiBhbnk7XG5cbiAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXG4gICAgICAuYWRkSHlwZXJsaW5rcyhjb2x1bW5zKVxuICAgICAgLnRoZW4oKGxpbmtzUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBkYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgaWYgKGNvbC5kYXRhICYmIGNvbC5kYXRhLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpYWxvZ0RhdGEgPSB1dGlsaXRpZXMuZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIGNvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICByb3dcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaW5rc1Jlc3BvbnNlKSAmJiBsaW5rc1Jlc3BvbnNlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtzUmVzcG9uc2UuZm9yRWFjaCgobGlua1Jlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKSAmJlxuICAgICAgICAgICAgICAgICAgY29sLmxpbmtJZCAmJlxuICAgICAgICAgICAgICAgICAgY29sLnBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGNvbC5wYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gdXRpbGl0aWVzLnNldEh5cGVybGluayhcbiAgICAgICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBsaW5rUmVzcG9uc2UudXJsLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5oeXBlcmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkVXBkYXRlID0ge1xuICAgICAgZmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdyaWRVcGRhdGVJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdHlwZTogZ3JpZFVwZGF0ZUluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdyaWRVcGRhdGVJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ3JpZFVwZGF0ZUluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ3JpZFVwZGF0ZUluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdyaWRVcGRhdGVJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBncmlkVXBkYXRlSW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdyaWRVcGRhdGVJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBvbkZvY3VzT3V0OiBncmlkVXBkYXRlSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdyaWRVcGRhdGVJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBncmlkVXBkYXRlSW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdyaWRVcGRhdGVJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBncmlkVXBkYXRlSW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ3JpZFVwZGF0ZUluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ3JpZFVwZGF0ZUluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdyaWRVcGRhdGVJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ3JpZFVwZGF0ZUluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ3JpZFVwZGF0ZUluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdyaWRVcGRhdGVJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ3JpZFVwZGF0ZUluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBncmlkVXBkYXRlSW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ3JpZFVwZGF0ZUluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdyaWRVcGRhdGVJbmZvLmZvcm1hdCxcbiAgICAgIGludGVyZmFjZVR5cGU6ICdidWxrVXBkYXRlJ1xuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBpbnB1dCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlSW5wdXQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVEcm9wZG93bihcbiAgICBncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ3JpZFVwZGF0ZUluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQm9vbGVhbihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgbnVtZXJpYyBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTnVtZXJpYyhncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGNhbGVuZGFyIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVDYWxlbmRhcihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvL2FkZCBncmlkIHVwZGF0ZSBsb29rdXAgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUxvb2t1cChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpe1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUXG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKVxuICB9XG4gIFxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2x1bW46IGFkZEdsb2JhbEZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdsb2JhbEZpbHRlckluZm8uZGlzcGxheVRleHQsXG4gICAgICBkaXNwbGF5U3R5bGU6Z2xvYmFsRmlsdGVySW5mby5kaXNwbGF5U3R5bGUsXG4gICAgICB2YWxpZGF0aW9uczogZ2xvYmFsRmlsdGVySW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHR5cGU6IGdsb2JhbEZpbHRlckluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdsb2JhbEZpbHRlckluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdsb2JhbEZpbHRlckluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdsb2JhbEZpbHRlckluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdsb2JhbEZpbHRlckluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iYWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgIG9uQ2xpY2s6Z2xvYmFsRmlsdGVySW5mby5vbkNsaWNrLFxuICAgICAgb25Gb2N1c091dDogZ2xvYmFsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdsb2JhbEZpbHRlckluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JhbEZpbHRlckluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBnbG9iYWxGaWx0ZXJJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdsb2JhbEZpbHRlckluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JhbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBnbG9iYWxGaWx0ZXJJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdsb2JhbEZpbHRlckluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdsb2JhbEZpbHRlckluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ2xvYmFsRmlsdGVySW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ2xvYmFsRmlsdGVySW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ2xvYmFsRmlsdGVySW5mby5mb3JtYXQsXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcbiAgYWRkR2xvYmFsSW5wdXRGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbERyb3Bkb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuICAvL2FkZCBnbG9iYWwgcmFkaW8gYnV0dG9uIGZpbHRlclxuICBhZGRHbG9iYWxTZWxlY3RCdXR0b25GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNFTEVDVEJVVFRPTjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIGdsb2JhbCBNdWx0aVNlbGVjdCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsTXVsdGlTZWxlY3REcm9wRG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IG11bHRpU2VsZWN0UHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGEoXG4gICAgZmllbGRJbmZvOiBhbnksXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55LFxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdXG4gICkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzLCBzb3J0cylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBmaWVsZEluZm8uZGF0YSA9IHJlcztcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXG4gIGFkZEdsb2JhbEZpbHRlclNwYWNlRmllbGQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNQQUNFUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGJvb2xlYW4gZmlsdGVyXG4gIGFkZEdsb2JhbEJvb2xlYW5GaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsRGF0ZVJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIE51bWVyaWMgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY0lucHV0KGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIExvb2tVcCBGaWVsZCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxMb29rdXBGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAgLy9hZGQgY2FsZW5kYXIgZmlsdGVyIGZvciBnbG9iYWwgZmlsdGVyXG4gICBhZGRHbG9iYWxEYXRlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcil7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlPUdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBsZXQgZGF0YTogYW55ID0gW107XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh4ID8/IHt9KT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gT2JqZWN0LmtleXMoeCk/LnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFLZXkgJiZcbiAgICAgICAgICAgIGRhdGFLZXkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0Q29sdW1uRmllbGRzKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLm1hcCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXG4gIHNldExpbmtJZChcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgbGlua0lkOiBzdHJpbmcsXG4gICAgcmVjb3JkOiBhbnksXG4gICAgdXNlcnM6IGFueSxcbiAgICBwYXJhbXM6IGFueSA9IG51bGwsXG4gICAgY2hhbmdlTGluazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb2x1bW4ubGlua0lkID0gbGlua0lkO1xuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEh5cGVybGlua3MoeyByZWNvcmRzOiBbcmVjb3JkXSB9LCBjb2x1bW5zKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZUxpbmspIHtcbiAgICAgICAgZGVsZXRlIHJlc1swXVtmaWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgbGV0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChpOiBhbnkpID0+IGlbZmllbGQudG9Mb3dlckNhc2UoKV0gPT09IHJlY29yZFtmaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID1cbiAgICAgICAgICAgICAgcmVzWzBdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZ3JpZCBkYXRhIGFuZCBzZXQgc2VsZWN0ZWQgcm93IGJhc2VkIG9uIHNlbGVjdGlvbiB2YWx1ZVxuICBzZXREYXRhV2l0aFNlbGVjdGVkUm93KHJlY29yZHM6IGFueSwgY29uZmlnRGF0YTogYW55KSB7XG4gICAgaWYgKChjb25maWdEYXRhPy52YWx1ZVByb3AgfHwgY29uZmlnRGF0YT8ubGFiZWxQcm9wKSAmJiBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlY29yZCk/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnRGF0YS5sYWJlbFByb3AgPyBjb25maWdEYXRhLmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKSA6IGNvbmZpZ0RhdGEudmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZFtrZXldPy50b1N0cmluZygpID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uICE9IG51bGwgJiYgY29sdW1uLnRhYmxlQWxpYXMgJiYgY29sdW1uLnRhYmxlQWxpYXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc2V0R3JpZFByb3BWYWx1ZXMoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXG4gICAgZmlsdGVyPzogSUdyaWRQcm9wRmlsdGVyLFxuICAgIHJlY29yZHM/OiBhbnlbXVxuICApIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGlzTWF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmllbGQgJiYgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHgpW2ZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpXSA9PT1cbiAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcbiAgICAgICAgbGV0IGNvbDogYW55ID0ge307XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmICFpc01hdGNoZWQgJiYgIWZpbHRlcj8uZmllbGQpIHtcbiAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2hlZCkge1xuICAgICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXI/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sICYmIGNvbC5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ3JpZCByb3cgcHJvcFZhbHVlc1xuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgcHJvcHM6IElHcmlkUm93UHJvcFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW10pIHtcbiAgICBwcm9wcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgaWYgKHByb3AucHJvcE5hbWUgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gJycpKSB7XG4gICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZU9iaiA9IGZpZWxkTmFtZT8uaW5jbHVkZXMoJ19vYmonKSA/IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA6IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICBmaWVsZE5hbWVPYmogPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXk6IGFueSkgPT4gKGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcm93T2JqKSAmJiAocm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSk7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lT2JqKSB7XG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IC4uLnJvd1tmaWVsZE5hbWVPYmpdLCB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGQgPSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkT2JqID0gcHJvcEZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IC4uLnJvd1twcm9wRmllbGRPYmpdLCB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSByb3dBY3Rpb25zIGZyb20gdGhlIHJlY29yZHNcbiAgcmVtb3ZlUm93QWN0aW9ucyhyZWNvcmRzKSB7XG4gICAgaWYgKHJlY29yZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cucm93QWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1sncm93QWN0aW9uJ107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxufSJdfQ==
|
|
1425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsR0FFZixNQUFNLHNCQUFzQixDQUFDO0FBSTlCLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBU2pELE1BQU0sT0FBTyxXQUFXO0lBS3RCLFlBQ1MsUUFBa0IsRUFDakIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLGNBQThCLEVBQzlCLEtBQXFCO1FBTHRCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBVi9CLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUNwQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFRdEMsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsS0FBb0IsRUFBRSxPQUFzQjtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxD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QUFFLE1BQU0sS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO3dCQUNoRCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7cUJBQ25DO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPO1FBQ3RCLElBQUksT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN0QixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7b0JBQ2pCLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO2lJQXBvRFUsV0FBVztxSUFBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IElBdXRvQ29tcGxldGVTYXZlLCBJRHJvcERvd25SZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZFNvcnQsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgYWRkQ29sdW1uLFxuICBhZGRGaWx0ZXJDb2x1bW4sXG4gIGFkZEdsb2JhbEZpbHRlcixcbiAgSUdyaWRDb2x1bW4sXG4gIEVHcmlkVmFsaWRhdG9yLFxuICBJR3JpZFByb3AsXG4gIElHcmlkUHJvcEZpbHRlcixcbiAgSUdyaWRSb3dQcm9wLFxuICBJR3JpZFJlcG9ydEJ0bixcbiAgRUdyaWRSb3dBY3Rpb24sXG4gIElEaWFsb2dDb2x1bW4sXG4gIEVHcmlkRm9ybWF0dGVyLFxuICBJR3JpZFVwZGF0ZSxcbn0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vZHJvcGRvd24uc2VydmljZSc7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi9oeXBlcmxpbmsuc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSB7XG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XG4gIGFwcGx5RmlsdGVyRXZlbnQ6IGJvb2xlYW4gPSB0cnVlO1xuICByb3dVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIGFmdGVyIHByb3BlciBtYXBwaW5nXG4gICAqL1xuICBnZXRHcmlkRmlsdGVycyhldmVudDogTGF6eUxvYWRFdmVudCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogUmVjZWl2ZXMgZmlsdGVycyBhbmQgcmV0dXJucyBhcnJheSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGVzXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcbiAgICovXG4gIGhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVyczogSUdyaWRGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAubWFwKCh4LCBpLCBhcnIpID0+XG4gICAgICAgIGFyci5zb21lKFxuICAgICAgICAgICh5LCBpZHgpID0+XG4gICAgICAgICAgICB5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGkgIT09IGlkeFxuICAgICAgICApXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgIHZhbHVlOiBhcnJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHopID0+IHouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS52YWx1ZSlcbiAgICAgICAgICAgICAgICAuam9pbigpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogeFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoZiwgaSwgYXJyKSA9PiBhcnIuZmluZEluZGV4KCh4KSA9PiB4LnZhbHVlID09PSBmLnZhbHVlKSA9PT0gaSk7XG4gIH1cblxuICAvLyBQcmVwYXJlIGJhc2ljIGdyaWQgZmlsdGVyc1xuICBwcmVwYXJlQmFzaWNGaWx0ZXJzKFxuICAgIGV2ZW50OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZpbHRlcnMgaGFzIHZhbHVlcyB0aGVuIGNvbnZlcnRzIGdsb2JhbCBmaWx0ZXIgdmFsdWVzIHR5cGUgaW50byBJR3JpZEZpbHRlci5cbiAgICovXG4gIHByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGdsb2JhbERhdGE6IElHcmlkRmlsdGVyW10gPSBbXTtcblxuICAgIGdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcjogSUdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIGZpbHRlci52YWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnfCcpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIHN0YXJ0IGRhdGVcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyLm1hdGNoTW9kZSA/IGZpbHRlci5tYXRjaE1vZGUgOiAnZ3RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIGVuZCBkYXRlXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciwgZmFsc2UpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdsdGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudHlwZSAhPT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSB7XG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciksXG4gICAgICAgICAgICBtYXRjaE1vZGU6XG4gICAgICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1RcbiAgICAgICAgICAgICAgICA/ICdpbidcbiAgICAgICAgICAgICAgICA6IGZpbHRlci5tYXRjaE1vZGUsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZ2xvYmFsRGF0YTtcbiAgfVxuXG4gIHNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlcjogYW55LCBpc1N0YXJ0RGF0ZTogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcge1xuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSB7XG4gICAgICBpZiAoaXNTdGFydERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci5mcm9tRmllbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmlsdGVyLnRvRmllbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXIuZmllbGQ7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGdsb2JhbCBmaWx0ZXIgdmFsdWVcbiAgc2V0R2xvYmFsRmlsdGVyVmFsdWUoXG4gICAgZmlsdGVyOiBJR2xvYmFsRmlsdGVyLFxuICAgIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZVxuICApOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgYm9vbGVhbiB7XG4gICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q6XG4gICAgICAgIHJldHVybiAoZmlsdGVyLnZhbHVlIGFzIGFueVtdKS5qb2luKCcsJyk7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShmaWx0ZXIudmFsdWUgYXMgRGF0ZSk7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRTpcbiAgICAgICAgbGV0IGRhdGVWYWx1ZXM6IHN0cmluZ1tdID0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgPyBmaWx0ZXIudmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnfCcpXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgaWYgKGRhdGVWYWx1ZXMgJiYgZGF0ZVZhbHVlcy5sZW5ndGggPT0gMikge1xuICAgICAgICAgIGxldCBkYXRlVmFsdWU6IERhdGUgPSBpc1N0YXJ0RGF0ZVxuICAgICAgICAgICAgPyBuZXcgRGF0ZShkYXRlVmFsdWVzWzBdKVxuICAgICAgICAgICAgOiBuZXcgRGF0ZShkYXRlVmFsdWVzWzFdKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGRhdGVWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDpcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrVmFsaWRpdHkoY29sdW1uczogSUdyaWRDb2x1bW5bXSwgcm93OiBhbnksIHNpbmdsZUNlbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb2x1bW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBpZiAoaXRlbS52YWxpZGF0aW9ucyAmJiAhaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBpdGVtLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBpdGVtLmlzdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtaW5NYXhWYWxpZERhdGUgPSB1dGlsaXRpZXMuY2FsZW5kYXJNaW5NYXhWYWx1ZShcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0sXG4gICAgICAgICAgICBpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW0udmFsaWRhdGlvbnMgJiYgaXRlbS5oZWFkZXI7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXNpbmdsZUNlbGwgJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5SRVFVSVJFRCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgIWl0ZW0uaGlkZGVuICYmXG4gICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgJHt2YWxpZH0gaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NSU5MRU5HVEggJiZcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNaW5pbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NQVhMRU5HVEggJiZcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gXG4gICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NQVhPUFRJT05TIFxuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9uczpudW1iZXI9MTtcbiAgICAgICAgICAgIHZhciB2YWx1ZT1yb3dbaXRlbS5maWVsZF07XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHZhbHVlLmxlbmd0aCAtIDE7IHgrKykge1xuICAgICAgICAgICAgICBpZiAodmFsdWVbeF0gPT0gJzsnKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucysrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2JsdWU7cmVkO2dyZWVuIG1heD0zXG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgLy8gcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMgPD0gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IG1heGltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IG9wdGlvbiR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uPjE/J3MnOicnfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NSU5JTVVNICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICBtaW5NYXhWYWxpZERhdGUgPT09ICdtaW5pbXVtJ1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGBNaW5pbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbaXRlbS5maWVsZF0gPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NQVhJTVVNICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICBtaW5NYXhWYWxpZERhdGUgPT09ICdncmVhdGVyJ1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGBNYXhpbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbaXRlbS5maWVsZF0gPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1heGltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5QQVRURVJOICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk5VTUVSSUMgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0udG9TdHJpbmcoKS5tYXRjaCgvXigwfFstKCkxLTldXFxkKikkLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdLm1hdGNoKC9eKDB8WzEtOV1cXGQqKSQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5QSE9ORSAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXig/PS4qWzAtOV0pWy0oKTAtOVxccyt4XSskLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzXSskLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkRFQ0lNQUwgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopKFxcLlxcZCspPyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oMHxbMS05XVxcZCopKFxcLlxcZCspPyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5FTUFJTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLm1hdGNoKC9eW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Miw2fSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgc2V0RXJyb3JNZXNzYWdlKGl0ZW06IElHcmlkQ29sdW1uLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgIGl0ZW0uaXN2YWxpZCA9IGZhbHNlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHNldCBiYXNpYyBmaWx0ZXIgdmFsdWVcbiAgc2V0QmFzaWNGaWx0ZXJWYWx1ZShmaWx0ZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGZpbHRlciA/IDEgOiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1cbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBzb3J0IGFycmF5XG4gICAqL1xuICBnZXRHcmlkU29ydHMoXG4gICAgeyBtdWx0aVNvcnRNZXRhIH06IExhenlMb2FkRXZlbnQsXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxuICApOiBJR3JpZFNvcnRbXSB7XG4gICAgcmV0dXJuIChtdWx0aVNvcnRNZXRhIHx8IFtdKS5tYXAoKHsgZmllbGQsIG9yZGVyIH0sIGkpOiBhbnkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBvcmRlciA+IDAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0MsXG4gICAgICBwcmlvcml0eTogaSArIDEsXG4gICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogSGFuZGxlcyBkZWZhdWx0IGFuZCBsb29rdXAgZmlsdGVyc1xuICAgKi9cbiAgbWFwRmlsdGVycyhldmVudDogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVyczogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50LmZpbHRlcnMpLmZvckVhY2goKFtmaWVsZCwgdmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAodmFsdWUgYXMgSUdyaWRGaWx0ZXJbXSkuZm9yRWFjaChcbiAgICAgICAgICAoeyBtYXRjaE1vZGUsIG9wZXJhdG9yLCB2YWx1ZTogZmlsdGVyIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0QmFzaWNGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWxzJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFsJyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAodmFsdWUudmFsdWUgfHwgW10pLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBnZXRHcmlkUGFnaW5hdGlvbihldmVudDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXNOYU4oZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzKSA/IDEgOiBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgKyAxO1xuICB9XG5cbiAgLy8gZ2V0IGZvcm1hdHRlZCBkYXRlXG4gIGdldEZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZShgJHt2YWx1ZX0gWmApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuICB9XG5cbiAgIC8vIGNoYW5nZSByb3cga2V5IGFuZCB2YWx1ZSB3aGVuIHVzaW5nIHNldEdyaWRSb3dQcm9wVmFsdWUgZnVuY3Rpb25cbiAgIHNldFJvd1ZhbHVlKHJvd0RhdGE6IGFueSkge1xuICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHJvd09iaiA9IHJvdysnX29iaic7XG4gICAgICBpZihyb3cgPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTiB8fCByb3cgPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pe1xuICAgICAgICBkZWxldGUgcm93RGF0YVtyb3ddO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIHJvd0RhdGFbcm93T2JqXSAmJlxuICAgICAgICB0eXBlb2Yocm93RGF0YVtyb3dPYmpdKSA9PT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgcm93RGF0YVtyb3dPYmpdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByb3dEYXRhO1xuICB9XG5cbiAgLy8gY29udmVydCByb3cgYWN0aW9ucyBvYmplY3QgaW50byBzaW1wbGUgdmFsdWVcbiAgc2V0R3JpZFJvd0RhdGEocm93RGF0YSl7XG4gICAgaWYoQXJyYXkuaXNBcnJheShyb3dEYXRhKSl7XG4gICAgICByb3dEYXRhLmZvckVhY2goKHJvdyk9PntcbiAgICAgICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93RGF0YSA9IHRoaXMuc2V0Um93VmFsdWUocm93RGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dEYXRhO1xuICB9XG5cbiAgLy8gZ2V0IGFsbG93U2F2ZSB0cnVlIHJvdyBsaXN0XG4gIGdldEFsbG93U2F2ZVJvd2xpc3Qocm93c0RhdGE6IGFueVtdID0gW10sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICByb3dzRGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyb3dzRGF0YSk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IElHcmlkQ29sdW1uKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KT0+e1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zKTtcbiAgICAgIH0pXG4gICAgICBpZiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgaWYgKG9iaj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb2JqLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dbeF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSByb3dbZmllbGRdO1xuICAgICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2ZpZWxkXVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuTlVNRVJJQykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICcxJyA6ICcwJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSByb3dbZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSB8fCB1bmRlZmluZSByb3dcbiAgZ2V0QWxsb3dTYXZlUm93KHJvd0luZm86IHt9ID0ge30sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICBsZXQgcm93ID0geyAuLi5yb3dJbmZvIH07XG4gICAgcm93ID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1ucyk7XG4gICAgICBpZiAoY29sdW1uLmFsbG93U2F2ZSA9PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KVxuICAgICAgICBrZXlzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkZWxldGUgcm93W3hdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cy5maW5kKCh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gcm93W2ZpZWxkXVxuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuTlVNRVJJQykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnMScgOiAnMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSByb3dbZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gcmVtb3ZlIG9iaiwgZGF0YSBhbmQgc2Vjb25kdHlwZSBkYXRhIGZyb20gcm93XG4gIHJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKXtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgaWYoa2V5cz8ubGVuZ3RoID4gMCl7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgaWYoa2V5ID09PSBmaWVsZCArICctZGF0YScgfHwga2V5ID09PSBmaWVsZCArICdfc2Vjb25kVHlwZScgfHwga2V5ID09PSBmaWVsZCArICdfb2JqJyl7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByb3cgPSB0aGlzLnJlbW92ZUV4dHJhTmV3Um93T2JqKHJvdywgY29sdW1ucylcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgcmVtb3ZlRXh0cmFOZXdSb3dPYmoocm93LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKXtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZihjb2x1bW5zPy5sZW5ndGggPiAwICYmIGtleXM/Lmxlbmd0aCA+IDApe1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gY29sdW1ucy5zb21lKChjb2x1bW4pPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIGlmKCFtYXRjaEtleSl7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZENvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgIDogJ3ZhbHVlJztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgaWYgKCFjb2x1bW5JbmZvLmZpbHRlcmluZyAmJiAhY29sdW1uSW5mby5maWx0ZXIpIHtcbiAgICAgICAgY29sdW1uSW5mby5maWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW5JbmZvLnBhcmFtcyAmJiAhY29sdW1uSW5mby5kYXRhKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZGF0YSA9IGNvbHVtbkluZm8ucGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgYWxsb3dUb2dnbGU6IGNvbHVtbkluZm8uYWxsb3dUb2dnbGUgfHwgZmFsc2UsXG4gICAgICBhbGxvd1NlYXJjaDogY29sdW1uSW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGFsbG93QXV0b0NvbXBsZXRlU2F2ZTogY29sdW1uSW5mby5hbGxvd0F1dG9Db21wbGV0ZVNhdmUsXG4gICAgICB1bmlxdWVLZXk6IGNvbHVtbkluZm8udW5pcXVlS2V5LFxuICAgICAgZmllbGQ6IGNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgc3R5bGU6IGNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0eXBlOiBjb2x1bW5JbmZvLnR5cGUsXG4gICAgICBmb3JtYXQ6IGNvbHVtbkluZm8uZm9ybWF0LFxuICAgICAgZGF0YTogY29sdW1uSW5mby5kYXRhLFxuICAgICAgZmlsdGVyVmFsdWU6Y29sdW1uSW5mby5maWx0ZXJWYWx1ZSxcbiAgICAgIGZpbHRlcmluZzogY29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc29ydGluZzogY29sdW1uSW5mby5zb3J0aW5nLFxuICAgICAgZmlsdGVyOiBjb2x1bW5JbmZvLmZpbHRlcixcbiAgICAgIGh5cGVybGluazogY29sdW1uSW5mby5oeXBlcmxpbmssXG4gICAgICB0YWJsZUFsaWFzOiBjb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBsaW5rSWQ6IGNvbHVtbkluZm8ubGlua0lkLFxuICAgICAgbWludXRlc0ludGVydmFsOiBjb2x1bW5JbmZvLm1pbnV0ZXNJbnRlcnZhbCxcbiAgICAgIHBhcmFtczogY29sdW1uSW5mby5wYXJhbXMsXG4gICAgICBzaG93T3B0aW9uOiBjb2x1bW5JbmZvLnNob3dPcHRpb24sXG4gICAgICBkaXNwbGF5VGV4dDogY29sdW1uSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHRhcmdldDogY29sdW1uSW5mby50YXJnZXQsXG4gICAgICBkaXNhYmxlZDogY29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogY29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBhbGxvd0VkaXQ6IGNvbHVtbkluZm8uYWxsb3dFZGl0LFxuICAgICAgZWRpdGFibGU6IGNvbHVtbkluZm8uZWRpdGFibGUsXG4gICAgICBlZGl0TGluazogY29sdW1uSW5mby5lZGl0TGluayxcbiAgICAgIHNhdmVBc1N0cmluZzogY29sdW1uSW5mby5zYXZlQXNTdHJpbmcsXG4gICAgICBjb21wb25lbnQ6IGNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgb25DbGljazogY29sdW1uSW5mby5vbkNsaWNrLFxuICAgICAgb25SZXR1cm46IGNvbHVtbkluZm8ub25SZXR1cm4sXG4gICAgICBvbkZvY3VzT3V0OiBjb2x1bW5JbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvbkNoYW5nZTogY29sdW1uSW5mby5vbkNoYW5nZSxcbiAgICAgIGFnZ3JlZ2F0ZTogY29sdW1uSW5mby5hZ2dyZWdhdGUsXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbkluZm8uZm9ybWF0dGVyLFxuICAgICAgcGVybWlzc2lvbnM6IGNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBvcHRpb25MYWJlbDogY29sdW1uSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBjb2x1bW5JbmZvLm9wdGlvblZhbHVlLFxuICAgICAgZHJvcERvd25Qcm9wOiBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCxcbiAgICAgIG9uSG92ZXI6IGNvbHVtbkluZm8ub25Ib3ZlcixcbiAgICAgIHNob3dUaW1lOiBjb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBsb29rdXBDb250cm9sOiBjb2x1bW5JbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbkluZm8uZGlzcGxheUZpZWxkLFxuICAgICAgaWNvbjogY29sdW1uSW5mby5pY29uLFxuICAgICAgY29sb3I6IGNvbHVtbkluZm8uY29sb3IsXG4gICAgICBpZDogY29sdW1uSW5mby5pZCxcbiAgICAgIHZhbHVlOiBjb2x1bW5JbmZvLnZhbHVlLFxuICAgICAgdmFsaWRhdGlvbnM6IGNvbHVtbkluZm8udmFsaWRhdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBBZGRpbmcgUmVwb3J0IEJ1dHRvbiBGdW5jdGlvbiBmb3IgR3JpZFxuICBhZGRSZXBvcnRCdG4oY29sdW1uSW5mbzogSUdyaWRSZXBvcnRCdG4pIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuUkVQT1JUO1xuICAgIHJldHVybiBjb2x1bW5JbmZvO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBpbnB1dCBncmlkIGNvbHVtblxuICBhZGRJbnB1dENvbHVtbihcbiAgICBmaWx0ZXJDb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGZpbHRlckNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkTnVtZXJpY0NvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgY2FsZW5kYXIgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDYWxlbmRhckNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gY29sdW1uSW5mby50eXBlID8gY29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgc2V0Q29uZmlnRGF0YShjb25maWc6IGFueSkge1xuICAgIGxldCBjb25maWdEYXRhOiBhbnkgPSB7fTtcbiAgICBpZiAoY29uZmlnPy5kYXRhICYmIE9iamVjdC5rZXlzKGNvbmZpZz8uZGF0YSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSBjb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChwYXJhbSAmJiBPYmplY3Qua2V5cyhwYXJhbSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25maWdEYXRhWydkYXRhJ10gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ0RhdGE7XG4gIH1cbiAgICAgXG5cbiAgLy8gYWRkIHNpbXBsZSBib29sZWFuIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQm9vbGVhbkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICAoY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pLFxuICAgICAgICAoY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YLFxuICAgICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuIC8vIGFkZCBMb29rVXAgY29sdW1uIGZvciBHcmlkXG4gYWRkTG9va1VwQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVDtcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xufVxuXG4vLyBhZGQgZGlhbG9nIGNvbHVtbiBmb3IgR3JpZFxuIGFkZERpYWxvZ0NvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRztcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuIH1cblxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxuICBhZGRCdXR0b25Db2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BRERfQlVUVE9OO1xuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xuICAgICAgY29sdW1uSW5mby5maWVsZCA9IGNvbHVtbkluZm8udmFsdWUgPyBjb2x1bW5JbmZvLnZhbHVlIDogY29sdW1uSW5mby5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBBdXRvQ29tcGxldGUgZm9yIGdyaWQgY29sdW1uXG4gIGFkZEF1dG9Db21wbGV0ZShjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBTZWFyY2ggQXV0b0NvbXBsZXRlIERhdGEgZm9yIEdyaWRcbiAgZ2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgICBjb2x1bW4/OiBhbnksXG4gICAgdW5pcXVlS2V5Pzogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBhbnlbXSxcbiAgICBzZWFyY2g6IHN0cmluZyA9ICcnXG4gICk6IGFueSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7IHVuaXF1ZUtleTogdW5pcXVlS2V5LCBmaWx0ZXJzIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBsZXQgZXhpc3RJblJlY29yZCA9IHJlc3BvbnNlLnJlY29yZHM/LnNvbWUoXG4gICAgICAgICAgICAocmVjb3JkKSA9PlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLmRpc3BsYXlGaWVsZF0gJiZcbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5kaXNwbGF5RmllbGRdPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIHNlYXJjaD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFleGlzdEluUmVjb3JkKSB7XG4gICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzLnVuc2hpZnQoeyBbY29sdW1uLmRpc3BsYXlGaWVsZF06IHNlYXJjaCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uLmRhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICB9KTtcbiAgfVxuIGFzeW5jIGFkZEF1dG9Db21wbGV0ZVZhbHVlKHVuaXF1ZUtleTogSUF1dG9Db21wbGV0ZVNhdmUsIHZhbHVlOmFueSwgY29sdW1uOmFueSwgcm93OmFueSkge1xuICBsZXQgbmV3VmFsdWUgPSB7fVxuXG4gIGZvcih2YXIgaSA9MDtpPHVuaXF1ZUtleS52YWx1ZXMubGVuZ3RoOyBpKyspe1xuICAgIGlmKHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCl8fHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dmFsdWU7XG4gICAgXG4gICAgfWVsc2V7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXRoaXMuZ2V0U29mdENvZGluZ1ZhbHVlKHVuaXF1ZUtleS52YWx1ZXNbaV0udmFsdWUsIHJvdylcbiAgICB9IFxuICB9XG5cblxuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL1NhdmUnLCB7IHVuaXF1ZUtleTp1bmlxdWVLZXkubmFtZSwgIHZhbHVlczogbmV3VmFsdWUgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgKHtlcnJvcn0pPT57XG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIH0pO1xuICB9XG4gIGdldFNvZnRDb2RpbmdWYWx1ZSh2YWx1ZSwgcm93KXtcbiAgICBsZXQgcmV0dXJuVmFsdWU7XG4gICAgaWYodmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpJiZ2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd9Jykpe1xuICAgICAgdmFsdWU9dmFsdWUucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpO1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHJldHVyblZhbHVlPXJvd1trZXldO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuVmFsdWU9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBkcm9wZG93biBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZERyb3Bkb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRFJPUERPV047XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTixcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFkcm9wRG93blByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBkcm9wRG93blByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuICAvLyBhZGQgTXVsdGlTZWxlY3REcm9wRG93biBncmlkIGNvbHVtblxuICBhZGRNdWx0aVNlbGVjdERyb3BEb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVCxcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFtdWx0aVNlbGVjdFByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBtdWx0aVNlbGVjdFByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm86IGFkZENvbHVtbikge1xuICAgIGlmIChjb2x1bW5JbmZvLmZpbHRlciAmJiBjb2x1bW5JbmZvLmZpbHRlci5zaG93RmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNldERyb3Bkb3duRGF0YShcbiAgICBjb2x1bW46IElHcmlkQ29sdW1uLFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueVtdLFxuICAgIHJvdz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKTogUHJvbWlzZTxhbnk+IHwgYW55IHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcbiAgICAgIC5zZXREcm9wRG93bkxpc3QodW5pcXVlS2V5LCB2YWx1ZVByb3AsIGxhYmVsUHJvcCwgZmlsdGVycylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfZGF0YSddID0gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbi5kYXRhID0gcmVzO1xuICAgICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIChjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uLmZpbHRlci50eXBlID09PSAnbXVsdGktc2VsZWN0JykpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIuZGF0YSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRGaWx0ZXJDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xuICAgICAgZmllbGQ6IGZpbHRlckNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGZpbHRlckNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyIH0sXG4gICAgICBmaWx0ZXJpbmc6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBmaWx0ZXJDb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHN0eWxlOiBmaWx0ZXJDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZmlsdGVyQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgcGVybWlzc2lvbnM6IGZpbHRlckNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZGF0ZSBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGREYXRlQ29sdW1uKGRhdGVDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGZpZWxkOiBkYXRlQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZGF0ZUNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgdHlwZTogZGF0ZUNvbHVtbkluZm8udHlwZSA/IGRhdGVDb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURSxcbiAgICAgIGZpbHRlcmluZzogZGF0ZUNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUiB9LFxuICAgICAgZm9ybWF0OiBkYXRlQ29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBzdHlsZTogZGF0ZUNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBkYXRlQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgZGlzYWJsZWQ6IGRhdGVDb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBkYXRlQ29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBwZXJtaXNzaW9uczogZGF0ZUNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBjb21wb25lbnQ6IGRhdGVDb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIHNob3dUaW1lOiBkYXRlQ29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBkYXRlQ29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGRhdGE6IGRhdGVDb2x1bW5JbmZvLmRhdGEsXG4gICAgICBoaWRkZW46IGRhdGVDb2x1bW5JbmZvLmhpZGRlbixcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICBzZXRMb29rVXBGaWx0ZXIoY29sdW1uOiBhbnksIGRpYWxvZ1NlcnZpY2U6IGFueSwgZ2xvYmFsRmlsdGVyTG9va3VwOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoY29sdW1uLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIGxldCBkYXRhVmFsdWU6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YUtleTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhID0gY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICBpZiAoZGF0YSAmJiBrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICAgIGRhdGFWYWx1ZS51bnNoaWZ0KGRhdGFba2V5XSk7XG4gICAgICAgICAgICBkYXRhS2V5LnVuc2hpZnQoa2V5KTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWYgPSBkaWFsb2dTZXJ2aWNlLm9wZW4oXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudCxcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGFLZXk/Lmxlbmd0aCA+IDAgJiYgZGF0YVZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkYXRhS2V5LmZvckVhY2goKGtleSwga2V5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbHVlLCB2YWx1ZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4ID09PSB2YWx1ZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJyk/LmZvY3VzKCk7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uPy5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsRmlsdGVyTG9va3VwKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWVUd28gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgOiByZXNbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgIGNvbnN0IGdsb2JhbEZpbHRlckxvb2t1cElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKTtcbiAgICAgICAgICAgICAgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgSHlwZXJsaW5rIGZpZWxkIGFzIGEgcGFyYW0gVmFsdWVcbiAgc2V0RmllbGRBc0xpbmtQYXJhbShjb2x1bW5zOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgIGZpZWxkICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKS5mb3JFYWNoKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgaWYgKG9iaiAmJiBvYmoucGFyYW1zKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iai5wYXJhbXMpO1xuICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChvYmoucGFyYW1zW2tleV0gJiYgb2JqLnBhcmFtc1trZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmoucGFyYW1zW2tleV1cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIG9iai5wYXJhbXNba2V5XSA9IHJlc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0FueUxpbmtDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLnNvbWUoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgICAoeC5saW5rSWQgJiYgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNldEh5cGVybGlua3MoZmV0Y2hSZXNwb25zZTogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYW55IHtcbiAgICBsZXQgcmVjb3JkczogYW55ID0gW107XG4gICAgbGV0IGxpbmtSZXNwb25zZXM6IGFueSA9IFtdO1xuICAgIGxldCBkYXRhID1cbiAgICAgIGZldGNoUmVzcG9uc2UgJiYgZmV0Y2hSZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNldERhdGFGaWVsZHMoZmV0Y2hSZXNwb25zZS5yZWNvcmRzKVxuICAgICAgICA6IFtdO1xuICAgIGxldCBuZXdSb3c6IGFueTtcblxuICAgIHJldHVybiB0aGlzLmh5cGVybGlua1NlcnZpY2VcbiAgICAgIC5hZGRIeXBlcmxpbmtzKGNvbHVtbnMpXG4gICAgICAudGhlbigobGlua3NSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGxpbmtSZXNwb25zZXMucHVzaChsaW5rc1Jlc3BvbnNlKTtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICA6IHJvd1tjb2wuZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgIGlmIChjb2wuZGF0YSAmJiBjb2wuZGF0YS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaWFsb2dEYXRhID0gdXRpbGl0aWVzLmZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgICAgICAgICBjb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgcm93XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlua1Jlc3BvbnNlcykgJiYgbGlua1Jlc3BvbnNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsaW5rUmVzcG9uc2VzLmZvckVhY2goKGxpbmtSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCkgJiZcbiAgICAgICAgICAgICAgICAgIGNvbC5saW5rSWQgJiZcbiAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtS2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhjb2wucGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbms6IGFueSA9IHV0aWxpdGllcy5zZXRIeXBlcmxpbmsoXG4gICAgICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5oeXBlcmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkVXBkYXRlID0ge1xuICAgICAgZmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdyaWRVcGRhdGVJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdHlwZTogZ3JpZFVwZGF0ZUluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdyaWRVcGRhdGVJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ3JpZFVwZGF0ZUluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ3JpZFVwZGF0ZUluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdyaWRVcGRhdGVJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBncmlkVXBkYXRlSW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdyaWRVcGRhdGVJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBvbkZvY3VzT3V0OiBncmlkVXBkYXRlSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdyaWRVcGRhdGVJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBncmlkVXBkYXRlSW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdyaWRVcGRhdGVJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBncmlkVXBkYXRlSW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ3JpZFVwZGF0ZUluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ3JpZFVwZGF0ZUluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdyaWRVcGRhdGVJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ3JpZFVwZGF0ZUluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ3JpZFVwZGF0ZUluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdyaWRVcGRhdGVJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ3JpZFVwZGF0ZUluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBncmlkVXBkYXRlSW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ3JpZFVwZGF0ZUluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdyaWRVcGRhdGVJbmZvLmZvcm1hdCxcbiAgICAgIGludGVyZmFjZVR5cGU6ICdidWxrVXBkYXRlJ1xuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBpbnB1dCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlSW5wdXQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVEcm9wZG93bihcbiAgICBncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ3JpZFVwZGF0ZUluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQm9vbGVhbihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgbnVtZXJpYyBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTnVtZXJpYyhncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGNhbGVuZGFyIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVDYWxlbmRhcihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvL2FkZCBncmlkIHVwZGF0ZSBsb29rdXAgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUxvb2t1cChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpe1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUXG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKVxuICB9XG4gIFxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2x1bW46IGFkZEdsb2JhbEZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdsb2JhbEZpbHRlckluZm8uZGlzcGxheVRleHQsXG4gICAgICBkaXNwbGF5U3R5bGU6Z2xvYmFsRmlsdGVySW5mby5kaXNwbGF5U3R5bGUsXG4gICAgICB2YWxpZGF0aW9uczogZ2xvYmFsRmlsdGVySW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHR5cGU6IGdsb2JhbEZpbHRlckluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdsb2JhbEZpbHRlckluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdsb2JhbEZpbHRlckluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdsb2JhbEZpbHRlckluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdsb2JhbEZpbHRlckluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iYWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgIG9uQ2xpY2s6Z2xvYmFsRmlsdGVySW5mby5vbkNsaWNrLFxuICAgICAgb25Gb2N1c091dDogZ2xvYmFsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdsb2JhbEZpbHRlckluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JhbEZpbHRlckluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBnbG9iYWxGaWx0ZXJJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdsb2JhbEZpbHRlckluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JhbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBnbG9iYWxGaWx0ZXJJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdsb2JhbEZpbHRlckluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdsb2JhbEZpbHRlckluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ2xvYmFsRmlsdGVySW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ2xvYmFsRmlsdGVySW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ2xvYmFsRmlsdGVySW5mby5mb3JtYXQsXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcbiAgYWRkR2xvYmFsSW5wdXRGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbERyb3Bkb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuICAvL2FkZCBnbG9iYWwgcmFkaW8gYnV0dG9uIGZpbHRlclxuICBhZGRHbG9iYWxTZWxlY3RCdXR0b25GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNFTEVDVEJVVFRPTjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIGdsb2JhbCBNdWx0aVNlbGVjdCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsTXVsdGlTZWxlY3REcm9wRG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IG11bHRpU2VsZWN0UHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGEoXG4gICAgZmllbGRJbmZvOiBhbnksXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55LFxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdXG4gICkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzLCBzb3J0cylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBmaWVsZEluZm8uZGF0YSA9IHJlcztcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXG4gIGFkZEdsb2JhbEZpbHRlclNwYWNlRmllbGQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNQQUNFUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGJvb2xlYW4gZmlsdGVyXG4gIGFkZEdsb2JhbEJvb2xlYW5GaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsRGF0ZVJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIE51bWVyaWMgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY0lucHV0KGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIExvb2tVcCBGaWVsZCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxMb29rdXBGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAgLy9hZGQgY2FsZW5kYXIgZmlsdGVyIGZvciBnbG9iYWwgZmlsdGVyXG4gICBhZGRHbG9iYWxEYXRlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcil7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlPUdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBsZXQgZGF0YTogYW55ID0gW107XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh4ID8/IHt9KT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gT2JqZWN0LmtleXMoeCk/LnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFLZXkgJiZcbiAgICAgICAgICAgIGRhdGFLZXkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0Q29sdW1uRmllbGRzKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLm1hcCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXG4gIHNldExpbmtJZChcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgbGlua0lkOiBzdHJpbmcsXG4gICAgcmVjb3JkOiBhbnksXG4gICAgdXNlcnM6IGFueSxcbiAgICBwYXJhbXM6IGFueSA9IG51bGwsXG4gICAgY2hhbmdlTGluazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb2x1bW4ubGlua0lkID0gbGlua0lkO1xuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEh5cGVybGlua3MoeyByZWNvcmRzOiBbcmVjb3JkXSB9LCBjb2x1bW5zKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZUxpbmspIHtcbiAgICAgICAgZGVsZXRlIHJlc1swXVtmaWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgbGV0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChpOiBhbnkpID0+IGlbZmllbGQudG9Mb3dlckNhc2UoKV0gPT09IHJlY29yZFtmaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID1cbiAgICAgICAgICAgICAgcmVzWzBdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZ3JpZCBkYXRhIGFuZCBzZXQgc2VsZWN0ZWQgcm93IGJhc2VkIG9uIHNlbGVjdGlvbiB2YWx1ZVxuICBzZXREYXRhV2l0aFNlbGVjdGVkUm93KHJlY29yZHM6IGFueSwgY29uZmlnRGF0YTogYW55KSB7XG4gICAgaWYgKChjb25maWdEYXRhPy52YWx1ZVByb3AgfHwgY29uZmlnRGF0YT8ubGFiZWxQcm9wKSAmJiBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlY29yZCk/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnRGF0YS5sYWJlbFByb3AgPyBjb25maWdEYXRhLmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKSA6IGNvbmZpZ0RhdGEudmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZFtrZXldPy50b1N0cmluZygpID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uICE9IG51bGwgJiYgY29sdW1uLnRhYmxlQWxpYXMgJiYgY29sdW1uLnRhYmxlQWxpYXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc2V0R3JpZFByb3BWYWx1ZXMoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXG4gICAgZmlsdGVyPzogSUdyaWRQcm9wRmlsdGVyLFxuICAgIHJlY29yZHM/OiBhbnlbXVxuICApIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGlzTWF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmllbGQgJiYgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHgpW2ZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpXSA9PT1cbiAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcbiAgICAgICAgbGV0IGNvbDogYW55ID0ge307XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmICFpc01hdGNoZWQgJiYgIWZpbHRlcj8uZmllbGQpIHtcbiAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2hlZCkge1xuICAgICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXI/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sICYmIGNvbC5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ3JpZCByb3cgcHJvcFZhbHVlc1xuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgcHJvcHM6IElHcmlkUm93UHJvcFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW10pIHtcbiAgICBwcm9wcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgaWYgKHByb3AucHJvcE5hbWUgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gJycpKSB7XG4gICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZU9iaiA9IGZpZWxkTmFtZT8uaW5jbHVkZXMoJ19vYmonKSA/IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA6IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICBmaWVsZE5hbWVPYmogPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXk6IGFueSkgPT4gKGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcm93T2JqKSAmJiAocm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSk7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lT2JqKSB7XG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IC4uLnJvd1tmaWVsZE5hbWVPYmpdLCB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGQgPSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkT2JqID0gcHJvcEZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IC4uLnJvd1twcm9wRmllbGRPYmpdLCB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSByb3dBY3Rpb25zIGZyb20gdGhlIHJlY29yZHNcbiAgcmVtb3ZlUm93QWN0aW9ucyhyZWNvcmRzKSB7XG4gICAgaWYgKHJlY29yZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cucm93QWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1sncm93QWN0aW9uJ107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxufSJdfQ==
|