@cdktn/hcl2cdk 0.24.0-pre.4 → 0.24.0-pre.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.spec.swcrc +22 -0
- package/build/__tests__/expressions.test.js +19 -10
- package/build/__tests__/functions.test.js +18 -8
- package/build/__tests__/jsii-rosetta-workarounds.test.js +2 -2
- package/build/__tests__/testHelpers.js +2 -3
- package/build/coerceType.js +21 -11
- package/build/dynamic-blocks.js +3 -3
- package/build/expressions.js +24 -16
- package/build/generation.js +35 -25
- package/build/index.d.ts +20 -20
- package/build/index.js +28 -18
- package/build/iteration.js +6 -7
- package/build/jsii-rosetta-workarounds.js +5 -6
- package/build/partialCode.js +20 -11
- package/build/provider.js +3 -4
- package/build/references.js +6 -8
- package/build/schema.d.ts +60 -60
- package/build/schema.js +18 -8
- package/build/terraformSchema.js +4 -4
- package/build/utils.d.ts +1 -1
- package/build/utils.js +4 -4
- package/build/variables.js +21 -12
- package/jest.config.js +18 -11
- package/package.json +22 -13
package/build/coerceType.js
CHANGED
|
@@ -15,18 +15,30 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
28
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
39
|
+
exports.coerceType = void 0;
|
|
40
|
+
exports.typeForCallExpression = typeForCallExpression;
|
|
41
|
+
exports.findExpressionType = findExpressionType;
|
|
30
42
|
// Copyright (c) HashiCorp, Inc
|
|
31
43
|
// SPDX-License-Identifier: MPL-2.0
|
|
32
44
|
const template_1 = __importDefault(require("@babel/template"));
|
|
@@ -68,7 +80,6 @@ function typeForCallExpression(ast) {
|
|
|
68
80
|
// By default we assume dynamic
|
|
69
81
|
return "dynamic";
|
|
70
82
|
}
|
|
71
|
-
exports.typeForCallExpression = typeForCallExpression;
|
|
72
83
|
const coerceType = (scope, ast, from, to) => {
|
|
73
84
|
if (to === undefined) {
|
|
74
85
|
return ast;
|
|
@@ -214,7 +225,6 @@ function findExpressionType(scope, ast) {
|
|
|
214
225
|
}
|
|
215
226
|
return "string";
|
|
216
227
|
}
|
|
217
|
-
exports.findExpressionType = findExpressionType;
|
|
218
228
|
/*
|
|
219
229
|
* Transforms a babel AST into a list of string accessors
|
|
220
230
|
* e.g. foo.bar.baz -> ["foo", "bar", "baz"]
|
|
@@ -237,4 +247,4 @@ function destructureAst(ast) {
|
|
|
237
247
|
return undefined;
|
|
238
248
|
}
|
|
239
249
|
}
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNlVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2VyY2VUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywrREFBdUM7QUFDdkMsZ0RBQWtDO0FBQ2xDLDRDQUF1RDtBQUV2RCw0REFBbUM7QUFDbkMsNkRBQStEO0FBQy9ELHVEQUFrRDtBQUNsRCx5Q0FBd0M7QUFFeEMsU0FBUyxtQkFBbUIsQ0FDMUIsR0FBdUIsRUFDdkIsV0FBbUI7SUFFbkIsTUFBTSxrQkFBa0IsR0FBaUI7UUFDdkMsR0FBSSxHQUFHLENBQUMsUUFBeUI7UUFDakMsSUFBSSxFQUFFLFdBQVc7S0FDbEIsQ0FBQztJQUNGLE9BQU87UUFDTCxHQUFHLEdBQUc7UUFDTixRQUFRLEVBQUUsa0JBQWtCO0tBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsR0FBcUI7SUFDekQsMENBQTBDO0lBQzFDLElBQ0UsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSTtRQUN4QyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ25DLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRywwQkFBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSwrQkFBK0I7SUFDL0IsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQXZCRCxzREF1QkM7QUFFTSxNQUFNLFVBQVUsR0FBRyxDQUN4QixLQUFtQixFQUNuQixHQUFpQixFQUNqQixJQUFtQixFQUNuQixFQUE2QixFQUNmLEVBQUU7SUFDaEIsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSSxJQUFBLG9CQUFTLEVBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSwwQkFBMEIsR0FDOUIsR0FBRyxDQUFDLElBQUksS0FBSyxrQkFBa0I7UUFDL0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUNsQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPO1FBQzdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNqQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ1osU0FBUyxDQUFDLFlBQVksS0FBTSxHQUFHLENBQUMsTUFBdUIsQ0FBQyxJQUFJO1lBQzVELENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQ2hELENBQUM7SUFFSixNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUM3QixLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNyQixhQUFhLEVBQUUsT0FBTztRQUN0QixRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDLENBQUM7SUFFTCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxRQUFRO29CQUNYLElBQUksMEJBQTBCLEVBQUUsQ0FBQzt3QkFDL0IsT0FBTyxtQkFBbUIsQ0FBQyxHQUF5QixFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUNyRSxDQUFDO29CQUVELGlCQUFpQixFQUFFLENBQUM7b0JBQ3BCLE9BQU8sa0JBQVEsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQsR0FBRyxFQUFFLEdBQUc7cUJBQ1QsQ0FBaUIsQ0FBQztnQkFDckIsS0FBSyxRQUFRO29CQUNYLGlCQUFpQixFQUFFLENBQUM7b0JBQ3BCLE9BQU8sa0JBQVEsQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsQ0FBQzt3QkFDeEQsR0FBRyxFQUFFLEdBQUc7cUJBQ1QsQ0FBaUIsQ0FBQztnQkFDckIsS0FBSyxNQUFNO29CQUNULGlCQUFpQixFQUFFLENBQUM7b0JBQ3BCLE9BQU8sa0JBQVEsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQzt3QkFDakQsR0FBRyxFQUFFLEdBQUc7cUJBQ1QsQ0FBaUIsQ0FBQztnQkFDckI7b0JBQ0UsaUJBQWlCLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxrQkFBUSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3dCQUNqRCxHQUFHLEVBQUUsR0FBRztxQkFDVCxDQUFpQixDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDcEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDZCxLQUFLLFFBQVE7b0JBQ1gsaUJBQWlCLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxrQkFBUSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO3dCQUN2RCxHQUFHLEVBQUUsR0FBRztxQkFDVCxDQUFpQixDQUFDO2dCQUNyQixLQUFLLFFBQVE7b0JBQ1gsaUJBQWlCLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxrQkFBUSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO3dCQUN2RCxHQUFHLEVBQUUsR0FBRztxQkFDVCxDQUFpQixDQUFDO2dCQUNyQixLQUFLLE1BQU07b0JBQ1QsaUJBQWlCLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxrQkFBUSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO3dCQUN4RCxHQUFHLEVBQUUsR0FBRztxQkFDVCxDQUFpQixDQUFDO2dCQUNyQjtvQkFDRSxpQkFBaUIsRUFBRSxDQUFDO29CQUNwQixPQUFPLGtCQUFRLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUM7d0JBQ3BELEdBQUcsRUFBRSxHQUFHO3FCQUNULENBQWlCLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNYLEtBQUssUUFBUTtZQUNYLElBQUksMEJBQTBCLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxtQkFBbUIsQ0FBQyxHQUF5QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sa0JBQVEsQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDcEQsR0FBRyxFQUFFLEdBQUc7YUFDVCxDQUFpQixDQUFDO1FBQ3JCLEtBQUssUUFBUTtZQUNYLElBQUksMEJBQTBCLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxtQkFBbUIsQ0FBQyxHQUF5QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sa0JBQVEsQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDcEQsR0FBRyxFQUFFLEdBQUc7YUFDVCxDQUFpQixDQUFDO1FBQ3JCLEtBQUssTUFBTTtZQUNULElBQUksMEJBQTBCLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxtQkFBbUIsQ0FBQyxHQUF5QixFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFDRCxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sa0JBQVEsQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDckQsR0FBRyxFQUFFLEdBQUc7YUFDVCxDQUFpQixDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxPQUFPLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBcEhXLFFBQUEsVUFBVSxjQW9IckI7QUFFRixTQUFnQixrQkFBa0IsQ0FDaEMsS0FBbUIsRUFDbkIsR0FBaUI7SUFFakIsTUFBTSxnQ0FBZ0MsR0FDcEMsR0FBRyxDQUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7SUFFdEUsa0VBQWtFO0lBQ2xFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xDLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUM3RCxDQUFDO1lBQ0YsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sQ0FBQyxlQUFlLEVBQUUsR0FBRyxVQUFVLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNsRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxlQUFlLENBQzFDLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxnQkFBTSxDQUFDLEtBQUssQ0FDViwyQkFBMkIsZUFBZSxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FDdkUsS0FBSyxDQUFDLFNBQVMsRUFDZixJQUFJLEVBQ0osQ0FBQyxDQUNGLEVBQUUsQ0FDSixDQUFDO1lBQ0YscUdBQXFHO1lBQ3JHLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckUsTUFBTSxjQUFjLEdBQUcsR0FBRyxRQUFRLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQ0osSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLHVCQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFBLCtCQUFhLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVqRSxnREFBZ0Q7UUFDaEQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELCtDQUErQztRQUMvQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQXRFRCxnREFzRUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxHQUFpQjtJQUN2QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixLQUFLLFlBQVk7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLEtBQUssa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUF3QixDQUFDLENBQUM7WUFDOUQsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUNEO1lBQ0UsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHRlbXBsYXRlIGZyb20gXCJAYmFiZWwvdGVtcGxhdGVcIjtcbmltcG9ydCAqIGFzIHQgZnJvbSBcIkBiYWJlbC90eXBlc1wiO1xuaW1wb3J0IHsgbG9nZ2VyLCBBdHRyaWJ1dGVUeXBlIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBQcm9ncmFtU2NvcGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwiZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgdHNGdW5jdGlvbnNNYXAgfSBmcm9tIFwiLi9mdW5jdGlvbi1iaW5kaW5ncy9mdW5jdGlvbnNcIjtcbmltcG9ydCB7IGdldFR5cGVBdFBhdGggfSBmcm9tIFwiLi90ZXJyYWZvcm1TY2hlbWFcIjtcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuXG5mdW5jdGlvbiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKFxuICBhc3Q6IHQuTWVtYmVyRXhwcmVzc2lvbixcbiAgbmV3QWNjZXNzb3I6IHN0cmluZyxcbik6IHQuTWVtYmVyRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHByb3BlcnR5SWRlbnRpZmllcjogdC5JZGVudGlmaWVyID0ge1xuICAgIC4uLihhc3QucHJvcGVydHkgYXMgdC5JZGVudGlmaWVyKSxcbiAgICBuYW1lOiBuZXdBY2Nlc3NvcixcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hc3QsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5SWRlbnRpZmllcixcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGb3JDYWxsRXhwcmVzc2lvbihhc3Q6IHQuQ2FsbEV4cHJlc3Npb24pOiBBdHRyaWJ1dGVUeXBlIHtcbiAgLy8gRmluZCBhbGwgY2RrdGYuRm4uKiB8fCBjZGt0bi5Gbi4qIGNhbGxzXG4gIGlmIChcbiAgICB0LmlzTWVtYmVyRXhwcmVzc2lvbihhc3QuY2FsbGVlKSAmJlxuICAgIHQuaXNNZW1iZXJFeHByZXNzaW9uKGFzdC5jYWxsZWUub2JqZWN0KSAmJlxuICAgIHQuaXNJZGVudGlmaWVyKGFzdC5jYWxsZWUub2JqZWN0Lm9iamVjdCkgJiZcbiAgICAoYXN0LmNhbGxlZS5vYmplY3Qub2JqZWN0Lm5hbWUgPT09IFwiY2RrdGZcIiB8fFxuICAgICAgYXN0LmNhbGxlZS5vYmplY3Qub2JqZWN0Lm5hbWUgPT09IFwiY2RrdG5cIikgJiZcbiAgICB0LmlzSWRlbnRpZmllcihhc3QuY2FsbGVlLm9iamVjdC5wcm9wZXJ0eSkgJiZcbiAgICBhc3QuY2FsbGVlLm9iamVjdC5wcm9wZXJ0eS5uYW1lID09PSBcIkZuXCIgJiZcbiAgICB0LmlzSWRlbnRpZmllcihhc3QuY2FsbGVlLnByb3BlcnR5KVxuICApIHtcbiAgICBjb25zdCBtZXRhID0gdHNGdW5jdGlvbnNNYXBbYXN0LmNhbGxlZS5wcm9wZXJ0eS5uYW1lXTtcbiAgICBpZiAobWV0YSkge1xuICAgICAgcmV0dXJuIG1ldGEucmV0dXJuVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNka3RmLmNvbmRpdGlvbmFsLCBjZGt0Zi5wcm9wZXJ0eUFjY2VzcywgY2RrdGYuT3AuKiBhcmUgYWxsIGR5bmFtaWNcbiAgLy8gQnkgZGVmYXVsdCB3ZSBhc3N1bWUgZHluYW1pY1xuICByZXR1cm4gXCJkeW5hbWljXCI7XG59XG5cbmV4cG9ydCBjb25zdCBjb2VyY2VUeXBlID0gKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBhc3Q6IHQuRXhwcmVzc2lvbixcbiAgZnJvbTogQXR0cmlidXRlVHlwZSxcbiAgdG86IEF0dHJpYnV0ZVR5cGUgfCB1bmRlZmluZWQsXG4pOiB0LkV4cHJlc3Npb24gPT4ge1xuICBpZiAodG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhc3Q7XG4gIH1cblxuICBpZiAoZGVlcEVxdWFsKHRvLCBmcm9tKSkge1xuICAgIHJldHVybiBhc3Q7XG4gIH1cblxuICBjb25zdCBpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCA9XG4gICAgYXN0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgYXN0LnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgYXN0LnByb3BlcnR5Lm5hbWUgPT09IFwidmFsdWVcIiAmJlxuICAgIGFzdC5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBPYmplY3QudmFsdWVzKHNjb3BlLnZhcmlhYmxlcykuc29tZShcbiAgICAgIChrbm93blZhcnMpID0+XG4gICAgICAgIGtub3duVmFycy52YXJpYWJsZU5hbWUgPT09IChhc3Qub2JqZWN0IGFzIHQuSWRlbnRpZmllcikubmFtZSAmJlxuICAgICAgICBbXCJ2YXJcIiwgXCJsb2NhbFwiXS5pbmNsdWRlcyhrbm93blZhcnMucmVzb3VyY2UpLFxuICAgICk7XG5cbiAgY29uc3QgYWRkVG9rZW5Ub0ltcG9ydHMgPSAoKSA9PlxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgY29uc3RydWN0TmFtZTogXCJUb2tlblwiLFxuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICB9KTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh0bykpIHtcbiAgICBpZiAodG9bMF0gPT09IFwibGlzdFwiIHx8IHRvWzBdID09PSBcInNldFwiKSB7XG4gICAgICBzd2l0Y2ggKHRvWzFdKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICBpZiAoaXNUZXJyYWZvcm1WYXJpYWJsZU9yTG9jYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKGFzdCBhcyB0Lk1lbWJlckV4cHJlc3Npb24sIFwibGlzdFZhbHVlXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzTGlzdCglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzTnVtYmVyTGlzdCglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0FueSglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0FueSglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9bMF0gPT09IFwibWFwXCIpIHtcbiAgICAgIHN3aXRjaCAodG9bMV0pIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzU3RyaW5nTWFwKCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNOdW1iZXJNYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNCb29sZWFuTWFwKCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzQW55TWFwKCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodG8pIHtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICBpZiAoaXNUZXJyYWZvcm1WYXJpYWJsZU9yTG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZhbHVlQWNjZXNzb3IoYXN0IGFzIHQuTWVtYmVyRXhwcmVzc2lvbiwgXCJudW1iZXJWYWx1ZVwiKTtcbiAgICAgIH1cbiAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNOdW1iZXIoJSVhc3QlJSlgKSh7XG4gICAgICAgIGFzdDogYXN0LFxuICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICByZXR1cm4gY2hhbmdlVmFsdWVBY2Nlc3Nvcihhc3QgYXMgdC5NZW1iZXJFeHByZXNzaW9uLCBcInN0cmluZ1ZhbHVlXCIpO1xuICAgICAgfVxuICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc1N0cmluZyglJWFzdCUlKWApKHtcbiAgICAgICAgYXN0OiBhc3QsXG4gICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgY2FzZSBcImJvb2xcIjpcbiAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICByZXR1cm4gY2hhbmdlVmFsdWVBY2Nlc3Nvcihhc3QgYXMgdC5NZW1iZXJFeHByZXNzaW9uLCBcImJvb2xlYW5WYWx1ZVwiKTtcbiAgICAgIH1cbiAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNCb29sZWFuKCUlYXN0JSUpYCkoe1xuICAgICAgICBhc3Q6IGFzdCxcbiAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgQ291bGQgbm90IGNvZXJjZSBmcm9tICR7ZnJvbX0gdG8gJHt0b30gZm9yICR7YXN0fWApO1xuICByZXR1cm4gYXN0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFeHByZXNzaW9uVHlwZShcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgYXN0OiB0LkV4cHJlc3Npb24sXG4pOiBBdHRyaWJ1dGVUeXBlIHtcbiAgY29uc3QgaXNSZWZlcmVuY2VXaXRob3V0VGVtcGxhdGVTdHJpbmcgPVxuICAgIGFzdC50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBhc3Qub2JqZWN0LnR5cGUgPT09IFwiSWRlbnRpZmllclwiO1xuXG4gIC8vIElmIHdlIGhhdmUgYSBwcm9wZXJ0eSB0byBjZGt0Zi5wcm9wZXJ0eUFjY2VzcyBjYWxsIGl0J3MgZHluYW1pY1xuICBpZiAoYXN0LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiB0eXBlRm9yQ2FsbEV4cHJlc3Npb24oYXN0KTtcbiAgfVxuXG4gIGlmIChhc3QudHlwZSA9PT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuICBpZiAoYXN0LnR5cGUgPT09IFwiTnVtZXJpY0xpdGVyYWxcIikge1xuICAgIHJldHVybiBcIm51bWJlclwiO1xuICB9XG4gIGlmIChhc3QudHlwZSA9PT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIFwiYm9vbFwiO1xuICB9XG5cbiAgLy8gSWYgd2Ugb25seSBoYXZlIG9uZSByZWZlcmVuY2UgdGhpcyBpcyBhXG4gIGlmIChpc1JlZmVyZW5jZVdpdGhvdXRUZW1wbGF0ZVN0cmluZykge1xuICAgIGNvbnN0IGRlc3RydWN0dXJlZEFzdCA9IGRlc3RydWN0dXJlQXN0KGFzdCk7XG4gICAgaWYgKCFkZXN0cnVjdHVyZWRBc3QpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBkZXN0cnVjdHVyZSBhc3Q6ICR7SlNPTi5zdHJpbmdpZnkoYXN0LCBudWxsLCAyKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXN0VmFyaWFibGVOYW1lLCAuLi5hdHRyaWJ1dGVzXSA9IGRlc3RydWN0dXJlZEFzdDtcbiAgICBjb25zdCB2YXJpYWJsZSA9IE9iamVjdC52YWx1ZXMoc2NvcGUudmFyaWFibGVzKS5maW5kKFxuICAgICAgKHgpID0+IHgudmFyaWFibGVOYW1lID09PSBhc3RWYXJpYWJsZU5hbWUsXG4gICAgKTtcblxuICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZhcmlhYmxlICR7YXN0VmFyaWFibGVOYW1lfSBnaXZlbiBzY29wZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBzY29wZS52YXJpYWJsZXMsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgLy8gV2UgZG9uJ3Qga25vdywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMgd2UgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIGFuZCBtYWtlIGl0IGR5bmFtaWNcbiAgICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGUucmVzb3VyY2UgPT09IFwidmFyXCIpIHtcbiAgICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlc291cmNlOiByZXNvdXJjZVR5cGUgfSA9IHZhcmlhYmxlO1xuICAgIGNvbnN0IFtwcm92aWRlciwgLi4ucmVzb3VyY2VOYW1lRnJhZ21lbnRzXSA9IHJlc291cmNlVHlwZS5zcGxpdChcIl9cIik7XG4gICAgY29uc3QgdGZSZXNvdXJjZVBhdGggPSBgJHtwcm92aWRlcn0uJHtyZXNvdXJjZU5hbWVGcmFnbWVudHMuam9pbihcbiAgICAgIFwiX1wiLFxuICAgICl9LiR7YXR0cmlidXRlcy5tYXAoKHgpID0+IHRvU25ha2VDYXNlKHgpKS5qb2luKFwiLlwiKX1gO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlQXRQYXRoKHNjb3BlLnByb3ZpZGVyU2NoZW1hLCB0ZlJlc291cmNlUGF0aCk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGFuIGF0dHJpYnV0ZSB0eXBlIHdlIGNhbiByZXR1cm4gaXRcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgLy8gRWl0aGVyIG5vdGhpbmcgaXMgZm91bmQgb3IgaXQncyBhIGJsb2NrIHR5cGVcbiAgICByZXR1cm4gXCJkeW5hbWljXCI7XG4gIH1cblxuICByZXR1cm4gXCJzdHJpbmdcIjtcbn1cblxuLypcbiAqIFRyYW5zZm9ybXMgYSBiYWJlbCBBU1QgaW50byBhIGxpc3Qgb2Ygc3RyaW5nIGFjY2Vzc29yc1xuICogZS5nLiBmb28uYmFyLmJheiAtPiBbXCJmb29cIiwgXCJiYXJcIiwgXCJiYXpcIl1cbiAqL1xuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVBc3QoYXN0OiB0LkV4cHJlc3Npb24pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoYXN0LnR5cGUpIHtcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgcmV0dXJuIFthc3QubmFtZV07XG4gICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjoge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gZGVzdHJ1Y3R1cmVBc3QoYXN0Lm9iamVjdCk7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGRlc3RydWN0dXJlQXN0KGFzdC5wcm9wZXJ0eSBhcyB0LkV4cHJlc3Npb24pO1xuICAgICAgaWYgKG9iamVjdCAmJiBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gWy4uLm9iamVjdCwgLi4ucHJvcGVydHldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNlVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2VyY2VUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxzREF1QkM7QUF3SEQsZ0RBc0VDO0FBOU9ELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsK0RBQXVDO0FBQ3ZDLGdEQUFrQztBQUNsQyw0Q0FBdUQ7QUFFdkQsNERBQW1DO0FBQ25DLDZEQUErRDtBQUMvRCx1REFBa0Q7QUFDbEQseUNBQXdDO0FBRXhDLFNBQVMsbUJBQW1CLENBQzFCLEdBQXVCLEVBQ3ZCLFdBQW1CO0lBRW5CLE1BQU0sa0JBQWtCLEdBQWlCO1FBQ3ZDLEdBQUksR0FBRyxDQUFDLFFBQXlCO1FBQ2pDLElBQUksRUFBRSxXQUFXO0tBQ2xCLENBQUM7SUFDRixPQUFPO1FBQ0wsR0FBRyxHQUFHO1FBQ04sUUFBUSxFQUFFLGtCQUFrQjtLQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLEdBQXFCO0lBQ3pELDBDQUEwQztJQUMxQyxJQUNFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4QyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTztZQUN4QyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQztRQUM1QyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FB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Q0FBQztZQUM5RCxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBQ0Q7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSBcIkBiYWJlbC90ZW1wbGF0ZVwiO1xuaW1wb3J0ICogYXMgdCBmcm9tIFwiQGJhYmVsL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2dnZXIsIEF0dHJpYnV0ZVR5cGUgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb2dyYW1TY29wZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJkZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyB0c0Z1bmN0aW9uc01hcCB9IGZyb20gXCIuL2Z1bmN0aW9uLWJpbmRpbmdzL2Z1bmN0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUF0UGF0aCB9IGZyb20gXCIuL3RlcnJhZm9ybVNjaGVtYVwiO1xuaW1wb3J0IHsgdG9TbmFrZUNhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5cbmZ1bmN0aW9uIGNoYW5nZVZhbHVlQWNjZXNzb3IoXG4gIGFzdDogdC5NZW1iZXJFeHByZXNzaW9uLFxuICBuZXdBY2Nlc3Nvcjogc3RyaW5nLFxuKTogdC5NZW1iZXJFeHByZXNzaW9uIHtcbiAgY29uc3QgcHJvcGVydHlJZGVudGlmaWVyOiB0LklkZW50aWZpZXIgPSB7XG4gICAgLi4uKGFzdC5wcm9wZXJ0eSBhcyB0LklkZW50aWZpZXIpLFxuICAgIG5hbWU6IG5ld0FjY2Vzc29yLFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLmFzdCxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlJZGVudGlmaWVyLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZvckNhbGxFeHByZXNzaW9uKGFzdDogdC5DYWxsRXhwcmVzc2lvbik6IEF0dHJpYnV0ZVR5cGUge1xuICAvLyBGaW5kIGFsbCBjZGt0Zi5Gbi4qIHx8IGNka3RuLkZuLiogY2FsbHNcbiAgaWYgKFxuICAgIHQuaXNNZW1iZXJFeHByZXNzaW9uKGFzdC5jYWxsZWUpICYmXG4gICAgdC5pc01lbWJlckV4cHJlc3Npb24oYXN0LmNhbGxlZS5vYmplY3QpICYmXG4gICAgdC5pc0lkZW50aWZpZXIoYXN0LmNhbGxlZS5vYmplY3Qub2JqZWN0KSAmJlxuICAgIChhc3QuY2FsbGVlLm9iamVjdC5vYmplY3QubmFtZSA9PT0gXCJjZGt0ZlwiIHx8XG4gICAgICBhc3QuY2FsbGVlLm9iamVjdC5vYmplY3QubmFtZSA9PT0gXCJjZGt0blwiKSAmJlxuICAgIHQuaXNJZGVudGlmaWVyKGFzdC5jYWxsZWUub2JqZWN0LnByb3BlcnR5KSAmJlxuICAgIGFzdC5jYWxsZWUub2JqZWN0LnByb3BlcnR5Lm5hbWUgPT09IFwiRm5cIiAmJlxuICAgIHQuaXNJZGVudGlmaWVyKGFzdC5jYWxsZWUucHJvcGVydHkpXG4gICkge1xuICAgIGNvbnN0IG1ldGEgPSB0c0Z1bmN0aW9uc01hcFthc3QuY2FsbGVlLnByb3BlcnR5Lm5hbWVdO1xuICAgIGlmIChtZXRhKSB7XG4gICAgICByZXR1cm4gbWV0YS5yZXR1cm5UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJkeW5hbWljXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gY2RrdGYuY29uZGl0aW9uYWwsIGNka3RmLnByb3BlcnR5QWNjZXNzLCBjZGt0Zi5PcC4qIGFyZSBhbGwgZHluYW1pY1xuICAvLyBCeSBkZWZhdWx0IHdlIGFzc3VtZSBkeW5hbWljXG4gIHJldHVybiBcImR5bmFtaWNcIjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvZXJjZVR5cGUgPSAoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGFzdDogdC5FeHByZXNzaW9uLFxuICBmcm9tOiBBdHRyaWJ1dGVUeXBlLFxuICB0bzogQXR0cmlidXRlVHlwZSB8IHVuZGVmaW5lZCxcbik6IHQuRXhwcmVzc2lvbiA9PiB7XG4gIGlmICh0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFzdDtcbiAgfVxuXG4gIGlmIChkZWVwRXF1YWwodG8sIGZyb20pKSB7XG4gICAgcmV0dXJuIGFzdDtcbiAgfVxuXG4gIGNvbnN0IGlzVGVycmFmb3JtVmFyaWFibGVPckxvY2FsID1cbiAgICBhc3QudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICBhc3QucHJvcGVydHkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBhc3QucHJvcGVydHkubmFtZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgYXN0Lm9iamVjdC50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIE9iamVjdC52YWx1ZXMoc2NvcGUudmFyaWFibGVzKS5zb21lKFxuICAgICAgKGtub3duVmFycykgPT5cbiAgICAgICAga25vd25WYXJzLnZhcmlhYmxlTmFtZSA9PT0gKGFzdC5vYmplY3QgYXMgdC5JZGVudGlmaWVyKS5uYW1lICYmXG4gICAgICAgIFtcInZhclwiLCBcImxvY2FsXCJdLmluY2x1ZGVzKGtub3duVmFycy5yZXNvdXJjZSksXG4gICAgKTtcblxuICBjb25zdCBhZGRUb2tlblRvSW1wb3J0cyA9ICgpID0+XG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRva2VuXCIsXG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgIH0pO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHRvKSkge1xuICAgIGlmICh0b1swXSA9PT0gXCJsaXN0XCIgfHwgdG9bMF0gPT09IFwic2V0XCIpIHtcbiAgICAgIHN3aXRjaCAodG9bMV0pIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZhbHVlQWNjZXNzb3IoYXN0IGFzIHQuTWVtYmVyRXhwcmVzc2lvbiwgXCJsaXN0VmFsdWVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNMaXN0KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNOdW1iZXJMaXN0KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzQW55KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzQW55KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b1swXSA9PT0gXCJtYXBcIikge1xuICAgICAgc3dpdGNoICh0b1sxXSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNTdHJpbmdNYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc051bWJlck1hcCglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0Jvb2xlYW5NYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNBbnlNYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0bykge1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICByZXR1cm4gY2hhbmdlVmFsdWVBY2Nlc3Nvcihhc3QgYXMgdC5NZW1iZXJFeHByZXNzaW9uLCBcIm51bWJlclZhbHVlXCIpO1xuICAgICAgfVxuICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc051bWJlciglJWFzdCUlKWApKHtcbiAgICAgICAgYXN0OiBhc3QsXG4gICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaWYgKGlzVGVycmFmb3JtVmFyaWFibGVPckxvY2FsKSB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKGFzdCBhcyB0Lk1lbWJlckV4cHJlc3Npb24sIFwic3RyaW5nVmFsdWVcIik7XG4gICAgICB9XG4gICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzU3RyaW5nKCUlYXN0JSUpYCkoe1xuICAgICAgICBhc3Q6IGFzdCxcbiAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgaWYgKGlzVGVycmFmb3JtVmFyaWFibGVPckxvY2FsKSB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKGFzdCBhcyB0Lk1lbWJlckV4cHJlc3Npb24sIFwiYm9vbGVhblZhbHVlXCIpO1xuICAgICAgfVxuICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0Jvb2xlYW4oJSVhc3QlJSlgKSh7XG4gICAgICAgIGFzdDogYXN0LFxuICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBDb3VsZCBub3QgY29lcmNlIGZyb20gJHtmcm9tfSB0byAke3RvfSBmb3IgJHthc3R9YCk7XG4gIHJldHVybiBhc3Q7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEV4cHJlc3Npb25UeXBlKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBhc3Q6IHQuRXhwcmVzc2lvbixcbik6IEF0dHJpYnV0ZVR5cGUge1xuICBjb25zdCBpc1JlZmVyZW5jZVdpdGhvdXRUZW1wbGF0ZVN0cmluZyA9XG4gICAgYXN0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIGFzdC5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCI7XG5cbiAgLy8gSWYgd2UgaGF2ZSBhIHByb3BlcnR5IHRvIGNka3RmLnByb3BlcnR5QWNjZXNzIGNhbGwgaXQncyBkeW5hbWljXG4gIGlmIChhc3QudHlwZSA9PT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHR5cGVGb3JDYWxsRXhwcmVzc2lvbihhc3QpO1xuICB9XG5cbiAgaWYgKGFzdC50eXBlID09PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG4gIGlmIChhc3QudHlwZSA9PT0gXCJOdW1lcmljTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gIH1cbiAgaWYgKGFzdC50eXBlID09PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gXCJib29sXCI7XG4gIH1cblxuICAvLyBJZiB3ZSBvbmx5IGhhdmUgb25lIHJlZmVyZW5jZSB0aGlzIGlzIGFcbiAgaWYgKGlzUmVmZXJlbmNlV2l0aG91dFRlbXBsYXRlU3RyaW5nKSB7XG4gICAgY29uc3QgZGVzdHJ1Y3R1cmVkQXN0ID0gZGVzdHJ1Y3R1cmVBc3QoYXN0KTtcbiAgICBpZiAoIWRlc3RydWN0dXJlZEFzdCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGRlc3RydWN0dXJlIGFzdDogJHtKU09OLnN0cmluZ2lmeShhc3QsIG51bGwsIDIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cblxuICAgIGNvbnN0IFthc3RWYXJpYWJsZU5hbWUsIC4uLmF0dHJpYnV0ZXNdID0gZGVzdHJ1Y3R1cmVkQXN0O1xuICAgIGNvbnN0IHZhcmlhYmxlID0gT2JqZWN0LnZhbHVlcyhzY29wZS52YXJpYWJsZXMpLmZpbmQoXG4gICAgICAoeCkgPT4geC52YXJpYWJsZU5hbWUgPT09IGFzdFZhcmlhYmxlTmFtZSxcbiAgICApO1xuXG4gICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgdmFyaWFibGUgJHthc3RWYXJpYWJsZU5hbWV9IGdpdmVuIHNjb3BlOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHNjb3BlLnZhcmlhYmxlcyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICAvLyBXZSBkb24ndCBrbm93LCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgaWYgaXQgZG9lcyB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2UgYW5kIG1ha2UgaXQgZHluYW1pY1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cblxuICAgIGlmICh2YXJpYWJsZS5yZXNvdXJjZSA9PT0gXCJ2YXJcIikge1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcmVzb3VyY2U6IHJlc291cmNlVHlwZSB9ID0gdmFyaWFibGU7XG4gICAgY29uc3QgW3Byb3ZpZGVyLCAuLi5yZXNvdXJjZU5hbWVGcmFnbWVudHNdID0gcmVzb3VyY2VUeXBlLnNwbGl0KFwiX1wiKTtcbiAgICBjb25zdCB0ZlJlc291cmNlUGF0aCA9IGAke3Byb3ZpZGVyfS4ke3Jlc291cmNlTmFtZUZyYWdtZW50cy5qb2luKFxuICAgICAgXCJfXCIsXG4gICAgKX0uJHthdHRyaWJ1dGVzLm1hcCgoeCkgPT4gdG9TbmFrZUNhc2UoeCkpLmpvaW4oXCIuXCIpfWA7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHRmUmVzb3VyY2VQYXRoKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYW4gYXR0cmlidXRlIHR5cGUgd2UgY2FuIHJldHVybiBpdFxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICAvLyBFaXRoZXIgbm90aGluZyBpcyBmb3VuZCBvciBpdCdzIGEgYmxvY2sgdHlwZVxuICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgfVxuXG4gIHJldHVybiBcInN0cmluZ1wiO1xufVxuXG4vKlxuICogVHJhbnNmb3JtcyBhIGJhYmVsIEFTVCBpbnRvIGEgbGlzdCBvZiBzdHJpbmcgYWNjZXNzb3JzXG4gKiBlLmcuIGZvby5iYXIuYmF6IC0+IFtcImZvb1wiLCBcImJhclwiLCBcImJhelwiXVxuICovXG5mdW5jdGlvbiBkZXN0cnVjdHVyZUFzdChhc3Q6IHQuRXhwcmVzc2lvbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChhc3QudHlwZSkge1xuICAgIGNhc2UgXCJJZGVudGlmaWVyXCI6XG4gICAgICByZXR1cm4gW2FzdC5uYW1lXTtcbiAgICBjYXNlIFwiTWVtYmVyRXhwcmVzc2lvblwiOiB7XG4gICAgICBjb25zdCBvYmplY3QgPSBkZXN0cnVjdHVyZUFzdChhc3Qub2JqZWN0KTtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGVzdHJ1Y3R1cmVBc3QoYXN0LnByb3BlcnR5IGFzIHQuRXhwcmVzc2lvbik7XG4gICAgICBpZiAob2JqZWN0ICYmIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBbLi4ub2JqZWN0LCAuLi5wcm9wZXJ0eV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
package/build/dynamic-blocks.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MPL-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.extractDynamicBlocks =
|
|
7
|
+
exports.extractDynamicBlocks = void 0;
|
|
8
|
+
exports.isNestedDynamicBlock = isNestedDynamicBlock;
|
|
8
9
|
function isNestedDynamicBlock(dynBlocks, block) {
|
|
9
10
|
return dynBlocks.some((dyn) => dyn.path !== block.path && block.path.startsWith(dyn.path));
|
|
10
11
|
}
|
|
11
|
-
exports.isNestedDynamicBlock = isNestedDynamicBlock;
|
|
12
12
|
const extractDynamicBlocks = (config, path = "") => {
|
|
13
13
|
if (typeof config !== "object") {
|
|
14
14
|
return [];
|
|
@@ -41,4 +41,4 @@ const extractDynamicBlocks = (config, path = "") => {
|
|
|
41
41
|
}, []);
|
|
42
42
|
};
|
|
43
43
|
exports.extractDynamicBlocks = extractDynamicBlocks;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ibG9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHluYW1pYy1ibG9ja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBSUgsb0RBT0M7QUFQRCxTQUFnQixvQkFBb0IsQ0FDbEMsU0FBeUIsRUFDekIsS0FBbUI7SUFFbkIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUNuQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDcEUsQ0FBQztBQUNKLENBQUM7QUFFTSxNQUFNLG9CQUFvQixHQUFHLENBQ2xDLE1BQThCLEVBQzlCLElBQUksR0FBRyxFQUFFLEVBQ08sRUFBRTtJQUNsQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdEIsR0FBRyxLQUFLO1lBQ1IsR0FBRyxJQUFBLDRCQUFvQixFQUFDLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztTQUNsRCxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRCxPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLEdBQUcsSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDcEMsUUFBUTtnQkFDUixPQUFPO2dCQUNQLFNBQVM7YUFDVjtZQUNELEdBQUcsSUFBQSw0QkFBb0IsRUFDckIsT0FBTyxFQUNQLEdBQUcsSUFBSSxZQUFZLFNBQVMsWUFBWSxDQUN6QztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzNELE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUEsNEJBQW9CLEVBQUMsS0FBWSxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDLEVBQUUsRUFBb0IsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQTVDVyxRQUFBLG9CQUFvQix3QkE0Qy9CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgeyBEeW5hbWljQmxvY2ssIFRlcnJhZm9ybVJlc291cmNlQmxvY2sgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWREeW5hbWljQmxvY2soXG4gIGR5bkJsb2NrczogRHluYW1pY0Jsb2NrW10sXG4gIGJsb2NrOiBEeW5hbWljQmxvY2ssXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGR5bkJsb2Nrcy5zb21lKFxuICAgIChkeW4pID0+IGR5bi5wYXRoICE9PSBibG9jay5wYXRoICYmIGJsb2NrLnBhdGguc3RhcnRzV2l0aChkeW4ucGF0aCksXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0RHluYW1pY0Jsb2NrcyA9IChcbiAgY29uZmlnOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBwYXRoID0gXCJcIixcbik6IER5bmFtaWNCbG9ja1tdID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykpIHtcbiAgICByZXR1cm4gY29uZmlnLnJlZHVjZShcbiAgICAgIChjYXJyeSwgaXRlbSwgaW5kZXgpID0+IFtcbiAgICAgICAgLi4uY2FycnksXG4gICAgICAgIC4uLmV4dHJhY3REeW5hbWljQmxvY2tzKGl0ZW0sIGAke3BhdGh9LiR7aW5kZXh9YCksXG4gICAgICBdLFxuICAgICAgW10sXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcImR5bmFtaWNcIiBpbiBjb25maWcpIHtcbiAgICBjb25zdCBkeW5hbWljID0gKGNvbmZpZyBhcyBhbnkpLmR5bmFtaWM7XG4gICAgY29uc3Qgc2NvcGVkVmFyID0gT2JqZWN0LmtleXMoZHluYW1pYylbMF07XG4gICAgY29uc3QgeyBmb3JfZWFjaCwgY29udGVudCB9ID0gZHluYW1pY1tzY29wZWRWYXJdWzBdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogYCR7cGF0aH0uZHluYW1pYy4ke3Njb3BlZFZhcn1gLFxuICAgICAgICBmb3JfZWFjaCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc2NvcGVkVmFyLFxuICAgICAgfSxcbiAgICAgIC4uLmV4dHJhY3REeW5hbWljQmxvY2tzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBgJHtwYXRofS5keW5hbWljLiR7c2NvcGVkVmFyfS4wLmNvbnRlbnRgLFxuICAgICAgKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbmZpZykucmVkdWNlKChjYXJyeSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5jYXJyeSwgLi4uZXh0cmFjdER5bmFtaWNCbG9ja3ModmFsdWUgYXMgYW55LCBgJHtwYXRofS4ke2tleX1gKV07XG4gIH0sIFtdIGFzIER5bmFtaWNCbG9ja1tdKTtcbn07XG4iXX0=
|
package/build/expressions.js
CHANGED
|
@@ -15,18 +15,31 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
28
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
39
|
+
exports.expressionAst = expressionAst;
|
|
40
|
+
exports.convertTerraformExpressionToTs = convertTerraformExpressionToTs;
|
|
41
|
+
exports.extractIteratorVariablesFromExpression = extractIteratorVariablesFromExpression;
|
|
42
|
+
exports.dynamicVariableToAst = dynamicVariableToAst;
|
|
30
43
|
// Copyright (c) HashiCorp, Inc
|
|
31
44
|
// SPDX-License-Identifier: MPL-2.0
|
|
32
45
|
const t = __importStar(require("@babel/types"));
|
|
@@ -82,8 +95,7 @@ function canUseFqn(expression) {
|
|
|
82
95
|
}
|
|
83
96
|
function traversalToVariableName(scope, node) {
|
|
84
97
|
if (!hcl2json_2.TFExpressionSyntaxTree.isScopeTraversalExpression(node)) {
|
|
85
|
-
utils_1.logger.error(`Unexpected expression type ${node.type} with value ${node.meta.value} passed to convert to a variable.
|
|
86
|
-
${utils_1.leaveCommentText}`);
|
|
98
|
+
utils_1.logger.error(`Unexpected expression type ${node.type} with value ${node.meta.value} passed to convert to a variable. ${utils_1.fileBugCommentText}`);
|
|
87
99
|
return "";
|
|
88
100
|
}
|
|
89
101
|
const segments = node.meta.traversal;
|
|
@@ -378,7 +390,7 @@ function convertFunctionCallExpressionToTs(scope, node) {
|
|
|
378
390
|
const functionName = node.meta.name;
|
|
379
391
|
const mapping = functions_1.functionsMap[functionName];
|
|
380
392
|
if (!mapping) {
|
|
381
|
-
utils_1.logger.error(`Unknown function ${functionName} encountered. ${utils_1.
|
|
393
|
+
utils_1.logger.error(`Unknown function ${functionName} encountered. ${utils_1.fileBugCommentText}`);
|
|
382
394
|
const argumentExpressions = node.children.map((child) => convertTFExpressionAstToTs(scope, child));
|
|
383
395
|
return t.callExpression(t.identifier(functionName), argumentExpressions);
|
|
384
396
|
}
|
|
@@ -570,13 +582,11 @@ async function expressionAst(input) {
|
|
|
570
582
|
}
|
|
571
583
|
return ast;
|
|
572
584
|
}
|
|
573
|
-
exports.expressionAst = expressionAst;
|
|
574
585
|
async function convertTerraformExpressionToTs(scope, input, targetType) {
|
|
575
586
|
utils_1.logger.debug(`convertTerraformExpressionToTs(${input})`);
|
|
576
587
|
const tsExpression = convertTFExpressionAstToTs(scope, await expressionAst(input));
|
|
577
588
|
return (0, coerceType_1.coerceType)(scope, tsExpression, (0, coerceType_1.findExpressionType)(scope, tsExpression), targetType());
|
|
578
589
|
}
|
|
579
|
-
exports.convertTerraformExpressionToTs = convertTerraformExpressionToTs;
|
|
580
590
|
async function extractIteratorVariablesFromExpression(input) {
|
|
581
591
|
const possibleVariableSpots = await (0, hcl2json_1.getReferencesInExpression)("main.tf", input);
|
|
582
592
|
return possibleVariableSpots
|
|
@@ -587,7 +597,6 @@ async function extractIteratorVariablesFromExpression(input) {
|
|
|
587
597
|
value: spot.value,
|
|
588
598
|
}));
|
|
589
599
|
}
|
|
590
|
-
exports.extractIteratorVariablesFromExpression = extractIteratorVariablesFromExpression;
|
|
591
600
|
function dynamicVariableToAst(scope, node, iteratorName, block = "each") {
|
|
592
601
|
if (iteratorName === "dynamic-block") {
|
|
593
602
|
return expressionForSerialStringConcatenation(scope, [
|
|
@@ -629,5 +638,4 @@ function dynamicVariableToAst(scope, node, iteratorName, block = "each") {
|
|
|
629
638
|
}
|
|
630
639
|
throw new Error(`Can not create AST for iterator variable of '${node.meta.value}'`);
|
|
631
640
|
}
|
|
632
|
-
exports.dynamicVariableToAst = dynamicVariableToAst;
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXhwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLGdEQUFrQztBQUNsQywrREFBdUM7QUFDdkMsbUNBQThEO0FBTTlELDhDQUE4RTtBQUM5RSw4Q0FHeUI7QUFDekIsNkRBQTZEO0FBQzdELDZDQUE4RDtBQUU5RCx1REFBa0Q7QUFDbEQsNkNBQWlEO0FBQ2pELDJDQUEyQztBQUUzQyxNQUFNLHdCQUF3QixHQUFHO0lBQy9CLFNBQVMsRUFBRSxJQUFJO0lBQ2YsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLElBQUk7SUFDakIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixRQUFRLEVBQUUsSUFBSTtJQUNkLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLEtBQUssRUFBRSxJQUFJO0lBQ1gsUUFBUSxFQUFFLEtBQUs7SUFDZixHQUFHLEVBQUUsS0FBSztJQUNWLFFBQVEsRUFBRSxLQUFLO0lBQ2YsUUFBUSxFQUFFLEtBQUs7SUFDZixNQUFNLEVBQUUsS0FBSztJQUNiLE1BQU0sRUFBRSxLQUFLO0NBQ2QsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQUc7SUFDOUIsVUFBVSxFQUFFLEtBQUs7SUFDakIsTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQUtGLFNBQVMsc0JBQXNCLENBQzdCLFVBQXdDLEVBQ3hDLFFBQVEsR0FBRyxLQUFLO0lBRWhCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLElBQUksUUFBUSxJQUFJLGlDQUFHLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFD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cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0RBQWdELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQ25FLENBQUM7QUFDSixDQUFDO0FBL0RELG9EQStEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyB0IGZyb20gXCJAYmFiZWwvdHlwZXNcIjtcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tIFwiQGJhYmVsL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGxlYXZlQ29tbWVudFRleHQsIGxvZ2dlciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBJdGVyYXRvclZhcmlhYmxlUmVmZXJlbmNlLFxuICBQcm9ncmFtU2NvcGUsXG4gIFJlc291cmNlU2NvcGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRSZWZlcmVuY2VzSW5FeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uQXN0IH0gZnJvbSBcIkBjZGt0bi9oY2wyanNvblwiO1xuaW1wb3J0IHtcbiAgVEZFeHByZXNzaW9uU3ludGF4VHJlZSBhcyB0ZXgsXG4gIHdyYXBUZXJyYWZvcm1FeHByZXNzaW9uLFxufSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQgeyBmdW5jdGlvbnNNYXAgfSBmcm9tIFwiLi9mdW5jdGlvbi1iaW5kaW5ncy9mdW5jdGlvbnNcIjtcbmltcG9ydCB7IGNvZXJjZVR5cGUsIGZpbmRFeHByZXNzaW9uVHlwZSB9IGZyb20gXCIuL2NvZXJjZVR5cGVcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZVR5cGUgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGdldFR5cGVBdFBhdGggfSBmcm9tIFwiLi90ZXJyYWZvcm1TY2hlbWFcIjtcbmltcG9ydCB7IGNvbnRhaW5zUmVmZXJlbmNlIH0gZnJvbSBcIi4vcmVmZXJlbmNlc1wiO1xuaW1wb3J0IHsgdmFyaWFibGVOYW1lIH0gZnJvbSBcIi4vdmFyaWFibGVzXCI7XG5cbmNvbnN0IHRmQmluYXJ5T3BlcmF0b3JzVG9DZGt0ZiA9IHtcbiAgbG9naWNhbE9yOiBcIm9yXCIsXG4gIGxvZ2ljYWxBbmQ6IFwiYW5kXCIsXG4gIGdyZWF0ZXJUaGFuOiBcImd0XCIsXG4gIGdyZWF0ZXJUaGFuT3JFcXVhbDogXCJndGVcIixcbiAgbGVzc1RoYW46IFwibHRcIixcbiAgbGVzc1RoYW5PckVxdWFsOiBcImx0ZVwiLFxuICBlcXVhbDogXCJlcVwiLFxuICBub3RFcXVhbDogXCJuZXFcIixcbiAgYWRkOiBcImFkZFwiLFxuICBzdWJ0cmFjdDogXCJzdWJcIixcbiAgbXVsdGlwbHk6IFwibXVsXCIsXG4gIGRpdmlkZTogXCJkaXZcIixcbiAgbW9kdWxvOiBcIm1vZFwiLFxufTtcblxuY29uc3QgdGZVbmFyeU9wZXJhdG9yc1RvQ2RrdGYgPSB7XG4gIGxvZ2ljYWxOb3Q6IFwibm90XCIsXG4gIG5lZ2F0ZTogXCJuZWdhdGVcIixcbn07XG5cbnR5cGUgc3VwcG9ydGVkQmluYXJ5T3BlcmF0b3JzID0ga2V5b2YgdHlwZW9mIHRmQmluYXJ5T3BlcmF0b3JzVG9DZGt0ZjtcbnR5cGUgc3VwcG9ydGVkVW5hcnlPcGVyYXRvcnMgPSBrZXlvZiB0eXBlb2YgdGZVbmFyeU9wZXJhdG9yc1RvQ2RrdGY7XG5cbmZ1bmN0aW9uIHRyYXZlcnNhbFBhcnRzVG9TdHJpbmcoXG4gIHRyYXZlcnNhbHM6IHRleC5UZXJyYWZvcm1UcmF2ZXJzYWxQYXJ0W10sXG4gIGFzU3VmZml4ID0gZmFsc2UsXG4pIHtcbiAgbGV0IHNlZWQgPSBcIlwiO1xuICBpZiAoYXNTdWZmaXggJiYgdGV4LmlzTmFtZVRyYXZlcnNhbFBhcnQodHJhdmVyc2Fsc1swXSkpIHtcbiAgICBzZWVkID0gXCIuXCI7XG4gIH1cbiAgcmV0dXJuIHRyYXZlcnNhbHMucmVkdWNlKChhY2MsIHBhcnQpID0+IHtcbiAgICBpZiAocGFydC50eXBlID09PSBcIm5hbWVUcmF2ZXJzYWxcIikge1xuICAgICAgaWYgKGFjYyA9PT0gc2VlZCkge1xuICAgICAgICByZXR1cm4gYCR7YWNjfSR7cGFydC5zZWdtZW50fWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7YWNjfS4ke3BhcnQuc2VnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7YWNjfVske3BhcnQuc2VnbWVudH1dYDtcbiAgfSwgc2VlZCk7XG59XG5cbmZ1bmN0aW9uIGNhblVzZUZxbihleHByZXNzaW9uOiB0ZXguRXhwcmVzc2lvblR5cGUpIHtcbiAgaWYgKCF0ZXguaXNTY29wZVRyYXZlcnNhbEV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByb290U2VnbWVudCA9IGV4cHJlc3Npb24ubWV0YS50cmF2ZXJzYWxbMF0uc2VnbWVudDtcblxuICByZXR1cm4gIVtcInZhclwiLCBcImxvY2FsXCJdLmluY2x1ZGVzKHJvb3RTZWdtZW50KTtcbn1cblxuZnVuY3Rpb24gdHJhdmVyc2FsVG9WYXJpYWJsZU5hbWUoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIG5vZGU6IHRleC5FeHByZXNzaW9uVHlwZSxcbikge1xuICBpZiAoIXRleC5pc1Njb3BlVHJhdmVyc2FsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIGBVbmV4cGVjdGVkIGV4cHJlc3Npb24gdHlwZSAke25vZGUudHlwZX0gd2l0aCB2YWx1ZSAke25vZGUubWV0YS52YWx1ZX0gcGFzc2VkIHRvIGNvbnZlcnQgdG8gYSB2YXJpYWJsZS4gXG4gICAgICAgICR7bGVhdmVDb21tZW50VGV4dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IG5vZGUubWV0YS50cmF2ZXJzYWw7XG4gIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbm9kZS5tZXRhLmZ1bGxBY2Nlc3NvcjtcbiAgfVxuICBjb25zdCByb290U2VnbWVudCA9IHNlZ21lbnRzWzBdLnNlZ21lbnQ7XG4gIGNvbnN0IHJlc291cmNlID1cbiAgICByb290U2VnbWVudCA9PT0gXCJkYXRhXCJcbiAgICAgID8gYCR7c2VnbWVudHNbMF0uc2VnbWVudH0uJHtzZWdtZW50c1sxXS5zZWdtZW50fWBcbiAgICAgIDogcm9vdFNlZ21lbnQ7XG4gIGNvbnN0IG5hbWUgPVxuICAgIHJvb3RTZWdtZW50ID09PSBcImRhdGFcIiA/IHNlZ21lbnRzWzJdLnNlZ21lbnQgOiBzZWdtZW50c1sxXS5zZWdtZW50O1xuXG4gIHJldHVybiB2YXJpYWJsZU5hbWUoc2NvcGUsIHJlc291cmNlLCBuYW1lKTtcbn1cblxuZnVuY3Rpb24gZXhwcmVzc2lvbkZvclNlcmlhbFN0cmluZ0NvbmNhdGVuYXRpb24oXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlczogdC5FeHByZXNzaW9uW10sXG4pIHtcbiAgY29uc3QgcmVkdWNlZE5vZGVzID0gbm9kZXMucmVkdWNlKChhY2MsIG5vZGUpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIXByZXYpIHJldHVybiBbbm9kZV07XG5cbiAgICBpZiAodC5pc1N0cmluZ0xpdGVyYWwocHJldikgJiYgdC5pc1N0cmluZ0xpdGVyYWwobm9kZSkpIHtcbiAgICAgIGFjYy5wb3AoKTtcbiAgICAgIGFjYy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChwcmV2LnZhbHVlICsgbm9kZS52YWx1ZSkpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBhY2MucHVzaChub2RlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyB0LkV4cHJlc3Npb25bXSk7XG5cbiAgcmV0dXJuIHJlZHVjZWROb2Rlcy5yZWR1Y2UoXG4gICAgKGFjYzogdC5FeHByZXNzaW9uIHwgdW5kZWZpbmVkLCBub2RlOiB0LkV4cHJlc3Npb24pID0+IHtcbiAgICAgIGlmICghYWNjKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICAvLyB3cmFwIGFjY2VzcyB0byBkeW5hbWljIGJsb2NrcyBpbiBUb2tlbi5hc1N0cmluZygpIGFzIHRoZXkgcmV0dXJuIGEgTGF6eVxuICAgICAgLy8gZm9yIC5rZXkgYW5kIC52YWx1ZSB3aGljaCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQgaW4gbGFuZ3VhZ2VzIGxpa2UgUHl0aG9uXG4gICAgICAvLyBiZWNhdXNlIEpTSUkgY3VycmVudGx5IGhhcyBubyBzdXBwb3J0IGZvciB0aGUgdG9TdHJpbmcoKSBtZXRob2QgaW5cbiAgICAgIC8vIGxhbmd1YWdlcyBvdGhlciB0aGFuIFR5cGVTY3JpcHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzgwXG4gICAgICAvLyBleGFtcGxlOiBkeW5hbWljX2l0ZXJhdG9yMC5rZXkgLyBkeW5hbWljX2l0ZXJhdG9yMC52YWx1ZVxuICAgICAgaWYgKFxuICAgICAgICB0LmlzTWVtYmVyRXhwcmVzc2lvbihub2RlKSAmJlxuICAgICAgICB0LmlzSWRlbnRpZmllcihub2RlLm9iamVjdCkgJiZcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhzY29wZS5zY29wZWRWYXJpYWJsZXMgfHwge30pLmluY2x1ZGVzKG5vZGUub2JqZWN0Lm5hbWUpICYmXG4gICAgICAgIHQuaXNJZGVudGlmaWVyKG5vZGUucHJvcGVydHkpICYmXG4gICAgICAgIFtcImtleVwiLCBcInZhbHVlXCJdLmluY2x1ZGVzKG5vZGUucHJvcGVydHkubmFtZSlcbiAgICAgICkge1xuICAgICAgICBub2RlID0gY29lcmNlVHlwZShzY29wZSwgbm9kZSwgXCJkeW5hbWljXCIsIFwic3RyaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdC5iaW5hcnlFeHByZXNzaW9uKFwiK1wiLCBhY2MgYXMgdC5FeHByZXNzaW9uLCBub2RlKTtcbiAgICB9LFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRUZlJlc291cmNlUGF0aEZyb21Ob2RlKG5vZGU6IHRleC5TY29wZVRyYXZlcnNhbEV4cHJlc3Npb24pIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBub2RlLm1ldGEudHJhdmVyc2FsO1xuICBsZXQgcmVzb3VyY2UgPSBzZWdtZW50c1swXS5zZWdtZW50O1xuICBsZXQgcmVzdWx0ID0gW107XG4gIGxldCBhdHRyaWJ1dGVzID0gW107XG5cbiAgaWYgKHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IFwiZGF0YVwiKSB7XG4gICAgcmVzdWx0LnB1c2goc2VnbWVudHNbMF0uc2VnbWVudCk7XG4gICAgcmVzb3VyY2UgPSBzZWdtZW50c1sxXS5zZWdtZW50O1xuICAgIGF0dHJpYnV0ZXMgPSBzZWdtZW50cy5zbGljZSgzKTsgLy8gd2Ugd2FudCB0byBza2lwIHRoZSB2YXJpYWJsZSBuYW1lXG4gIH0gZWxzZSB7XG4gICAgYXR0cmlidXRlcyA9IHNlZ21lbnRzLnNsaWNlKDIpOyAvLyB3ZSB3YW50IHRvIHNraXAgdGhlIHZhcmlhYmxlIG5hbWVcbiAgfVxuXG4gIGNvbnN0IFtwcm92aWRlciwgLi4ucmVzb3VyY2VOYW1lRnJhZ21lbnRzXSA9IHJlc291cmNlLnNwbGl0KFwiX1wiKTtcblxuICAvLyBIYWNrOiBUaGlzIGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgYGV4dGVybmFsYCBwcm92aWRlclxuICAvLyB3aGVyZSB0aGUgZGF0YSBzb3VyY2UgZG9lcyBub3QgaGF2ZSBhIHByb3ZpZGVyIG5hbWUgcHJlZml4XG4gIGlmIChyZXNvdXJjZU5hbWVGcmFnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzb3VyY2VOYW1lRnJhZ21lbnRzLnB1c2gocHJvdmlkZXIpO1xuICB9XG5cbiAgcmVzdWx0LnB1c2gocHJvdmlkZXIpO1xuICByZXN1bHQucHVzaChyZXNvdXJjZU5hbWVGcmFnbWVudHMuam9pbihcIl9cIikpO1xuICByZXN1bHQgPSBbXG4gICAgLi4ucmVzdWx0LFxuICAgIC4uLmF0dHJpYnV0ZXMubWFwKChzZWcpID0+IHtcbiAgICAgIGlmICh0ZXguaXNJbmRleFRyYXZlcnNhbFBhcnQoc2VnKSkge1xuICAgICAgICByZXR1cm4gYFske3NlZy5zZWdtZW50fV1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlZy5zZWdtZW50O1xuICAgIH0pLFxuICBdO1xuXG4gIHJldHVybiByZXN1bHQuam9pbihcIi5cIik7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaXRlcmFsVmFsdWVFeHByZXNzaW9uVG9UcyhcbiAgX3Njb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguTGl0ZXJhbFZhbHVlRXhwcmVzc2lvbixcbikge1xuICBjb25zdCBsaXRlcmFsVHlwZSA9IG5vZGUubWV0YS50eXBlO1xuICBpZiAobGl0ZXJhbFR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdC5udW1lcmljTGl0ZXJhbChOdW1iZXIobm9kZS5tZXRhLnZhbHVlKSk7XG4gIH1cbiAgaWYgKGxpdGVyYWxUeXBlID09PSBcImJvb2xcIikge1xuICAgIHJldHVybiB0LmJvb2xlYW5MaXRlcmFsKG5vZGUubWV0YS52YWx1ZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChub2RlLm1ldGEudmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0U2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5TY29wZVRyYXZlcnNhbEV4cHJlc3Npb24sXG4pIHtcbiAgY29uc3QgaGFzUmVmZXJlbmNlID0gY29udGFpbnNSZWZlcmVuY2Uobm9kZSk7XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBub2RlLm1ldGEudHJhdmVyc2FsO1xuXG4gIGlmIChzZWdtZW50c1swXS5zZWdtZW50ID09PSBcImVhY2hcIiAmJiBzY29wZS5mb3JFYWNoSXRlcmF0b3JOYW1lKSB7XG4gICAgcmV0dXJuIGR5bmFtaWNWYXJpYWJsZVRvQXN0KHNjb3BlLCBub2RlLCBzY29wZS5mb3JFYWNoSXRlcmF0b3JOYW1lKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50c1swXS5zZWdtZW50ID09PSBcImNvdW50XCIgJiYgc2NvcGUuY291bnRJdGVyYXRvck5hbWUpIHtcbiAgICByZXR1cm4gZHluYW1pY1ZhcmlhYmxlVG9Bc3Qoc2NvcGUsIG5vZGUsIHNjb3BlLmNvdW50SXRlcmF0b3JOYW1lLCBcImNvdW50XCIpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IFwic2VsZlwiKSB7XG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybVNlbGZcIixcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoXCJUZXJyYWZvcm1TZWxmXCIpLCB0LmlkZW50aWZpZXIoXCJnZXRBbnlcIikpLFxuXG4gICAgICBbdC5zdHJpbmdMaXRlcmFsKHRyYXZlcnNhbFBhcnRzVG9TdHJpbmcoc2VnbWVudHMuc2xpY2UoMSkpKV0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNldHRpbmcudmFsdWUsIHNldHRpbmcudmFsdWVbMV0uaWRcbiAgY29uc3QgZHluYW1pY0Jsb2NrID0gc2NvcGUuc2NvcGVkVmFyaWFibGVzPy5bc2VnbWVudHNbMF0uc2VnbWVudF07XG4gIGlmIChkeW5hbWljQmxvY2spIHtcbiAgICBpZiAoZHluYW1pY0Jsb2NrID09PSBcImR5bmFtaWMtYmxvY2tcIikge1xuICAgICAgcmV0dXJuIGR5bmFtaWNWYXJpYWJsZVRvQXN0KFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgZHluYW1pY0Jsb2NrLFxuICAgICAgICB0cmF2ZXJzYWxQYXJ0c1RvU3RyaW5nKHNlZ21lbnRzKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkeW5hbWljVmFyaWFibGVUb0FzdChzY29wZSwgbm9kZSwgZHluYW1pY0Jsb2NrLCBzZWdtZW50c1swXS5zZWdtZW50KTtcbiAgfVxuXG4gIC8vIFRoaXMgbWF5IGJlIGEgdmFyaWFibGUgcmVmZXJlbmNlIHRoYXQgd2UgZG9uJ3QgdW5kZXJzdGFuZCB5ZXQsIHNvIHdlIHdyYXAgaXQgaW4gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgLy8gZm9yIFRlcnJhZm9ybSB0byBoYW5kbGVcbiAgbGV0IHZhcklkZW50aWZpZXI6IHQuRXhwcmVzc2lvbiA9IHQuc3RyaW5nTGl0ZXJhbChcbiAgICBgXFwkeyR7bm9kZS5tZXRhLmZ1bGxBY2Nlc3Nvcn19YCxcbiAgKTtcblxuICBpZiAoaGFzUmVmZXJlbmNlKSB7XG4gICAgdmFySWRlbnRpZmllciA9IHQuaWRlbnRpZmllcihcbiAgICAgIGNhbWVsQ2FzZSh0cmF2ZXJzYWxUb1ZhcmlhYmxlTmFtZShzY29wZSwgbm9kZSkpLFxuICAgICk7XG4gIH1cblxuICBpZiAoW1widmFyXCIsIFwibG9jYWxcIl0uaW5jbHVkZXMoc2VnbWVudHNbMF0uc2VnbWVudCkpIHtcbiAgICBjb25zdCB2YXJpYWJsZUFjY2Vzc29yID1cbiAgICAgIHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IFwidmFyXCJcbiAgICAgICAgPyB0Lm1lbWJlckV4cHJlc3Npb24odmFySWRlbnRpZmllciwgdC5pZGVudGlmaWVyKFwidmFsdWVcIikpXG4gICAgICAgIDogdmFySWRlbnRpZmllcjtcblxuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJGblwiLFxuICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjYWxsZWUgPSB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIHQuaWRlbnRpZmllcihcIkZuXCIpLFxuICAgICAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24oY2FsbGVlLCBbXG4gICAgICAgIHZhcmlhYmxlQWNjZXNzb3IsXG4gICAgICAgIHQuYXJyYXlFeHByZXNzaW9uKFxuICAgICAgICAgIHNlZ21lbnRzLnNsaWNlKDIpLm1hcCgocykgPT4gdC5zdHJpbmdMaXRlcmFsKHMuc2VnbWVudCkpLFxuICAgICAgICApLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzb3I7XG4gIH1cblxuICBpZiAoIWhhc1JlZmVyZW5jZSB8fCBzY29wZS53aXRoaW5PdmVycmlkZUV4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gdmFySWRlbnRpZmllcjtcbiAgfVxuXG4gIGNvbnN0IHJvb3RTZWdtZW50ID0gc2VnbWVudHNbMF0uc2VnbWVudDtcbiAgY29uc3QgYXR0cmlidXRlSW5kZXggPSByb290U2VnbWVudCA9PT0gXCJkYXRhXCIgPyAzIDogMjtcbiAgY29uc3QgYXR0cmlidXRlU2VnbWVudHMgPSBzZWdtZW50cy5zbGljZShhdHRyaWJ1dGVJbmRleCk7XG4gIGNvbnN0IG51bWVyaWNBY2Nlc3NvckluZGV4ID0gYXR0cmlidXRlU2VnbWVudHMuZmluZEluZGV4KChzZWcpID0+XG4gICAgdGV4LmlzSW5kZXhUcmF2ZXJzYWxQYXJ0KHNlZyksXG4gICk7XG4gIGxldCBtaW5BY2Nlc3NvckluZGV4ID0gbnVtZXJpY0FjY2Vzc29ySW5kZXg7XG4gIGxldCBtYXBBY2Nlc3NvckluZGV4ID0gLTE7XG4gIGlmIChudW1lcmljQWNjZXNzb3JJbmRleCA9PT0gLTEpIHtcbiAgICAvLyBvbmx5IGRvIHRoaXMgaWYgd2UgaGF2ZSB0bywgaWYgd2UgYWxyZWFkeSBoYXZlIGFcbiAgICAvLyBudW1lcmljIGFjY2Vzc29yLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgYWRkaXRpb25hbCB3b3JrXG4gICAgY29uc3QgcmVzb3VyY2VQYXRoID0gZ2V0VGZSZXNvdXJjZVBhdGhGcm9tTm9kZShub2RlKTtcbiAgICBsZXQgdXNpbmdTdWJQYXRoVHlwZSA9IGZhbHNlO1xuICAgIGNvbnN0IHBhcnRzID0gcmVzb3VyY2VQYXRoLnNwbGl0KFwiLlwiKS5maWx0ZXIoKHApID0+IHAgIT09IFwiXCIpO1xuICAgIGNvbnN0IG1pblBhcnRzID0gYXR0cmlidXRlSW5kZXg7IC8vIHdlIG5lZWQgdG8gc3RvcCBiZWZvcmUgZGF0YS5hd3MucmVzb3VyY2VfbmFtZSBvciBhd3MucmVzb3VyY2VfbmFtZVxuICAgIGNvbnN0IG9yaWdpbmFsUGFydHMgPSBwYXJ0cy5sZW5ndGg7XG4gICAgbGV0IGhhc01hcEFjY2Vzc29yID0gZmFsc2U7XG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA+PSBtaW5QYXJ0cykge1xuICAgICAgY29uc3QgdHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHBhcnRzLmpvaW4oXCIuXCIpKTtcbiAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmIHR5cGVbMF0gPT09IFwibWFwXCIgJiYgdXNpbmdTdWJQYXRoVHlwZSkge1xuICAgICAgICAgIGhhc01hcEFjY2Vzc29yID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFydHMucG9wKCk7XG4gICAgICB1c2luZ1N1YlBhdGhUeXBlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFwQWNjZXNzb3IpIHtcbiAgICAgIG1hcEFjY2Vzc29ySW5kZXggPSBvcmlnaW5hbFBhcnRzIC0gcGFydHMubGVuZ3RoIC0gMTtcbiAgICAgIG1pbkFjY2Vzc29ySW5kZXggPSBtYXBBY2Nlc3NvckluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5lZWRzUHJvcGVydHlBY2Nlc3MgPSBtaW5BY2Nlc3NvckluZGV4ID49IDA7XG5cbiAgY29uc3QgcmVmU2VnbWVudHMgPSBuZWVkc1Byb3BlcnR5QWNjZXNzXG4gICAgPyBhdHRyaWJ1dGVTZWdtZW50cy5zbGljZSgwLCBtaW5BY2Nlc3NvckluZGV4KVxuICAgIDogYXR0cmlidXRlU2VnbWVudHM7XG4gIGNvbnN0IG5vblJlZlNlZ21lbnRzID0gbmVlZHNQcm9wZXJ0eUFjY2Vzc1xuICAgID8gYXR0cmlidXRlU2VnbWVudHMuc2xpY2UobWluQWNjZXNzb3JJbmRleClcbiAgICA6IFtdO1xuXG4gIGNvbnN0IHJlZiA9IHJlZlNlZ21lbnRzLnJlZHVjZShcbiAgICAoYWNjOiB0LkV4cHJlc3Npb24sIHNlZywgaW5kZXgpID0+XG4gICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIGFjYyxcbiAgICAgICAgdC5pZGVudGlmaWVyKFxuICAgICAgICAgIGluZGV4ID09PSAwICYmIHJvb3RTZWdtZW50ID09PSBcIm1vZHVsZVwiXG4gICAgICAgICAgICA/IGNhbWVsQ2FzZShzZWcuc2VnbWVudCArIFwiT3V0cHV0XCIpXG4gICAgICAgICAgICA6IGNhbWVsQ2FzZShzZWcuc2VnbWVudCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIHZhcklkZW50aWZpZXIsXG4gICk7XG5cbiAgaWYgKG5vblJlZlNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiByZWY7XG4gIH1cblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkZuXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG4gIGNvbnN0IGNhbGxlZSA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICk7XG4gIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKGNhbGxlZSwgW1xuICAgIHJlZixcbiAgICB0LmFycmF5RXhwcmVzc2lvbihub25SZWZTZWdtZW50cy5tYXAoKHMpID0+IHQuc3RyaW5nTGl0ZXJhbChzLnNlZ21lbnQpKSksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VW5hcnlPcEV4cHJlc3Npb25Ub1RzKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgbm9kZTogdGV4LlVuYXJ5T3BFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IG9wZXJhbmQgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLnZhbHVlRXhwcmVzc2lvbikhLFxuICApO1xuXG4gIGxldCBmbk5hbWUgPSBub2RlLm1ldGEub3BlcmF0b3I7XG4gIGlmICh0ZlVuYXJ5T3BlcmF0b3JzVG9DZGt0Zltmbk5hbWUgYXMgc3VwcG9ydGVkVW5hcnlPcGVyYXRvcnNdKSB7XG4gICAgZm5OYW1lID0gdGZVbmFyeU9wZXJhdG9yc1RvQ2RrdGZbZm5OYW1lIGFzIHN1cHBvcnRlZFVuYXJ5T3BlcmF0b3JzXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0IHVua25vd24gb3BlcmF0b3IgJHtub2RlLm1ldGEub3BlcmF0b3J9YCk7XG4gIH1cblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIk9wXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG5cbiAgY29uc3QgZm4gPSB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKFwiT3BcIiksIHQuaWRlbnRpZmllcihmbk5hbWUpKTtcblxuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihmbiwgW29wZXJhbmRdKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEJpbmFyeU9wRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguQmluYXJ5T3BFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IGxlZnQgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLmxoc0V4cHJlc3Npb24pISxcbiAgKTtcbiAgY29uc3QgcmlnaHQgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLnJoc0V4cHJlc3Npb24pISxcbiAgKTtcblxuICBsZXQgZm5OYW1lID0gbm9kZS5tZXRhLm9wZXJhdG9yO1xuICBpZiAodGZCaW5hcnlPcGVyYXRvcnNUb0Nka3RmW2ZuTmFtZSBhcyBzdXBwb3J0ZWRCaW5hcnlPcGVyYXRvcnNdKSB7XG4gICAgZm5OYW1lID0gdGZCaW5hcnlPcGVyYXRvcnNUb0Nka3RmW2ZuTmFtZSBhcyBzdXBwb3J0ZWRCaW5hcnlPcGVyYXRvcnNdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgdW5rbm93biBvcGVyYXRvciAke25vZGUubWV0YS5vcGVyYXRvcn1gKTtcbiAgfVxuXG4gIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgIGNvbnN0cnVjdE5hbWU6IFwiT3BcIixcbiAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICB9KTtcblxuICBjb25zdCBmbiA9IHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoXCJPcFwiKSwgdC5pZGVudGlmaWVyKGZuTmFtZSkpO1xuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihmbiwgW2xlZnQsIHJpZ2h0XSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUZW1wbGF0ZUV4cHJlc3Npb25Ub1RzKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgbm9kZTogdGV4LlRlbXBsYXRlRXhwcmVzc2lvbiB8IHRleC5UZW1wbGF0ZVdyYXBFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IHBhcnRzID0gbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiAoe1xuICAgIG5vZGU6IGNoaWxkLFxuICAgIGV4cHI6IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBjaGlsZCksXG4gIH0pKTtcblxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICBpZiAodC5pc1N0cmluZ0xpdGVyYWwobGFzdFBhcnQuZXhwcikgJiYgbGFzdFBhcnQuZXhwci52YWx1ZSA9PT0gXCJcXG5cIikge1xuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUgd2UgYWRkIGR1ZSB0b1xuICAgIC8vIGhlcmVkb2NzIGxvb2tzIHVnbHkgYW5kIHVubmVjZXNzYXJ5IGluIHRoZSBnZW5lcmF0ZWQgY29kZSwgc28gd2VcbiAgICAvLyB0cnkgdG8gcmVtb3ZlIGl0XG4gICAgcGFydHMucG9wKCk7XG4gIH1cblxuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChub2RlLm1ldGEudmFsdWUpO1xuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBwYXJ0c1swXS5leHByO1xuICB9XG5cbiAgbGV0IGlzU2NvcGVkVHJhdmVyc2FsID0gZmFsc2U7XG4gIGNvbnN0IGV4cHJlc3Npb25zOiB0LkV4cHJlc3Npb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHsgbm9kZSwgZXhwciB9IG9mIHBhcnRzKSB7XG4gICAgaWYgKFxuICAgICAgdGV4LmlzU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uKG5vZGUpICYmXG4gICAgICAhdC5pc1N0cmluZ0xpdGVyYWwoZXhwcikgJiZcbiAgICAgICF0LmlzQ2FsbEV4cHJlc3Npb24oZXhwcilcbiAgICApIHtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2godC5zdHJpbmdMaXRlcmFsKFwiJHtcIikpO1xuICAgICAgaXNTY29wZWRUcmF2ZXJzYWwgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyB3ZSBzaG91bGQgaWRlYWxseSBiZSBkb2luZyB0eXBlIGNvZXJjaW9uIG1vcmVcbiAgICAgIC8vIGNhcmVmdWxseSBoZXJlLCBiZWNhdXNlIGl0IG1heSBub3QgYWx3YXlzIGJlIG5lZWRlZFxuICAgICAgdC5pc0NhbGxFeHByZXNzaW9uKGV4cHIpXG4gICAgKSB7XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJUb2tlblwiLFxuICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cHJlc3Npb25zLnB1c2goXG4gICAgICAgIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzU3RyaW5nKCUlZXhwciUlKWApKHtcbiAgICAgICAgICBleHByLFxuICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb24sXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1Njb3BlZFRyYXZlcnNhbCkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChcIn1cIikpO1xuICAgICAgICBpc1Njb3BlZFRyYXZlcnNhbCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpO1xuICB9XG5cbiAgaWYgKGlzU2NvcGVkVHJhdmVyc2FsKSB7XG4gICAgZXhwcmVzc2lvbnMucHVzaCh0LnN0cmluZ0xpdGVyYWwoXCJ9XCIpKTtcbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uRm9yU2VyaWFsU3RyaW5nQ29uY2F0ZW5hdGlvbihzY29wZSwgZXhwcmVzc2lvbnMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2JqZWN0RXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguT2JqZWN0RXhwcmVzc2lvbixcbikge1xuICByZXR1cm4gdC5vYmplY3RFeHByZXNzaW9uKFxuICAgIE9iamVjdC5lbnRyaWVzKG5vZGUubWV0YS5pdGVtcylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUNoaWxkID0gdGV4LmdldENoaWxkV2l0aFZhbHVlKG5vZGUsIHZhbHVlKTtcbiAgICAgICAgaWYgKCF2YWx1ZUNoaWxkKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gdmFsdWUgZm9yIG9iamVjdCBrZXkgJyR7a2V5fSc6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICB0LmlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhzY29wZSwgdmFsdWVDaGlsZCksXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigocykgPT4gcyAhPT0gbnVsbCkgYXMgdC5PYmplY3RQcm9wZXJ0eVtdLFxuICApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25DYWxsRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguRnVuY3Rpb25DYWxsRXhwcmVzc2lvbixcbikge1xuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBub2RlLm1ldGEubmFtZTtcbiAgY29uc3QgbWFwcGluZyA9IGZ1bmN0aW9uc01hcFtmdW5jdGlvbk5hbWVdO1xuXG4gIGlmICghbWFwcGluZykge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIGBVbmtub3duIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBlbmNvdW50ZXJlZC4gJHtsZWF2ZUNvbW1lbnRUZXh0fWAsXG4gICAgKTtcbiAgICBjb25zdCBhcmd1bWVudEV4cHJlc3Npb25zID0gbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PlxuICAgICAgY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoc2NvcGUsIGNoaWxkKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24odC5pZGVudGlmaWVyKGZ1bmN0aW9uTmFtZSksIGFyZ3VtZW50RXhwcmVzc2lvbnMpO1xuICB9XG5cbiAgY29uc3QgdHJhbnNmb3JtZWROb2RlOiB0ZXguRnVuY3Rpb25DYWxsRXhwcmVzc2lvbiA9IG1hcHBpbmcudHJhbnNmb3JtZXJcbiAgICA/IG1hcHBpbmcudHJhbnNmb3JtZXIobm9kZSlcbiAgICA6IG5vZGU7XG5cbiAgY29uc3QgYXJndW1lbnRFeHByZXNzaW9ucyA9IHRyYW5zZm9ybWVkTm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PlxuICAgIGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBjaGlsZCksXG4gICk7XG5cbiAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgY29uc3RydWN0TmFtZTogXCJGblwiLFxuICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gIH0pO1xuXG4gIGNvbnN0IGNhbGxlZSA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICB0LmlkZW50aWZpZXIobWFwcGluZy5uYW1lKSxcbiAgKTtcblxuICBpZiAoXG4gICAgbWFwcGluZy5wYXJhbWV0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICBtYXBwaW5nLnBhcmFtZXRlcnNbbWFwcGluZy5wYXJhbWV0ZXJzLmxlbmd0aCAtIDFdLnZhcmlhZGljXG4gICkge1xuICAgIGNvbnN0IGxhc3RQYXJhbWV0ZXJUeXBlID1cbiAgICAgIG1hcHBpbmcucGFyYW1ldGVyc1ttYXBwaW5nLnBhcmFtZXRlcnMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICBjb25zdCBub25WYXJpYWRpY0FyZ3VtZW50cyA9IGFyZ3VtZW50RXhwcmVzc2lvbnMuc2xpY2UoXG4gICAgICAwLFxuICAgICAgbWFwcGluZy5wYXJhbWV0ZXJzLmxlbmd0aCAtIDEsXG4gICAgKTtcblxuICAgIGNvbnN0IGZuQ2FsbEFyZ3VtZW50cyA9IFtcbiAgICAgIC4uLm5vblZhcmlhZGljQXJndW1lbnRzLm1hcCgoYXJnRXhwciwgaW5kZXgpID0+XG4gICAgICAgIGNvZXJjZVR5cGUoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgYXJnRXhwcixcbiAgICAgICAgICBmaW5kRXhwcmVzc2lvblR5cGUoc2NvcGUsIGFyZ0V4cHIpLFxuICAgICAgICAgIG1hcHBpbmcucGFyYW1ldGVyc1tpbmRleF0udHlwZSxcbiAgICAgICAgKSxcbiAgICAgICksXG5cbiAgICAgIHQuYXJyYXlFeHByZXNzaW9uKFxuICAgICAgICBhcmd1bWVudEV4cHJlc3Npb25zXG4gICAgICAgICAgLnNsaWNlKG1hcHBpbmcucGFyYW1ldGVycy5sZW5ndGggLSAxKVxuICAgICAgICAgIC5tYXAoKGFyZ0V4cHIpID0+XG4gICAgICAgICAgICBjb2VyY2VUeXBlKFxuICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgYXJnRXhwcixcbiAgICAgICAgICAgICAgZmluZEV4cHJlc3Npb25UeXBlKHNjb3BlLCBhcmdFeHByKSxcbiAgICAgICAgICAgICAgbGFzdFBhcmFtZXRlclR5cGUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICApLFxuICAgIF07XG5cbiAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihjYWxsZWUsIGZuQ2FsbEFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihcbiAgICBjYWxsZWUsXG4gICAgYXJndW1lbnRFeHByZXNzaW9ucy5tYXAoKGFyZ0V4cHIsIGluZGV4KSA9PlxuICAgICAgY29lcmNlVHlwZShcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGFyZ0V4cHIsXG4gICAgICAgIGZpbmRFeHByZXNzaW9uVHlwZShzY29wZSwgYXJnRXhwciksXG4gICAgICAgIG1hcHBpbmcucGFyYW1ldGVyc1tpbmRleF0udHlwZSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEluZGV4RXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguSW5kZXhFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25FeHByZXNzaW9uQ2hpbGQgPSB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUoXG4gICAgbm9kZSxcbiAgICBub2RlLm1ldGEuY29sbGVjdGlvbkV4cHJlc3Npb24sXG4gICk7XG4gIGNvbnN0IGtleUV4cHJlc3Npb25DaGlsZCA9IHRleC5nZXRDaGlsZFdpdGhWYWx1ZShcbiAgICBub2RlLFxuICAgIG5vZGUubWV0YS5rZXlFeHByZXNzaW9uLFxuICApO1xuXG4gIGNvbnN0IGNvbGxlY3Rpb25FeHByZXNzaW9uID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoXG4gICAgc2NvcGUsXG4gICAgY29sbGVjdGlvbkV4cHJlc3Npb25DaGlsZCEsXG4gICk7XG4gIGNvbnN0IGtleUV4cHJlc3Npb24gPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhzY29wZSwga2V5RXhwcmVzc2lvbkNoaWxkISk7XG5cbiAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgY29uc3RydWN0TmFtZTogXCJGblwiLFxuICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gIH0pO1xuICBjb25zdCBjYWxsZWUgPSB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgdC5pZGVudGlmaWVyKFwiRm5cIiksXG4gICAgdC5pZGVudGlmaWVyKFwibG9va3VwTmVzdGVkXCIpLFxuICApO1xuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihjYWxsZWUsIFtcbiAgICBjb2xsZWN0aW9uRXhwcmVzc2lvbixcbiAgICB0LmFycmF5RXhwcmVzc2lvbihba2V5RXhwcmVzc2lvbl0pLFxuICBdKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFNwbGF0RXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguU3BsYXRFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IHNvdXJjZUV4cHJlc3Npb25DaGlsZCA9IHRleC5nZXRDaGlsZFdpdGhWYWx1ZShcbiAgICBub2RlLFxuICAgIG5vZGUubWV0YS5zb3VyY2VFeHByZXNzaW9uLFxuICApITtcbiAgY29uc3Qgc291cmNlRXhwcmVzc2lvbiA9IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKFxuICAgIHNjb3BlLFxuICAgIHNvdXJjZUV4cHJlc3Npb25DaGlsZCxcbiAgKTtcblxuICAvLyBXZSBkb24ndCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBleHByZXNzaW9uIGJlY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgc3BsYXQgaXMgZ29pbmcgdG8gYmVcbiAgLy8gYSBzdHJpbmdcbiAgY29uc3QgcmVsYXRpdmVFeHByZXNzaW9uID0gbm9kZS5tZXRhLmVhY2hFeHByZXNzaW9uLnN0YXJ0c1dpdGgoXG4gICAgbm9kZS5tZXRhLmFub25TeW1ib2xFeHByZXNzaW9uLFxuICApXG4gICAgPyBub2RlLm1ldGEuZWFjaEV4cHJlc3Npb24uc2xpY2Uobm9kZS5tZXRhLmFub25TeW1ib2xFeHByZXNzaW9uLmxlbmd0aClcbiAgICA6IG5vZGUubWV0YS5lYWNoRXhwcmVzc2lvbjtcblxuICBjb25zdCBzZWdtZW50cyA9IHJlbGF0aXZlRXhwcmVzc2lvbi5zcGxpdCgvXFwufFxcW3xcXF0vKS5maWx0ZXIoKHMpID0+IHMpO1xuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkZuXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG4gIGNvbnN0IGNhbGxlZSA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICk7XG5cbiAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24oY2FsbGVlLCBbXG4gICAgc291cmNlRXhwcmVzc2lvbixcbiAgICB0LmFycmF5RXhwcmVzc2lvbihbXG4gICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIHVzZSB0aGUgYW5vblN5bWJvbEV4cHJlc3Npb24gaGVyZSBiZWNhdXNlXG4gICAgICAvLyBpdCBvbmx5IGNoYW5nZXMgYmV0d2VlbiAuKiBhbmQgWypdIHdoaWNoIHdlIGRvbid0IGNhcmUgYWJvdXRcbiAgICAgIHQuc3RyaW5nTGl0ZXJhbChcIipcIiksXG4gICAgICAuLi5zZWdtZW50cy5tYXAodC5zdHJpbmdMaXRlcmFsKSxcbiAgICBdKSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDb25kaXRpb25hbEV4cHJlc3Npb25Ub1RzKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgbm9kZTogdGV4LkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcbikge1xuICBjb25zdCBjb25kaXRpb25DaGlsZCA9IHRleC5nZXRDaGlsZFdpdGhWYWx1ZShcbiAgICBub2RlLFxuICAgIG5vZGUubWV0YS5jb25kaXRpb25FeHByZXNzaW9uLFxuICApITtcbiAgbGV0IGNvbmRpdGlvbiA9IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBjb25kaXRpb25DaGlsZCk7XG4gIGlmICh0LmlzSWRlbnRpZmllcihjb25kaXRpb24pICYmIGNhblVzZUZxbihjb25kaXRpb25DaGlsZCkpIHtcbiAgICAvLyBXZSBoYXZlIGEgcmVzb3VyY2Ugb3IgZGF0YSBzb3VyY2UgaGVyZSwgd2hpY2ggd2Ugd291bGQgbmVlZCB0b1xuICAgIC8vIHJlZmVyZW5jZSB1c2luZyBmcW5cbiAgICBjb25kaXRpb24gPSB0Lm1lbWJlckV4cHJlc3Npb24oY29uZGl0aW9uLCB0LmlkZW50aWZpZXIoXCJmcW5cIikpO1xuICB9XG5cbiAgY29uc3QgdHJ1ZUV4cHJlc3Npb24gPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLnRydWVFeHByZXNzaW9uKSEsXG4gICk7XG5cbiAgY29uc3QgZmFsc2VFeHByZXNzaW9uID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoXG4gICAgc2NvcGUsXG4gICAgdGV4LmdldENoaWxkV2l0aFZhbHVlKG5vZGUsIG5vZGUubWV0YS5mYWxzZUV4cHJlc3Npb24pISxcbiAgKTtcblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcImNvbmRpdGlvbmFsXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG5cbiAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24odC5pZGVudGlmaWVyKFwiY29uZGl0aW9uYWxcIiksIFtcbiAgICBjb25kaXRpb24sXG4gICAgdHJ1ZUV4cHJlc3Npb24sXG4gICAgZmFsc2VFeHByZXNzaW9uLFxuICBdKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFR1cGxlRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguVHVwbGVFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IGV4cHJlc3Npb25zID0gbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PlxuICAgIGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBjaGlsZCksXG4gICk7XG5cbiAgcmV0dXJuIHQuYXJyYXlFeHByZXNzaW9uKGV4cHJlc3Npb25zKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJlbGF0aXZlVHJhdmVyc2FsRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguUmVsYXRpdmVUcmF2ZXJzYWxFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IHNlZ21lbnRzID0gbm9kZS5tZXRhLnRyYXZlcnNhbDtcblxuICAvLyBUaGUgbGVmdCBoYW5kIHNpZGUgLyBzb3VyY2Ugb2YgYSByZWxhdGl2ZSB0cmF2ZXJzYWwgaXMgbm90IGEgcHJvcGVyXG4gIC8vIG9iamVjdCAvIHJlc291cmNlIC8gZGF0YSB0aGluZyB0aGF0IGlzIGJlaW5nIHJlZmVyZW5jZWRcbiAgY29uc3Qgc291cmNlID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoXG4gICAgc2NvcGUsXG4gICAgdGV4LmdldENoaWxkV2l0aFZhbHVlKG5vZGUsIG5vZGUubWV0YS5zb3VyY2VFeHByZXNzaW9uKSEsXG4gICk7XG5cbiAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgY29uc3RydWN0TmFtZTogXCJGblwiLFxuICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gIH0pO1xuICBjb25zdCBjYWxsZWUgPSB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgdC5pZGVudGlmaWVyKFwiRm5cIiksXG4gICAgdC5pZGVudGlmaWVyKFwibG9va3VwTmVzdGVkXCIpLFxuICApO1xuXG4gIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKGNhbGxlZSwgW1xuICAgIHNvdXJjZSxcbiAgICB0LmFycmF5RXhwcmVzc2lvbihzZWdtZW50cy5tYXAoKHMpID0+IHQuc3RyaW5nTGl0ZXJhbChzLnNlZ21lbnQpKSksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Rm9yRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguRm9yRXhwcmVzc2lvbixcbikge1xuICBjb25zdCBjb2xsZWN0aW9uQ2hpbGQgPSB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUoXG4gICAgbm9kZSxcbiAgICBub2RlLm1ldGEuY29sbGVjdGlvbkV4cHJlc3Npb24sXG4gICkhO1xuXG4gIGxldCBjb2xsZWN0aW9uRXhwcmVzc2lvbiA9IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBjb2xsZWN0aW9uQ2hpbGQpO1xuXG4gIGlmICh0LmlzSWRlbnRpZmllcihjb2xsZWN0aW9uRXhwcmVzc2lvbikgJiYgY2FuVXNlRnFuKGNvbGxlY3Rpb25DaGlsZCkpIHtcbiAgICAvLyBXZSBoYXZlIGEgcmVzb3VyY2Ugb3IgZGF0YSBzb3VyY2UgaGVyZSwgd2hpY2ggd2Ugd291bGQgbmVlZCB0b1xuICAgIC8vIHJlZmVyZW5jZSB1c2luZyBmcW5cbiAgICBjb2xsZWN0aW9uRXhwcmVzc2lvbiA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgIGNvbGxlY3Rpb25FeHByZXNzaW9uLFxuICAgICAgdC5pZGVudGlmaWVyKFwiZnFuXCIpLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBjb2xsZWN0aW9uUmVxdWlyZXNXcmFwcGluZyA9ICF0LmlzU3RyaW5nTGl0ZXJhbChjb2xsZWN0aW9uRXhwcmVzc2lvbik7XG4gIGNvbnN0IGV4cHJlc3Npb25zID0gW107XG4gIGNvbnN0IGNvbmRpdGlvbkJvZHkgPSBub2RlLm1ldGEua2V5VmFyXG4gICAgPyBgJHtub2RlLm1ldGEua2V5VmFyfSwgJHtub2RlLm1ldGEudmFsVmFyfWBcbiAgICA6IG5vZGUubWV0YS52YWxWYXI7XG5cbiAgY29uc3Qgb3BlbkJyYWNlID0gbm9kZS5tZXRhLm9wZW5SYW5nZVZhbHVlO1xuICBjb25zdCBjbG9zZUJyYWNlID0gbm9kZS5tZXRhLmNsb3NlUmFuZ2VWYWx1ZTtcbiAgY29uc3QgZ3JvdXBlZCA9IG5vZGUubWV0YS5ncm91cGVkVmFsdWUgPyBcIi4uLlwiIDogXCJcIjtcbiAgY29uc3QgdmFsdWVFeHByZXNzaW9uID0gYCR7bm9kZS5tZXRhLnZhbHVlRXhwcmVzc2lvbn0ke2dyb3VwZWR9YDtcblxuICBjb25zdCBwcmVmaXggPSBgXFwkeyR7b3BlbkJyYWNlfSBmb3IgJHtjb25kaXRpb25Cb2R5fSBpbiBgO1xuICBjb25zdCBrZXlWYWx1ZSA9IG5vZGUubWV0YS5rZXlFeHByZXNzaW9uXG4gICAgPyBgIDogJHtub2RlLm1ldGEua2V5RXhwcmVzc2lvbn0gPT4gJHt2YWx1ZUV4cHJlc3Npb259YFxuICAgIDogYCA6ICR7dmFsdWVFeHByZXNzaW9ufWA7XG4gIGNvbnN0IGNvbmRpdGlvbmFsID0gbm9kZS5tZXRhLmNvbmRpdGlvbmFsRXhwcmVzc2lvbjtcbiAgY29uc3Qgc3VmZml4ID0gYCR7a2V5VmFsdWV9JHtcbiAgICBjb25kaXRpb25hbCA/IGAgaWYgJHtjb25kaXRpb25hbH1gIDogXCJcIlxuICB9JHtjbG9zZUJyYWNlfX1gO1xuXG4gIGV4cHJlc3Npb25zLnB1c2godC5zdHJpbmdMaXRlcmFsKHByZWZpeCkpO1xuICBpZiAoY29sbGVjdGlvblJlcXVpcmVzV3JhcHBpbmcpIHtcbiAgICBleHByZXNzaW9ucy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChcIiR7XCIpKTtcbiAgfVxuICBleHByZXNzaW9ucy5wdXNoKGNvbGxlY3Rpb25FeHByZXNzaW9uKTtcbiAgaWYgKGNvbGxlY3Rpb25SZXF1aXJlc1dyYXBwaW5nKSB7XG4gICAgZXhwcmVzc2lvbnMucHVzaCh0LnN0cmluZ0xpdGVyYWwoXCJ9XCIpKTtcbiAgfVxuICBleHByZXNzaW9ucy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChzdWZmaXgpKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbkZvclNlcmlhbFN0cmluZ0NvbmNhdGVuYXRpb24oc2NvcGUsIGV4cHJlc3Npb25zKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguRXhwcmVzc2lvblR5cGUsXG4pOiB0LkV4cHJlc3Npb24ge1xuICBpZiAodGV4LmlzTGl0ZXJhbFZhbHVlRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0TGl0ZXJhbFZhbHVlRXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc1Njb3BlVHJhdmVyc2FsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0U2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzVW5hcnlPcEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydFVuYXJ5T3BFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzQmluYXJ5T3BFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRCaW5hcnlPcEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNUZW1wbGF0ZUV4cHJlc3Npb24obm9kZSkgfHwgdGV4LmlzVGVtcGxhdGVXcmFwRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0VGVtcGxhdGVFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzT2JqZWN0RXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0T2JqZWN0RXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc0Z1bmN0aW9uQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydEZ1bmN0aW9uQ2FsbEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNJbmRleEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydEluZGV4RXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc1NwbGF0RXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0U3BsYXRFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzQ29uZGl0aW9uYWxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRDb25kaXRpb25hbEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNUdXBsZUV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydFR1cGxlRXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc1JlbGF0aXZlVHJhdmVyc2FsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0UmVsYXRpdmVUcmF2ZXJzYWxFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzRm9yRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0Rm9yRXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChcIlwiKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cHJlc3Npb25Bc3QoXG4gIGlucHV0OiBzdHJpbmcsXG4pOiBQcm9taXNlPHRleC5FeHByZXNzaW9uVHlwZT4ge1xuICBjb25zdCB7IHdyYXAsIHdyYXBPZmZzZXQgfSA9IHdyYXBUZXJyYWZvcm1FeHByZXNzaW9uKGlucHV0KTtcbiAgY29uc3QgYXN0ID0gYXdhaXQgZ2V0RXhwcmVzc2lvbkFzdChcIm1haW4udGZcIiwgd3JhcCk7XG5cbiAgaWYgKCFhc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSB0ZXJyYWZvcm0gZXhwcmVzc2lvbjogJHtpbnB1dH1gKTtcbiAgfVxuXG4gIGlmICh3cmFwT2Zmc2V0ICE9IDAgJiYgdGV4LmlzVGVtcGxhdGVXcmFwRXhwcmVzc2lvbihhc3QpKSB7XG4gICAgcmV0dXJuIGFzdC5jaGlsZHJlblswXTtcbiAgfVxuXG4gIHJldHVybiBhc3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBpbnB1dDogc3RyaW5nLFxuICB0YXJnZXRUeXBlOiAoKSA9PiBBdHRyaWJ1dGVUeXBlLFxuKTogUHJvbWlzZTx0LkV4cHJlc3Npb24+IHtcbiAgbG9nZ2VyLmRlYnVnKGBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoJHtpbnB1dH0pYCk7XG4gIGNvbnN0IHRzRXhwcmVzc2lvbiA9IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKFxuICAgIHNjb3BlLFxuICAgIGF3YWl0IGV4cHJlc3Npb25Bc3QoaW5wdXQpLFxuICApO1xuXG4gIHJldHVybiBjb2VyY2VUeXBlKFxuICAgIHNjb3BlLFxuICAgIHRzRXhwcmVzc2lvbixcbiAgICBmaW5kRXhwcmVzc2lvblR5cGUoc2NvcGUsIHRzRXhwcmVzc2lvbiksXG4gICAgdGFyZ2V0VHlwZSgpLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEl0ZXJhdG9yVmFyaWFibGVzRnJvbUV4cHJlc3Npb24oXG4gIGlucHV0OiBzdHJpbmcsXG4pOiBQcm9taXNlPEl0ZXJhdG9yVmFyaWFibGVSZWZlcmVuY2VbXT4ge1xuICBjb25zdCBwb3NzaWJsZVZhcmlhYmxlU3BvdHMgPSBhd2FpdCBnZXRSZWZlcmVuY2VzSW5FeHByZXNzaW9uKFxuICAgIFwibWFpbi50ZlwiLFxuICAgIGlucHV0LFxuICApO1xuXG4gIHJldHVybiBwb3NzaWJsZVZhcmlhYmxlU3BvdHNcbiAgICAuZmlsdGVyKChzcG90KSA9PiBzcG90LnZhbHVlLnN0YXJ0c1dpdGgoXCJlYWNoLlwiKSlcbiAgICAubWFwKChzcG90KSA9PiAoe1xuICAgICAgc3RhcnQ6IHNwb3Quc3RhcnRQb3NpdGlvbixcbiAgICAgIGVuZDogc3BvdC5lbmRQb3NpdGlvbixcbiAgICAgIHZhbHVlOiBzcG90LnZhbHVlLFxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGR5bmFtaWNWYXJpYWJsZVRvQXN0KFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBub2RlOiB0ZXguU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uLFxuICBpdGVyYXRvck5hbWU6IHN0cmluZyxcbiAgYmxvY2s6IHN0cmluZyA9IFwiZWFjaFwiLFxuKTogdC5FeHByZXNzaW9uIHtcbiAgaWYgKGl0ZXJhdG9yTmFtZSA9PT0gXCJkeW5hbWljLWJsb2NrXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkZvclNlcmlhbFN0cmluZ0NvbmNhdGVuYXRpb24oc2NvcGUsIFtcbiAgICAgIHQuc3RyaW5nTGl0ZXJhbChcIiR7XCIpLFxuICAgICAgdC5zdHJpbmdMaXRlcmFsKGJsb2NrKSxcbiAgICAgIHQuc3RyaW5nTGl0ZXJhbChcIn1cIiksXG4gICAgXSk7XG4gIH1cbiAgaWYgKG5vZGUubWV0YS52YWx1ZSA9PT0gYCR7YmxvY2t9LmtleWApIHtcbiAgICByZXR1cm4gdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcihpdGVyYXRvck5hbWUpLCB0LmlkZW50aWZpZXIoXCJrZXlcIikpO1xuICB9XG4gIGlmIChub2RlLm1ldGEudmFsdWUgPT09IGAke2Jsb2NrfS52YWx1ZWApIHtcbiAgICByZXR1cm4gdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgdC5pZGVudGlmaWVyKGl0ZXJhdG9yTmFtZSksXG4gICAgICB0LmlkZW50aWZpZXIoXCJ2YWx1ZVwiKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGJsb2NrID09PSBcImNvdW50XCIgJiYgbm9kZS5tZXRhLnZhbHVlID09PSBgJHtibG9ja30uaW5kZXhgKSB7XG4gICAgcmV0dXJuIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgIHQuaWRlbnRpZmllcihpdGVyYXRvck5hbWUpLFxuICAgICAgdC5pZGVudGlmaWVyKFwiaW5kZXhcIiksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNlZ21lbnRzID0gbm9kZS5tZXRhLnRyYXZlcnNhbDtcblxuICBpZiAoXG4gICAgc2VnbWVudHMubGVuZ3RoID4gMiAmJlxuICAgIHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IGJsb2NrICYmXG4gICAgc2VnbWVudHNbMV0uc2VnbWVudCA9PT0gXCJ2YWx1ZVwiXG4gICkge1xuICAgIGNvbnN0IHNlZ21lbnRzQWZ0ZXJFYWNoVmFsdWUgPSBzZWdtZW50cy5zbGljZSgyKTtcbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiRm5cIixcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgfSk7XG4gICAgY29uc3QgY2FsbGVlID0gdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgdC5pZGVudGlmaWVyKFwiRm5cIiksXG4gICAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICAgKTtcbiAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihjYWxsZWUsIFtcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoaXRlcmF0b3JOYW1lKSwgdC5pZGVudGlmaWVyKFwidmFsdWVcIikpLFxuICAgICAgdC5hcnJheUV4cHJlc3Npb24oXG4gICAgICAgIHNlZ21lbnRzQWZ0ZXJFYWNoVmFsdWUubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gXCJuYW1lVHJhdmVyc2FsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0LnN0cmluZ0xpdGVyYWwocGFydC5zZWdtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChgWyR7cGFydC5zZWdtZW50fV1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICBdKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ2FuIG5vdCBjcmVhdGUgQVNUIGZvciBpdGVyYXRvciB2YXJpYWJsZSBvZiAnJHtub2RlLm1ldGEudmFsdWV9J2AsXG4gICk7XG59XG4iXX0=
|
|
641
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXhwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtMUJBLHNDQWVDO0FBRUQsd0VBaUJDO0FBRUQsd0ZBZUM7QUFFRCxvREErREM7QUF2OEJELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsZ0RBQWtDO0FBQ2xDLCtEQUF1QztBQUN2QyxtQ0FBZ0U7QUFNaEUsOENBQThFO0FBQzlFLDhDQUd5QjtBQUN6Qiw2REFBNkQ7QUFDN0QsNkNBQThEO0FBRTlELHVEQUFrRDtBQUNsRCw2Q0FBaUQ7QUFDakQsMkNBQTJDO0FBRTNDLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsZUFBZSxFQUFFLEtBQUs7SUFDdEIsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsS0FBSztJQUNmLEdBQUcsRUFBRSxLQUFLO0lBQ1YsUUFBUSxFQUFFLEtBQUs7SUFDZixRQUFRLEVBQUUsS0FBSztJQUNmLE1BQU0sRUFBRSxLQUFLO0lBQ2IsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixVQUFVLEVBQUUsS0FBSztJQUNqQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBS0YsU0FBUyxzQkFBc0IsQ0FDN0IsVUFBd0MsRUFDeEMsUUFBUSxHQUFHLEtBQUs7SUFFaEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxRQUFRLElBQUksaUNBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZELElBQUksR0FBRyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3JDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU8sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQztJQUNuQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsVUFBOEI7SUFDL0MsSUFBSSxDQUFDLGlDQUFHLENBQUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFekQsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FDOUIsS0FBbUIsRUFDbkIsSUFBd0I7SUFFeEIsSUFBSSxDQUFDLGlDQUFHLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxjQUFNLENBQUMsS0FBSyxDQUNWLDhCQUE4QixJQUFJLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxxQ0FBcUMsMEJBQWtCLEVBQUUsQ0FDL0gsQ0FBQztRQUNGLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3JDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUNaLFdBQVcsS0FBSyxNQUFNO1FBQ3BCLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNqRCxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ2xCLE1BQU0sSUFBSSxHQUNSLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFckUsT0FBTyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxzQ0FBc0MsQ0FDN0MsS0FBb0IsRUFDcEIsS0FBcUI7SUFFckIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM5QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFvQixDQUFDLENBQUM7SUFFekIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUN4QixDQUFDLEdBQTZCLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQ3BELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UscUVBQXFFO1FBQ3JFLDBFQUEwRTtRQUMxRSwyREFBMkQ7UUFDM0QsSUFDRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDN0MsQ0FBQztZQUNELElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsSUFBa0M7SUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDckMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNuQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRXBCLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMvQixVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztJQUN0RSxDQUFDO1NBQU0sQ0FBQztRQUNOLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0NBQW9DO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcscUJBQXFCLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpFLHdEQUF3RDtJQUN4RCw2REFBNkQ7SUFDN0QsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxHQUFHO1FBQ1AsR0FBRyxNQUFNO1FBQ1QsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxpQ0FBRyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNyQixDQUFDLENBQUM7S0FDSCxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLGlDQUFpQyxDQUN4QyxNQUFxQixFQUNyQixJQUFnQztJQUVoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQyxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsbUNBQW1DLENBQzFDLEtBQW9CLEVBQ3BCLElBQWtDOztJQUVsQyxNQUFNLFlBQVksR0FBRyxJQUFBLDhCQUFpQixFQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBRXJDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEUsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9ELE9BQU8sb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNyQixhQUFhLEVBQUUsZUFBZTtZQUM5QixRQUFRLEVBQUUsT0FBTztTQUNsQixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQ3JCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFFekUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdELENBQUM7SUFDSixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQUEsS0FBSyxDQUFDLGVBQWUsMENBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsSUFBSSxZQUFZLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDckMsT0FBTyxvQkFBb0IsQ0FDekIsS0FBSyxFQUNMLElBQUksRUFDSixZQUFZLEVBQ1osc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQ2pDLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELG9HQUFvRztJQUNwRywwQkFBMEI7SUFDMUIsSUFBSSxhQUFhLEdBQWlCLENBQUMsQ0FBQyxhQUFhLENBQy9DLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FDaEMsQ0FBQztJQUVGLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsYUFBYSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQzFCLElBQUEsaUJBQVMsRUFBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDaEQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLGdCQUFnQixHQUNwQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUs7WUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsYUFBYSxDQUFDO1FBRXBCLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDckIsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxPQUFPO2FBQ2xCLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDL0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFDbEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlCLGdCQUFnQjtnQkFDaEIsQ0FBQyxDQUFDLGVBQWUsQ0FDZixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDekQ7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUN4QyxNQUFNLGNBQWMsR0FBRyxXQUFXLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsTUFBTSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMvRCxpQ0FBRyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUM5QixDQUFDO0lBQ0YsSUFBSSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztJQUM1QyxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFCLElBQUksb0JBQW9CLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxtREFBbUQ7UUFDbkQsNkRBQTZEO1FBQzdELE1BQU0sWUFBWSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMscUVBQXFFO1FBQ3RHLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksR0FBRyxJQUFBLCtCQUFhLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ2pFLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7WUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsZ0JBQWdCLEdBQUcsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7SUFFbEQsTUFBTSxXQUFXLEdBQUcsbUJBQW1CO1FBQ3JDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO1FBQzlDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0QixNQUFNLGNBQWMsR0FBRyxtQkFBbUI7UUFDeEMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRVAsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxHQUFpQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNoQyxDQUFDLENBQUMsZ0JBQWdCLENBQ2hCLEdBQUcsRUFDSCxDQUFDLENBQUMsVUFBVSxDQUNWLEtBQUssS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLFFBQVE7UUFDckMsQ0FBQyxDQUFDLElBQUEsaUJBQVMsRUFBQyxHQUFHLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUNuQyxDQUFDLENBQUMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FDM0IsQ0FDRixFQUNILGFBQWEsQ0FDZCxDQUFDO0lBRUYsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3JCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFFBQVEsRUFBRSxPQUFPO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDL0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFDbEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQztJQUNGLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsR0FBRztRQUNILENBQUMsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUN6RSxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsS0FBb0IsRUFDcEIsSUFBMkI7SUFFM0IsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLENBQ3hDLEtBQUssRUFDTCxpQ0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBRSxDQUN4RCxDQUFDO0lBRUYsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEMsSUFBSSx1QkFBdUIsQ0FBQyxNQUFpQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEdBQUcsdUJBQXVCLENBQUMsTUFBaUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNyQixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDLENBQUM7SUFFSCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFeEUsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQ3BDLEtBQW9CLEVBQ3BCLElBQTRCO0lBRTVCLE1BQU0sSUFBSSxHQUFHLDBCQUEwQixDQUNyQyxLQUFLLEVBQ0wsaUNBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUUsQ0FDdEQsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLDBCQUEwQixDQUN0QyxLQUFLLEVBQ0wsaUNBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUUsQ0FDdEQsQ0FBQztJQUVGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2hDLElBQUksd0JBQXdCLENBQUMsTUFBa0MsQ0FBQyxFQUFFLENBQUM7UUFDakUsTUFBTSxHQUFHLHdCQUF3QixDQUFDLE1BQWtDLENBQUMsQ0FBQztJQUN4RSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckIsYUFBYSxFQUFFLElBQUk7UUFDbkIsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FDcEMsS0FBb0IsRUFDcEIsSUFBeUQ7SUFFekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxFQUFFLEtBQUs7UUFDWCxJQUFJLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztLQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckUsa0VBQWtFO1FBQ2xFLG1FQUFtRTtRQUNuRSxtQkFBbUI7UUFDbkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDOUIsTUFBTSxXQUFXLEdBQW1CLEVBQUUsQ0FBQztJQUN2QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7UUFDbkMsSUFDRSxpQ0FBRyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUN6QixDQUFDO1lBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7YUFBTTtRQUNMLGdEQUFnRDtRQUNoRCxzREFBc0Q7UUFDdEQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUN4QixDQUFDO1lBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLGFBQWEsRUFBRSxPQUFPO2dCQUN0QixRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFFSCxXQUFXLENBQUMsSUFBSSxDQUNkLGtCQUFRLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQzlDLElBQUk7YUFDTCxDQUFpQixDQUNuQixDQUFDO1lBQ0YsU0FBUztRQUNYLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FDbEMsS0FBb0IsRUFDcEIsSUFBMEI7SUFFMUIsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUNwQixNQUFNLFVBQVUsR0FBRyxpQ0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsY0FBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUNyQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUNqQiwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQXVCLENBQ25ELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQ0FBaUMsQ0FDeEMsS0FBb0IsRUFDcEIsSUFBZ0M7SUFFaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsd0JBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixjQUFNLENBQUMsS0FBSyxDQUNWLG9CQUFvQixZQUFZLGlCQUFpQiwwQkFBa0IsRUFBRSxDQUN0RSxDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3RELDBCQUEwQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FDekMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUErQixPQUFPLENBQUMsV0FBVztRQUNyRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVULE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqRSwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQ3pDLENBQUM7SUFFRixLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNyQixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQ2xCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUMzQixDQUFDO0lBRUYsSUFDRSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUMxRCxDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FDckIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQ3BELENBQUMsRUFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQzlCLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRztZQUN0QixHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUM3QyxJQUFBLHVCQUFVLEVBQ1IsS0FBSyxFQUNMLE9BQU8sRUFDUCxJQUFBLCtCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFDbEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQy9CLENBQ0Y7WUFFRCxDQUFDLENBQUMsZUFBZSxDQUNmLG1CQUFtQjtpQkFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDcEMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDZixJQUFBLHVCQUFVLEVBQ1IsS0FBSyxFQUNMLE9BQU8sRUFDUCxJQUFBLCtCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFDbEMsaUJBQWlCLENBQ2xCLENBQ0YsQ0FDSjtTQUNGLENBQUM7UUFFRixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQ3JCLE1BQU0sRUFDTixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDekMsSUFBQSx1QkFBVSxFQUNSLEtBQUssRUFDTCxPQUFPLEVBQ1AsSUFBQSwrQkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQ2xDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMvQixDQUNGLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUNqQyxLQUFvQixFQUNwQixJQUF5QjtJQUV6QixNQUFNLHlCQUF5QixHQUFHLGlDQUFHLENBQUMsaUJBQWlCLENBQ3JELElBQUksRUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUMvQixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBRyxDQUFDLGlCQUFpQixDQUM5QyxJQUFJLEVBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3hCLENBQUM7SUFFRixNQUFNLG9CQUFvQixHQUFHLDBCQUEwQixDQUNyRCxLQUFLLEVBQ0wseUJBQTBCLENBQzNCLENBQUM7SUFDRixNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsa0JBQW1CLENBQUMsQ0FBQztJQUU3RSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNyQixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQ2xCLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQzdCLENBQUM7SUFDRixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1FBQzlCLG9CQUFvQjtRQUNwQixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDbkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQ2pDLEtBQW9CLEVBQ3BCLElBQXlCO0lBRXpCLE1BQU0scUJBQXFCLEdBQUcsaUNBQUcsQ0FBQyxpQkFBaUIsQ0FDakQsSUFBSSxFQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQzFCLENBQUM7SUFDSCxNQUFNLGdCQUFnQixHQUFHLDBCQUEwQixDQUNqRCxLQUFLLEVBQ0wscUJBQXFCLENBQ3RCLENBQUM7SUFFRiw2RkFBNkY7SUFDN0YsV0FBVztJQUNYLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUMvQjtRQUNDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7UUFDdkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3JCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFFBQVEsRUFBRSxPQUFPO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDL0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFDbEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsZ0JBQWdCO1FBQ2hCLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDaEIsNkRBQTZEO1lBQzdELCtEQUErRDtZQUMvRCxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztZQUNwQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztTQUNqQyxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0NBQWdDLENBQ3ZDLEtBQW9CLEVBQ3BCLElBQStCO0lBRS9CLE1BQU0sY0FBYyxHQUFHLGlDQUFHLENBQUMsaUJBQWlCLENBQzFDLElBQUksRUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUM3QixDQUFDO0lBQ0gsSUFBSSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xFLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxpRUFBaUU7UUFDakUsc0JBQXNCO1FBQ3RCLFNBQVMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsMEJBQTBCLENBQy9DLEtBQUssRUFDTCxpQ0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBRSxDQUN2RCxDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQUcsMEJBQTBCLENBQ2hELEtBQUssRUFDTCxpQ0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBRSxDQUN4RCxDQUFDO0lBRUYsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckIsYUFBYSxFQUFFLGFBQWE7UUFDNUIsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDbkQsU0FBUztRQUNULGNBQWM7UUFDZCxlQUFlO0tBQ2hCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUNqQyxLQUFvQixFQUNwQixJQUF5QjtJQUV6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzlDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FDekMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxzQ0FBc0MsQ0FDN0MsS0FBb0IsRUFDcEIsSUFBcUM7SUFFckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFFckMsc0VBQXNFO0lBQ3RFLDBEQUEwRDtJQUMxRCxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FDdkMsS0FBSyxFQUNMLGlDQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUUsQ0FDekQsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3JCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFFBQVEsRUFBRSxPQUFPO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDL0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFDbEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsTUFBTTtRQUNOLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNuRSxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FDL0IsS0FBb0IsRUFDcEIsSUFBdUI7SUFFdkIsTUFBTSxlQUFlLEdBQUcsaUNBQUcsQ0FBQyxpQkFBaUIsQ0FDM0MsSUFBSSxFQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQzlCLENBQUM7SUFFSCxJQUFJLG9CQUFvQixHQUFHLDBCQUEwQixDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUU5RSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUN2RSxpRUFBaUU7UUFDakUsc0JBQXNCO1FBQ3RCLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDdkMsb0JBQW9CLEVBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM1RSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDdkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ3BDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUVyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEQsTUFBTSxlQUFlLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUVqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsUUFBUSxhQUFhLE1BQU0sQ0FBQztJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7UUFDdEMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLE9BQU8sZUFBZSxFQUFFO1FBQ3ZELENBQUMsQ0FBQyxNQUFNLGVBQWUsRUFBRSxDQUFDO0lBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLEdBQ3hCLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDdkMsR0FBRyxVQUFVLEdBQUcsQ0FBQztJQUVqQixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDL0IsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDL0IsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sc0NBQXNDLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUNqQyxLQUFvQixFQUNwQixJQUF3QjtJQUV4QixJQUFJLGlDQUFHLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxpQ0FBRyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxtQ0FBbUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksaUNBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sNEJBQTRCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLGlDQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxpQ0FBRyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLGlDQUFHLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxpQ0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakMsT0FBTywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksaUNBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8saUNBQWlDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGlDQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxpQ0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksaUNBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sZ0NBQWdDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLGlDQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxpQ0FBRyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksaUNBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLHdCQUF3QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFTSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxLQUFhO0lBRWIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFBLGtDQUF1QixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSwyQkFBZ0IsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFcEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLGlDQUFHLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVNLEtBQUssVUFBVSw4QkFBOEIsQ0FDbEQsS0FBb0IsRUFDcEIsS0FBYSxFQUNiLFVBQStCO0lBRS9CLGNBQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQzdDLEtBQUssRUFDTCxNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FDM0IsQ0FBQztJQUVGLE9BQU8sSUFBQSx1QkFBVSxFQUNmLEtBQUssRUFDTCxZQUFZLEVBQ1osSUFBQSwrQkFBa0IsRUFBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQ3ZDLFVBQVUsRUFBRSxDQUNiLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLHNDQUFzQyxDQUMxRCxLQUFhO0lBRWIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLElBQUEsb0NBQXlCLEVBQzNELFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQztJQUVGLE9BQU8scUJBQXFCO1NBQ3pCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhO1FBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVztRQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7S0FDbEIsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLEtBQW1CLEVBQ25CLElBQWtDLEVBQ2xDLFlBQW9CLEVBQ3BCLFFBQWdCLE1BQU07SUFFdEIsSUFBSSxZQUFZLEtBQUssZUFBZSxFQUFFLENBQUM7UUFDckMsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUU7WUFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDckIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDdEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFDMUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlELE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUN2QixDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUMxQixDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBRXJDLElBQ0UsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSztRQUM3QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFDL0IsQ0FBQztRQUNELE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNyQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsT0FBTztTQUNsQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQ2xCLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQzdCLENBQUM7UUFDRixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQzlCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLGVBQWUsQ0FDZixzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUNiLGdEQUFnRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUNuRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyB0IGZyb20gXCJAYmFiZWwvdHlwZXNcIjtcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tIFwiQGJhYmVsL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGZpbGVCdWdDb21tZW50VGV4dCwgbG9nZ2VyIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIEl0ZXJhdG9yVmFyaWFibGVSZWZlcmVuY2UsXG4gIFByb2dyYW1TY29wZSxcbiAgUmVzb3VyY2VTY29wZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldFJlZmVyZW5jZXNJbkV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Bc3QgfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQge1xuICBURkV4cHJlc3Npb25TeW50YXhUcmVlIGFzIHRleCxcbiAgd3JhcFRlcnJhZm9ybUV4cHJlc3Npb24sXG59IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7IGZ1bmN0aW9uc01hcCB9IGZyb20gXCIuL2Z1bmN0aW9uLWJpbmRpbmdzL2Z1bmN0aW9uc1wiO1xuaW1wb3J0IHsgY29lcmNlVHlwZSwgZmluZEV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4vY29lcmNlVHlwZVwiO1xuaW1wb3J0IHsgQXR0cmlidXRlVHlwZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUF0UGF0aCB9IGZyb20gXCIuL3RlcnJhZm9ybVNjaGVtYVwiO1xuaW1wb3J0IHsgY29udGFpbnNSZWZlcmVuY2UgfSBmcm9tIFwiLi9yZWZlcmVuY2VzXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5hbWUgfSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcblxuY29uc3QgdGZCaW5hcnlPcGVyYXRvcnNUb0Nka3RmID0ge1xuICBsb2dpY2FsT3I6IFwib3JcIixcbiAgbG9naWNhbEFuZDogXCJhbmRcIixcbiAgZ3JlYXRlclRoYW46IFwiZ3RcIixcbiAgZ3JlYXRlclRoYW5PckVxdWFsOiBcImd0ZVwiLFxuICBsZXNzVGhhbjogXCJsdFwiLFxuICBsZXNzVGhhbk9yRXF1YWw6IFwibHRlXCIsXG4gIGVxdWFsOiBcImVxXCIsXG4gIG5vdEVxdWFsOiBcIm5lcVwiLFxuICBhZGQ6IFwiYWRkXCIsXG4gIHN1YnRyYWN0OiBcInN1YlwiLFxuICBtdWx0aXBseTogXCJtdWxcIixcbiAgZGl2aWRlOiBcImRpdlwiLFxuICBtb2R1bG86IFwibW9kXCIsXG59O1xuXG5jb25zdCB0ZlVuYXJ5T3BlcmF0b3JzVG9DZGt0ZiA9IHtcbiAgbG9naWNhbE5vdDogXCJub3RcIixcbiAgbmVnYXRlOiBcIm5lZ2F0ZVwiLFxufTtcblxudHlwZSBzdXBwb3J0ZWRCaW5hcnlPcGVyYXRvcnMgPSBrZXlvZiB0eXBlb2YgdGZCaW5hcnlPcGVyYXRvcnNUb0Nka3RmO1xudHlwZSBzdXBwb3J0ZWRVbmFyeU9wZXJhdG9ycyA9IGtleW9mIHR5cGVvZiB0ZlVuYXJ5T3BlcmF0b3JzVG9DZGt0ZjtcblxuZnVuY3Rpb24gdHJhdmVyc2FsUGFydHNUb1N0cmluZyhcbiAgdHJhdmVyc2FsczogdGV4LlRlcnJhZm9ybVRyYXZlcnNhbFBhcnRbXSxcbiAgYXNTdWZmaXggPSBmYWxzZSxcbikge1xuICBsZXQgc2VlZCA9IFwiXCI7XG4gIGlmIChhc1N1ZmZpeCAmJiB0ZXguaXNOYW1lVHJhdmVyc2FsUGFydCh0cmF2ZXJzYWxzWzBdKSkge1xuICAgIHNlZWQgPSBcIi5cIjtcbiAgfVxuICByZXR1cm4gdHJhdmVyc2Fscy5yZWR1Y2UoKGFjYywgcGFydCkgPT4ge1xuICAgIGlmIChwYXJ0LnR5cGUgPT09IFwibmFtZVRyYXZlcnNhbFwiKSB7XG4gICAgICBpZiAoYWNjID09PSBzZWVkKSB7XG4gICAgICAgIHJldHVybiBgJHthY2N9JHtwYXJ0LnNlZ21lbnR9YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgJHthY2N9LiR7cGFydC5zZWdtZW50fWA7XG4gICAgfVxuICAgIHJldHVybiBgJHthY2N9WyR7cGFydC5zZWdtZW50fV1gO1xuICB9LCBzZWVkKTtcbn1cblxuZnVuY3Rpb24gY2FuVXNlRnFuKGV4cHJlc3Npb246IHRleC5FeHByZXNzaW9uVHlwZSkge1xuICBpZiAoIXRleC5pc1Njb3BlVHJhdmVyc2FsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJvb3RTZWdtZW50ID0gZXhwcmVzc2lvbi5tZXRhLnRyYXZlcnNhbFswXS5zZWdtZW50O1xuXG4gIHJldHVybiAhW1widmFyXCIsIFwibG9jYWxcIl0uaW5jbHVkZXMocm9vdFNlZ21lbnQpO1xufVxuXG5mdW5jdGlvbiB0cmF2ZXJzYWxUb1ZhcmlhYmxlTmFtZShcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgbm9kZTogdGV4LkV4cHJlc3Npb25UeXBlLFxuKSB7XG4gIGlmICghdGV4LmlzU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgYFVuZXhwZWN0ZWQgZXhwcmVzc2lvbiB0eXBlICR7bm9kZS50eXBlfSB3aXRoIHZhbHVlICR7bm9kZS5tZXRhLnZhbHVlfSBwYXNzZWQgdG8gY29udmVydCB0byBhIHZhcmlhYmxlLiAke2ZpbGVCdWdDb21tZW50VGV4dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IG5vZGUubWV0YS50cmF2ZXJzYWw7XG4gIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbm9kZS5tZXRhLmZ1bGxBY2Nlc3NvcjtcbiAgfVxuICBjb25zdCByb290U2VnbWVudCA9IHNlZ21lbnRzWzBdLnNlZ21lbnQ7XG4gIGNvbnN0IHJlc291cmNlID1cbiAgICByb290U2VnbWVudCA9PT0gXCJkYXRhXCJcbiAgICAgID8gYCR7c2VnbWVudHNbMF0uc2VnbWVudH0uJHtzZWdtZW50c1sxXS5zZWdtZW50fWBcbiAgICAgIDogcm9vdFNlZ21lbnQ7XG4gIGNvbnN0IG5hbWUgPVxuICAgIHJvb3RTZWdtZW50ID09PSBcImRhdGFcIiA/IHNlZ21lbnRzWzJdLnNlZ21lbnQgOiBzZWdtZW50c1sxXS5zZWdtZW50O1xuXG4gIHJldHVybiB2YXJpYWJsZU5hbWUoc2NvcGUsIHJlc291cmNlLCBuYW1lKTtcbn1cblxuZnVuY3Rpb24gZXhwcmVzc2lvbkZvclNlcmlhbFN0cmluZ0NvbmNhdGVuYXRpb24oXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlczogdC5FeHByZXNzaW9uW10sXG4pIHtcbiAgY29uc3QgcmVkdWNlZE5vZGVzID0gbm9kZXMucmVkdWNlKChhY2MsIG5vZGUpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIXByZXYpIHJldHVybiBbbm9kZV07XG5cbiAgICBpZiAodC5pc1N0cmluZ0xpdGVyYWwocHJldikgJiYgdC5pc1N0cmluZ0xpdGVyYWwobm9kZSkpIHtcbiAgICAgIGFjYy5wb3AoKTtcbiAgICAgIGFjYy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChwcmV2LnZhbHVlICsgbm9kZS52YWx1ZSkpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBhY2MucHVzaChub2RlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyB0LkV4cHJlc3Npb25bXSk7XG5cbiAgcmV0dXJuIHJlZHVjZWROb2Rlcy5yZWR1Y2UoXG4gICAgKGFjYzogdC5FeHByZXNzaW9uIHwgdW5kZWZpbmVkLCBub2RlOiB0LkV4cHJlc3Npb24pID0+IHtcbiAgICAgIGlmICghYWNjKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICAvLyB3cmFwIGFjY2VzcyB0byBkeW5hbWljIGJsb2NrcyBpbiBUb2tlbi5hc1N0cmluZygpIGFzIHRoZXkgcmV0dXJuIGEgTGF6eVxuICAgICAgLy8gZm9yIC5rZXkgYW5kIC52YWx1ZSB3aGljaCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQgaW4gbGFuZ3VhZ2VzIGxpa2UgUHl0aG9uXG4gICAgICAvLyBiZWNhdXNlIEpTSUkgY3VycmVudGx5IGhhcyBubyBzdXBwb3J0IGZvciB0aGUgdG9TdHJpbmcoKSBtZXRob2QgaW5cbiAgICAgIC8vIGxhbmd1YWdlcyBvdGhlciB0aGFuIFR5cGVTY3JpcHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzgwXG4gICAgICAvLyBleGFtcGxlOiBkeW5hbWljX2l0ZXJhdG9yMC5rZXkgLyBkeW5hbWljX2l0ZXJhdG9yMC52YWx1ZVxuICAgICAgaWYgKFxuICAgICAgICB0LmlzTWVtYmVyRXhwcmVzc2lvbihub2RlKSAmJlxuICAgICAgICB0LmlzSWRlbnRpZmllcihub2RlLm9iamVjdCkgJiZcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhzY29wZS5zY29wZWRWYXJpYWJsZXMgfHwge30pLmluY2x1ZGVzKG5vZGUub2JqZWN0Lm5hbWUpICYmXG4gICAgICAgIHQuaXNJZGVudGlmaWVyKG5vZGUucHJvcGVydHkpICYmXG4gICAgICAgIFtcImtleVwiLCBcInZhbHVlXCJdLmluY2x1ZGVzKG5vZGUucHJvcGVydHkubmFtZSlcbiAgICAgICkge1xuICAgICAgICBub2RlID0gY29lcmNlVHlwZShzY29wZSwgbm9kZSwgXCJkeW5hbWljXCIsIFwic3RyaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdC5iaW5hcnlFeHByZXNzaW9uKFwiK1wiLCBhY2MgYXMgdC5FeHByZXNzaW9uLCBub2RlKTtcbiAgICB9LFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRUZlJlc291cmNlUGF0aEZyb21Ob2RlKG5vZGU6IHRleC5TY29wZVRyYXZlcnNhbEV4cHJlc3Npb24pIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBub2RlLm1ldGEudHJhdmVyc2FsO1xuICBsZXQgcmVzb3VyY2UgPSBzZWdtZW50c1swXS5zZWdtZW50O1xuICBsZXQgcmVzdWx0ID0gW107XG4gIGxldCBhdHRyaWJ1dGVzID0gW107XG5cbiAgaWYgKHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IFwiZGF0YVwiKSB7XG4gICAgcmVzdWx0LnB1c2goc2VnbWVudHNbMF0uc2VnbWVudCk7XG4gICAgcmVzb3VyY2UgPSBzZWdtZW50c1sxXS5zZWdtZW50O1xuICAgIGF0dHJpYnV0ZXMgPSBzZWdtZW50cy5zbGljZSgzKTsgLy8gd2Ugd2FudCB0byBza2lwIHRoZSB2YXJpYWJsZSBuYW1lXG4gIH0gZWxzZSB7XG4gICAgYXR0cmlidXRlcyA9IHNlZ21lbnRzLnNsaWNlKDIpOyAvLyB3ZSB3YW50IHRvIHNraXAgdGhlIHZhcmlhYmxlIG5hbWVcbiAgfVxuXG4gIGNvbnN0IFtwcm92aWRlciwgLi4ucmVzb3VyY2VOYW1lRnJhZ21lbnRzXSA9IHJlc291cmNlLnNwbGl0KFwiX1wiKTtcblxuICAvLyBIYWNrOiBUaGlzIGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgYGV4dGVybmFsYCBwcm92aWRlclxuICAvLyB3aGVyZSB0aGUgZGF0YSBzb3VyY2UgZG9lcyBub3QgaGF2ZSBhIHByb3ZpZGVyIG5hbWUgcHJlZml4XG4gIGlmIChyZXNvdXJjZU5hbWVGcmFnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzb3VyY2VOYW1lRnJhZ21lbnRzLnB1c2gocHJvdmlkZXIpO1xuICB9XG5cbiAgcmVzdWx0LnB1c2gocHJvdmlkZXIpO1xuICByZXN1bHQucHVzaChyZXNvdXJjZU5hbWVGcmFnbWVudHMuam9pbihcIl9cIikpO1xuICByZXN1bHQgPSBbXG4gICAgLi4ucmVzdWx0LFxuICAgIC4uLmF0dHJpYnV0ZXMubWFwKChzZWcpID0+IHtcbiAgICAgIGlmICh0ZXguaXNJbmRleFRyYXZlcnNhbFBhcnQoc2VnKSkge1xuICAgICAgICByZXR1cm4gYFske3NlZy5zZWdtZW50fV1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlZy5zZWdtZW50O1xuICAgIH0pLFxuICBdO1xuXG4gIHJldHVybiByZXN1bHQuam9pbihcIi5cIik7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaXRlcmFsVmFsdWVFeHByZXNzaW9uVG9UcyhcbiAgX3Njb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguTGl0ZXJhbFZhbHVlRXhwcmVzc2lvbixcbikge1xuICBjb25zdCBsaXRlcmFsVHlwZSA9IG5vZGUubWV0YS50eXBlO1xuICBpZiAobGl0ZXJhbFR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdC5udW1lcmljTGl0ZXJhbChOdW1iZXIobm9kZS5tZXRhLnZhbHVlKSk7XG4gIH1cbiAgaWYgKGxpdGVyYWxUeXBlID09PSBcImJvb2xcIikge1xuICAgIHJldHVybiB0LmJvb2xlYW5MaXRlcmFsKG5vZGUubWV0YS52YWx1ZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChub2RlLm1ldGEudmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0U2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5TY29wZVRyYXZlcnNhbEV4cHJlc3Npb24sXG4pIHtcbiAgY29uc3QgaGFzUmVmZXJlbmNlID0gY29udGFpbnNSZWZlcmVuY2Uobm9kZSk7XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBub2RlLm1ldGEudHJhdmVyc2FsO1xuXG4gIGlmIChzZWdtZW50c1swXS5zZWdtZW50ID09PSBcImVhY2hcIiAmJiBzY29wZS5mb3JFYWNoSXRlcmF0b3JOYW1lKSB7XG4gICAgcmV0dXJuIGR5bmFtaWNWYXJpYWJsZVRvQXN0KHNjb3BlLCBub2RlLCBzY29wZS5mb3JFYWNoSXRlcmF0b3JOYW1lKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50c1swXS5zZWdtZW50ID09PSBcImNvdW50XCIgJiYgc2NvcGUuY291bnRJdGVyYXRvck5hbWUpIHtcbiAgICByZXR1cm4gZHluYW1pY1ZhcmlhYmxlVG9Bc3Qoc2NvcGUsIG5vZGUsIHNjb3BlLmNvdW50SXRlcmF0b3JOYW1lLCBcImNvdW50XCIpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IFwic2VsZlwiKSB7XG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybVNlbGZcIixcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoXCJUZXJyYWZvcm1TZWxmXCIpLCB0LmlkZW50aWZpZXIoXCJnZXRBbnlcIikpLFxuXG4gICAgICBbdC5zdHJpbmdMaXRlcmFsKHRyYXZlcnNhbFBhcnRzVG9TdHJpbmcoc2VnbWVudHMuc2xpY2UoMSkpKV0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNldHRpbmcudmFsdWUsIHNldHRpbmcudmFsdWVbMV0uaWRcbiAgY29uc3QgZHluYW1pY0Jsb2NrID0gc2NvcGUuc2NvcGVkVmFyaWFibGVzPy5bc2VnbWVudHNbMF0uc2VnbWVudF07XG4gIGlmIChkeW5hbWljQmxvY2spIHtcbiAgICBpZiAoZHluYW1pY0Jsb2NrID09PSBcImR5bmFtaWMtYmxvY2tcIikge1xuICAgICAgcmV0dXJuIGR5bmFtaWNWYXJpYWJsZVRvQXN0KFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgZHluYW1pY0Jsb2NrLFxuICAgICAgICB0cmF2ZXJzYWxQYXJ0c1RvU3RyaW5nKHNlZ21lbnRzKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkeW5hbWljVmFyaWFibGVUb0FzdChzY29wZSwgbm9kZSwgZHluYW1pY0Jsb2NrLCBzZWdtZW50c1swXS5zZWdtZW50KTtcbiAgfVxuXG4gIC8vIFRoaXMgbWF5IGJlIGEgdmFyaWFibGUgcmVmZXJlbmNlIHRoYXQgd2UgZG9uJ3QgdW5kZXJzdGFuZCB5ZXQsIHNvIHdlIHdyYXAgaXQgaW4gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgLy8gZm9yIFRlcnJhZm9ybSB0byBoYW5kbGVcbiAgbGV0IHZhcklkZW50aWZpZXI6IHQuRXhwcmVzc2lvbiA9IHQuc3RyaW5nTGl0ZXJhbChcbiAgICBgXFwkeyR7bm9kZS5tZXRhLmZ1bGxBY2Nlc3Nvcn19YCxcbiAgKTtcblxuICBpZiAoaGFzUmVmZXJlbmNlKSB7XG4gICAgdmFySWRlbnRpZmllciA9IHQuaWRlbnRpZmllcihcbiAgICAgIGNhbWVsQ2FzZSh0cmF2ZXJzYWxUb1ZhcmlhYmxlTmFtZShzY29wZSwgbm9kZSkpLFxuICAgICk7XG4gIH1cblxuICBpZiAoW1widmFyXCIsIFwibG9jYWxcIl0uaW5jbHVkZXMoc2VnbWVudHNbMF0uc2VnbWVudCkpIHtcbiAgICBjb25zdCB2YXJpYWJsZUFjY2Vzc29yID1cbiAgICAgIHNlZ21lbnRzWzBdLnNlZ21lbnQgPT09IFwidmFyXCJcbiAgICAgICAgPyB0Lm1lbWJlckV4cHJlc3Npb24odmFySWRlbnRpZmllciwgdC5pZGVudGlmaWVyKFwidmFsdWVcIikpXG4gICAgICAgIDogdmFySWRlbnRpZmllcjtcblxuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJGblwiLFxuICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjYWxsZWUgPSB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIHQuaWRlbnRpZmllcihcIkZuXCIpLFxuICAgICAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24oY2FsbGVlLCBbXG4gICAgICAgIHZhcmlhYmxlQWNjZXNzb3IsXG4gICAgICAgIHQuYXJyYXlFeHByZXNzaW9uKFxuICAgICAgICAgIHNlZ21lbnRzLnNsaWNlKDIpLm1hcCgocykgPT4gdC5zdHJpbmdMaXRlcmFsKHMuc2VnbWVudCkpLFxuICAgICAgICApLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzb3I7XG4gIH1cblxuICBpZiAoIWhhc1JlZmVyZW5jZSB8fCBzY29wZS53aXRoaW5PdmVycmlkZUV4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gdmFySWRlbnRpZmllcjtcbiAgfVxuXG4gIGNvbnN0IHJvb3RTZWdtZW50ID0gc2VnbWVudHNbMF0uc2VnbWVudDtcbiAgY29uc3QgYXR0cmlidXRlSW5kZXggPSByb290U2VnbWVudCA9PT0gXCJkYXRhXCIgPyAzIDogMjtcbiAgY29uc3QgYXR0cmlidXRlU2VnbWVudHMgPSBzZWdtZW50cy5zbGljZShhdHRyaWJ1dGVJbmRleCk7XG4gIGNvbnN0IG51bWVyaWNBY2Nlc3NvckluZGV4ID0gYXR0cmlidXRlU2VnbWVudHMuZmluZEluZGV4KChzZWcpID0+XG4gICAgdGV4LmlzSW5kZXhUcmF2ZXJzYWxQYXJ0KHNlZyksXG4gICk7XG4gIGxldCBtaW5BY2Nlc3NvckluZGV4ID0gbnVtZXJpY0FjY2Vzc29ySW5kZXg7XG4gIGxldCBtYXBBY2Nlc3NvckluZGV4ID0gLTE7XG4gIGlmIChudW1lcmljQWNjZXNzb3JJbmRleCA9PT0gLTEpIHtcbiAgICAvLyBvbmx5IGRvIHRoaXMgaWYgd2UgaGF2ZSB0bywgaWYgd2UgYWxyZWFkeSBoYXZlIGFcbiAgICAvLyBudW1lcmljIGFjY2Vzc29yLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgYWRkaXRpb25hbCB3b3JrXG4gICAgY29uc3QgcmVzb3VyY2VQYXRoID0gZ2V0VGZSZXNvdXJjZVBhdGhGcm9tTm9kZShub2RlKTtcbiAgICBsZXQgdXNpbmdTdWJQYXRoVHlwZSA9IGZhbHNlO1xuICAgIGNvbnN0IHBhcnRzID0gcmVzb3VyY2VQYXRoLnNwbGl0KFwiLlwiKS5maWx0ZXIoKHApID0+IHAgIT09IFwiXCIpO1xuICAgIGNvbnN0IG1pblBhcnRzID0gYXR0cmlidXRlSW5kZXg7IC8vIHdlIG5lZWQgdG8gc3RvcCBiZWZvcmUgZGF0YS5hd3MucmVzb3VyY2VfbmFtZSBvciBhd3MucmVzb3VyY2VfbmFtZVxuICAgIGNvbnN0IG9yaWdpbmFsUGFydHMgPSBwYXJ0cy5sZW5ndGg7XG4gICAgbGV0IGhhc01hcEFjY2Vzc29yID0gZmFsc2U7XG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA+PSBtaW5QYXJ0cykge1xuICAgICAgY29uc3QgdHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHBhcnRzLmpvaW4oXCIuXCIpKTtcbiAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmIHR5cGVbMF0gPT09IFwibWFwXCIgJiYgdXNpbmdTdWJQYXRoVHlwZSkge1xuICAgICAgICAgIGhhc01hcEFjY2Vzc29yID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFydHMucG9wKCk7XG4gICAgICB1c2luZ1N1YlBhdGhUeXBlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFwQWNjZXNzb3IpIHtcbiAgICAgIG1hcEFjY2Vzc29ySW5kZXggPSBvcmlnaW5hbFBhcnRzIC0gcGFydHMubGVuZ3RoIC0gMTtcbiAgICAgIG1pbkFjY2Vzc29ySW5kZXggPSBtYXBBY2Nlc3NvckluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5lZWRzUHJvcGVydHlBY2Nlc3MgPSBtaW5BY2Nlc3NvckluZGV4ID49IDA7XG5cbiAgY29uc3QgcmVmU2VnbWVudHMgPSBuZWVkc1Byb3BlcnR5QWNjZXNzXG4gICAgPyBhdHRyaWJ1dGVTZWdtZW50cy5zbGljZSgwLCBtaW5BY2Nlc3NvckluZGV4KVxuICAgIDogYXR0cmlidXRlU2VnbWVudHM7XG4gIGNvbnN0IG5vblJlZlNlZ21lbnRzID0gbmVlZHNQcm9wZXJ0eUFjY2Vzc1xuICAgID8gYXR0cmlidXRlU2VnbWVudHMuc2xpY2UobWluQWNjZXNzb3JJbmRleClcbiAgICA6IFtdO1xuXG4gIGNvbnN0IHJlZiA9IHJlZlNlZ21lbnRzLnJlZHVjZShcbiAgICAoYWNjOiB0LkV4cHJlc3Npb24sIHNlZywgaW5kZXgpID0+XG4gICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIGFjYyxcbiAgICAgICAgdC5pZGVudGlmaWVyKFxuICAgICAgICAgIGluZGV4ID09PSAwICYmIHJvb3RTZWdtZW50ID09PSBcIm1vZHVsZVwiXG4gICAgICAgICAgICA/IGNhbWVsQ2FzZShzZWcuc2VnbWVudCArIFwiT3V0cHV0XCIpXG4gICAgICAgICAgICA6IGNhbWVsQ2FzZShzZWcuc2VnbWVudCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIHZhcklkZW50aWZpZXIsXG4gICk7XG5cbiAgaWYgKG5vblJlZlNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiByZWY7XG4gIH1cblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkZuXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG4gIGNvbnN0IGNhbGxlZSA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICk7XG4gIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKGNhbGxlZSwgW1xuICAgIHJlZixcbiAgICB0LmFycmF5RXhwcmVzc2lvbihub25SZWZTZWdtZW50cy5tYXAoKHMpID0+IHQuc3RyaW5nTGl0ZXJhbChzLnNlZ21lbnQpKSksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VW5hcnlPcEV4cHJlc3Npb25Ub1RzKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgbm9kZTogdGV4LlVuYXJ5T3BFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IG9wZXJhbmQgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLnZhbHVlRXhwcmVzc2lvbikhLFxuICApO1xuXG4gIGxldCBmbk5hbWUgPSBub2RlLm1ldGEub3BlcmF0b3I7XG4gIGlmICh0ZlVuYXJ5T3BlcmF0b3JzVG9DZGt0Zltmbk5hbWUgYXMgc3VwcG9ydGVkVW5hcnlPcGVyYXRvcnNdKSB7XG4gICAgZm5OYW1lID0gdGZVbmFyeU9wZXJhdG9yc1RvQ2RrdGZbZm5OYW1lIGFzIHN1cHBvcnRlZFVuYXJ5T3BlcmF0b3JzXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0IHVua25vd24gb3BlcmF0b3IgJHtub2RlLm1ldGEub3BlcmF0b3J9YCk7XG4gIH1cblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIk9wXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG5cbiAgY29uc3QgZm4gPSB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKFwiT3BcIiksIHQuaWRlbnRpZmllcihmbk5hbWUpKTtcblxuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihmbiwgW29wZXJhbmRdKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEJpbmFyeU9wRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguQmluYXJ5T3BFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IGxlZnQgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLmxoc0V4cHJlc3Npb24pISxcbiAgKTtcbiAgY29uc3QgcmlnaHQgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLnJoc0V4cHJlc3Npb24pISxcbiAgKTtcblxuICBsZXQgZm5OYW1lID0gbm9kZS5tZXRhLm9wZXJhdG9yO1xuICBpZiAodGZCaW5hcnlPcGVyYXRvcnNUb0Nka3RmW2ZuTmFtZSBhcyBzdXBwb3J0ZWRCaW5hcnlPcGVyYXRvcnNdKSB7XG4gICAgZm5OYW1lID0gdGZCaW5hcnlPcGVyYXRvcnNUb0Nka3RmW2ZuTmFtZSBhcyBzdXBwb3J0ZWRCaW5hcnlPcGVyYXRvcnNdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgdW5rbm93biBvcGVyYXRvciAke25vZGUubWV0YS5vcGVyYXRvcn1gKTtcbiAgfVxuXG4gIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgIGNvbnN0cnVjdE5hbWU6IFwiT3BcIixcbiAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICB9KTtcblxuICBjb25zdCBmbiA9IHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoXCJPcFwiKSwgdC5pZGVudGlmaWVyKGZuTmFtZSkpO1xuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihmbiwgW2xlZnQsIHJpZ2h0XSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUZW1wbGF0ZUV4cHJlc3Npb25Ub1RzKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgbm9kZTogdGV4LlRlbXBsYXRlRXhwcmVzc2lvbiB8IHRleC5UZW1wbGF0ZVdyYXBFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IHBhcnRzID0gbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiAoe1xuICAgIG5vZGU6IGNoaWxkLFxuICAgIGV4cHI6IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBjaGlsZCksXG4gIH0pKTtcblxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICBpZiAodC5pc1N0cmluZ0xpdGVyYWwobGFzdFBhcnQuZXhwcikgJiYgbGFzdFBhcnQuZXhwci52YWx1ZSA9PT0gXCJcXG5cIikge1xuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUgd2UgYWRkIGR1ZSB0b1xuICAgIC8vIGhlcmVkb2NzIGxvb2tzIHVnbHkgYW5kIHVubmVjZXNzYXJ5IGluIHRoZSBnZW5lcmF0ZWQgY29kZSwgc28gd2VcbiAgICAvLyB0cnkgdG8gcmVtb3ZlIGl0XG4gICAgcGFydHMucG9wKCk7XG4gIH1cblxuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChub2RlLm1ldGEudmFsdWUpO1xuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBwYXJ0c1swXS5leHByO1xuICB9XG5cbiAgbGV0IGlzU2NvcGVkVHJhdmVyc2FsID0gZmFsc2U7XG4gIGNvbnN0IGV4cHJlc3Npb25zOiB0LkV4cHJlc3Npb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHsgbm9kZSwgZXhwciB9IG9mIHBhcnRzKSB7XG4gICAgaWYgKFxuICAgICAgdGV4LmlzU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uKG5vZGUpICYmXG4gICAgICAhdC5pc1N0cmluZ0xpdGVyYWwoZXhwcikgJiZcbiAgICAgICF0LmlzQ2FsbEV4cHJlc3Npb24oZXhwcilcbiAgICApIHtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2godC5zdHJpbmdMaXRlcmFsKFwiJHtcIikpO1xuICAgICAgaXNTY29wZWRUcmF2ZXJzYWwgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyB3ZSBzaG91bGQgaWRlYWxseSBiZSBkb2luZyB0eXBlIGNvZXJjaW9uIG1vcmVcbiAgICAgIC8vIGNhcmVmdWxseSBoZXJlLCBiZWNhdXNlIGl0IG1heSBub3QgYWx3YXlzIGJlIG5lZWRlZFxuICAgICAgdC5pc0NhbGxFeHByZXNzaW9uKGV4cHIpXG4gICAgKSB7XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJUb2tlblwiLFxuICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cHJlc3Npb25zLnB1c2goXG4gICAgICAgIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzU3RyaW5nKCUlZXhwciUlKWApKHtcbiAgICAgICAgICBleHByLFxuICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb24sXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1Njb3BlZFRyYXZlcnNhbCkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChcIn1cIikpO1xuICAgICAgICBpc1Njb3BlZFRyYXZlcnNhbCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpO1xuICB9XG5cbiAgaWYgKGlzU2NvcGVkVHJhdmVyc2FsKSB7XG4gICAgZXhwcmVzc2lvbnMucHVzaCh0LnN0cmluZ0xpdGVyYWwoXCJ9XCIpKTtcbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uRm9yU2VyaWFsU3RyaW5nQ29uY2F0ZW5hdGlvbihzY29wZSwgZXhwcmVzc2lvbnMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2JqZWN0RXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguT2JqZWN0RXhwcmVzc2lvbixcbikge1xuICByZXR1cm4gdC5vYmplY3RFeHByZXNzaW9uKFxuICAgIE9iamVjdC5lbnRyaWVzKG5vZGUubWV0YS5pdGVtcylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUNoaWxkID0gdGV4LmdldENoaWxkV2l0aFZhbHVlKG5vZGUsIHZhbHVlKTtcbiAgICAgICAgaWYgKCF2YWx1ZUNoaWxkKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gdmFsdWUgZm9yIG9iamVjdCBrZXkgJyR7a2V5fSc6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICB0LmlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhzY29wZSwgdmFsdWVDaGlsZCksXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigocykgPT4gcyAhPT0gbnVsbCkgYXMgdC5PYmplY3RQcm9wZXJ0eVtdLFxuICApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25DYWxsRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguRnVuY3Rpb25DYWxsRXhwcmVzc2lvbixcbikge1xuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBub2RlLm1ldGEubmFtZTtcbiAgY29uc3QgbWFwcGluZyA9IGZ1bmN0aW9uc01hcFtmdW5jdGlvbk5hbWVdO1xuXG4gIGlmICghbWFwcGluZykge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIGBVbmtub3duIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBlbmNvdW50ZXJlZC4gJHtmaWxlQnVnQ29tbWVudFRleHR9YCxcbiAgICApO1xuICAgIGNvbnN0IGFyZ3VtZW50RXhwcmVzc2lvbnMgPSBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+XG4gICAgICBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhzY29wZSwgY2hpbGQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoZnVuY3Rpb25OYW1lKSwgYXJndW1lbnRFeHByZXNzaW9ucyk7XG4gIH1cblxuICBjb25zdCB0cmFuc2Zvcm1lZE5vZGU6IHRleC5GdW5jdGlvbkNhbGxFeHByZXNzaW9uID0gbWFwcGluZy50cmFuc2Zvcm1lclxuICAgID8gbWFwcGluZy50cmFuc2Zvcm1lcihub2RlKVxuICAgIDogbm9kZTtcblxuICBjb25zdCBhcmd1bWVudEV4cHJlc3Npb25zID0gdHJhbnNmb3JtZWROb2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+XG4gICAgY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoc2NvcGUsIGNoaWxkKSxcbiAgKTtcblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkZuXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG5cbiAgY29uc3QgY2FsbGVlID0gdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgIHQuaWRlbnRpZmllcihcIkZuXCIpLFxuICAgIHQuaWRlbnRpZmllcihtYXBwaW5nLm5hbWUpLFxuICApO1xuXG4gIGlmIChcbiAgICBtYXBwaW5nLnBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJlxuICAgIG1hcHBpbmcucGFyYW1ldGVyc1ttYXBwaW5nLnBhcmFtZXRlcnMubGVuZ3RoIC0gMV0udmFyaWFkaWNcbiAgKSB7XG4gICAgY29uc3QgbGFzdFBhcmFtZXRlclR5cGUgPVxuICAgICAgbWFwcGluZy5wYXJhbWV0ZXJzW21hcHBpbmcucGFyYW1ldGVycy5sZW5ndGggLSAxXS50eXBlO1xuICAgIGNvbnN0IG5vblZhcmlhZGljQXJndW1lbnRzID0gYXJndW1lbnRFeHByZXNzaW9ucy5zbGljZShcbiAgICAgIDAsXG4gICAgICBtYXBwaW5nLnBhcmFtZXRlcnMubGVuZ3RoIC0gMSxcbiAgICApO1xuXG4gICAgY29uc3QgZm5DYWxsQXJndW1lbnRzID0gW1xuICAgICAgLi4ubm9uVmFyaWFkaWNBcmd1bWVudHMubWFwKChhcmdFeHByLCBpbmRleCkgPT5cbiAgICAgICAgY29lcmNlVHlwZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICBhcmdFeHByLFxuICAgICAgICAgIGZpbmRFeHByZXNzaW9uVHlwZShzY29wZSwgYXJnRXhwciksXG4gICAgICAgICAgbWFwcGluZy5wYXJhbWV0ZXJzW2luZGV4XS50eXBlLFxuICAgICAgICApLFxuICAgICAgKSxcblxuICAgICAgdC5hcnJheUV4cHJlc3Npb24oXG4gICAgICAgIGFyZ3VtZW50RXhwcmVzc2lvbnNcbiAgICAgICAgICAuc2xpY2UobWFwcGluZy5wYXJhbWV0ZXJzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgLm1hcCgoYXJnRXhwcikgPT5cbiAgICAgICAgICAgIGNvZXJjZVR5cGUoXG4gICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICBhcmdFeHByLFxuICAgICAgICAgICAgICBmaW5kRXhwcmVzc2lvblR5cGUoc2NvcGUsIGFyZ0V4cHIpLFxuICAgICAgICAgICAgICBsYXN0UGFyYW1ldGVyVHlwZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICksXG4gICAgXTtcblxuICAgIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKGNhbGxlZSwgZm5DYWxsQXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKFxuICAgIGNhbGxlZSxcbiAgICBhcmd1bWVudEV4cHJlc3Npb25zLm1hcCgoYXJnRXhwciwgaW5kZXgpID0+XG4gICAgICBjb2VyY2VUeXBlKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgYXJnRXhwcixcbiAgICAgICAgZmluZEV4cHJlc3Npb25UeXBlKHNjb3BlLCBhcmdFeHByKSxcbiAgICAgICAgbWFwcGluZy5wYXJhbWV0ZXJzW2luZGV4XS50eXBlLFxuICAgICAgKSxcbiAgICApLFxuICApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0SW5kZXhFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5JbmRleEV4cHJlc3Npb24sXG4pIHtcbiAgY29uc3QgY29sbGVjdGlvbkV4cHJlc3Npb25DaGlsZCA9IHRleC5nZXRDaGlsZFdpdGhWYWx1ZShcbiAgICBub2RlLFxuICAgIG5vZGUubWV0YS5jb2xsZWN0aW9uRXhwcmVzc2lvbixcbiAgKTtcbiAgY29uc3Qga2V5RXhwcmVzc2lvbkNoaWxkID0gdGV4LmdldENoaWxkV2l0aFZhbHVlKFxuICAgIG5vZGUsXG4gICAgbm9kZS5tZXRhLmtleUV4cHJlc3Npb24sXG4gICk7XG5cbiAgY29uc3QgY29sbGVjdGlvbkV4cHJlc3Npb24gPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICBjb2xsZWN0aW9uRXhwcmVzc2lvbkNoaWxkISxcbiAgKTtcbiAgY29uc3Qga2V5RXhwcmVzc2lvbiA9IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKHNjb3BlLCBrZXlFeHByZXNzaW9uQ2hpbGQhKTtcblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkZuXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG4gIGNvbnN0IGNhbGxlZSA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICk7XG4gIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKGNhbGxlZSwgW1xuICAgIGNvbGxlY3Rpb25FeHByZXNzaW9uLFxuICAgIHQuYXJyYXlFeHByZXNzaW9uKFtrZXlFeHByZXNzaW9uXSksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0U3BsYXRFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5TcGxhdEV4cHJlc3Npb24sXG4pIHtcbiAgY29uc3Qgc291cmNlRXhwcmVzc2lvbkNoaWxkID0gdGV4LmdldENoaWxkV2l0aFZhbHVlKFxuICAgIG5vZGUsXG4gICAgbm9kZS5tZXRhLnNvdXJjZUV4cHJlc3Npb24sXG4gICkhO1xuICBjb25zdCBzb3VyY2VFeHByZXNzaW9uID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoXG4gICAgc2NvcGUsXG4gICAgc291cmNlRXhwcmVzc2lvbkNoaWxkLFxuICApO1xuXG4gIC8vIFdlIGRvbid0IGNvbnZlcnQgdGhlIHJlbGF0aXZlIGV4cHJlc3Npb24gYmVjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBzcGxhdCBpcyBnb2luZyB0byBiZVxuICAvLyBhIHN0cmluZ1xuICBjb25zdCByZWxhdGl2ZUV4cHJlc3Npb24gPSBub2RlLm1ldGEuZWFjaEV4cHJlc3Npb24uc3RhcnRzV2l0aChcbiAgICBub2RlLm1ldGEuYW5vblN5bWJvbEV4cHJlc3Npb24sXG4gIClcbiAgICA/IG5vZGUubWV0YS5lYWNoRXhwcmVzc2lvbi5zbGljZShub2RlLm1ldGEuYW5vblN5bWJvbEV4cHJlc3Npb24ubGVuZ3RoKVxuICAgIDogbm9kZS5tZXRhLmVhY2hFeHByZXNzaW9uO1xuXG4gIGNvbnN0IHNlZ21lbnRzID0gcmVsYXRpdmVFeHByZXNzaW9uLnNwbGl0KC9cXC58XFxbfFxcXS8pLmZpbHRlcigocykgPT4gcyk7XG4gIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgIGNvbnN0cnVjdE5hbWU6IFwiRm5cIixcbiAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICB9KTtcbiAgY29uc3QgY2FsbGVlID0gdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgIHQuaWRlbnRpZmllcihcIkZuXCIpLFxuICAgIHQuaWRlbnRpZmllcihcImxvb2t1cE5lc3RlZFwiKSxcbiAgKTtcblxuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihjYWxsZWUsIFtcbiAgICBzb3VyY2VFeHByZXNzaW9uLFxuICAgIHQuYXJyYXlFeHByZXNzaW9uKFtcbiAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gdXNlIHRoZSBhbm9uU3ltYm9sRXhwcmVzc2lvbiBoZXJlIGJlY2F1c2VcbiAgICAgIC8vIGl0IG9ubHkgY2hhbmdlcyBiZXR3ZWVuIC4qIGFuZCBbKl0gd2hpY2ggd2UgZG9uJ3QgY2FyZSBhYm91dFxuICAgICAgdC5zdHJpbmdMaXRlcmFsKFwiKlwiKSxcbiAgICAgIC4uLnNlZ21lbnRzLm1hcCh0LnN0cmluZ0xpdGVyYWwpLFxuICAgIF0pLFxuICBdKTtcbn1cblxuZnVuY3Rpb24gY29udmVydENvbmRpdGlvbmFsRXhwcmVzc2lvblRvVHMoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBub2RlOiB0ZXguQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IGNvbmRpdGlvbkNoaWxkID0gdGV4LmdldENoaWxkV2l0aFZhbHVlKFxuICAgIG5vZGUsXG4gICAgbm9kZS5tZXRhLmNvbmRpdGlvbkV4cHJlc3Npb24sXG4gICkhO1xuICBsZXQgY29uZGl0aW9uID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoc2NvcGUsIGNvbmRpdGlvbkNoaWxkKTtcbiAgaWYgKHQuaXNJZGVudGlmaWVyKGNvbmRpdGlvbikgJiYgY2FuVXNlRnFuKGNvbmRpdGlvbkNoaWxkKSkge1xuICAgIC8vIFdlIGhhdmUgYSByZXNvdXJjZSBvciBkYXRhIHNvdXJjZSBoZXJlLCB3aGljaCB3ZSB3b3VsZCBuZWVkIHRvXG4gICAgLy8gcmVmZXJlbmNlIHVzaW5nIGZxblxuICAgIGNvbmRpdGlvbiA9IHQubWVtYmVyRXhwcmVzc2lvbihjb25kaXRpb24sIHQuaWRlbnRpZmllcihcImZxblwiKSk7XG4gIH1cblxuICBjb25zdCB0cnVlRXhwcmVzc2lvbiA9IGNvbnZlcnRURkV4cHJlc3Npb25Bc3RUb1RzKFxuICAgIHNjb3BlLFxuICAgIHRleC5nZXRDaGlsZFdpdGhWYWx1ZShub2RlLCBub2RlLm1ldGEudHJ1ZUV4cHJlc3Npb24pISxcbiAgKTtcblxuICBjb25zdCBmYWxzZUV4cHJlc3Npb24gPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLmZhbHNlRXhwcmVzc2lvbikhLFxuICApO1xuXG4gIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgIGNvbnN0cnVjdE5hbWU6IFwiY29uZGl0aW9uYWxcIixcbiAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICB9KTtcblxuICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoXCJjb25kaXRpb25hbFwiKSwgW1xuICAgIGNvbmRpdGlvbixcbiAgICB0cnVlRXhwcmVzc2lvbixcbiAgICBmYWxzZUV4cHJlc3Npb24sXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VHVwbGVFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5UdXBsZUV4cHJlc3Npb24sXG4pIHtcbiAgY29uc3QgZXhwcmVzc2lvbnMgPSBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+XG4gICAgY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoc2NvcGUsIGNoaWxkKSxcbiAgKTtcblxuICByZXR1cm4gdC5hcnJheUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmVsYXRpdmVUcmF2ZXJzYWxFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5SZWxhdGl2ZVRyYXZlcnNhbEV4cHJlc3Npb24sXG4pIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBub2RlLm1ldGEudHJhdmVyc2FsO1xuXG4gIC8vIFRoZSBsZWZ0IGhhbmQgc2lkZSAvIHNvdXJjZSBvZiBhIHJlbGF0aXZlIHRyYXZlcnNhbCBpcyBub3QgYSBwcm9wZXJcbiAgLy8gb2JqZWN0IC8gcmVzb3VyY2UgLyBkYXRhIHRoaW5nIHRoYXQgaXMgYmVpbmcgcmVmZXJlbmNlZFxuICBjb25zdCBzb3VyY2UgPSBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgICBzY29wZSxcbiAgICB0ZXguZ2V0Q2hpbGRXaXRoVmFsdWUobm9kZSwgbm9kZS5tZXRhLnNvdXJjZUV4cHJlc3Npb24pISxcbiAgKTtcblxuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkZuXCIsXG4gICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgfSk7XG4gIGNvbnN0IGNhbGxlZSA9IHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICB0LmlkZW50aWZpZXIoXCJsb29rdXBOZXN0ZWRcIiksXG4gICk7XG5cbiAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24oY2FsbGVlLCBbXG4gICAgc291cmNlLFxuICAgIHQuYXJyYXlFeHByZXNzaW9uKHNlZ21lbnRzLm1hcCgocykgPT4gdC5zdHJpbmdMaXRlcmFsKHMuc2VnbWVudCkpKSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGb3JFeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5Gb3JFeHByZXNzaW9uLFxuKSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25DaGlsZCA9IHRleC5nZXRDaGlsZFdpdGhWYWx1ZShcbiAgICBub2RlLFxuICAgIG5vZGUubWV0YS5jb2xsZWN0aW9uRXhwcmVzc2lvbixcbiAgKSE7XG5cbiAgbGV0IGNvbGxlY3Rpb25FeHByZXNzaW9uID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoc2NvcGUsIGNvbGxlY3Rpb25DaGlsZCk7XG5cbiAgaWYgKHQuaXNJZGVudGlmaWVyKGNvbGxlY3Rpb25FeHByZXNzaW9uKSAmJiBjYW5Vc2VGcW4oY29sbGVjdGlvbkNoaWxkKSkge1xuICAgIC8vIFdlIGhhdmUgYSByZXNvdXJjZSBvciBkYXRhIHNvdXJjZSBoZXJlLCB3aGljaCB3ZSB3b3VsZCBuZWVkIHRvXG4gICAgLy8gcmVmZXJlbmNlIHVzaW5nIGZxblxuICAgIGNvbGxlY3Rpb25FeHByZXNzaW9uID0gdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgY29sbGVjdGlvbkV4cHJlc3Npb24sXG4gICAgICB0LmlkZW50aWZpZXIoXCJmcW5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25SZXF1aXJlc1dyYXBwaW5nID0gIXQuaXNTdHJpbmdMaXRlcmFsKGNvbGxlY3Rpb25FeHByZXNzaW9uKTtcbiAgY29uc3QgZXhwcmVzc2lvbnMgPSBbXTtcbiAgY29uc3QgY29uZGl0aW9uQm9keSA9IG5vZGUubWV0YS5rZXlWYXJcbiAgICA/IGAke25vZGUubWV0YS5rZXlWYXJ9LCAke25vZGUubWV0YS52YWxWYXJ9YFxuICAgIDogbm9kZS5tZXRhLnZhbFZhcjtcblxuICBjb25zdCBvcGVuQnJhY2UgPSBub2RlLm1ldGEub3BlblJhbmdlVmFsdWU7XG4gIGNvbnN0IGNsb3NlQnJhY2UgPSBub2RlLm1ldGEuY2xvc2VSYW5nZVZhbHVlO1xuICBjb25zdCBncm91cGVkID0gbm9kZS5tZXRhLmdyb3VwZWRWYWx1ZSA/IFwiLi4uXCIgOiBcIlwiO1xuICBjb25zdCB2YWx1ZUV4cHJlc3Npb24gPSBgJHtub2RlLm1ldGEudmFsdWVFeHByZXNzaW9ufSR7Z3JvdXBlZH1gO1xuXG4gIGNvbnN0IHByZWZpeCA9IGBcXCR7JHtvcGVuQnJhY2V9IGZvciAke2NvbmRpdGlvbkJvZHl9IGluIGA7XG4gIGNvbnN0IGtleVZhbHVlID0gbm9kZS5tZXRhLmtleUV4cHJlc3Npb25cbiAgICA/IGAgOiAke25vZGUubWV0YS5rZXlFeHByZXNzaW9ufSA9PiAke3ZhbHVlRXhwcmVzc2lvbn1gXG4gICAgOiBgIDogJHt2YWx1ZUV4cHJlc3Npb259YDtcbiAgY29uc3QgY29uZGl0aW9uYWwgPSBub2RlLm1ldGEuY29uZGl0aW9uYWxFeHByZXNzaW9uO1xuICBjb25zdCBzdWZmaXggPSBgJHtrZXlWYWx1ZX0ke1xuICAgIGNvbmRpdGlvbmFsID8gYCBpZiAke2NvbmRpdGlvbmFsfWAgOiBcIlwiXG4gIH0ke2Nsb3NlQnJhY2V9fWA7XG5cbiAgZXhwcmVzc2lvbnMucHVzaCh0LnN0cmluZ0xpdGVyYWwocHJlZml4KSk7XG4gIGlmIChjb2xsZWN0aW9uUmVxdWlyZXNXcmFwcGluZykge1xuICAgIGV4cHJlc3Npb25zLnB1c2godC5zdHJpbmdMaXRlcmFsKFwiJHtcIikpO1xuICB9XG4gIGV4cHJlc3Npb25zLnB1c2goY29sbGVjdGlvbkV4cHJlc3Npb24pO1xuICBpZiAoY29sbGVjdGlvblJlcXVpcmVzV3JhcHBpbmcpIHtcbiAgICBleHByZXNzaW9ucy5wdXNoKHQuc3RyaW5nTGl0ZXJhbChcIn1cIikpO1xuICB9XG4gIGV4cHJlc3Npb25zLnB1c2godC5zdHJpbmdMaXRlcmFsKHN1ZmZpeCkpO1xuXG4gIHJldHVybiBleHByZXNzaW9uRm9yU2VyaWFsU3RyaW5nQ29uY2F0ZW5hdGlvbihzY29wZSwgZXhwcmVzc2lvbnMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VEZFeHByZXNzaW9uQXN0VG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIG5vZGU6IHRleC5FeHByZXNzaW9uVHlwZSxcbik6IHQuRXhwcmVzc2lvbiB7XG4gIGlmICh0ZXguaXNMaXRlcmFsVmFsdWVFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRMaXRlcmFsVmFsdWVFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRTY29wZVRyYXZlcnNhbEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNVbmFyeU9wRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0VW5hcnlPcEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNCaW5hcnlPcEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydEJpbmFyeU9wRXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc1RlbXBsYXRlRXhwcmVzc2lvbihub2RlKSB8fCB0ZXguaXNUZW1wbGF0ZVdyYXBFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRUZW1wbGF0ZUV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNPYmplY3RFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRPYmplY3RFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzRnVuY3Rpb25DYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0RnVuY3Rpb25DYWxsRXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc0luZGV4RXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0SW5kZXhFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzU3BsYXRFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRTcGxhdEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNDb25kaXRpb25hbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICByZXR1cm4gY29udmVydENvbmRpdGlvbmFsRXhwcmVzc2lvblRvVHMoc2NvcGUsIG5vZGUpO1xuICB9XG5cbiAgaWYgKHRleC5pc1R1cGxlRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiBjb252ZXJ0VHVwbGVFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICBpZiAodGV4LmlzUmVsYXRpdmVUcmF2ZXJzYWxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRSZWxhdGl2ZVRyYXZlcnNhbEV4cHJlc3Npb25Ub1RzKHNjb3BlLCBub2RlKTtcbiAgfVxuXG4gIGlmICh0ZXguaXNGb3JFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRGb3JFeHByZXNzaW9uVG9UcyhzY29wZSwgbm9kZSk7XG4gIH1cblxuICByZXR1cm4gdC5zdHJpbmdMaXRlcmFsKFwiXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwcmVzc2lvbkFzdChcbiAgaW5wdXQ6IHN0cmluZyxcbik6IFByb21pc2U8dGV4LkV4cHJlc3Npb25UeXBlPiB7XG4gIGNvbnN0IHsgd3JhcCwgd3JhcE9mZnNldCB9ID0gd3JhcFRlcnJhZm9ybUV4cHJlc3Npb24oaW5wdXQpO1xuICBjb25zdCBhc3QgPSBhd2FpdCBnZXRFeHByZXNzaW9uQXN0KFwibWFpbi50ZlwiLCB3cmFwKTtcblxuICBpZiAoIWFzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHRlcnJhZm9ybSBleHByZXNzaW9uOiAke2lucHV0fWApO1xuICB9XG5cbiAgaWYgKHdyYXBPZmZzZXQgIT0gMCAmJiB0ZXguaXNUZW1wbGF0ZVdyYXBFeHByZXNzaW9uKGFzdCkpIHtcbiAgICByZXR1cm4gYXN0LmNoaWxkcmVuWzBdO1xuICB9XG5cbiAgcmV0dXJuIGFzdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIGlucHV0OiBzdHJpbmcsXG4gIHRhcmdldFR5cGU6ICgpID0+IEF0dHJpYnV0ZVR5cGUsXG4pOiBQcm9taXNlPHQuRXhwcmVzc2lvbj4ge1xuICBsb2dnZXIuZGVidWcoYGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9Ucygke2lucHV0fSlgKTtcbiAgY29uc3QgdHNFeHByZXNzaW9uID0gY29udmVydFRGRXhwcmVzc2lvbkFzdFRvVHMoXG4gICAgc2NvcGUsXG4gICAgYXdhaXQgZXhwcmVzc2lvbkFzdChpbnB1dCksXG4gICk7XG5cbiAgcmV0dXJuIGNvZXJjZVR5cGUoXG4gICAgc2NvcGUsXG4gICAgdHNFeHByZXNzaW9uLFxuICAgIGZpbmRFeHByZXNzaW9uVHlwZShzY29wZSwgdHNFeHByZXNzaW9uKSxcbiAgICB0YXJnZXRUeXBlKCksXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SXRlcmF0b3JWYXJpYWJsZXNGcm9tRXhwcmVzc2lvbihcbiAgaW5wdXQ6IHN0cmluZyxcbik6IFByb21pc2U8SXRlcmF0b3JWYXJpYWJsZVJlZmVyZW5jZVtdPiB7XG4gIGNvbnN0IHBvc3NpYmxlVmFyaWFibGVTcG90cyA9IGF3YWl0IGdldFJlZmVyZW5jZXNJbkV4cHJlc3Npb24oXG4gICAgXCJtYWluLnRmXCIsXG4gICAgaW5wdXQsXG4gICk7XG5cbiAgcmV0dXJuIHBvc3NpYmxlVmFyaWFibGVTcG90c1xuICAgIC5maWx0ZXIoKHNwb3QpID0+IHNwb3QudmFsdWUuc3RhcnRzV2l0aChcImVhY2guXCIpKVxuICAgIC5tYXAoKHNwb3QpID0+ICh7XG4gICAgICBzdGFydDogc3BvdC5zdGFydFBvc2l0aW9uLFxuICAgICAgZW5kOiBzcG90LmVuZFBvc2l0aW9uLFxuICAgICAgdmFsdWU6IHNwb3QudmFsdWUsXG4gICAgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHluYW1pY1ZhcmlhYmxlVG9Bc3QoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIG5vZGU6IHRleC5TY29wZVRyYXZlcnNhbEV4cHJlc3Npb24sXG4gIGl0ZXJhdG9yTmFtZTogc3RyaW5nLFxuICBibG9jazogc3RyaW5nID0gXCJlYWNoXCIsXG4pOiB0LkV4cHJlc3Npb24ge1xuICBpZiAoaXRlcmF0b3JOYW1lID09PSBcImR5bmFtaWMtYmxvY2tcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uRm9yU2VyaWFsU3RyaW5nQ29uY2F0ZW5hdGlvbihzY29wZSwgW1xuICAgICAgdC5zdHJpbmdMaXRlcmFsKFwiJHtcIiksXG4gICAgICB0LnN0cmluZ0xpdGVyYWwoYmxvY2spLFxuICAgICAgdC5zdHJpbmdMaXRlcmFsKFwifVwiKSxcbiAgICBdKTtcbiAgfVxuICBpZiAobm9kZS5tZXRhLnZhbHVlID09PSBgJHtibG9ja30ua2V5YCkge1xuICAgIHJldHVybiB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKGl0ZXJhdG9yTmFtZSksIHQuaWRlbnRpZmllcihcImtleVwiKSk7XG4gIH1cbiAgaWYgKG5vZGUubWV0YS52YWx1ZSA9PT0gYCR7YmxvY2t9LnZhbHVlYCkge1xuICAgIHJldHVybiB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICB0LmlkZW50aWZpZXIoaXRlcmF0b3JOYW1lKSxcbiAgICAgIHQuaWRlbnRpZmllcihcInZhbHVlXCIpLFxuICAgICk7XG4gIH1cblxuICBpZiAoYmxvY2sgPT09IFwiY291bnRcIiAmJiBub2RlLm1ldGEudmFsdWUgPT09IGAke2Jsb2NrfS5pbmRleGApIHtcbiAgICByZXR1cm4gdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgdC5pZGVudGlmaWVyKGl0ZXJhdG9yTmFtZSksXG4gICAgICB0LmlkZW50aWZpZXIoXCJpbmRleFwiKSxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBub2RlLm1ldGEudHJhdmVyc2FsO1xuXG4gIGlmIChcbiAgICBzZWdtZW50cy5sZW5ndGggPiAyICYmXG4gICAgc2VnbWVudHNbMF0uc2VnbWVudCA9PT0gYmxvY2sgJiZcbiAgICBzZWdtZW50c1sxXS5zZWdtZW50ID09PSBcInZhbHVlXCJcbiAgKSB7XG4gICAgY29uc3Qgc2VnbWVudHNBZnRlckVhY2hWYWx1ZSA9IHNlZ21lbnRzLnNsaWNlKDIpO1xuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgY29uc3RydWN0TmFtZTogXCJGblwiLFxuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICB9KTtcbiAgICBjb25zdCBjYWxsZWUgPSB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICB0LmlkZW50aWZpZXIoXCJGblwiKSxcbiAgICAgIHQuaWRlbnRpZmllcihcImxvb2t1cE5lc3RlZFwiKSxcbiAgICApO1xuICAgIHJldHVybiB0LmNhbGxFeHByZXNzaW9uKGNhbGxlZSwgW1xuICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcihpdGVyYXRvck5hbWUpLCB0LmlkZW50aWZpZXIoXCJ2YWx1ZVwiKSksXG4gICAgICB0LmFycmF5RXhwcmVzc2lvbihcbiAgICAgICAgc2VnbWVudHNBZnRlckVhY2hWYWx1ZS5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICBpZiAocGFydC50eXBlID09PSBcIm5hbWVUcmF2ZXJzYWxcIikge1xuICAgICAgICAgICAgcmV0dXJuIHQuc3RyaW5nTGl0ZXJhbChwYXJ0LnNlZ21lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdC5zdHJpbmdMaXRlcmFsKGBbJHtwYXJ0LnNlZ21lbnR9XWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIF0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDYW4gbm90IGNyZWF0ZSBBU1QgZm9yIGl0ZXJhdG9yIHZhcmlhYmxlIG9mICcke25vZGUubWV0YS52YWx1ZX0nYCxcbiAgKTtcbn1cbiJdfQ==
|