@aws-cdk/toolkit-lib 0.4.0 → 1.1.0
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/README.md +65 -51
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/diff/private/helpers.d.ts +2 -2
- package/lib/actions/diff/private/helpers.js +3 -3
- package/lib/actions/drift/index.d.ts +4 -2
- package/lib/actions/drift/index.js +1 -1
- package/lib/actions/refactor/index.d.ts +25 -21
- package/lib/actions/refactor/index.js +54 -1
- package/lib/actions/watch/index.d.ts +26 -3
- package/lib/actions/watch/index.js +1 -1
- package/lib/actions/watch/private/helpers.d.ts +6 -4
- package/lib/actions/watch/private/helpers.js +37 -6
- package/lib/api/aws-auth/account-cache.d.ts +1 -1
- package/lib/api/aws-auth/account-cache.js +2 -2
- package/lib/api/aws-auth/awscli-compatible.d.ts +1 -1
- package/lib/api/aws-auth/awscli-compatible.js +2 -2
- package/lib/api/cloud-assembly/environment.d.ts +1 -1
- package/lib/api/cloud-assembly/environment.js +2 -2
- package/lib/api/cloud-assembly/private/prepare-source.js +2 -2
- package/lib/api/cloudformation/template-body-parameter.d.ts +2 -2
- package/lib/api/cloudformation/template-body-parameter.js +3 -3
- package/lib/api/deployments/cfn-api.d.ts +8 -8
- package/lib/api/deployments/cfn-api.js +15 -15
- package/lib/api/drift/drift-formatter.d.ts +4 -4
- package/lib/api/drift/drift-formatter.js +5 -5
- package/lib/api/hotswap/hotswap-deployments.js +2 -2
- package/lib/api/io/private/level-priority.d.ts +2 -2
- package/lib/api/io/private/level-priority.js +3 -3
- package/lib/api/io/toolkit-action.d.ts +1 -1
- package/lib/api/io/toolkit-action.js +1 -1
- package/lib/api/logs-monitor/logs-monitor.d.ts +1 -0
- package/lib/api/logs-monitor/logs-monitor.js +5 -3
- package/lib/api/notices/notices.d.ts +1 -1
- package/lib/api/notices/notices.js +2 -2
- package/lib/api/refactoring/context.d.ts +22 -0
- package/lib/api/refactoring/context.js +129 -0
- package/lib/api/refactoring/exclude.d.ts +11 -6
- package/lib/api/refactoring/exclude.js +14 -10
- package/lib/api/refactoring/execution.d.ts +1 -1
- package/lib/api/refactoring/execution.js +50 -25
- package/lib/api/refactoring/index.d.ts +7 -28
- package/lib/api/refactoring/index.js +23 -146
- package/lib/api/resource-import/importer.d.ts +5 -5
- package/lib/api/resource-import/importer.js +6 -6
- package/lib/api/resource-metadata/resource-metadata.d.ts +2 -2
- package/lib/api/resource-metadata/resource-metadata.js +3 -3
- package/lib/context-providers/cc-api-provider.js +23 -14
- package/lib/context-providers/ssm-parameters.d.ts +4 -4
- package/lib/context-providers/ssm-parameters.js +5 -5
- package/lib/index_bg.wasm +0 -0
- package/lib/toolkit/private/index.d.ts +2 -2
- package/lib/toolkit/private/index.js +3 -3
- package/lib/toolkit/toolkit-error.d.ts +16 -2
- package/lib/toolkit/toolkit-error.js +33 -9
- package/lib/toolkit/toolkit.d.ts +15 -22
- package/lib/toolkit/toolkit.js +94 -68
- package/lib/util/bool.d.ts +1 -1
- package/lib/util/bool.js +2 -2
- package/lib/util/bytes.d.ts +2 -2
- package/lib/util/bytes.js +3 -3
- package/lib/util/cloudformation.d.ts +2 -2
- package/lib/util/cloudformation.js +3 -3
- package/lib/util/format-error.d.ts +1 -1
- package/lib/util/format-error.js +6 -2
- package/lib/util/net.d.ts +1 -1
- package/lib/util/net.js +2 -2
- package/lib/util/objects.d.ts +3 -3
- package/lib/util/objects.js +4 -4
- package/lib/util/yaml-cfn.d.ts +2 -2
- package/lib/util/yaml-cfn.js +3 -3
- package/package.json +16 -16
|
@@ -20,10 +20,10 @@ const cloudformation_1 = require("../cloudformation");
|
|
|
20
20
|
/**
|
|
21
21
|
* Describe a changeset in CloudFormation, regardless of its current state.
|
|
22
22
|
*
|
|
23
|
-
* @param cfn a CloudFormation client
|
|
24
|
-
* @param stackName the name of the Stack the ChangeSet belongs to
|
|
25
|
-
* @param changeSetName the name of the ChangeSet
|
|
26
|
-
* @param fetchAll if true, fetches all pages of the change set description.
|
|
23
|
+
* @param cfn - a CloudFormation client
|
|
24
|
+
* @param stackName - the name of the Stack the ChangeSet belongs to
|
|
25
|
+
* @param changeSetName - the name of the ChangeSet
|
|
26
|
+
* @param fetchAll - if true, fetches all pages of the change set description.
|
|
27
27
|
*
|
|
28
28
|
* @returns CloudFormation information about the ChangeSet
|
|
29
29
|
*/
|
|
@@ -51,8 +51,8 @@ async function describeChangeSet(cfn, stackName, changeSetName, { fetchAll }) {
|
|
|
51
51
|
/**
|
|
52
52
|
* Waits for a function to return non-+undefined+ before returning.
|
|
53
53
|
*
|
|
54
|
-
* @param valueProvider a function that will return a value that is not +undefined+ once the wait should be over
|
|
55
|
-
* @param timeout the time to wait between two calls to +valueProvider+
|
|
54
|
+
* @param valueProvider - a function that will return a value that is not +undefined+ once the wait should be over
|
|
55
|
+
* @param timeout - the time to wait between two calls to +valueProvider+
|
|
56
56
|
*
|
|
57
57
|
* @returns the value that was returned by +valueProvider+
|
|
58
58
|
*/
|
|
@@ -74,10 +74,10 @@ async function waitFor(valueProvider, timeout = 5000) {
|
|
|
74
74
|
* Will return a changeset that is either ready to be executed or has no changes.
|
|
75
75
|
* Will throw in other cases.
|
|
76
76
|
*
|
|
77
|
-
* @param cfn a CloudFormation client
|
|
78
|
-
* @param stackName the name of the Stack that the ChangeSet belongs to
|
|
79
|
-
* @param changeSetName the name of the ChangeSet
|
|
80
|
-
* @param fetchAll if true, fetches all pages of the ChangeSet before returning.
|
|
77
|
+
* @param cfn - a CloudFormation client
|
|
78
|
+
* @param stackName - the name of the Stack that the ChangeSet belongs to
|
|
79
|
+
* @param changeSetName - the name of the ChangeSet
|
|
80
|
+
* @param fetchAll - if true, fetches all pages of the ChangeSet before returning.
|
|
81
81
|
*
|
|
82
82
|
* @returns the CloudFormation description of the ChangeSet
|
|
83
83
|
*/
|
|
@@ -265,8 +265,8 @@ function changeSetHasNoChanges(description) {
|
|
|
265
265
|
* Fails if the stack is in a FAILED state. Will not fail if the stack was
|
|
266
266
|
* already deleted.
|
|
267
267
|
*
|
|
268
|
-
* @param cfn a CloudFormation client
|
|
269
|
-
* @param stackName the name of the stack to wait for after a delete
|
|
268
|
+
* @param cfn - a CloudFormation client
|
|
269
|
+
* @param stackName - the name of the stack to wait for after a delete
|
|
270
270
|
*
|
|
271
271
|
* @returns the CloudFormation description of the stabilized stack after the delete attempt
|
|
272
272
|
*/
|
|
@@ -290,8 +290,8 @@ async function waitForStackDelete(cfn, ioHelper, stackName) {
|
|
|
290
290
|
*
|
|
291
291
|
* Fails if the stack is in a FAILED state, ROLLBACK state, or DELETED state.
|
|
292
292
|
*
|
|
293
|
-
* @param cfn a CloudFormation client
|
|
294
|
-
* @param stackName the name of the stack to wait for after an update
|
|
293
|
+
* @param cfn - a CloudFormation client
|
|
294
|
+
* @param stackName - the name of the stack to wait for after an update
|
|
295
295
|
*
|
|
296
296
|
* @returns the CloudFormation description of the stabilized stack after the update attempt
|
|
297
297
|
*/
|
|
@@ -442,4 +442,4 @@ class ParameterValues {
|
|
|
442
442
|
}
|
|
443
443
|
}
|
|
444
444
|
exports.ParameterValues = ParameterValues;
|
|
445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNmbi1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0dBLDRDQWtDQztBQXFDRCxrREFnQkM7QUF1RkQsOERBaUJDO0FBRUQsMENBbUNDO0FBK0JELHNEQVdDO0FBY0QsZ0RBbUJDO0FBYUQsZ0RBcUJDO0FBS0Qsd0NBNEJDO0FBdGRELCtCQUE4QjtBQUM5Qix5Q0FBeUM7QUFDekMsNENBQXlEO0FBT3pELDBFQUV3QztBQUV4QywyQ0FBMkM7QUFDM0MscUVBQWdFO0FBRWhFLCtEQUEyRDtBQUczRCxzREFBMkU7QUFJM0U7Ozs7Ozs7OztHQVNHO0FBQ0gsS0FBSyxVQUFVLGlCQUFpQixDQUM5QixHQUEwQixFQUMxQixTQUFpQixFQUNqQixhQUFxQixFQUNyQixFQUFFLFFBQVEsRUFBeUI7SUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQUM7UUFDM0MsU0FBUyxFQUFFLFNBQVM7UUFDcEIsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBQyxDQUFDO0lBRUgsMkVBQTJFO0lBQzNFLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDM0MsU0FBUyxFQUFFLFNBQVM7WUFDcEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksYUFBYTtZQUNwRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsMEJBQTBCO1FBQzFCLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3QixRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDN0csQ0FBQztRQUVELDRCQUE0QjtRQUM1QixRQUFRLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLE9BQU8sQ0FDcEIsYUFBa0QsRUFDbEQsVUFBa0IsSUFBSTtJQUV0QixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsR0FBMEIsRUFDMUIsUUFBa0IsRUFDbEIsU0FBaUIsRUFDakIsYUFBcUIsRUFDckIsRUFBRSxRQUFRLEVBQXlCO0lBRW5DLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsNERBQTRELEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUgsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRTtZQUN6RSxRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsa0dBQWtHO1FBQ2xHLGtGQUFrRjtRQUNsRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQzNGLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsNENBQTRDLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDOUcsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyx1Q0FBZSxDQUFDLGVBQWUsSUFBSSxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2pHLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsTUFBTSxJQUFJLDRCQUFZLENBQ3BCLDhCQUE4QixhQUFhLE9BQU8sU0FBUyxLQUFLLFdBQVcsQ0FBQyxNQUFNLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxZQUFZLElBQUksb0JBQW9CLEVBQUUsQ0FDekosQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLDRCQUFZLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBa0NEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxRQUFrQixFQUNsQixPQUFnQztJQUVoQyw0SkFBNEo7SUFDNUoseUhBQXlIO0lBQ3pILHVHQUF1RztJQUN2RyxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDN0UsSUFBSyxRQUFnQixDQUFDLElBQUksS0FBSyw0QkFBNEIsRUFBRSxDQUFDO1lBQzVELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsc0ZBQXNGLENBQUMsQ0FBQztZQUV0SCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8scUNBQXFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxrQ0FBa0MsQ0FDekMsUUFBcUM7SUFFckMsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQy9CLE1BQU0sYUFBYSxHQUFHLDBCQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZELGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFJLEtBQTJCLENBQUMsTUFBTSxDQUFDO1lBQ25ELElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBMEIsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxLQUFLLFVBQVUscUNBQXFDLENBQ2xELFFBQWtCLEVBQ2xCLE9BQWdDO0lBRWhDLElBQUksQ0FBQztRQUNILE1BQU0seUJBQXlCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFBLGtDQUFpQixFQUMzQyxRQUFRLEVBQ1IsT0FBTyxDQUFDLEtBQUssRUFDYixHQUFHLENBQUMsbUJBQW1CLEVBQ3ZCLElBQUksNkNBQW9CLEVBQUUsRUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sb0NBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUU5RixNQUFNLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNyRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUMxQixpTEFBaUwsQ0FDbEwsQ0FBQztRQUVGLE9BQU8sTUFBTSxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ3JDLEdBQUc7WUFDSCxhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztZQUNwQixNQUFNO1lBQ04sSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxhQUFhO1lBQ2IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7WUFDNUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLHVCQUF1QjtZQUN4RCxJQUFJLEVBQUUsZ0JBQWdCO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDMUIsbUhBQW1ILENBQ3BILENBQUM7WUFFRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxJQUFJLDRCQUFZLENBQUMsbUlBQW1JLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakssQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUFDLEtBQXdDLEVBQUUsV0FBd0I7SUFDaEgsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNuRSxTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEdBQUcsa0NBQWtDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkYsS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtnQkFDakUsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUU7Z0JBQ3pELEtBQUs7YUFDTixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUNuQyxRQUFrQixFQUNsQixPQUErQjtJQUUvQixNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVqRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxPQUFPLENBQUMsYUFBYSxjQUFjLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUV4SSxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRSxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRSxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ2xELFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLGFBQWEsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQzFGLFdBQVcsRUFBRSwwQkFBMEIsT0FBTyxDQUFDLElBQUksRUFBRTtRQUNyRCxXQUFXLEVBQUUsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQ2xDLFdBQVcsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVc7UUFDOUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWTtRQUNoRCxVQUFVLEVBQUUsV0FBVyxDQUFDLGFBQWE7UUFDckMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtRQUM1Qyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsdUJBQXVCO1FBQ3hELE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNyQixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ25DLFlBQVksRUFBRSxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixDQUFDO0tBQ25GLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsMkVBQTJFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakksZ0dBQWdHO0lBQ2hHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFO1FBQ3JILFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVztLQUM5QixDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVqRyxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUE4QjtJQUMvQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0MsR0FBRyxFQUFFLENBQUM7UUFDTixLQUFLLEVBQUUsQ0FBQztLQUNULENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELEtBQUssVUFBVSxtQkFBbUIsQ0FDaEMsR0FBMEIsRUFDMUIsUUFBa0IsRUFDbEIsYUFBcUIsRUFDckIsU0FBaUI7SUFFakIsMEZBQTBGO0lBQzFGLHdHQUF3RztJQUN4RyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxhQUFhLGVBQWUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUN4QixTQUFTLEVBQUUsU0FBUztRQUNwQixhQUFhLEVBQUUsYUFBYTtLQUM3QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsV0FBMkM7SUFDL0UsTUFBTSxxQkFBcUIsR0FBRztRQUM1Qix1Q0FBdUM7UUFDdkMsbURBQW1EO1FBQ25ELDBEQUEwRDtRQUMxRCxpQ0FBaUM7S0FDbEMsQ0FBQztJQUVGLE9BQU8sQ0FDTCxXQUFXLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckgsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsR0FBMEIsRUFDMUIsUUFBa0IsRUFDbEIsU0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNqQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksNEJBQVksQ0FDcEIsbUJBQW1CLFNBQVMsMkVBQTJFLE1BQU0sRUFBRSxDQUNoSCxDQUFDO0lBQ0osQ0FBQztTQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxHQUEwQixFQUMxQixRQUFrQixFQUNsQixTQUFpQjtJQUVqQixNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBRWpDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLDRCQUFZLENBQ3BCLG1CQUFtQixTQUFTLDhFQUE4RSxNQUFNLEVBQUUsQ0FDbkgsQ0FBQztJQUNKLENBQUM7U0FBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSw0QkFBWSxDQUFDLG1CQUFtQixTQUFTLHNCQUFzQixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxjQUFjLENBQ2xDLEdBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFNBQWlCO0lBRWpCLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsd0RBQXdELEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLG9DQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUEsYUFBTSxFQUFDLHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDNUUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUEsYUFBTSxFQUFDLHNFQUFzRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pJLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JDLGlIQUFpSDtZQUNqSCxpSEFBaUg7WUFDakgsNEdBQTRHO1lBQzVHLDZHQUE2RztZQUM3RyxpSEFBaUg7WUFDakgsZ0RBQWdEO1lBQ2hELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsbUZBQW1GLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEosQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUtBO0lBSnRCLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBa0I7UUFDM0MsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFlBQTZCLE1BQXlDO1FBQXpDLFdBQU0sR0FBTixNQUFNLENBQW1DO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxPQUEyQztRQUMxRCxPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxjQUFjLENBQ25CLE9BQTJDLEVBQzNDLGNBQXNDO1FBRXRDLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBaENELGdEQWdDQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBS1A7SUFKSCxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUNwQyxhQUFhLEdBQWdCLEVBQUUsQ0FBQztJQUVoRCxZQUNtQixZQUErQyxFQUNoRSxPQUEyQyxFQUMzQyxpQkFBeUMsRUFBRTtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBbUM7UUFJaEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUU1QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNuRSw0RUFBNEU7WUFDNUUsOEJBQThCO1lBQzlCLEVBQUU7WUFDRix1RkFBdUY7WUFDdkYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLFlBQVksRUFBRSxHQUFHO29CQUNqQixjQUFjLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQztpQkFDN0IsQ0FBQyxDQUFDO2dCQUNILFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkUsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsU0FBUztZQUNYLENBQUM7WUFFRCxRQUFRO1lBQ1IsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSw0QkFBWSxDQUFDLGdFQUFnRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2SCxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLDBFQUEwRTtRQUMxRSxNQUFNO1FBQ04sTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQ3ZGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3hELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN6RixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxhQUFxQztRQUNyRCw0RUFBNEU7UUFDNUUsdUVBQXVFO1FBQ3ZFLHFGQUFxRjtRQUNyRixJQUNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQywrQkFBc0IsQ0FBQyxDQUN0RyxFQUNELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsdURBQXVEO1FBQ3ZELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlHLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDRDQUE0QztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFwRkQsMENBb0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgU1NNUEFSQU1fTk9fSU5WQUxJREFURSB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7XG4gIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgUGFyYW1ldGVyLFxuICBSZXNvdXJjZVRvSW1wb3J0LFxuICBUYWcsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXRTdGF0dXMsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IEZpbGVNYW5pZmVzdEVudHJ5IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0QnVpbGRlciB9IGZyb20gJy4vYXNzZXQtbWFuaWZlc3QtYnVpbGRlcic7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlLCBUZW1wbGF0ZUJvZHlQYXJhbWV0ZXIsIFRlbXBsYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjaywgbWFrZUJvZHlQYXJhbWV0ZXIgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlc1RvSW1wb3J0IH0gZnJvbSAnLi4vcmVzb3VyY2UtaW1wb3J0JztcblxuLyoqXG4gKiBEZXNjcmliZSBhIGNoYW5nZXNldCBpbiBDbG91ZEZvcm1hdGlvbiwgcmVnYXJkbGVzcyBvZiBpdHMgY3VycmVudCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoZSBDaGFuZ2VTZXQgYmVsb25ncyB0b1xuICogQHBhcmFtIGNoYW5nZVNldE5hbWUgdGhlIG5hbWUgb2YgdGhlIENoYW5nZVNldFxuICogQHBhcmFtIGZldGNoQWxsICAgICAgaWYgdHJ1ZSwgZmV0Y2hlcyBhbGwgcGFnZXMgb2YgdGhlIGNoYW5nZSBzZXQgZGVzY3JpcHRpb24uXG4gKlxuICogQHJldHVybnMgICAgICAgQ2xvdWRGb3JtYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIENoYW5nZVNldFxuICovXG5hc3luYyBmdW5jdGlvbiBkZXNjcmliZUNoYW5nZVNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuICBjaGFuZ2VTZXROYW1lOiBzdHJpbmcsXG4gIHsgZmV0Y2hBbGwgfTogeyBmZXRjaEFsbDogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVDaGFuZ2VTZXQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gIH0pO1xuXG4gIC8vIElmIGZldGNoQWxsIGlzIHRydWUsIHRyYXZlcnNlIGFsbCBwYWdlcyBmcm9tIHRoZSBjaGFuZ2Ugc2V0IGRlc2NyaXB0aW9uLlxuICB3aGlsZSAoZmV0Y2hBbGwgJiYgcmVzcG9uc2UuTmV4dFRva2VuICE9IG51bGwpIHtcbiAgICBjb25zdCBuZXh0UGFnZSA9IGF3YWl0IGNmbi5kZXNjcmliZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IHJlc3BvbnNlLkNoYW5nZVNldElkID8/IGNoYW5nZVNldE5hbWUsXG4gICAgICBOZXh0VG9rZW46IHJlc3BvbnNlLk5leHRUb2tlbixcbiAgICB9KTtcblxuICAgIC8vIENvbnNvbGlkYXRlIHRoZSBjaGFuZ2VzXG4gICAgaWYgKG5leHRQYWdlLkNoYW5nZXMgIT0gbnVsbCkge1xuICAgICAgcmVzcG9uc2UuQ2hhbmdlcyA9IHJlc3BvbnNlLkNoYW5nZXMgIT0gbnVsbCA/IHJlc3BvbnNlLkNoYW5nZXMuY29uY2F0KG5leHRQYWdlLkNoYW5nZXMpIDogbmV4dFBhZ2UuQ2hhbmdlcztcbiAgICB9XG5cbiAgICAvLyBGb3J3YXJkIHRoZSBuZXcgTmV4dFRva2VuXG4gICAgcmVzcG9uc2UuTmV4dFRva2VuID0gbmV4dFBhZ2UuTmV4dFRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIGZ1bmN0aW9uIHRvIHJldHVybiBub24tK3VuZGVmaW5lZCsgYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWVQcm92aWRlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gYSB2YWx1ZSB0aGF0IGlzIG5vdCArdW5kZWZpbmVkKyBvbmNlIHRoZSB3YWl0IHNob3VsZCBiZSBvdmVyXG4gKiBAcGFyYW0gdGltZW91dCAgICAgdGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHR3byBjYWxscyB0byArdmFsdWVQcm92aWRlcitcbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgdmFsdWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgK3ZhbHVlUHJvdmlkZXIrXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3I8VD4oXG4gIHZhbHVlUHJvdmlkZXI6ICgpID0+IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+LFxuICB0aW1lb3V0OiBudW1iZXIgPSA1MDAwLFxuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsdWVQcm92aWRlcigpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKGNiKSA9PiBzZXRUaW1lb3V0KGNiLCB0aW1lb3V0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDaGFuZ2VTZXQgdG8gYmUgYXZhaWxhYmxlIGZvciB0cmlnZ2VyaW5nIGEgU3RhY2tVcGRhdGUuXG4gKlxuICogV2lsbCByZXR1cm4gYSBjaGFuZ2VzZXQgdGhhdCBpcyBlaXRoZXIgcmVhZHkgdG8gYmUgZXhlY3V0ZWQgb3IgaGFzIG5vIGNoYW5nZXMuXG4gKiBXaWxsIHRocm93IGluIG90aGVyIGNhc2VzLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICB0aGUgbmFtZSBvZiB0aGUgU3RhY2sgdGhhdCB0aGUgQ2hhbmdlU2V0IGJlbG9uZ3MgdG9cbiAqIEBwYXJhbSBjaGFuZ2VTZXROYW1lIHRoZSBuYW1lIG9mIHRoZSBDaGFuZ2VTZXRcbiAqIEBwYXJhbSBmZXRjaEFsbCAgICAgIGlmIHRydWUsIGZldGNoZXMgYWxsIHBhZ2VzIG9mIHRoZSBDaGFuZ2VTZXQgYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIENoYW5nZVNldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNoYW5nZVNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIGNoYW5nZVNldE5hbWU6IHN0cmluZyxcbiAgeyBmZXRjaEFsbCB9OiB7IGZldGNoQWxsOiBib29sZWFuIH0sXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4ge1xuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ1dhaXRpbmcgZm9yIGNoYW5nZXNldCAlcyBvbiBzdGFjayAlcyB0byBmaW5pc2ggY3JlYXRpbmcuLi4nLCBjaGFuZ2VTZXROYW1lLCBzdGFja05hbWUpKTtcbiAgY29uc3QgcmV0ID0gYXdhaXQgd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBhd2FpdCBkZXNjcmliZUNoYW5nZVNldChjZm4sIHN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSwge1xuICAgICAgZmV0Y2hBbGwsXG4gICAgfSk7XG4gICAgLy8gVGhlIGZvbGxvd2luZyBkb2Vzbid0IHVzZSBhIHN3aXRjaCBiZWNhdXNlIHRzYyB3aWxsIG5vdCBhbGxvdyBmYWxsLXRocm91Z2gsIFVOTEVTUyBpdCBpcyBhbGxvd3NcbiAgICAvLyBFVkVSWVdIRVJFIHRoYXQgdXNlcyB0aGlzIGxpYnJhcnkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgd2hpY2ggaXMgdW5kZXNpcmFibGUuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9QRU5ESU5HJyB8fCBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdDUkVBVEVfSU5fUFJPR1JFU1MnKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ0NoYW5nZXNldCAlcyBvbiBzdGFjayAlcyBpcyBzdGlsbCBjcmVhdGluZycsIGNoYW5nZVNldE5hbWUsIHN0YWNrTmFtZSkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24uU3RhdHVzID09PSBDaGFuZ2VTZXRTdGF0dXMuQ1JFQVRFX0NPTVBMRVRFIHx8IGNoYW5nZVNldEhhc05vQ2hhbmdlcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gY3JlYXRlIENoYW5nZVNldCAke2NoYW5nZVNldE5hbWV9IG9uICR7c3RhY2tOYW1lfTogJHtkZXNjcmlwdGlvbi5TdGF0dXMgfHwgJ05PX1NUQVRVUyd9LCAke2Rlc2NyaXB0aW9uLlN0YXR1c1JlYXNvbiB8fCAnbm8gcmVhc29uIHByb3ZpZGVkJ31gLFxuICAgICk7XG4gIH0pO1xuXG4gIGlmICghcmV0KSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ2hhbmdlIHNldCB0b29rIHRvbyBsb25nIHRvIGJlIGNyZWF0ZWQ7IGFib3J0aW5nJyk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgdHlwZSBQcmVwYXJlQ2hhbmdlU2V0T3B0aW9ucyA9IHtcbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgZGVwbG95bWVudHM6IERlcGxveW1lbnRzO1xuICB1dWlkOiBzdHJpbmc7XG4gIHdpbGxFeGVjdXRlOiBib29sZWFuO1xuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG4gIHBhcmFtZXRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xuICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGxvZyBBV1MgQ2xvdWRGb3JtYXRpb24gZXJyb3JzIGFuZCBtb3ZlIG9uLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGluc3RlYWRcbiAgICogZmFpbCBvbiBlcnJvcnMgcmVjZWl2ZWQgYnkgQVdTIENsb3VkRm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZmFpbE9uRXJyb3I/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ2hhbmdlU2V0T3B0aW9ucyA9IHtcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG4gIGNoYW5nZVNldE5hbWU6IHN0cmluZztcbiAgd2lsbEV4ZWN1dGU6IGJvb2xlYW47XG4gIGV4aXN0czogYm9vbGVhbjtcbiAgdXVpZDogc3RyaW5nO1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBib2R5UGFyYW1ldGVyOiBUZW1wbGF0ZUJvZHlQYXJhbWV0ZXI7XG4gIHBhcmFtZXRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlVG9JbXBvcnRbXTtcbiAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM/OiBib29sZWFuO1xuICByb2xlPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBjaGFuZ2VzZXQgZm9yIGEgZGlmZiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpZmZDaGFuZ2VTZXQoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgb3B0aW9uczogUHJlcGFyZUNoYW5nZVNldE9wdGlvbnMsXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCB8IHVuZGVmaW5lZD4ge1xuICAvLyBgb3B0aW9ucy5zdGFja2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSBhbnkgbmVzdGVkIHN0YWNrIHRlbXBsYXRlcyBkaXJlY3RseSBpbmxpbmUgd2l0aCBpdHMgb3duIHRlbXBsYXRlLCB1bmRlciBhIHNwZWNpYWwgYE5lc3RlZFRlbXBsYXRlYCBwcm9wZXJ0eS5cbiAgLy8gVGh1cyB0aGUgcGFyZW50IHRlbXBsYXRlJ3MgUmVzb3VyY2VzIHNlY3Rpb24gY29udGFpbnMgdGhlIG5lc3RlZCB0ZW1wbGF0ZSdzIENESyBtZXRhZGF0YSBjaGVjaywgd2hpY2ggdXNlcyBGbjo6RXF1YWxzLlxuICAvLyBUaGlzIGNhdXNlcyBDcmVhdGVDaGFuZ2VTZXQgdG8gZmFpbCB3aXRoIGBUZW1wbGF0ZSBFcnJvcjogRm46OkVxdWFscyBjYW5ub3QgYmUgcGFydGlhbGx5IGNvbGxhcHNlZGAuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgT2JqZWN0LnZhbHVlcyhvcHRpb25zLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkpIHtcbiAgICBpZiAoKHJlc291cmNlIGFzIGFueSkuVHlwZSA9PT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoJ1RoaXMgc3RhY2sgY29udGFpbnMgb25lIG9yIG1vcmUgbmVzdGVkIHN0YWNrcywgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlLW9ubHkgZGlmZi4uLicpO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGxvYWRCb2R5UGFyYW1ldGVyQW5kQ3JlYXRlQ2hhbmdlU2V0KGlvSGVscGVyLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBmaWxlIGVudHJpZXMgZnJvbSBhbiBBc3NldE1hbmlmZXN0QXJ0aWZhY3QgdGhhdCBsb29rIGxpa2UgdGVtcGxhdGVzLlxuICpcbiAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgYHVwbG9hZEJvZHlQYXJhbWV0ZXJBbmRDcmVhdGVDaGFuZ2VTZXRgIGZ1bmN0aW9uIHRvIGZpbmRcbiAqIGFsbCB0ZW1wbGF0ZSBhc3NldCBmaWxlcyB0byBidWlsZCBhbmQgcHVibGlzaC5cbiAqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2YgW0Fzc2V0TWFuaWZlc3QsIEZpbGVNYW5pZmVzdEVudHJ5W11dXG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlc0Zyb21Bc3NldE1hbmlmZXN0QXJ0aWZhY3QoXG4gIGFydGlmYWN0OiBjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3QsXG4pOiBbQXNzZXRNYW5pZmVzdCwgRmlsZU1hbmlmZXN0RW50cnlbXV0ge1xuICBjb25zdCBhc3NldHM6IEZpbGVNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgY29uc3QgZmlsZU5hbWUgPSBhcnRpZmFjdC5maWxlO1xuICBjb25zdCBhc3NldE1hbmlmZXN0ID0gQXNzZXRNYW5pZmVzdC5mcm9tRmlsZShmaWxlTmFtZSk7XG5cbiAgYXNzZXRNYW5pZmVzdC5lbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgaWYgKGVudHJ5LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgY29uc3Qgc291cmNlID0gKGVudHJ5IGFzIEZpbGVNYW5pZmVzdEVudHJ5KS5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlLnBhdGggJiYgc291cmNlLnBhdGguZW5kc1dpdGgoJy50ZW1wbGF0ZS5qc29uJykpIHtcbiAgICAgICAgYXNzZXRzLnB1c2goZW50cnkgYXMgRmlsZU1hbmlmZXN0RW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBbYXNzZXRNYW5pZmVzdCwgYXNzZXRzXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkQm9keVBhcmFtZXRlckFuZENyZWF0ZUNoYW5nZVNldChcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBvcHRpb25zOiBQcmVwYXJlQ2hhbmdlU2V0T3B0aW9ucyxcbik6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0IHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgdXBsb2FkU3RhY2tUZW1wbGF0ZUFzc2V0cyhvcHRpb25zLnN0YWNrLCBvcHRpb25zLmRlcGxveW1lbnRzKTtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCBvcHRpb25zLmRlcGxveW1lbnRzLmVudnMuYWNjZXNzU3RhY2tGb3JNdXRhYmxlU3RhY2tPcGVyYXRpb25zKG9wdGlvbnMuc3RhY2spO1xuXG4gICAgY29uc3QgYm9keVBhcmFtZXRlciA9IGF3YWl0IG1ha2VCb2R5UGFyYW1ldGVyKFxuICAgICAgaW9IZWxwZXIsXG4gICAgICBvcHRpb25zLnN0YWNrLFxuICAgICAgZW52LnJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgICBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKSxcbiAgICAgIGVudi5yZXNvdXJjZXMsXG4gICAgKTtcbiAgICBjb25zdCBjZm4gPSBlbnYuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgZXhpc3RzID0gKGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgb3B0aW9ucy5zdGFjay5zdGFja05hbWUsIGZhbHNlKSkuZXhpc3RzO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMuc3RhY2suY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Sb2xlQXJuKTtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKFxuICAgICAgJ0hvbGQgb24gd2hpbGUgd2UgY3JlYXRlIGEgcmVhZC1vbmx5IGNoYW5nZSBzZXQgdG8gZ2V0IGEgZGlmZiB3aXRoIGFjY3VyYXRlIHJlcGxhY2VtZW50IGluZm9ybWF0aW9uICh1c2UgLS1uby1jaGFuZ2Utc2V0IHRvIHVzZSBhIGxlc3MgYWNjdXJhdGUgYnV0IGZhc3RlciB0ZW1wbGF0ZS1vbmx5IGRpZmYpXFxuJyxcbiAgICApO1xuXG4gICAgcmV0dXJuIGF3YWl0IGNyZWF0ZUNoYW5nZVNldChpb0hlbHBlciwge1xuICAgICAgY2ZuLFxuICAgICAgY2hhbmdlU2V0TmFtZTogJ2Nkay1kaWZmLWNoYW5nZS1zZXQnLFxuICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICBleGlzdHMsXG4gICAgICB1dWlkOiBvcHRpb25zLnV1aWQsXG4gICAgICB3aWxsRXhlY3V0ZTogb3B0aW9ucy53aWxsRXhlY3V0ZSxcbiAgICAgIGJvZHlQYXJhbWV0ZXIsXG4gICAgICBwYXJhbWV0ZXJzOiBvcHRpb25zLnBhcmFtZXRlcnMsXG4gICAgICByZXNvdXJjZXNUb0ltcG9ydDogb3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCxcbiAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBvcHRpb25zLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgcm9sZTogZXhlY3V0aW9uUm9sZUFybixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IGRpZmYgc28gdGhlc2UgbWVzc2FnZXMgYXJlIGRpZmYtc3BlY2lmaWNcbiAgICBpZiAoIW9wdGlvbnMuZmFpbE9uRXJyb3IpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFN0cmluZyhlKSk7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5pbmZvKFxuICAgICAgICAnQ291bGQgbm90IGNyZWF0ZSBhIGNoYW5nZSBzZXQsIHdpbGwgYmFzZSB0aGUgZGlmZiBvbiB0ZW1wbGF0ZSBkaWZmZXJlbmNlcyAocnVuIGFnYWluIHdpdGggLXYgdG8gc2VlIHRoZSByZWFzb24pXFxuJyxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ291bGQgbm90IGNyZWF0ZSBhIGNoYW5nZSBzZXQgYW5kIGZhaWxPbkVycm9yIGlzIHNldC4gKHJ1biBhZ2FpbiB3aXRoIGZhaWxPbkVycm9yIG9mZiB0byBiYXNlIHRoZSBkaWZmIG9uIHRlbXBsYXRlIGRpZmZlcmVuY2VzKVxcbicsIGUpO1xuICB9XG59XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgYXNzZXRzIHRoYXQgbG9vayBsaWtlIHRlbXBsYXRlcyBmb3IgdGhpcyBDbG91ZEZvcm1hdGlvbiBzdGFja1xuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBhbnkgQ2xvdWRGb3JtYXRpb24gY2FsbCB0aGF0IG5lZWRzIHRoZSB0ZW1wbGF0ZSwgaXQgbWF5IG5lZWRcbiAqIHRvIGJlIHVwbG9hZGVkIHRvIGFuIFMzIGJ1Y2tldCBmaXJzdC4gV2UgaGF2ZSB0byBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGVcbiAqIGFzc2V0IG1hbmlmZXN0LCBiZWNhdXNlIHRlY2huaWNhbGx5IHRoYXQgaXMgdGhlIG9ubHkgcGxhY2UgdGhhdCBrbm93cyBhYm91dFxuICogYnVja2V0IGFuZCBhc3N1bWVkIHJvbGVzIGFuZCBzdWNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBsb2FkU3RhY2tUZW1wbGF0ZUFzc2V0cyhzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LCBkZXBsb3ltZW50czogRGVwbG95bWVudHMpIHtcbiAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBzdGFjay5kZXBlbmRlbmNpZXMpIHtcbiAgICAvLyBTa2lwIGFydGlmYWN0IGlmIGl0IGlzIG5vdCBhbiBBc3NldCBNYW5pZmVzdCBBcnRpZmFjdFxuICAgIGlmICghY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0LmlzQXNzZXRNYW5pZmVzdEFydGlmYWN0KGFydGlmYWN0KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgW2Fzc2V0TWFuaWZlc3QsIGZpbGVfZW50cmllc10gPSB0ZW1wbGF0ZXNGcm9tQXNzZXRNYW5pZmVzdEFydGlmYWN0KGFydGlmYWN0KTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGZpbGVfZW50cmllcykge1xuICAgICAgYXdhaXQgZGVwbG95bWVudHMuYnVpbGRTaW5nbGVBc3NldChhcnRpZmFjdCwgYXNzZXRNYW5pZmVzdCwgZW50cnksIHtcbiAgICAgICAgc3RhY2ssXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGRlcGxveW1lbnRzLnB1Ymxpc2hTaW5nbGVBc3NldChhc3NldE1hbmlmZXN0LCBlbnRyeSwge1xuICAgICAgICBzdGFjayxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ2hhbmdlU2V0KFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIG9wdGlvbnM6IENyZWF0ZUNoYW5nZVNldE9wdGlvbnMsXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4ge1xuICBhd2FpdCBjbGVhbnVwT2xkQ2hhbmdlc2V0KG9wdGlvbnMuY2ZuLCBpb0hlbHBlciwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG5cbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYEF0dGVtcHRpbmcgdG8gY3JlYXRlIENoYW5nZVNldCB3aXRoIG5hbWUgJHtvcHRpb25zLmNoYW5nZVNldE5hbWV9IGZvciBzdGFjayAke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfWApO1xuXG4gIGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZShvcHRpb25zLnN0YWNrLnRlbXBsYXRlKTtcbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSB0ZW1wbGF0ZVBhcmFtcy5zdXBwbHlBbGwob3B0aW9ucy5wYXJhbWV0ZXJzKTtcblxuICBjb25zdCBjaGFuZ2VTZXQgPSBhd2FpdCBvcHRpb25zLmNmbi5jcmVhdGVDaGFuZ2VTZXQoe1xuICAgIFN0YWNrTmFtZTogb3B0aW9ucy5zdGFjay5zdGFja05hbWUsXG4gICAgQ2hhbmdlU2V0TmFtZTogb3B0aW9ucy5jaGFuZ2VTZXROYW1lLFxuICAgIENoYW5nZVNldFR5cGU6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQgPyAnSU1QT1JUJyA6IG9wdGlvbnMuZXhpc3RzID8gJ1VQREFURScgOiAnQ1JFQVRFJyxcbiAgICBEZXNjcmlwdGlvbjogYENESyBDaGFuZ2VzZXQgZm9yIGRpZmYgJHtvcHRpb25zLnV1aWR9YCxcbiAgICBDbGllbnRUb2tlbjogYGRpZmYke29wdGlvbnMudXVpZH1gLFxuICAgIFRlbXBsYXRlVVJMOiBvcHRpb25zLmJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVVUkwsXG4gICAgVGVtcGxhdGVCb2R5OiBvcHRpb25zLmJvZHlQYXJhbWV0ZXIuVGVtcGxhdGVCb2R5LFxuICAgIFBhcmFtZXRlcnM6IHN0YWNrUGFyYW1zLmFwaVBhcmFtZXRlcnMsXG4gICAgUmVzb3VyY2VzVG9JbXBvcnQ6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgSW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IG9wdGlvbnMuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgUm9sZUFSTjogb3B0aW9ucy5yb2xlLFxuICAgIFRhZ3M6IHRvQ2ZuVGFncyhvcHRpb25zLnN0YWNrLnRhZ3MpLFxuICAgIENhcGFiaWxpdGllczogWydDQVBBQklMSVRZX0lBTScsICdDQVBBQklMSVRZX05BTUVEX0lBTScsICdDQVBBQklMSVRZX0FVVE9fRVhQQU5EJ10sXG4gIH0pO1xuXG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnSW5pdGlhdGVkIGNyZWF0aW9uIG9mIGNoYW5nZXNldDogJXM7IHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlzaCBjcmVhdGluZy4uLicsIGNoYW5nZVNldC5JZCkpO1xuICAvLyBGZXRjaGluZyBhbGwgcGFnZXMgaWYgd2UnbGwgZXhlY3V0ZSwgc28gd2UgY2FuIGhhdmUgdGhlIGNvcnJlY3QgY2hhbmdlIGNvdW50IHdoZW4gbW9uaXRvcmluZy5cbiAgY29uc3QgY3JlYXRlZENoYW5nZVNldCA9IGF3YWl0IHdhaXRGb3JDaGFuZ2VTZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCB7XG4gICAgZmV0Y2hBbGw6IG9wdGlvbnMud2lsbEV4ZWN1dGUsXG4gIH0pO1xuICBhd2FpdCBjbGVhbnVwT2xkQ2hhbmdlc2V0KG9wdGlvbnMuY2ZuLCBpb0hlbHBlciwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZWRDaGFuZ2VTZXQ7XG59XG5cbmZ1bmN0aW9uIHRvQ2ZuVGFncyh0YWdzOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0pOiBUYWdbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5tYXAoKFtrLCB2XSkgPT4gKHtcbiAgICBLZXk6IGssXG4gICAgVmFsdWU6IHYsXG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cE9sZENoYW5nZXNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nLFxuICBzdGFja05hbWU6IHN0cmluZyxcbikge1xuICAvLyBEZWxldGUgYW55IGV4aXN0aW5nIGNoYW5nZSBzZXRzIGdlbmVyYXRlZCBieSBDREsgc2luY2UgY2hhbmdlIHNldCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cbiAgLy8gVGhlIGRlbGV0ZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgYXMgbG9uZyBhcyB0aGUgc3RhY2sgZXhpc3RzIChldmVuIGlmIHRoZSBjaGFuZ2Ugc2V0IGRvZXMgbm90IGV4aXN0KS5cbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYFJlbW92aW5nIGV4aXN0aW5nIGNoYW5nZSBzZXQgd2l0aCBuYW1lICR7Y2hhbmdlU2V0TmFtZX0gaWYgaXQgZXhpc3RzYCk7XG4gIGF3YWl0IGNmbi5kZWxldGVDaGFuZ2VTZXQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBjaGFuZ2Ugc2V0IGhhcyBubyBjaGFuZ2VzXG4gKlxuICogVGhpcyBtdXN0IGJlIGRldGVybWluZWQgZnJvbSB0aGUgc3RhdHVzLCBub3QgdGhlICdDaGFuZ2VzJyBhcnJheSBvbiB0aGVcbiAqIG9iamVjdDsgdGhlIGxhdHRlciBjYW4gYmUgZW1wdHkgYmVjYXVzZSBubyByZXNvdXJjZXMgd2VyZSBjaGFuZ2VkLCBidXQgaWZcbiAqIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIE91dHB1dHMsIHRoZSBjaGFuZ2Ugc2V0IGNhbiBzdGlsbCBiZSBleGVjdXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVNldEhhc05vQ2hhbmdlcyhkZXNjcmlwdGlvbjogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0KSB7XG4gIGNvbnN0IG5vQ2hhbmdlRXJyb3JQcmVmaXhlcyA9IFtcbiAgICAvLyBFcnJvciBtZXNzYWdlIGZvciBhIHJlZ3VsYXIgdGVtcGxhdGVcbiAgICBcIlRoZSBzdWJtaXR0ZWQgaW5mb3JtYXRpb24gZGlkbid0IGNvbnRhaW4gY2hhbmdlcy5cIixcbiAgICAvLyBFcnJvciBtZXNzYWdlIHdoZW4gYSBUcmFuc2Zvcm0gaXMgaW52b2x2ZWQgKHNlZSAjMTA2NTApXG4gICAgJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nLFxuICBdO1xuXG4gIHJldHVybiAoXG4gICAgZGVzY3JpcHRpb24uU3RhdHVzID09PSAnRkFJTEVEJyAmJiBub0NoYW5nZUVycm9yUHJlZml4ZXMuc29tZSgocCkgPT4gKGRlc2NyaXB0aW9uLlN0YXR1c1JlYXNvbiA/PyAnJykuc3RhcnRzV2l0aChwKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayB0byBzdGFiaWxpemUgaW4gYSBjb21wbGV0ZS9hdmFpbGFibGUgc3RhdGVcbiAqIGFmdGVyIGEgZGVsZXRlIG9wZXJhdGlvbiBpcyBpc3N1ZWQuXG4gKlxuICogRmFpbHMgaWYgdGhlIHN0YWNrIGlzIGluIGEgRkFJTEVEIHN0YXRlLiBXaWxsIG5vdCBmYWlsIGlmIHRoZSBzdGFjayB3YXNcbiAqIGFscmVhZHkgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byB3YWl0IGZvciBhZnRlciBhIGRlbGV0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIGRlbGV0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZWxldGUoXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHN0YWNrID0gYXdhaXQgc3RhYmlsaXplU3RhY2soY2ZuLCBpb0hlbHBlciwgc3RhY2tOYW1lKTtcbiAgaWYgKCFzdGFjaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGF0dXMgPSBzdGFjay5zdGFja1N0YXR1cztcbiAgaWYgKHN0YXR1cy5pc0ZhaWx1cmUpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gaXMgaW4gYSBmYWlsZWQgc3RhdGUuIFlvdSBtYXkgbmVlZCB0byBkZWxldGUgaXQgZnJvbSB0aGUgQVdTIGNvbnNvbGUgOiAke3N0YXR1c31gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoc3RhdHVzLmlzRGVsZXRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIENsb3VkRm9ybWF0aW9uIHN0YWNrIHRvIHN0YWJpbGl6ZSBpbiBhIGNvbXBsZXRlL2F2YWlsYWJsZSBzdGF0ZVxuICogYWZ0ZXIgYW4gdXBkYXRlL2NyZWF0ZSBvcGVyYXRpb24gaXMgaXNzdWVkLlxuICpcbiAqIEZhaWxzIGlmIHRoZSBzdGFjayBpcyBpbiBhIEZBSUxFRCBzdGF0ZSwgUk9MTEJBQ0sgc3RhdGUsIG9yIERFTEVURUQgc3RhdGUuXG4gKlxuICogQHBhcmFtIGNmbiAgICAgICAgYSBDbG91ZEZvcm1hdGlvbiBjbGllbnRcbiAqIEBwYXJhbSBzdGFja05hbWUgICAgICB0aGUgbmFtZSBvZiB0aGUgc3RhY2sgdG8gd2FpdCBmb3IgYWZ0ZXIgYW4gdXBkYXRlXG4gKlxuICogQHJldHVybnMgICAgIHRoZSBDbG91ZEZvcm1hdGlvbiBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhYmlsaXplZCBzdGFjayBhZnRlciB0aGUgdXBkYXRlIGF0dGVtcHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JTdGFja0RlcGxveShcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2sgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIGlvSGVscGVyLCBzdGFja05hbWUpO1xuICBpZiAoIXN0YWNrKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuXG4gIGlmIChzdGF0dXMuaXNDcmVhdGlvbkZhaWx1cmUpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gZmFpbGVkIGNyZWF0aW9uLCBpdCBtYXkgbmVlZCB0byBiZSBtYW51YWxseSBkZWxldGVkIGZyb20gdGhlIEFXUyBjb25zb2xlOiAke3N0YXR1c31gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoIXN0YXR1cy5pc0RlcGxveVN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBUaGUgc3RhY2sgbmFtZWQgJHtzdGFja05hbWV9IGZhaWxlZCB0byBkZXBsb3k6ICR7c3RhdHVzfWApO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGEgc3RhY2sgdG8gYmVjb21lIHN0YWJsZSAobm8gbG9uZ2VyIF9JTl9QUk9HUkVTUyksIHJldHVybmluZyBpdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhYmlsaXplU3RhY2soXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKSB7XG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnV2FpdGluZyBmb3Igc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nIG9yIHVwZGF0aW5nLi4uJywgc3RhY2tOYW1lKSk7XG4gIHJldHVybiB3YWl0Rm9yKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgc3RhY2tOYW1lKTtcbiAgICBpZiAoIXN0YWNrLmV4aXN0cykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdTdGFjayAlcyBkb2VzIG5vdCBleGlzdCcsIHN0YWNrTmFtZSkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICAgIGlmIChzdGF0dXMuaXNJblByb2dyZXNzKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ1N0YWNrICVzIGhhcyBhbiBvbmdvaW5nIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyBhbmQgaXMgbm90IHN0YWJsZSAoJXMpJywgc3RhY2tOYW1lLCBzdGF0dXMpKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMuaXNSZXZpZXdJblByb2dyZXNzKSB7XG4gICAgICAvLyBUaGlzIG1heSBoYXBwZW4gaWYgYSBzdGFjayBjcmVhdGlvbiBvcGVyYXRpb24gaXMgaW50ZXJydXB0ZWQgYmVmb3JlIHRoZSBDaGFuZ2VTZXQgZXhlY3V0aW9uIHN0YXJ0cy4gUmVjb3ZlcmluZ1xuICAgICAgLy8gZnJvbSB0aGlzIHdvdWxkIHJlcXVpcmluZyBtYW51YWwgaW50ZXJ2ZW50aW9uIChkZWxldGluZyBvciBleGVjdXRpbmcgdGhlIHBlbmRpbmcgQ2hhbmdlU2V0KSwgYW5kIGZhaWxpbmcgdG8gZG9cbiAgICAgIC8vIHNvIHdpbGwgcmVzdWx0IGluIGFuIGVuZGxlc3Mgd2FpdCBoZXJlICh0aGUgQ2hhbmdlU2V0IHdvbnQgZGVsZXRlIG9yIGV4ZWN1dGUgaXRzZWxmKS4gSW5zdGVhZCBvZiBibG9ja2luZ1xuICAgICAgLy8gXCJmb3JldmVyXCIgd2UgcHJvY2VlZCBhcyBpZiB0aGUgc3RhY2sgd2FzIGV4aXN0aW5nIGFuZCBzdGFibGUuIElmIHRoZXJlIGlzIGEgY29uY3VycmVudCBvcGVyYXRpb24gdGhhdCBqdXN0XG4gICAgICAvLyBoYXNuJ3QgZmluaXNoZWQgcHJvY2VlZGluZyBqdXN0IHlldCwgZWl0aGVyIHRoaXMgb3BlcmF0aW9uIG9yIHRoZSBjb25jdXJyZW50IG9uZSBtYXkgZmFpbCBkdWUgdG8gdGhlIG90aGVyIG9uZVxuICAgICAgLy8gaGF2aW5nIG1hZGUgcHJvZ3Jlc3MuIFdoaWNoIGlzIGZpbmUuIEkgZ3Vlc3MuXG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ1N0YWNrICVzIGlzIGluIFJFVklFV19JTl9QUk9HUkVTUyBzdGF0ZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIHN0YWJsZSBzdGF0dXMgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIChmb3JtYWwpIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gYSB0ZW1wbGF0ZVxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVQYXJhbWV0ZXJzIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZVBhcmFtZXRlcnModGVtcGxhdGUuUGFyYW1ldGVycyB8fCB7fSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+KSB7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHN0YWNrIHBhcmFtZXRlcnMgdG8gcGFzcyBmcm9tIHRoZSBnaXZlbiBkZXNpcmVkIHBhcmFtZXRlciB2YWx1ZXNcbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSBEZWZhdWx0IHZhbHVlIG9yIGEgUHJldmlvdXMgdmFsdWUgYXJlIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyBzdXBwbHlBbGwodXBkYXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPik6IFBhcmFtZXRlclZhbHVlcyB7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJWYWx1ZXModGhpcy5wYXJhbXMsIHVwZGF0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gdGhlIHRlbXBsYXRlLCB0aGUgZ2l2ZW4gZGVzaXJlZCB2YWx1ZXMgYW5kIHRoZSBjdXJyZW50IHZhbHVlcywgY2FsY3VsYXRlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzdGFjayBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIFdpbGwgdGFrZSBpbnRvIGFjY291bnQgcGFyYW1ldGVycyBhbHJlYWR5IHNldCBvbiB0aGUgdGVtcGxhdGUgKHdpbGwgZW1pdFxuICAgKiAnVXNlUHJldmlvdXNWYWx1ZTogdHJ1ZScgZm9yIHRob3NlIHVubGVzcyB0aGUgdmFsdWUgaXMgY2hhbmdlZCksIGFuZCB3aWxsXG4gICAqIHRocm93IGlmIHBhcmFtZXRlcnMgd2l0aG91dCBhIERlZmF1bHQgdmFsdWUgb3IgYSBQcmV2aW91cyB2YWx1ZSBhcmUgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUV4aXN0aW5nKFxuICAgIHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgcHJldmlvdXNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICk6IFBhcmFtZXRlclZhbHVlcyB7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJWYWx1ZXModGhpcy5wYXJhbXMsIHVwZGF0ZXMsIHByZXZpb3VzVmFsdWVzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgcGFyYW1ldGVycyB3ZSdyZSBnb2luZyB0byBwYXNzIHRvIGEgU3RhY2tcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlclZhbHVlcyB7XG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHJlYWRvbmx5IGFwaVBhcmFtZXRlcnM6IFBhcmFtZXRlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUGFyYW1ldGVyPixcbiAgICB1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICAgIHByZXZpb3VzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4gICkge1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZvcm1hbFBhcmFtXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmZvcm1hbFBhcmFtcykpIHtcbiAgICAgIC8vIENoZWNrIHVwZGF0ZXMgZmlyc3QsIHRoZW4gdXNlIHRoZSBwcmV2aW91cyB2YWx1ZSAoaWYgYXZhaWxhYmxlKSwgdGhlbiB1c2VcbiAgICAgIC8vIHRoZSBkZWZhdWx0IChpZiBhdmFpbGFibGUpLlxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGRvbid0IGZpbmQgYSBwYXJhbWV0ZXIgdmFsdWUgdXNpbmcgYW55IG9mIHRoZXNlIG1ldGhvZHMsIHRoZW4gdGhhdCdzIGFuIGVycm9yLlxuICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdXBkYXRlc1trZXldO1xuICAgICAgaWYgKHVwZGF0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSB1cGRhdGVkVmFsdWU7XG4gICAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHtcbiAgICAgICAgICBQYXJhbWV0ZXJLZXk6IGtleSxcbiAgICAgICAgICBQYXJhbWV0ZXJWYWx1ZTogdXBkYXRlc1trZXldLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgaW4gcHJldmlvdXNWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHByZXZpb3VzVmFsdWVzW2tleV07XG4gICAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHsgUGFyYW1ldGVyS2V5OiBrZXksIFVzZVByZXZpb3VzVmFsdWU6IHRydWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWFsUGFyYW0uRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSBmb3JtYWxQYXJhbS5EZWZhdWx0O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gT2ggbm9cbiAgICAgIG1pc3NpbmdSZXF1aXJlZC5wdXNoKGtleSk7XG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBUaGUgZm9sbG93aW5nIENsb3VkRm9ybWF0aW9uIFBhcmFtZXRlcnMgYXJlIG1pc3NpbmcgYSB2YWx1ZTogJHttaXNzaW5nUmVxdWlyZWQuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBKdXN0IGFwcGVuZCBhbGwgc3VwcGxpZWQgb3ZlcnJpZGVzIHRoYXQgYXJlbid0IHJlYWxseSBleHBlY3RlZCAodGhpc1xuICAgIC8vIHdpbGwgZmFpbCBDRk4gYnV0IG1heWJlIHBlb3BsZSBtYWRlIHR5cG9zIHRoYXQgdGhleSB3YW50IHRvIGJlIG5vdGlmaWVkXG4gICAgLy8gb2YpXG4gICAgY29uc3QgdW5rbm93blBhcmFtID0gKFtrZXksIF9dOiBbc3RyaW5nLCBhbnldKSA9PiB0aGlzLmZvcm1hbFBhcmFtc1trZXldID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaGFzVmFsdWUgPSAoW18sIHZhbHVlXTogW3N0cmluZywgYW55XSkgPT4gISF2YWx1ZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGVzKS5maWx0ZXIodW5rbm93blBhcmFtKS5maWx0ZXIoaGFzVmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWUhO1xuICAgICAgdGhpcy5hcGlQYXJhbWV0ZXJzLnB1c2goeyBQYXJhbWV0ZXJLZXk6IGtleSwgUGFyYW1ldGVyVmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc2V0IG9mIHBhcmFtZXRlciB1cGRhdGVzIHdpbGwgY2hhbmdlIHRoZSBhY3R1YWwgc3RhY2sgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgaGFzQ2hhbmdlcyhjdXJyZW50VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUGFyYW1ldGVyQ2hhbmdlcyB7XG4gICAgLy8gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBTU00gcGFyYW1ldGVycywgZGVwbG95aW5nIG11c3QgYWx3YXlzIGhhcHBlblxuICAgIC8vIGJlY2F1c2Ugd2UgY2FuJ3QgcHJlZGljdCB3aGF0IHRoZSB2YWx1ZXMgd2lsbCBiZS4gV2Ugd2lsbCBhbGxvdyBzb21lXG4gICAgLy8gcGFyYW1ldGVycyB0byBvcHQgb3V0IG9mIHRoaXMgY2hlY2sgYnkgaGF2aW5nIGEgbWFnaWMgc3RyaW5nIGluIHRoZWlyIGRlc2NyaXB0aW9uLlxuICAgIGlmIChcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtYWxQYXJhbXMpLnNvbWUoXG4gICAgICAgIChwKSA9PiBwLlR5cGUuc3RhcnRzV2l0aCgnQVdTOjpTU006OlBhcmFtZXRlcjo6JykgJiYgIXAuRGVzY3JpcHRpb24/LmluY2x1ZGVzKFNTTVBBUkFNX05PX0lOVkFMSURBVEUpLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuICdzc20nO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSB3ZSdyZSBkaXJ0eSBpZjpcbiAgICAvLyAtIGFueSBvZiB0aGUgZXhpc3RpbmcgdmFsdWVzIGFyZSByZW1vdmVkLCBvciBjaGFuZ2VkXG4gICAgaWYgKE9iamVjdC5lbnRyaWVzKGN1cnJlbnRWYWx1ZXMpLnNvbWUoKFtrZXksIHZhbHVlXSkgPT4gIShrZXkgaW4gdGhpcy52YWx1ZXMpIHx8IHZhbHVlICE9PSB0aGlzLnZhbHVlc1trZXldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gLSBhbnkgb2YgdGhlIHZhbHVlcyB3ZSdyZSBzZXR0aW5nIGFyZSBuZXdcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLnNvbWUoKGtleSkgPT4gIShrZXkgaW4gY3VycmVudFZhbHVlcykpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyQ2hhbmdlcyA9IGJvb2xlYW4gfCAnc3NtJztcbiJdfQ==
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNmbi1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0dBLDRDQWtDQztBQXFDRCxrREFnQkM7QUF1RkQsOERBaUJDO0FBRUQsMENBbUNDO0FBK0JELHNEQVdDO0FBY0QsZ0RBbUJDO0FBYUQsZ0RBcUJDO0FBS0Qsd0NBNEJDO0FBdGRELCtCQUE4QjtBQUM5Qix5Q0FBeUM7QUFDekMsNENBQXlEO0FBT3pELDBFQUV3QztBQUV4QywyQ0FBMkM7QUFDM0MscUVBQWdFO0FBRWhFLCtEQUEyRDtBQUczRCxzREFBMkU7QUFJM0U7Ozs7Ozs7OztHQVNHO0FBQ0gsS0FBSyxVQUFVLGlCQUFpQixDQUM5QixHQUEwQixFQUMxQixTQUFpQixFQUNqQixhQUFxQixFQUNyQixFQUFFLFFBQVEsRUFBeUI7SUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQUM7UUFDM0MsU0FBUyxFQUFFLFNBQVM7UUFDcEIsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBQyxDQUFDO0lBRUgsMkVBQTJFO0lBQzNFLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDM0MsU0FBUyxFQUFFLFNBQVM7WUFDcEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksYUFBYTtZQUNwRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsMEJBQTBCO1FBQzFCLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3QixRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FB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QUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQywrQkFBc0IsQ0FBQyxDQUN0RyxFQUNELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsdURBQXVEO1FBQ3ZELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlHLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDRDQUE0QztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFwRkQsMENBb0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgU1NNUEFSQU1fTk9fSU5WQUxJREFURSB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7XG4gIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgUGFyYW1ldGVyLFxuICBSZXNvdXJjZVRvSW1wb3J0LFxuICBUYWcsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXRTdGF0dXMsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IEZpbGVNYW5pZmVzdEVudHJ5IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5pbXBvcnQgeyBBc3NldE1hbmlmZXN0QnVpbGRlciB9IGZyb20gJy4vYXNzZXQtbWFuaWZlc3QtYnVpbGRlcic7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlLCBUZW1wbGF0ZUJvZHlQYXJhbWV0ZXIsIFRlbXBsYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjaywgbWFrZUJvZHlQYXJhbWV0ZXIgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlc1RvSW1wb3J0IH0gZnJvbSAnLi4vcmVzb3VyY2UtaW1wb3J0JztcblxuLyoqXG4gKiBEZXNjcmliZSBhIGNoYW5nZXNldCBpbiBDbG91ZEZvcm1hdGlvbiwgcmVnYXJkbGVzcyBvZiBpdHMgY3VycmVudCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICAgICAtIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICAtIHRoZSBuYW1lIG9mIHRoZSBTdGFjayB0aGUgQ2hhbmdlU2V0IGJlbG9uZ3MgdG9cbiAqIEBwYXJhbSBjaGFuZ2VTZXROYW1lIC0gdGhlIG5hbWUgb2YgdGhlIENoYW5nZVNldFxuICogQHBhcmFtIGZldGNoQWxsICAgICAgLSBpZiB0cnVlLCBmZXRjaGVzIGFsbCBwYWdlcyBvZiB0aGUgY2hhbmdlIHNldCBkZXNjcmlwdGlvbi5cbiAqXG4gKiBAcmV0dXJucyAgICAgICBDbG91ZEZvcm1hdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2hhbmdlU2V0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlc2NyaWJlQ2hhbmdlU2V0KFxuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIGNoYW5nZVNldE5hbWU6IHN0cmluZyxcbiAgeyBmZXRjaEFsbCB9OiB7IGZldGNoQWxsOiBib29sZWFuIH0sXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNmbi5kZXNjcmliZUNoYW5nZVNldCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgfSk7XG5cbiAgLy8gSWYgZmV0Y2hBbGwgaXMgdHJ1ZSwgdHJhdmVyc2UgYWxsIHBhZ2VzIGZyb20gdGhlIGNoYW5nZSBzZXQgZGVzY3JpcHRpb24uXG4gIHdoaWxlIChmZXRjaEFsbCAmJiByZXNwb25zZS5OZXh0VG9rZW4gIT0gbnVsbCkge1xuICAgIGNvbnN0IG5leHRQYWdlID0gYXdhaXQgY2ZuLmRlc2NyaWJlQ2hhbmdlU2V0KHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgQ2hhbmdlU2V0TmFtZTogcmVzcG9uc2UuQ2hhbmdlU2V0SWQgPz8gY2hhbmdlU2V0TmFtZSxcbiAgICAgIE5leHRUb2tlbjogcmVzcG9uc2UuTmV4dFRva2VuLFxuICAgIH0pO1xuXG4gICAgLy8gQ29uc29saWRhdGUgdGhlIGNoYW5nZXNcbiAgICBpZiAobmV4dFBhZ2UuQ2hhbmdlcyAhPSBudWxsKSB7XG4gICAgICByZXNwb25zZS5DaGFuZ2VzID0gcmVzcG9uc2UuQ2hhbmdlcyAhPSBudWxsID8gcmVzcG9uc2UuQ2hhbmdlcy5jb25jYXQobmV4dFBhZ2UuQ2hhbmdlcykgOiBuZXh0UGFnZS5DaGFuZ2VzO1xuICAgIH1cblxuICAgIC8vIEZvcndhcmQgdGhlIG5ldyBOZXh0VG9rZW5cbiAgICByZXNwb25zZS5OZXh0VG9rZW4gPSBuZXh0UGFnZS5OZXh0VG9rZW47XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGEgZnVuY3Rpb24gdG8gcmV0dXJuIG5vbi0rdW5kZWZpbmVkKyBiZWZvcmUgcmV0dXJuaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZVByb3ZpZGVyIC0gYSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIGEgdmFsdWUgdGhhdCBpcyBub3QgK3VuZGVmaW5lZCsgb25jZSB0aGUgd2FpdCBzaG91bGQgYmUgb3ZlclxuICogQHBhcmFtIHRpbWVvdXQgICAgIC0gdGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHR3byBjYWxscyB0byArdmFsdWVQcm92aWRlcitcbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgdmFsdWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgK3ZhbHVlUHJvdmlkZXIrXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3I8VD4oXG4gIHZhbHVlUHJvdmlkZXI6ICgpID0+IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+LFxuICB0aW1lb3V0OiBudW1iZXIgPSA1MDAwLFxuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsdWVQcm92aWRlcigpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKGNiKSA9PiBzZXRUaW1lb3V0KGNiLCB0aW1lb3V0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDaGFuZ2VTZXQgdG8gYmUgYXZhaWxhYmxlIGZvciB0cmlnZ2VyaW5nIGEgU3RhY2tVcGRhdGUuXG4gKlxuICogV2lsbCByZXR1cm4gYSBjaGFuZ2VzZXQgdGhhdCBpcyBlaXRoZXIgcmVhZHkgdG8gYmUgZXhlY3V0ZWQgb3IgaGFzIG5vIGNoYW5nZXMuXG4gKiBXaWxsIHRocm93IGluIG90aGVyIGNhc2VzLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgICAgIC0gYSBDbG91ZEZvcm1hdGlvbiBjbGllbnRcbiAqIEBwYXJhbSBzdGFja05hbWUgICAgIC0gdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoYXQgdGhlIENoYW5nZVNldCBiZWxvbmdzIHRvXG4gKiBAcGFyYW0gY2hhbmdlU2V0TmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBDaGFuZ2VTZXRcbiAqIEBwYXJhbSBmZXRjaEFsbCAgICAgIC0gaWYgdHJ1ZSwgZmV0Y2hlcyBhbGwgcGFnZXMgb2YgdGhlIENoYW5nZVNldCBiZWZvcmUgcmV0dXJuaW5nLlxuICpcbiAqIEByZXR1cm5zICAgICAgIHRoZSBDbG91ZEZvcm1hdGlvbiBkZXNjcmlwdGlvbiBvZiB0aGUgQ2hhbmdlU2V0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2hhbmdlU2V0KFxuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBzdGFja05hbWU6IHN0cmluZyxcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nLFxuICB7IGZldGNoQWxsIH06IHsgZmV0Y2hBbGw6IGJvb2xlYW4gfSxcbik6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiB7XG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnV2FpdGluZyBmb3IgY2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzIHRvIGZpbmlzaCBjcmVhdGluZy4uLicsIGNoYW5nZVNldE5hbWUsIHN0YWNrTmFtZSkpO1xuICBjb25zdCByZXQgPSBhd2FpdCB3YWl0Rm9yKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGF3YWl0IGRlc2NyaWJlQ2hhbmdlU2V0KGNmbiwgc3RhY2tOYW1lLCBjaGFuZ2VTZXROYW1lLCB7XG4gICAgICBmZXRjaEFsbCxcbiAgICB9KTtcbiAgICAvLyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgdXNlIGEgc3dpdGNoIGJlY2F1c2UgdHNjIHdpbGwgbm90IGFsbG93IGZhbGwtdGhyb3VnaCwgVU5MRVNTIGl0IGlzIGFsbG93c1xuICAgIC8vIEVWRVJZV0hFUkUgdGhhdCB1c2VzIHRoaXMgbGlicmFyeSBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB3aGljaCBpcyB1bmRlc2lyYWJsZS5cbiAgICBpZiAoZGVzY3JpcHRpb24uU3RhdHVzID09PSAnQ1JFQVRFX1BFTkRJTkcnIHx8IGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9JTl9QUk9HUkVTUycpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnQ2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzIGlzIHN0aWxsIGNyZWF0aW5nJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdGlvbi5TdGF0dXMgPT09IENoYW5nZVNldFN0YXR1cy5DUkVBVEVfQ09NUExFVEUgfHwgY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBjcmVhdGUgQ2hhbmdlU2V0ICR7Y2hhbmdlU2V0TmFtZX0gb24gJHtzdGFja05hbWV9OiAke2Rlc2NyaXB0aW9uLlN0YXR1cyB8fCAnTk9fU1RBVFVTJ30sICR7ZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uIHx8ICdubyByZWFzb24gcHJvdmlkZWQnfWAsXG4gICAgKTtcbiAgfSk7XG5cbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDaGFuZ2Ugc2V0IHRvb2sgdG9vIGxvbmcgdG8gYmUgY3JlYXRlZDsgYWJvcnRpbmcnKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCB0eXBlIFByZXBhcmVDaGFuZ2VTZXRPcHRpb25zID0ge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3ltZW50czogRGVwbG95bWVudHM7XG4gIHV1aWQ6IHN0cmluZztcbiAgd2lsbEV4ZWN1dGU6IGJvb2xlYW47XG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgcGFyYW1ldGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VzVG9JbXBvcnQ7XG4gIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbG9nIEFXUyBDbG91ZEZvcm1hdGlvbiBlcnJvcnMgYW5kIG1vdmUgb24uIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaW5zdGVhZFxuICAgKiBmYWlsIG9uIGVycm9ycyByZWNlaXZlZCBieSBBV1MgQ2xvdWRGb3JtYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmYWlsT25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVDaGFuZ2VTZXRPcHRpb25zID0ge1xuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nO1xuICB3aWxsRXhlY3V0ZTogYm9vbGVhbjtcbiAgZXhpc3RzOiBib29sZWFuO1xuICB1dWlkOiBzdHJpbmc7XG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIGJvZHlQYXJhbWV0ZXI6IFRlbXBsYXRlQm9keVBhcmFtZXRlcjtcbiAgcGFyYW1ldGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VUb0ltcG9ydFtdO1xuICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlcz86IGJvb2xlYW47XG4gIHJvbGU/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNoYW5nZXNldCBmb3IgYSBkaWZmIG9wZXJhdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRGlmZkNoYW5nZVNldChcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBvcHRpb25zOiBQcmVwYXJlQ2hhbmdlU2V0T3B0aW9ucyxcbik6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0IHwgdW5kZWZpbmVkPiB7XG4gIC8vIGBvcHRpb25zLnN0YWNrYCBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNsdWRlIGFueSBuZXN0ZWQgc3RhY2sgdGVtcGxhdGVzIGRpcmVjdGx5IGlubGluZSB3aXRoIGl0cyBvd24gdGVtcGxhdGUsIHVuZGVyIGEgc3BlY2lhbCBgTmVzdGVkVGVtcGxhdGVgIHByb3BlcnR5LlxuICAvLyBUaHVzIHRoZSBwYXJlbnQgdGVtcGxhdGUncyBSZXNvdXJjZXMgc2VjdGlvbiBjb250YWlucyB0aGUgbmVzdGVkIHRlbXBsYXRlJ3MgQ0RLIG1ldGFkYXRhIGNoZWNrLCB3aGljaCB1c2VzIEZuOjpFcXVhbHMuXG4gIC8vIFRoaXMgY2F1c2VzIENyZWF0ZUNoYW5nZVNldCB0byBmYWlsIHdpdGggYFRlbXBsYXRlIEVycm9yOiBGbjo6RXF1YWxzIGNhbm5vdCBiZSBwYXJ0aWFsbHkgY29sbGFwc2VkYC5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBPYmplY3QudmFsdWVzKG9wdGlvbnMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9KSkge1xuICAgIGlmICgocmVzb3VyY2UgYXMgYW55KS5UeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZygnVGhpcyBzdGFjayBjb250YWlucyBvbmUgb3IgbW9yZSBuZXN0ZWQgc3RhY2tzLCBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGUtb25seSBkaWZmLi4uJyk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwbG9hZEJvZHlQYXJhbWV0ZXJBbmRDcmVhdGVDaGFuZ2VTZXQoaW9IZWxwZXIsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGZpbGUgZW50cmllcyBmcm9tIGFuIEFzc2V0TWFuaWZlc3RBcnRpZmFjdCB0aGF0IGxvb2sgbGlrZSB0ZW1wbGF0ZXMuXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIHRoZSBgdXBsb2FkQm9keVBhcmFtZXRlckFuZENyZWF0ZUNoYW5nZVNldGAgZnVuY3Rpb24gdG8gZmluZFxuICogYWxsIHRlbXBsYXRlIGFzc2V0IGZpbGVzIHRvIGJ1aWxkIGFuZCBwdWJsaXNoLlxuICpcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBbQXNzZXRNYW5pZmVzdCwgRmlsZU1hbmlmZXN0RW50cnlbXV1cbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGVzRnJvbUFzc2V0TWFuaWZlc3RBcnRpZmFjdChcbiAgYXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdCxcbik6IFtBc3NldE1hbmlmZXN0LCBGaWxlTWFuaWZlc3RFbnRyeVtdXSB7XG4gIGNvbnN0IGFzc2V0czogRmlsZU1hbmlmZXN0RW50cnlbXSA9IFtdO1xuICBjb25zdCBmaWxlTmFtZSA9IGFydGlmYWN0LmZpbGU7XG4gIGNvbnN0IGFzc2V0TWFuaWZlc3QgPSBBc3NldE1hbmlmZXN0LmZyb21GaWxlKGZpbGVOYW1lKTtcblxuICBhc3NldE1hbmlmZXN0LmVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBpZiAoZW50cnkudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSAoZW50cnkgYXMgRmlsZU1hbmlmZXN0RW50cnkpLnNvdXJjZTtcbiAgICAgIGlmIChzb3VyY2UucGF0aCAmJiBzb3VyY2UucGF0aC5lbmRzV2l0aCgnLnRlbXBsYXRlLmpzb24nKSkge1xuICAgICAgICBhc3NldHMucHVzaChlbnRyeSBhcyBGaWxlTWFuaWZlc3RFbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFthc3NldE1hbmlmZXN0LCBhc3NldHNdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRCb2R5UGFyYW1ldGVyQW5kQ3JlYXRlQ2hhbmdlU2V0KFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIG9wdGlvbnM6IFByZXBhcmVDaGFuZ2VTZXRPcHRpb25zLFxuKTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKG9wdGlvbnMuc3RhY2ssIG9wdGlvbnMuZGVwbG95bWVudHMpO1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IG9wdGlvbnMuZGVwbG95bWVudHMuZW52cy5hY2Nlc3NTdGFja0Zvck11dGFibGVTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG5cbiAgICBjb25zdCBib2R5UGFyYW1ldGVyID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgICBpb0hlbHBlcixcbiAgICAgIG9wdGlvbnMuc3RhY2ssXG4gICAgICBlbnYucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIG5ldyBBc3NldE1hbmlmZXN0QnVpbGRlcigpLFxuICAgICAgZW52LnJlc291cmNlcyxcbiAgICApO1xuICAgIGNvbnN0IGNmbiA9IGVudi5zZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICBjb25zdCBleGlzdHMgPSAoYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoY2ZuLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSwgZmFsc2UpKS5leGlzdHM7XG5cbiAgICBjb25zdCBleGVjdXRpb25Sb2xlQXJuID0gYXdhaXQgZW52LnJlcGxhY2VQbGFjZWhvbGRlcnMob3B0aW9ucy5zdGFjay5jbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblJvbGVBcm4pO1xuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oXG4gICAgICAnSG9sZCBvbiB3aGlsZSB3ZSBjcmVhdGUgYSByZWFkLW9ubHkgY2hhbmdlIHNldCB0byBnZXQgYSBkaWZmIHdpdGggYWNjdXJhdGUgcmVwbGFjZW1lbnQgaW5mb3JtYXRpb24gKHVzZSAtLW5vLWNoYW5nZS1zZXQgdG8gdXNlIGEgbGVzcyBhY2N1cmF0ZSBidXQgZmFzdGVyIHRlbXBsYXRlLW9ubHkgZGlmZilcXG4nLFxuICAgICk7XG5cbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlQ2hhbmdlU2V0KGlvSGVscGVyLCB7XG4gICAgICBjZm4sXG4gICAgICBjaGFuZ2VTZXROYW1lOiAnY2RrLWRpZmYtY2hhbmdlLXNldCcsXG4gICAgICBzdGFjazogb3B0aW9ucy5zdGFjayxcbiAgICAgIGV4aXN0cyxcbiAgICAgIHV1aWQ6IG9wdGlvbnMudXVpZCxcbiAgICAgIHdpbGxFeGVjdXRlOiBvcHRpb25zLndpbGxFeGVjdXRlLFxuICAgICAgYm9keVBhcmFtZXRlcixcbiAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnMucGFyYW1ldGVycyxcbiAgICAgIHJlc291cmNlc1RvSW1wb3J0OiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0LFxuICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IG9wdGlvbnMuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICByb2xlOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgIH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgZGlmZiBzbyB0aGVzZSBtZXNzYWdlcyBhcmUgZGlmZi1zcGVjaWZpY1xuICAgIGlmICghb3B0aW9ucy5mYWlsT25FcnJvcikge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoU3RyaW5nKGUpKTtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmluZm8oXG4gICAgICAgICdDb3VsZCBub3QgY3JlYXRlIGEgY2hhbmdlIHNldCwgd2lsbCBiYXNlIHRoZSBkaWZmIG9uIHRlbXBsYXRlIGRpZmZlcmVuY2VzIChydW4gYWdhaW4gd2l0aCAtdiB0byBzZWUgdGhlIHJlYXNvbilcXG4nLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb3VsZCBub3QgY3JlYXRlIGEgY2hhbmdlIHNldCBhbmQgZmFpbE9uRXJyb3IgaXMgc2V0LiAocnVuIGFnYWluIHdpdGggZmFpbE9uRXJyb3Igb2ZmIHRvIGJhc2UgdGhlIGRpZmYgb24gdGVtcGxhdGUgZGlmZmVyZW5jZXMpXFxuJywgZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBhc3NldHMgdGhhdCBsb29rIGxpa2UgdGVtcGxhdGVzIGZvciB0aGlzIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGFueSBDbG91ZEZvcm1hdGlvbiBjYWxsIHRoYXQgbmVlZHMgdGhlIHRlbXBsYXRlLCBpdCBtYXkgbmVlZFxuICogdG8gYmUgdXBsb2FkZWQgdG8gYW4gUzMgYnVja2V0IGZpcnN0LiBXZSBoYXZlIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZVxuICogYXNzZXQgbWFuaWZlc3QsIGJlY2F1c2UgdGVjaG5pY2FsbHkgdGhhdCBpcyB0aGUgb25seSBwbGFjZSB0aGF0IGtub3dzIGFib3V0XG4gKiBidWNrZXQgYW5kIGFzc3VtZWQgcm9sZXMgYW5kIHN1Y2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIGRlcGxveW1lbnRzOiBEZXBsb3ltZW50cykge1xuICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIHN0YWNrLmRlcGVuZGVuY2llcykge1xuICAgIC8vIFNraXAgYXJ0aWZhY3QgaWYgaXQgaXMgbm90IGFuIEFzc2V0IE1hbmlmZXN0IEFydGlmYWN0XG4gICAgaWYgKCFjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3QuaXNBc3NldE1hbmlmZXN0QXJ0aWZhY3QoYXJ0aWZhY3QpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBbYXNzZXRNYW5pZmVzdCwgZmlsZV9lbnRyaWVzXSA9IHRlbXBsYXRlc0Zyb21Bc3NldE1hbmlmZXN0QXJ0aWZhY3QoYXJ0aWZhY3QpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZmlsZV9lbnRyaWVzKSB7XG4gICAgICBhd2FpdCBkZXBsb3ltZW50cy5idWlsZFNpbmdsZUFzc2V0KGFydGlmYWN0LCBhc3NldE1hbmlmZXN0LCBlbnRyeSwge1xuICAgICAgICBzdGFjayxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgZGVwbG95bWVudHMucHVibGlzaFNpbmdsZUFzc2V0KGFzc2V0TWFuaWZlc3QsIGVudHJ5LCB7XG4gICAgICAgIHN0YWNrLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDaGFuZ2VTZXQoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgb3B0aW9uczogQ3JlYXRlQ2hhbmdlU2V0T3B0aW9ucyxcbik6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiB7XG4gIGF3YWl0IGNsZWFudXBPbGRDaGFuZ2VzZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLmNoYW5nZVNldE5hbWUsIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byBjcmVhdGUgQ2hhbmdlU2V0IHdpdGggbmFtZSAke29wdGlvbnMuY2hhbmdlU2V0TmFtZX0gZm9yIHN0YWNrICR7b3B0aW9ucy5zdGFjay5zdGFja05hbWV9YCk7XG5cbiAgY29uc3QgdGVtcGxhdGVQYXJhbXMgPSBUZW1wbGF0ZVBhcmFtZXRlcnMuZnJvbVRlbXBsYXRlKG9wdGlvbnMuc3RhY2sudGVtcGxhdGUpO1xuICBjb25zdCBzdGFja1BhcmFtcyA9IHRlbXBsYXRlUGFyYW1zLnN1cHBseUFsbChvcHRpb25zLnBhcmFtZXRlcnMpO1xuXG4gIGNvbnN0IGNoYW5nZVNldCA9IGF3YWl0IG9wdGlvbnMuY2ZuLmNyZWF0ZUNoYW5nZVNldCh7XG4gICAgU3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSxcbiAgICBDaGFuZ2VTZXROYW1lOiBvcHRpb25zLmNoYW5nZVNldE5hbWUsXG4gICAgQ2hhbmdlU2V0VHlwZTogb3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCA/ICdJTVBPUlQnIDogb3B0aW9ucy5leGlzdHMgPyAnVVBEQVRFJyA6ICdDUkVBVEUnLFxuICAgIERlc2NyaXB0aW9uOiBgQ0RLIENoYW5nZXNldCBmb3IgZGlmZiAke29wdGlvbnMudXVpZH1gLFxuICAgIENsaWVudFRva2VuOiBgZGlmZiR7b3B0aW9ucy51dWlkfWAsXG4gICAgVGVtcGxhdGVVUkw6IG9wdGlvbnMuYm9keVBhcmFtZXRlci5UZW1wbGF0ZVVSTCxcbiAgICBUZW1wbGF0ZUJvZHk6IG9wdGlvbnMuYm9keVBhcmFtZXRlci5UZW1wbGF0ZUJvZHksXG4gICAgUGFyYW1ldGVyczogc3RhY2tQYXJhbXMuYXBpUGFyYW1ldGVycyxcbiAgICBSZXNvdXJjZXNUb0ltcG9ydDogb3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCxcbiAgICBJbXBvcnRFeGlzdGluZ1Jlc291cmNlczogb3B0aW9ucy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICBSb2xlQVJOOiBvcHRpb25zLnJvbGUsXG4gICAgVGFnczogdG9DZm5UYWdzKG9wdGlvbnMuc3RhY2sudGFncyksXG4gICAgQ2FwYWJpbGl0aWVzOiBbJ0NBUEFCSUxJVFlfSUFNJywgJ0NBUEFCSUxJVFlfTkFNRURfSUFNJywgJ0NBUEFCSUxJVFlfQVVUT19FWFBBTkQnXSxcbiAgfSk7XG5cbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdJbml0aWF0ZWQgY3JlYXRpb24gb2YgY2hhbmdlc2V0OiAlczsgd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0LklkKSk7XG4gIC8vIEZldGNoaW5nIGFsbCBwYWdlcyBpZiB3ZSdsbCBleGVjdXRlLCBzbyB3ZSBjYW4gaGF2ZSB0aGUgY29ycmVjdCBjaGFuZ2UgY291bnQgd2hlbiBtb25pdG9yaW5nLlxuICBjb25zdCBjcmVhdGVkQ2hhbmdlU2V0ID0gYXdhaXQgd2FpdEZvckNoYW5nZVNldChvcHRpb25zLmNmbiwgaW9IZWxwZXIsIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLCBvcHRpb25zLmNoYW5nZVNldE5hbWUsIHtcbiAgICBmZXRjaEFsbDogb3B0aW9ucy53aWxsRXhlY3V0ZSxcbiAgfSk7XG4gIGF3YWl0IGNsZWFudXBPbGRDaGFuZ2VzZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLmNoYW5nZVNldE5hbWUsIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlZENoYW5nZVNldDtcbn1cblxuZnVuY3Rpb24gdG9DZm5UYWdzKHRhZ3M6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSk6IFRhZ1tdIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRhZ3MpLm1hcCgoW2ssIHZdKSA9PiAoe1xuICAgIEtleTogayxcbiAgICBWYWx1ZTogdixcbiAgfSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwT2xkQ2hhbmdlc2V0KFxuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBjaGFuZ2VTZXROYW1lOiBzdHJpbmcsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKSB7XG4gIC8vIERlbGV0ZSBhbnkgZXhpc3RpbmcgY2hhbmdlIHNldHMgZ2VuZXJhdGVkIGJ5IENESyBzaW5jZSBjaGFuZ2Ugc2V0IG5hbWVzIG11c3QgYmUgdW5pcXVlLlxuICAvLyBUaGUgZGVsZXRlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCBhcyBsb25nIGFzIHRoZSBzdGFjayBleGlzdHMgKGV2ZW4gaWYgdGhlIGNoYW5nZSBzZXQgZG9lcyBub3QgZXhpc3QpLlxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgUmVtb3ZpbmcgZXhpc3RpbmcgY2hhbmdlIHNldCB3aXRoIG5hbWUgJHtjaGFuZ2VTZXROYW1lfSBpZiBpdCBleGlzdHNgKTtcbiAgYXdhaXQgY2ZuLmRlbGV0ZUNoYW5nZVNldCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNoYW5nZSBzZXQgaGFzIG5vIGNoYW5nZXNcbiAqXG4gKiBUaGlzIG11c3QgYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzdGF0dXMsIG5vdCB0aGUgJ0NoYW5nZXMnIGFycmF5IG9uIHRoZVxuICogb2JqZWN0OyB0aGUgbGF0dGVyIGNhbiBiZSBlbXB0eSBiZWNhdXNlIG5vIHJlc291cmNlcyB3ZXJlIGNoYW5nZWQsIGJ1dCBpZlxuICogdGhlcmUgYXJlIGNoYW5nZXMgdG8gT3V0cHV0cywgdGhlIGNoYW5nZSBzZXQgY2FuIHN0aWxsIGJlIGV4ZWN1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uOiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQpIHtcbiAgY29uc3Qgbm9DaGFuZ2VFcnJvclByZWZpeGVzID0gW1xuICAgIC8vIEVycm9yIG1lc3NhZ2UgZm9yIGEgcmVndWxhciB0ZW1wbGF0ZVxuICAgIFwiVGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbiBkaWRuJ3QgY29udGFpbiBjaGFuZ2VzLlwiLFxuICAgIC8vIEVycm9yIG1lc3NhZ2Ugd2hlbiBhIFRyYW5zZm9ybSBpcyBpbnZvbHZlZCAoc2VlICMxMDY1MClcbiAgICAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicsXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdGQUlMRUQnICYmIG5vQ2hhbmdlRXJyb3JQcmVmaXhlcy5zb21lKChwKSA9PiAoZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8/ICcnKS5zdGFydHNXaXRoKHApKVxuICApO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIENsb3VkRm9ybWF0aW9uIHN0YWNrIHRvIHN0YWJpbGl6ZSBpbiBhIGNvbXBsZXRlL2F2YWlsYWJsZSBzdGF0ZVxuICogYWZ0ZXIgYSBkZWxldGUgb3BlcmF0aW9uIGlzIGlzc3VlZC5cbiAqXG4gKiBGYWlscyBpZiB0aGUgc3RhY2sgaXMgaW4gYSBGQUlMRUQgc3RhdGUuIFdpbGwgbm90IGZhaWwgaWYgdGhlIHN0YWNrIHdhc1xuICogYWxyZWFkeSBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgIC0gYSBDbG91ZEZvcm1hdGlvbiBjbGllbnRcbiAqIEBwYXJhbSBzdGFja05hbWUgICAgICAtIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byB3YWl0IGZvciBhZnRlciBhIGRlbGV0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIGRlbGV0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZWxldGUoXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHN0YWNrID0gYXdhaXQgc3RhYmlsaXplU3RhY2soY2ZuLCBpb0hlbHBlciwgc3RhY2tOYW1lKTtcbiAgaWYgKCFzdGFjaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGF0dXMgPSBzdGFjay5zdGFja1N0YXR1cztcbiAgaWYgKHN0YXR1cy5pc0ZhaWx1cmUpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gaXMgaW4gYSBmYWlsZWQgc3RhdGUuIFlvdSBtYXkgbmVlZCB0byBkZWxldGUgaXQgZnJvbSB0aGUgQVdTIGNvbnNvbGUgOiAke3N0YXR1c31gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoc3RhdHVzLmlzRGVsZXRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIENsb3VkRm9ybWF0aW9uIHN0YWNrIHRvIHN0YWJpbGl6ZSBpbiBhIGNvbXBsZXRlL2F2YWlsYWJsZSBzdGF0ZVxuICogYWZ0ZXIgYW4gdXBkYXRlL2NyZWF0ZSBvcGVyYXRpb24gaXMgaXNzdWVkLlxuICpcbiAqIEZhaWxzIGlmIHRoZSBzdGFjayBpcyBpbiBhIEZBSUxFRCBzdGF0ZSwgUk9MTEJBQ0sgc3RhdGUsIG9yIERFTEVURUQgc3RhdGUuXG4gKlxuICogQHBhcmFtIGNmbiAgICAgICAgLSBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgIC0gdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIHdhaXQgZm9yIGFmdGVyIGFuIHVwZGF0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIHVwZGF0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZXBsb3koXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHN0YWNrID0gYXdhaXQgc3RhYmlsaXplU3RhY2soY2ZuLCBpb0hlbHBlciwgc3RhY2tOYW1lKTtcbiAgaWYgKCFzdGFjaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGF0dXMgPSBzdGFjay5zdGFja1N0YXR1cztcblxuICBpZiAoc3RhdHVzLmlzQ3JlYXRpb25GYWlsdXJlKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgIGBUaGUgc3RhY2sgbmFtZWQgJHtzdGFja05hbWV9IGZhaWxlZCBjcmVhdGlvbiwgaXQgbWF5IG5lZWQgdG8gYmUgbWFudWFsbHkgZGVsZXRlZCBmcm9tIHRoZSBBV1MgY29uc29sZTogJHtzdGF0dXN9YCxcbiAgICApO1xuICB9IGVsc2UgaWYgKCFzdGF0dXMuaXNEZXBsb3lTdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBmYWlsZWQgdG8gZGVwbG95OiAke3N0YXR1c31gKTtcbiAgfVxuXG4gIHJldHVybiBzdGFjaztcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhIHN0YWNrIHRvIGJlY29tZSBzdGFibGUgKG5vIGxvbmdlciBfSU5fUFJPR1JFU1MpLCByZXR1cm5pbmcgaXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YWJpbGl6ZVN0YWNrKFxuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBzdGFja05hbWU6IHN0cmluZyxcbikge1xuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhmb3JtYXQoJ1dhaXRpbmcgZm9yIHN0YWNrICVzIHRvIGZpbmlzaCBjcmVhdGluZyBvciB1cGRhdGluZy4uLicsIHN0YWNrTmFtZSkpO1xuICByZXR1cm4gd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrTmFtZSk7XG4gICAgaWYgKCFzdGFjay5leGlzdHMpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdCgnU3RhY2sgJXMgZG9lcyBub3QgZXhpc3QnLCBzdGFja05hbWUpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzdGF0dXMgPSBzdGFjay5zdGFja1N0YXR1cztcbiAgICBpZiAoc3RhdHVzLmlzSW5Qcm9ncmVzcykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdTdGFjayAlcyBoYXMgYW4gb25nb2luZyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYW5kIGlzIG5vdCBzdGFibGUgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzUmV2aWV3SW5Qcm9ncmVzcykge1xuICAgICAgLy8gVGhpcyBtYXkgaGFwcGVuIGlmIGEgc3RhY2sgY3JlYXRpb24gb3BlcmF0aW9uIGlzIGludGVycnVwdGVkIGJlZm9yZSB0aGUgQ2hhbmdlU2V0IGV4ZWN1dGlvbiBzdGFydHMuIFJlY292ZXJpbmdcbiAgICAgIC8vIGZyb20gdGhpcyB3b3VsZCByZXF1aXJpbmcgbWFudWFsIGludGVydmVudGlvbiAoZGVsZXRpbmcgb3IgZXhlY3V0aW5nIHRoZSBwZW5kaW5nIENoYW5nZVNldCksIGFuZCBmYWlsaW5nIHRvIGRvXG4gICAgICAvLyBzbyB3aWxsIHJlc3VsdCBpbiBhbiBlbmRsZXNzIHdhaXQgaGVyZSAodGhlIENoYW5nZVNldCB3b250IGRlbGV0ZSBvciBleGVjdXRlIGl0c2VsZikuIEluc3RlYWQgb2YgYmxvY2tpbmdcbiAgICAgIC8vIFwiZm9yZXZlclwiIHdlIHByb2NlZWQgYXMgaWYgdGhlIHN0YWNrIHdhcyBleGlzdGluZyBhbmQgc3RhYmxlLiBJZiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgb3BlcmF0aW9uIHRoYXQganVzdFxuICAgICAgLy8gaGFzbid0IGZpbmlzaGVkIHByb2NlZWRpbmcganVzdCB5ZXQsIGVpdGhlciB0aGlzIG9wZXJhdGlvbiBvciB0aGUgY29uY3VycmVudCBvbmUgbWF5IGZhaWwgZHVlIHRvIHRoZSBvdGhlciBvbmVcbiAgICAgIC8vIGhhdmluZyBtYWRlIHByb2dyZXNzLiBXaGljaCBpcyBmaW5lLiBJIGd1ZXNzLlxuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KCdTdGFjayAlcyBpcyBpbiBSRVZJRVdfSU5fUFJPR1JFU1Mgc3RhdGUuIENvbnNpZGVyaW5nIHRoaXMgaXMgYSBzdGFibGUgc3RhdHVzICglcyknLCBzdGFja05hbWUsIHN0YXR1cykpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiAoZm9ybWFsKSBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSBiZWVuIGRlY2xhcmVkIGluIGEgdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUGFyYW1ldGVycyB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGVQYXJhbWV0ZXJzKHRlbXBsYXRlLlBhcmFtZXRlcnMgfHwge30pO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUGFyYW1ldGVyPikge1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBzdGFjayBwYXJhbWV0ZXJzIHRvIHBhc3MgZnJvbSB0aGUgZ2l2ZW4gZGVzaXJlZCBwYXJhbWV0ZXIgdmFsdWVzXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgcGFyYW1ldGVycyB3aXRob3V0IGEgRGVmYXVsdCB2YWx1ZSBvciBhIFByZXZpb3VzIHZhbHVlIGFyZSBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqL1xuICBwdWJsaWMgc3VwcGx5QWxsKHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4pOiBQYXJhbWV0ZXJWYWx1ZXMge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVmFsdWVzKHRoaXMucGFyYW1zLCB1cGRhdGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGcm9tIHRoZSB0ZW1wbGF0ZSwgdGhlIGdpdmVuIGRlc2lyZWQgdmFsdWVzIGFuZCB0aGUgY3VycmVudCB2YWx1ZXMsIGNhbGN1bGF0ZSB0aGUgY2hhbmdlcyB0byB0aGUgc3RhY2sgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBXaWxsIHRha2UgaW50byBhY2NvdW50IHBhcmFtZXRlcnMgYWxyZWFkeSBzZXQgb24gdGhlIHRlbXBsYXRlICh3aWxsIGVtaXRcbiAgICogJ1VzZVByZXZpb3VzVmFsdWU6IHRydWUnIGZvciB0aG9zZSB1bmxlc3MgdGhlIHZhbHVlIGlzIGNoYW5nZWQpLCBhbmQgd2lsbFxuICAgKiB0aHJvdyBpZiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSBEZWZhdWx0IHZhbHVlIG9yIGEgUHJldmlvdXMgdmFsdWUgYXJlIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVFeGlzdGluZyhcbiAgICB1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICAgIHByZXZpb3VzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBQYXJhbWV0ZXJWYWx1ZXMge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVmFsdWVzKHRoaXMucGFyYW1zLCB1cGRhdGVzLCBwcmV2aW91c1ZhbHVlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIHBhcmFtZXRlcnMgd2UncmUgZ29pbmcgdG8gcGFzcyB0byBhIFN0YWNrXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJWYWx1ZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyByZWFkb25seSBhcGlQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybWFsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVBhcmFtZXRlcj4sXG4gICAgdXBkYXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbiAgICBwcmV2aW91c1ZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICApIHtcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmb3JtYWxQYXJhbV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5mb3JtYWxQYXJhbXMpKSB7XG4gICAgICAvLyBDaGVjayB1cGRhdGVzIGZpcnN0LCB0aGVuIHVzZSB0aGUgcHJldmlvdXMgdmFsdWUgKGlmIGF2YWlsYWJsZSksIHRoZW4gdXNlXG4gICAgICAvLyB0aGUgZGVmYXVsdCAoaWYgYXZhaWxhYmxlKS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgcGFyYW1ldGVyIHZhbHVlIHVzaW5nIGFueSBvZiB0aGVzZSBtZXRob2RzLCB0aGVuIHRoYXQncyBhbiBlcnJvci5cbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHVwZGF0ZXNba2V5XTtcbiAgICAgIGlmICh1cGRhdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gdXBkYXRlZFZhbHVlO1xuICAgICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgICAgUGFyYW1ldGVyS2V5OiBrZXksXG4gICAgICAgICAgUGFyYW1ldGVyVmFsdWU6IHVwZGF0ZXNba2V5XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5IGluIHByZXZpb3VzVmFsdWVzKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSBwcmV2aW91c1ZhbHVlc1trZXldO1xuICAgICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7IFBhcmFtZXRlcktleToga2V5LCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hbFBhcmFtLkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gZm9ybWFsUGFyYW0uRGVmYXVsdDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE9oIG5vXG4gICAgICBtaXNzaW5nUmVxdWlyZWQucHVzaChrZXkpO1xuICAgIH1cblxuICAgIGlmIChtaXNzaW5nUmVxdWlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGhlIGZvbGxvd2luZyBDbG91ZEZvcm1hdGlvbiBQYXJhbWV0ZXJzIGFyZSBtaXNzaW5nIGEgdmFsdWU6ICR7bWlzc2luZ1JlcXVpcmVkLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBhcHBlbmQgYWxsIHN1cHBsaWVkIG92ZXJyaWRlcyB0aGF0IGFyZW4ndCByZWFsbHkgZXhwZWN0ZWQgKHRoaXNcbiAgICAvLyB3aWxsIGZhaWwgQ0ZOIGJ1dCBtYXliZSBwZW9wbGUgbWFkZSB0eXBvcyB0aGF0IHRoZXkgd2FudCB0byBiZSBub3RpZmllZFxuICAgIC8vIG9mKVxuICAgIGNvbnN0IHVua25vd25QYXJhbSA9IChba2V5LCBfXTogW3N0cmluZywgYW55XSkgPT4gdGhpcy5mb3JtYWxQYXJhbXNba2V5XSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFtfLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pID0+ICEhdmFsdWU7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlcykuZmlsdGVyKHVua25vd25QYXJhbSkuZmlsdGVyKGhhc1ZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlITtcbiAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHsgUGFyYW1ldGVyS2V5OiBrZXksIFBhcmFtZXRlclZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHNldCBvZiBwYXJhbWV0ZXIgdXBkYXRlcyB3aWxsIGNoYW5nZSB0aGUgYWN0dWFsIHN0YWNrIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIGhhc0NoYW5nZXMoY3VycmVudFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFBhcmFtZXRlckNoYW5nZXMge1xuICAgIC8vIElmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUgU1NNIHBhcmFtZXRlcnMsIGRlcGxveWluZyBtdXN0IGFsd2F5cyBoYXBwZW5cbiAgICAvLyBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCB0aGUgdmFsdWVzIHdpbGwgYmUuIFdlIHdpbGwgYWxsb3cgc29tZVxuICAgIC8vIHBhcmFtZXRlcnMgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGJ5IGhhdmluZyBhIG1hZ2ljIHN0cmluZyBpbiB0aGVpciBkZXNjcmlwdGlvbi5cbiAgICBpZiAoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybWFsUGFyYW1zKS5zb21lKFxuICAgICAgICAocCkgPT4gcC5UeXBlLnN0YXJ0c1dpdGgoJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6OicpICYmICFwLkRlc2NyaXB0aW9uPy5pbmNsdWRlcyhTU01QQVJBTV9OT19JTlZBTElEQVRFKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiAnc3NtJztcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2Ugd2UncmUgZGlydHkgaWY6XG4gICAgLy8gLSBhbnkgb2YgdGhlIGV4aXN0aW5nIHZhbHVlcyBhcmUgcmVtb3ZlZCwgb3IgY2hhbmdlZFxuICAgIGlmIChPYmplY3QuZW50cmllcyhjdXJyZW50VmFsdWVzKS5zb21lKChba2V5LCB2YWx1ZV0pID0+ICEoa2V5IGluIHRoaXMudmFsdWVzKSB8fCB2YWx1ZSAhPT0gdGhpcy52YWx1ZXNba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIC0gYW55IG9mIHRoZSB2YWx1ZXMgd2UncmUgc2V0dGluZyBhcmUgbmV3XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5zb21lKChrZXkpID0+ICEoa2V5IGluIGN1cnJlbnRWYWx1ZXMpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckNoYW5nZXMgPSBib29sZWFuIHwgJ3NzbSc7XG4iXX0=
|
|
@@ -66,10 +66,10 @@ export declare class DriftFormatter {
|
|
|
66
66
|
/**
|
|
67
67
|
* Renders stack drift information to the given stream
|
|
68
68
|
*
|
|
69
|
-
* @param driftResults The stack resource drifts from CloudFormation
|
|
70
|
-
* @param allStackResources A map of all stack resources
|
|
71
|
-
* @param verbose Whether to output more verbose text (include undrifted resources)
|
|
72
|
-
* @param logicalToPathMap A map from logical ID to construct path
|
|
69
|
+
* @param driftResults - The stack resource drifts from CloudFormation
|
|
70
|
+
* @param allStackResources - A map of all stack resources
|
|
71
|
+
* @param verbose - Whether to output more verbose text (include undrifted resources)
|
|
72
|
+
* @param logicalToPathMap - A map from logical ID to construct path
|
|
73
73
|
*/
|
|
74
74
|
private formatStackDriftChanges;
|
|
75
75
|
private formatLogicalId;
|
|
@@ -70,10 +70,10 @@ class DriftFormatter {
|
|
|
70
70
|
/**
|
|
71
71
|
* Renders stack drift information to the given stream
|
|
72
72
|
*
|
|
73
|
-
* @param driftResults The stack resource drifts from CloudFormation
|
|
74
|
-
* @param allStackResources A map of all stack resources
|
|
75
|
-
* @param verbose Whether to output more verbose text (include undrifted resources)
|
|
76
|
-
* @param logicalToPathMap A map from logical ID to construct path
|
|
73
|
+
* @param driftResults - The stack resource drifts from CloudFormation
|
|
74
|
+
* @param allStackResources - A map of all stack resources
|
|
75
|
+
* @param verbose - Whether to output more verbose text (include undrifted resources)
|
|
76
|
+
* @param logicalToPathMap - A map from logical ID to construct path
|
|
77
77
|
*/
|
|
78
78
|
formatStackDriftChanges(logicalToPathMap = {}) {
|
|
79
79
|
if (this.resourceDriftResults.length === 0) {
|
|
@@ -198,4 +198,4 @@ const ADDITION = chalk.green('[+]');
|
|
|
198
198
|
const CONTEXT = chalk.grey('[ ]');
|
|
199
199
|
const UPDATE = chalk.yellow('[~]');
|
|
200
200
|
const REMOVAL = chalk.red('[-]');
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRzFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09B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LElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLElBQUksSUFBQSxrQkFBTSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXBORCx3Q0FvTkM7QUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrUmVzb3VyY2VEcmlmdCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXR0ZWREcmlmdCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZHJpZnQnO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRHJpZnQgRm9ybWF0dGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgYXJ0aWZhY3RcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHRzIG9mIHN0YWNrIGRyaWZ0IGRldGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xufVxuXG5pbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyB3aXRoIGRyaWZ0LiBJZiB1bmRlZmluZWQsIHRoZW4gYW4gZXJyb3Igb2NjdXJyZWRcbiAgICogYW5kIHJlc291cmNlcyB3ZXJlIG5vdCBwcm9wZXJseSBjaGVja2VkIGZvciBkcmlmdC5cbiAgICovXG4gIHJlYWRvbmx5IG51bVJlc291cmNlc1dpdGhEcmlmdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSByZXNvdXJjZXMgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhblxuICAgKiBlcnJvciBvY2N1cnJlZCBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IGhhdmUgbm90IGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hlY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHdpdGggZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCAoZHJpZnQpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyLCBjb250YWluaW5nIHRoZSBzdGFjayBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdGFja0hlYWRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmluYWwgcmVzdWx0cyAoc3VtbWFyeSkgb2YgdGhlIGRyaWZ0IHJlc3VsdHNcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgZm9ybWF0dGluZyBkcmlmdCBkZXRlY3Rpb24gb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBEcmlmdEZvcm1hdHRlciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdFJlc3VsdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbFN0YWNrUmVzb3VyY2VzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBEcmlmdEZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy5zdGFjayA9IHByb3BzLnN0YWNrO1xuICAgIHRoaXMuc3RhY2tOYW1lID0gcHJvcHMuc3RhY2suZGlzcGxheU5hbWUgPz8gcHJvcHMuc3RhY2suc3RhY2tOYW1lO1xuICAgIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMgPSBwcm9wcy5yZXNvdXJjZURyaWZ0cztcblxuICAgIHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzIHx8IHt9KS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXNbaWRdO1xuICAgICAgLy8gYWx3YXlzIGlnbm9yZSB0aGUgbWV0YWRhdGEgcmVzb3VyY2VcbiAgICAgIGlmIChyZXNvdXJjZS5UeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNldChpZCwgcmVzb3VyY2UuVHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzdGFjayBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0c1xuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRHJpZnQoKTogRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAgIGNvbnN0IGZvcm1hdHRlck91dHB1dCA9IHRoaXMuZm9ybWF0U3RhY2tEcmlmdENoYW5nZXModGhpcy5idWlsZExvZ2ljYWxUb1BhdGhNYXAoKSk7XG5cbiAgICAvLyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGFjdHVhbCBkcmlmdHMgYW5kIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgY29uc3QgYWN0dWFsRHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5maWx0ZXIoZCA9PlxuICAgICAgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHxcbiAgICAgIGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSAnREVMRVRFRCcgfHxcbiAgICAgIGQuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyxcbiAgICApO1xuXG4gICAgLy8gbXVzdCBvdXRwdXQgdGhlIHN0YWNrIG5hbWUgaWYgdGhlcmUgYXJlIGRyaWZ0c1xuICAgIGNvbnN0IHN0YWNrSGVhZGVyID0gZm9ybWF0KGBTdGFjayAke2NoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpfVxcbmApO1xuXG4gICAgaWYgKGFjdHVhbERyaWZ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsuZ3JlZW4oJ05vIGRyaWZ0IGRldGVjdGVkXFxuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IDAsXG4gICAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICAgIHN0YWNrSGVhZGVyLFxuICAgICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay55ZWxsb3coYFxcbiR7YWN0dWFsRHJpZnRzLmxlbmd0aH0gcmVzb3VyY2Uke2FjdHVhbERyaWZ0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJ2hhcycgOiAnaGF2ZSd9IGRyaWZ0ZWQgZnJvbSB0aGVpciBleHBlY3RlZCBjb25maWd1cmF0aW9uXFxuYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogYWN0dWFsRHJpZnRzLmxlbmd0aCxcbiAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICBzdGFja0hlYWRlcixcbiAgICAgIHVuY2hhbmdlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hhbmdlZCxcbiAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgIG1vZGlmaWVkOiBmb3JtYXR0ZXJPdXRwdXQubW9kaWZpZWQsXG4gICAgICBkZWxldGVkOiBmb3JtYXR0ZXJPdXRwdXQuZGVsZXRlZCxcbiAgICAgIHN1bW1hcnk6IGZpbmFsUmVzdWx0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9naWNhbFRvUGF0aE1hcCgpIHtcbiAgICBjb25zdCBtYXA6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgbWQgb2YgdGhpcy5zdGFjay5maW5kTWV0YWRhdGFCeVR5cGUoY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKSkge1xuICAgICAgbWFwW21kLmRhdGEgYXMgc3RyaW5nXSA9IG1kLnBhdGg7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBzdGFjayBkcmlmdCBpbmZvcm1hdGlvbiB0byB0aGUgZ2l2ZW4gc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSBkcmlmdFJlc3VsdHMgVGhlIHN0YWNrIHJlc291cmNlIGRyaWZ0cyBmcm9tIENsb3VkRm9ybWF0aW9uXG4gICAqIEBwYXJhbSBhbGxTdGFja1Jlc291cmNlcyBBIG1hcCBvZiBhbGwgc3RhY2sgcmVzb3VyY2VzXG4gICAqIEBwYXJhbSB2ZXJib3NlIFdoZXRoZXIgdG8gb3V0cHV0IG1vcmUgdmVyYm9zZSB0ZXh0IChpbmNsdWRlIHVuZHJpZnRlZCByZXNvdXJjZXMpXG4gICAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIEEgbWFwIGZyb20gbG9naWNhbCBJRCB0byBjb25zdHJ1Y3QgcGF0aFxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRTdGFja0RyaWZ0Q2hhbmdlcyhcbiAgICBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge30pOiBGb3JtYXR0ZWREcmlmdCB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgbGV0IHVuY2hhbmdlZDtcbiAgICBsZXQgdW5jaGVja2VkO1xuICAgIGxldCBtb2RpZmllZDtcbiAgICBsZXQgZGVsZXRlZDtcblxuICAgIGNvbnN0IGRyaWZ0cyA9IHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHM7XG5cbiAgICAvLyBQcm9jZXNzIHVuY2hhbmdlZCByZXNvdXJjZXNcbiAgICBjb25zdCB1bmNoYW5nZWRSZXNvdXJjZXMgPSBkcmlmdHMuZmlsdGVyKGQgPT4gZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5JTl9TWU5DKTtcbiAgICBpZiAodW5jaGFuZ2VkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHVuY2hhbmdlZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdSZXNvdXJjZXMgSW4gU3luYycpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRyaWZ0IG9mIHVuY2hhbmdlZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICB1bmNoYW5nZWQgKz0gYCR7Q09OVEVYVH0gJHt0aGlzLmZvcm1hdFZhbHVlKGRyaWZ0LlJlc291cmNlVHlwZSwgY2hhbGsuY3lhbil9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgZHJpZnQuTG9naWNhbFJlc291cmNlSWQpfVxcbmA7XG4gICAgICB9XG4gICAgICB1bmNoYW5nZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGFsbCB1bmNoZWNrZWQgcmVzb3VyY2VzXG4gICAgaWYgKHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IHVuY2hlY2tlZFJlc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5hbGxTdGFja1Jlc291cmNlcy5rZXlzKCkpLmZpbHRlcigobG9naWNhbElkKSA9PiB7XG4gICAgICAgIHJldHVybiAhZHJpZnRzLmZpbmQoKGRyaWZ0KSA9PiBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9naWNhbElkKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHVuY2hlY2tlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHVuY2hlY2tlZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdVbmNoZWNrZWQgUmVzb3VyY2VzJyk7XG4gICAgICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHVuY2hlY2tlZFJlc291cmNlcykge1xuICAgICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMuZ2V0KGxvZ2ljYWxJZCk7XG4gICAgICAgICAgdW5jaGVja2VkICs9IGAke0NPTlRFWFR9ICR7dGhpcy5mb3JtYXRWYWx1ZShyZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGxvZ2ljYWxJZCl9XFxuYDtcbiAgICAgICAgfVxuICAgICAgICB1bmNoZWNrZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIG1vZGlmaWVkIHJlc291cmNlc1xuICAgIGNvbnN0IG1vZGlmaWVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+IGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMuTU9ESUZJRUQpO1xuICAgIGlmIChtb2RpZmllZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtb2RpZmllZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdNb2RpZmllZCBSZXNvdXJjZXMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBtb2RpZmllZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobW9kaWZpZWQgPT09IHVuZGVmaW5lZCkgbW9kaWZpZWQgPSAnJztcbiAgICAgICAgbW9kaWZpZWQgKz0gYCR7VVBEQVRFfSAke3RoaXMuZm9ybWF0VmFsdWUoZHJpZnQuUmVzb3VyY2VUeXBlLCBjaGFsay5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwLCBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCl9XFxuYDtcbiAgICAgICAgaWYgKGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9wRGlmZnMgPSBkcmlmdC5Qcm9wZXJ0eURpZmZlcmVuY2VzO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcERpZmZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gcHJvcERpZmZzW2ldO1xuICAgICAgICAgICAgaWYgKCFkaWZmLlByb3BlcnR5UGF0aCkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gbmV3IERpZmZlcmVuY2UoZGlmZi5FeHBlY3RlZFZhbHVlLCBkaWZmLkFjdHVhbFZhbHVlKTtcbiAgICAgICAgICAgIG1vZGlmaWVkICs9IHRoaXMuZm9ybWF0VHJlZURpZmYoZGlmZi5Qcm9wZXJ0eVBhdGgsIGRpZmZlcmVuY2UsIGkgPT09IHByb3BEaWZmcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1vZGlmaWVkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBkZWxldGVkIHJlc291cmNlc1xuICAgIGNvbnN0IGRlbGV0ZWRSZXNvdXJjZXMgPSBkcmlmdHMuZmlsdGVyKGQgPT4gZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5ERUxFVEVEKTtcbiAgICBpZiAoZGVsZXRlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkZWxldGVkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0RlbGV0ZWQgUmVzb3VyY2VzJyk7XG4gICAgICBmb3IgKGNvbnN0IGRyaWZ0IG9mIGRlbGV0ZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKCFkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAhZHJpZnQuUmVzb3VyY2VUeXBlKSBjb250aW51ZTtcbiAgICAgICAgZGVsZXRlZCArPSBgJHtSRU1PVkFMfSAke3RoaXMuZm9ybWF0VmFsdWUoZHJpZnQuUmVzb3VyY2VUeXBlLCBjaGFsay5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwLCBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCl9XFxuYDtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB1bmNoYW5nZWQsIHVuY2hlY2tlZCwgbW9kaWZpZWQsIGRlbGV0ZWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0sIGxvZ2ljYWxJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXRoID0gbG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdO1xuICAgIGlmICghcGF0aCkgcmV0dXJuIGxvZ2ljYWxJZDtcblxuICAgIGxldCBub3JtYWxpemVkUGF0aCA9IHBhdGg7XG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5zbGljZSgxKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSBub3JtYWxpemVkUGF0aC5zcGxpdCgnLycpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuXG4gICAgICAvLyByZW1vdmUgdGhlIGxhc3QgY29tcG9uZW50IGlmIGl0J3MgXCJSZXNvdXJjZVwiIG9yIFwiRGVmYXVsdFwiIChpZiB3ZSBoYXZlIG1vcmUgdGhhbiBhIHNpbmdsZSBjb21wb25lbnQpXG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBsYXN0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChsYXN0ID09PSAnUmVzb3VyY2UnIHx8IGxhc3QgPT09ICdEZWZhdWx0Jykge1xuICAgICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9ybWFsaXplZFBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25vcm1hbGl6ZWRQYXRofSAke2NoYWxrLmdyYXkobG9naWNhbElkKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBjb2xvckZuOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjb2xvckZuKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yRm4oSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpfVxcbmA7XG4gIH1cblxuICBwcml2YXRlIHByaW50U2VjdGlvbkZvb3RlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFxuJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VHJlZURpZmYocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRpZmZlcmVuY2U6IERpZmZlcmVuY2U8YW55PiwgaXNMYXN0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZm9ybWF0KCcgJXPilIAgJXMgJXNcXG4nLCBpc0xhc3QgPyAn4pSUJyA6ICfilJwnLFxuICAgICAgZGlmZmVyZW5jZS5pc0FkZGl0aW9uID8gQURESVRJT04gOlxuICAgICAgICBkaWZmZXJlbmNlLmlzUmVtb3ZhbCA/IFJFTU9WQUwgOlxuICAgICAgICAgIFVQREFURSxcbiAgICAgIHByb3BlcnR5UGF0aCxcbiAgICApO1xuICAgIGlmIChkaWZmZXJlbmNlLmlzVXBkYXRlKSB7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUnOKUgCAlcyAlc1xcbicsIFJFTU9WQUwsIHRoaXMuZm9ybWF0VmFsdWUoZGlmZmVyZW5jZS5vbGRWYWx1ZSwgY2hhbGsucmVkKSk7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUlOKUgCAlcyAlc1xcbicsIEFERElUSU9OLCB0aGlzLmZvcm1hdFZhbHVlKGRpZmZlcmVuY2UubmV3VmFsdWUsIGNoYWxrLmdyZWVuKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG4iXX0=
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRzFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09B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LElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLElBQUksSUFBQSxrQkFBTSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXBORCx3Q0FvTkM7QUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrUmVzb3VyY2VEcmlmdCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXR0ZWREcmlmdCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZHJpZnQnO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRHJpZnQgRm9ybWF0dGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgYXJ0aWZhY3RcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHRzIG9mIHN0YWNrIGRyaWZ0IGRldGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xufVxuXG5pbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyB3aXRoIGRyaWZ0LiBJZiB1bmRlZmluZWQsIHRoZW4gYW4gZXJyb3Igb2NjdXJyZWRcbiAgICogYW5kIHJlc291cmNlcyB3ZXJlIG5vdCBwcm9wZXJseSBjaGVja2VkIGZvciBkcmlmdC5cbiAgICovXG4gIHJlYWRvbmx5IG51bVJlc291cmNlc1dpdGhEcmlmdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSByZXNvdXJjZXMgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhblxuICAgKiBlcnJvciBvY2N1cnJlZCBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IGhhdmUgbm90IGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hlY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHdpdGggZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCAoZHJpZnQpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyLCBjb250YWluaW5nIHRoZSBzdGFjayBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdGFja0hlYWRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmluYWwgcmVzdWx0cyAoc3VtbWFyeSkgb2YgdGhlIGRyaWZ0IHJlc3VsdHNcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgZm9ybWF0dGluZyBkcmlmdCBkZXRlY3Rpb24gb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBEcmlmdEZvcm1hdHRlciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdFJlc3VsdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbFN0YWNrUmVzb3VyY2VzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBEcmlmdEZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy5zdGFjayA9IHByb3BzLnN0YWNrO1xuICAgIHRoaXMuc3RhY2tOYW1lID0gcHJvcHMuc3RhY2suZGlzcGxheU5hbWUgPz8gcHJvcHMuc3RhY2suc3RhY2tOYW1lO1xuICAgIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMgPSBwcm9wcy5yZXNvdXJjZURyaWZ0cztcblxuICAgIHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzIHx8IHt9KS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXNbaWRdO1xuICAgICAgLy8gYWx3YXlzIGlnbm9yZSB0aGUgbWV0YWRhdGEgcmVzb3VyY2VcbiAgICAgIGlmIChyZXNvdXJjZS5UeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNldChpZCwgcmVzb3VyY2UuVHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzdGFjayBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0c1xuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRHJpZnQoKTogRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAgIGNvbnN0IGZvcm1hdHRlck91dHB1dCA9IHRoaXMuZm9ybWF0U3RhY2tEcmlmdENoYW5nZXModGhpcy5idWlsZExvZ2ljYWxUb1BhdGhNYXAoKSk7XG5cbiAgICAvLyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGFjdHVhbCBkcmlmdHMgYW5kIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgY29uc3QgYWN0dWFsRHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5maWx0ZXIoZCA9PlxuICAgICAgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHxcbiAgICAgIGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSAnREVMRVRFRCcgfHxcbiAgICAgIGQuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyxcbiAgICApO1xuXG4gICAgLy8gbXVzdCBvdXRwdXQgdGhlIHN0YWNrIG5hbWUgaWYgdGhlcmUgYXJlIGRyaWZ0c1xuICAgIGNvbnN0IHN0YWNrSGVhZGVyID0gZm9ybWF0KGBTdGFjayAke2NoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpfVxcbmApO1xuXG4gICAgaWYgKGFjdHVhbERyaWZ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsuZ3JlZW4oJ05vIGRyaWZ0IGRldGVjdGVkXFxuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IDAsXG4gICAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICAgIHN0YWNrSGVhZGVyLFxuICAgICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay55ZWxsb3coYFxcbiR7YWN0dWFsRHJpZnRzLmxlbmd0aH0gcmVzb3VyY2Uke2FjdHVhbERyaWZ0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJ2hhcycgOiAnaGF2ZSd9IGRyaWZ0ZWQgZnJvbSB0aGVpciBleHBlY3RlZCBjb25maWd1cmF0aW9uXFxuYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogYWN0dWFsRHJpZnRzLmxlbmd0aCxcbiAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICBzdGFja0hlYWRlcixcbiAgICAgIHVuY2hhbmdlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hhbmdlZCxcbiAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgIG1vZGlmaWVkOiBmb3JtYXR0ZXJPdXRwdXQubW9kaWZpZWQsXG4gICAgICBkZWxldGVkOiBmb3JtYXR0ZXJPdXRwdXQuZGVsZXRlZCxcbiAgICAgIHN1bW1hcnk6IGZpbmFsUmVzdWx0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9naWNhbFRvUGF0aE1hcCgpIHtcbiAgICBjb25zdCBtYXA6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgbWQgb2YgdGhpcy5zdGFjay5maW5kTWV0YWRhdGFCeVR5cGUoY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKSkge1xuICAgICAgbWFwW21kLmRhdGEgYXMgc3RyaW5nXSA9IG1kLnBhdGg7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBzdGFjayBkcmlmdCBpbmZvcm1hdGlvbiB0byB0aGUgZ2l2ZW4gc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSBkcmlmdFJlc3VsdHMgLSBUaGUgc3RhY2sgcmVzb3VyY2UgZHJpZnRzIGZyb20gQ2xvdWRGb3JtYXRpb25cbiAgICogQHBhcmFtIGFsbFN0YWNrUmVzb3VyY2VzIC0gQSBtYXAgb2YgYWxsIHN0YWNrIHJlc291cmNlc1xuICAgKiBAcGFyYW0gdmVyYm9zZSAtIFdoZXRoZXIgdG8gb3V0cHV0IG1vcmUgdmVyYm9zZSB0ZXh0IChpbmNsdWRlIHVuZHJpZnRlZCByZXNvdXJjZXMpXG4gICAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIC0gQSBtYXAgZnJvbSBsb2dpY2FsIElEIHRvIGNvbnN0cnVjdCBwYXRoXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKFxuICAgIGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IEZvcm1hdHRlZERyaWZ0IHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBsZXQgdW5jaGFuZ2VkO1xuICAgIGxldCB1bmNoZWNrZWQ7XG4gICAgbGV0IG1vZGlmaWVkO1xuICAgIGxldCBkZWxldGVkO1xuXG4gICAgY29uc3QgZHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cztcblxuICAgIC8vIFByb2Nlc3MgdW5jaGFuZ2VkIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hhbmdlZFJlc291cmNlcyA9IGRyaWZ0cy5maWx0ZXIoZCA9PiBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLklOX1NZTkMpO1xuICAgIGlmICh1bmNoYW5nZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGFuZ2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1Jlc291cmNlcyBJbiBTeW5jJyk7XG5cbiAgICAgIGZvciAoY29uc3QgZHJpZnQgb2YgdW5jaGFuZ2VkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIHVuY2hhbmdlZCArPSBgJHtDT05URVhUfSAke3RoaXMuZm9ybWF0VmFsdWUoZHJpZnQuUmVzb3VyY2VUeXBlLCBjaGFsay5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwLCBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCl9XFxuYDtcbiAgICAgIH1cbiAgICAgIHVuY2hhbmdlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgYWxsIHVuY2hlY2tlZCByZXNvdXJjZXNcbiAgICBpZiAodGhpcy5hbGxTdGFja1Jlc291cmNlcykge1xuICAgICAgY29uc3QgdW5jaGVja2VkUmVzb3VyY2VzID0gQXJyYXkuZnJvbSh0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmtleXMoKSkuZmlsdGVyKChsb2dpY2FsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuICFkcmlmdHMuZmluZCgoZHJpZnQpID0+IGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgfSk7XG4gICAgICBpZiAodW5jaGVja2VkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgdW5jaGVja2VkUmVzb3VyY2VzKSB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5hbGxTdGFja1Jlc291cmNlcy5nZXQobG9naWNhbElkKTtcbiAgICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHt0aGlzLmZvcm1hdFZhbHVlKHJlc291cmNlVHlwZSwgY2hhbGsuY3lhbil9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIHVuY2hlY2tlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgbW9kaWZpZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgbW9kaWZpZWRSZXNvdXJjZXMgPSBkcmlmdHMuZmlsdGVyKGQgPT4gZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5NT0RJRklFRCk7XG4gICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1vZGlmaWVkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ01vZGlmaWVkIFJlc291cmNlcycpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRyaWZ0IG9mIG1vZGlmaWVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKSBtb2RpZmllZCA9ICcnO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7dGhpcy5mb3JtYXRWYWx1ZShkcmlmdC5SZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgZGVsZXRlZFJlc291cmNlcyA9IGRyaWZ0cy5maWx0ZXIoZCA9PiBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURUQpO1xuICAgIGlmIChkZWxldGVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlbGV0ZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignRGVsZXRlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgZHJpZnQgb2YgZGVsZXRlZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBkZWxldGVkICs9IGAke1JFTU9WQUx9ICR7dGhpcy5mb3JtYXRWYWx1ZShkcmlmdC5SZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgZGVsZXRlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHVuY2hhbmdlZCwgdW5jaGVja2VkLCBtb2RpZmllZCwgZGVsZXRlZCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSwgbG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGggPSBsb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF07XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gbG9naWNhbElkO1xuXG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aDtcbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgaWYgaXQncyBcIlJlc291cmNlXCIgb3IgXCJEZWZhdWx0XCIgKGlmIHdlIGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbXBvbmVudClcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGxhc3QgPT09ICdSZXNvdXJjZScgfHwgbGFzdCA9PT0gJ0RlZmF1bHQnKSB7XG4gICAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub3JtYWxpemVkUGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7bm9ybWFsaXplZFBhdGh9ICR7Y2hhbGsuZ3JheShsb2dpY2FsSWQpfWA7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnksIGNvbG9yRm46IChzdHI6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNvbG9yRm4odmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3JGbihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmludFNlY3Rpb25IZWFkZXIodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NoYWxrLnVuZGVybGluZShjaGFsay5ib2xkKHRpdGxlKSl9XFxuYDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uRm9vdGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdcXG4nO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUcmVlRGlmZihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGlmZmVyZW5jZTogRGlmZmVyZW5jZTxhbnk+LCBpc0xhc3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBmb3JtYXQoJyAlc+KUgCAlcyAlc1xcbicsIGlzTGFzdCA/ICfilJQnIDogJ+KUnCcsXG4gICAgICBkaWZmZXJlbmNlLmlzQWRkaXRpb24gPyBBRERJVElPTiA6XG4gICAgICAgIGRpZmZlcmVuY2UuaXNSZW1vdmFsID8gUkVNT1ZBTCA6XG4gICAgICAgICAgVVBEQVRFLFxuICAgICAgcHJvcGVydHlQYXRoLFxuICAgICk7XG4gICAgaWYgKGRpZmZlcmVuY2UuaXNVcGRhdGUpIHtcbiAgICAgIHJlc3VsdCArPSBmb3JtYXQoJyAgICAg4pSc4pSAICVzICVzXFxuJywgUkVNT1ZBTCwgdGhpcy5mb3JtYXRWYWx1ZShkaWZmZXJlbmNlLm9sZFZhbHVlLCBjaGFsay5yZWQpKTtcbiAgICAgIHJlc3VsdCArPSBmb3JtYXQoJyAgICAg4pSU4pSAICVzICVzXFxuJywgQURESVRJT04sIHRoaXMuZm9ybWF0VmFsdWUoZGlmZmVyZW5jZS5uZXdWYWx1ZSwgY2hhbGsuZ3JlZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jb25zdCBBRERJVElPTiA9IGNoYWxrLmdyZWVuKCdbK10nKTtcbmNvbnN0IENPTlRFWFQgPSBjaGFsay5ncmV5KCdbIF0nKTtcbmNvbnN0IFVQREFURSA9IGNoYWxrLnllbGxvdygnW35dJyk7XG5jb25zdCBSRU1PVkFMID0gY2hhbGsucmVkKCdbLV0nKTtcbiJdfQ==
|