@aws-cdk/integ-runner 2.202.2 → 2.203.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/THIRD_PARTY_LICENSES +26 -0
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +3 -2
- package/lib/engines/toolkit-lib.d.ts +1 -1
- package/lib/engines/toolkit-lib.d.ts.map +1 -1
- package/lib/engines/toolkit-lib.js +11 -11
- package/lib/files.d.ts +9 -0
- package/lib/files.d.ts.map +1 -0
- package/lib/files.js +51 -0
- package/lib/index.js +218 -182
- package/lib/runner/{cdk-integ-helper.d.ts → cdk-test-app.d.ts} +90 -114
- package/lib/runner/cdk-test-app.d.ts.map +1 -0
- package/lib/runner/cdk-test-app.js +584 -0
- package/lib/runner/engine.d.ts +2 -2
- package/lib/runner/engine.d.ts.map +1 -1
- package/lib/runner/engine.js +2 -2
- package/lib/runner/index.d.ts +1 -1
- package/lib/runner/index.d.ts.map +1 -1
- package/lib/runner/index.js +2 -2
- package/lib/runner/integ-test-runner.d.ts +36 -36
- package/lib/runner/integ-test-runner.d.ts.map +1 -1
- package/lib/runner/integ-test-runner.js +172 -235
- package/lib/runner/integ-test-suite.d.ts +6 -11
- package/lib/runner/integ-test-suite.d.ts.map +1 -1
- package/lib/runner/integ-test-suite.js +14 -20
- package/lib/runner/integration-tests.d.ts +12 -3
- package/lib/runner/integration-tests.d.ts.map +1 -1
- package/lib/runner/integration-tests.js +32 -8
- package/lib/runner/snapshot-test-runner.d.ts +19 -22
- package/lib/runner/snapshot-test-runner.d.ts.map +1 -1
- package/lib/runner/snapshot-test-runner.js +47 -75
- package/lib/workers/extract/extract_worker.d.ts.map +1 -1
- package/lib/workers/extract/extract_worker.js +65 -78
- package/lib/workers/extract/index.js +228344 -227587
- package/lib/workers/integ-test-worker.d.ts.map +1 -1
- package/lib/workers/integ-test-worker.js +3 -2
- package/package.json +5 -5
- package/lib/runner/cdk-integ-helper.d.ts.map +0 -1
- package/lib/runner/cdk-integ-helper.js +0 -525
package/THIRD_PARTY_LICENSES
CHANGED
|
@@ -11031,6 +11031,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
11031
11031
|
THE SOFTWARE.
|
|
11032
11032
|
|
|
11033
11033
|
|
|
11034
|
+
----------------
|
|
11035
|
+
|
|
11036
|
+
** json-source-map@0.6.1 - https://www.npmjs.com/package/json-source-map/v/0.6.1 | MIT
|
|
11037
|
+
MIT License
|
|
11038
|
+
|
|
11039
|
+
Copyright (c) 2017 Evgeny Poberezkin
|
|
11040
|
+
|
|
11041
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11042
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
11043
|
+
in the Software without restriction, including without limitation the rights
|
|
11044
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11045
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11046
|
+
furnished to do so, subject to the following conditions:
|
|
11047
|
+
|
|
11048
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11049
|
+
copies or substantial portions of the Software.
|
|
11050
|
+
|
|
11051
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
11052
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
11053
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
11054
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
11055
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
11056
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
11057
|
+
SOFTWARE.
|
|
11058
|
+
|
|
11059
|
+
|
|
11034
11060
|
----------------
|
|
11035
11061
|
|
|
11036
11062
|
** jsonfile@6.2.0 - https://www.npmjs.com/package/jsonfile/v/6.2.0 | MIT
|
package/lib/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"AAkBA,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAM,EAAO;;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"AAkBA,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAM,EAAO;;SA2F3B,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;uBAKqB,OAAO;;aAExC,OAAO;;UAEb,OAAO;eACG,MAAM;qBACU,OAAO;;;WAG/B,OAAO;WACP,OAAO;YACD,OAAO;;;WAGb,OAAO;YACL,OAAO;;WAET,CAAC,MAAM,GAAG,SAAS,CAAC;kBACD,CAAC,MAAM,GAAG,SAAS,CAAC;aAC/B,CAAC,MAAM,GAAG,SAAS,CAAC;yBACK,OAAO;;EAGhE;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAYxC;AAgMD,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,QAIzD"}
|
package/lib/cli.js
CHANGED
|
@@ -124,7 +124,8 @@ function parseCliArgs(args = []) {
|
|
|
124
124
|
if (argv['disable-update-workflow'] !== undefined && argv['update-workflow'] !== undefined) {
|
|
125
125
|
throw new Error('--disable-update-workflow and --[no-]update-workflow cannot be used together');
|
|
126
126
|
}
|
|
127
|
-
|
|
127
|
+
// No update workflow by default
|
|
128
|
+
let updateWorkflow = argv['update-workflow'] !== undefined ? !!argv['update-workflow'] : false;
|
|
128
129
|
const updateFromTags = argv['update-from-tags']
|
|
129
130
|
? argv['update-from-tags'].split(',').map((t) => t.trim())
|
|
130
131
|
: undefined;
|
|
@@ -368,4 +369,4 @@ function configFromFile(fileName) {
|
|
|
368
369
|
function splitByComma(xs) {
|
|
369
370
|
return xs.flatMap(x => x.split(',')).map(x => x.trim());
|
|
370
371
|
}
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLG9DQXNIQztBQUVELG9CQVlDO0FBZ01ELGtCQUlDO0FBMVZELGdGQUFnRjtBQUNoRix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUEwQjtBQUMxQix1REFBeUM7QUFDekMsaURBQW1DO0FBRW5DLGtFQUE4RDtBQUM5RCwyREFBNEY7QUFFNUYsdUNBQWtFO0FBQ2xFLHFFQUFvRTtBQUVwRSw2Q0FBNkM7QUFDN0MsK0NBQStDO0FBQy9DLGlFQUFpRTtBQUNqRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0IsU0FBZ0IsWUFBWSxDQUFDLE9BQWlCLEVBQUU7SUFDOUMsTUFBTSxJQUFJLEdBQUcsS0FBSztTQUNmLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztTQUN0QyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxJQUFJO1FBQ1osWUFBWSxFQUFFLGNBQWM7UUFDNUIsT0FBTyxFQUFFLG1CQUFtQjtRQUM1QixJQUFJLEVBQUUseUZBQXlGO0tBQ2hHLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO1NBQy9GLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsOEVBQThFLEVBQUUsQ0FBQztTQUN6SSxNQUFNLENBQUMsU0FB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LE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdCwgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IEludGVncmF0aW9uVGVzdHMgfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBwcm9jZXNzVW5zdGFibGVGZWF0dXJlcywgYXZhaWxhYmxlRmVhdHVyZXNEZXNjcmlwdGlvbiB9IGZyb20gJy4vdW5zdGFibGUtZmVhdHVyZXMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyB3YXRjaEludGVncmF0aW9uVGVzdCB9IGZyb20gJy4vd29ya2Vycy9pbnRlZy13YXRjaC13b3JrZXInO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzE5Mjlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL2lzc3Vlcy8xNDkyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgeWFyZ3MgPSByZXF1aXJlKCd5YXJncycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGlBcmdzKGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignY29uZmlnJywge1xuICAgICAgY29uZmlnOiB0cnVlLFxuICAgICAgY29uZmlnUGFyc2VyOiBjb25maWdGcm9tRmlsZSxcbiAgICAgIGRlZmF1bHQ6ICdpbnRlZy5jb25maWcuanNvbicsXG4gICAgICBkZXNjOiAnTG9hZCBvcHRpb25zIGZyb20gYSBKU09OIGNvbmZpZyBmaWxlLiBPcHRpb25zIHByb3ZpZGVkIGFzIENMSSBhcmd1bWVudHMgdGFrZSBwcmVjZWRlbnQuJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ3dhdGNoJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnUGVyZm9ybSBpbnRlZyB0ZXN0cyBpbiB3YXRjaCBtb2RlJyB9KVxuICAgIC5vcHRpb24oJ2xpc3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdMaXN0IHRlc3RzIGluc3RlYWQgb2YgcnVubmluZyB0aGVtJyB9KVxuICAgIC5vcHRpb24oJ2NsZWFuJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHRydWUsIGRlc2M6ICdDbGVhbiB1cCBhbmQgZGVsZXRlIHN0YWNrIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSwgY29lcmNlOiBzcGxpdEJ5Q29tbWEgfSlcbiAgICAub3B0aW9ucygnZGlyZWN0b3J5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogJ3Rlc3QnLCBkZXNjOiAnc3RhcnRpbmcgZGlyZWN0b3J5IHRvIGRpc2NvdmVyIGludGVncmF0aW9uIHRlc3RzLiBUZXN0cyB3aWxsIGJlIGRpc2NvdmVyZWQgcmVjdXJzaXZlbHkgZnJvbSB0aGlzIGRpcmVjdG9yeScgfSlcbiAgICAub3B0aW9ucygncHJvZmlsZXMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdsaXN0IG9mIEFXUyBwcm9maWxlcyB0byB1c2UuIFRlc3RzIHdpbGwgYmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyBlYWNoIHByb2ZpbGUrcmVnaW9ucycsIGRlZmF1bHQ6IFtdLCBjb2VyY2U6IHNwbGl0QnlDb21tYSB9KVxuICAgIC5vcHRpb25zKCdtYXgtd29ya2VycycsIHsgdHlwZTogJ251bWJlcicsIGRlc2M6ICdUaGUgbWF4IG51bWJlciBvZiB3b3JrZXJwb29sIHdvcmtlcnMgdG8gdXNlIHdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbCcsIGRlZmF1bHQ6IDE2IH0pXG4gICAgLm9wdGlvbnMoJ2V4Y2x1ZGUnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ1J1biBhbGwgdGVzdHMgaW4gdGhlIGRpcmVjdG9yeSwgZXhjZXB0IHRoZSBzcGVjaWZpZWQgVEVTVHMnLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ3N0cmljdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0ZhaWwgaWYgYW55IHNwZWNpZmllZCB0ZXN0cyBhcmUgbm90IGZvdW5kJyB9KVxuICAgIC5vcHRpb25zKCdmcm9tLWZpbGUnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnUmVhZCBURVNUIG5hbWVzIGZyb20gYSBmaWxlIChvbmUgVEVTVCBwZXIgbGluZSknIH0pXG4gICAgLm9wdGlvbignaW5zcGVjdC1mYWlsdXJlcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnS2VlcCB0aGUgaW50ZWcgdGVzdCBjbG91ZCBhc3NlbWJseSBpZiBhIGZhaWx1cmUgb2NjdXJzIGZvciBpbnNwZWN0aW9uJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdERVBSRUNBVEVELCB1c2UgLS1bbm9dLXVwZGF0ZS13b3JrZmxvdyBpbnN0ZWFkJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdEZXBsb3lzIHRoZSBjb21taXR0ZWQgc25hcHNob3QgYmVmb3JlIHRoZSB1cGRhdGVkIGFwcGxpY2F0aW9uLiBPbmx5IHdvcmtzIGlmIHNuYXBzaG90cyBhcmUgcmVnaW9uLWFnbm9zdGljLicgfSlcbiAgICAub3B0aW9uKCdsYW5ndWFnZScsIHtcbiAgICAgIGFsaWFzOiAnbCcsXG4gICAgICBkZWZhdWx0OiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCcsICdweXRob24nLCAnZ28nXSxcbiAgICAgIGNob2ljZXM6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIG5hcmdzOiAxLFxuICAgICAgZGVzYzogJ1VzZSB0aGVzZSBwcmVzZXRzIHRvIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGxhbmd1YWdlcycsXG4gICAgfSlcbiAgICAub3B0aW9uKCdhcHAnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdUaGUgY3VzdG9tIENMSSBjb21tYW5kIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgdGVzdCBmaWxlcy4gWW91IGNhbiBpbmNsdWRlIHtmaWxlUGF0aH0gdG8gc3BlY2lmeSB3aGVyZSBpbiB0aGUgY29tbWFuZCB0aGUgdGVzdCBmaWxlIHBhdGggc2hvdWxkIGJlIGluc2VydGVkLiBFeGFtcGxlOiAtLWFwcD1cInB5dGhvbjMuOCB7ZmlsZVBhdGh9XCIuJyB9KVxuICAgIC5vcHRpb24oJ3Rlc3QtcmVnZXgnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdEZXRlY3QgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBtYXRjaGluZyB0aGlzIEphdmFTY3JpcHQgcmVnZXggcGF0dGVybi4gSWYgdXNlZCBtdWx0aXBsZSB0aW1lcywgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvbmUgb2YgdGhlIHBhdHRlcm5zIGFyZSBkZXRlY3RlZC4nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb24oJ3Byb3h5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1VzZSB0aGUgaW5kaWNhdGVkIHByb3h5LiBXaWxsIHJlYWQgZnJvbSBIVFRQU19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBub3Qgc3BlY2lmaWVkJywgcmVxdWlyZXNBcmc6IHRydWUgfSlcbiAgICAub3B0aW9uKCdjYS1idW5kbGUtcGF0aCcsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdQYXRoIHRvIENBIGNlcnRpZmljYXRlIHRvIHVzZSB3aGVuIHZhbGlkYXRpbmcgSFRUUFMgcmVxdWVzdHMuIFdpbGwgcmVhZCBmcm9tIEFXU19DQV9CVU5ETEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgbm90IHNwZWNpZmllZCcsIHJlcXVpcmVzQXJnOiB0cnVlIH0pXG4gICAgLm9wdGlvbigndW5zdGFibGUnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6IGBPcHQtaW4gdG8gdXNpbmcgdW5zdGFibGUgZmVhdHVyZXMuIEJ5IHVzaW5nIHRoZXNlIGZsYWdzIHlvdSBhY2tub3dsZWRnZSB0aGF0IHNjb3BlIGFuZCBBUEkgb2YgdW5zdGFibGUgZmVhdHVyZXMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gU3BlY2lmeSBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCB1bnN0YWJsZSBmZWF0dXJlIHlvdSB3YW50IHRvIG9wdC1pbiB0by4gJHthdmFpbGFibGVGZWF0dXJlc0Rlc2NyaXB0aW9uKCl9YCwgbmFyZ3M6IDEsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbigncm9sZS1hcm4nLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnQVJOIG9mIHRoZSBJQU0gcm9sZSBmb3IgQ2xvdWRGb3JtYXRpb24gdG8gYXNzdW1lIGR1cmluZyBkZXBsb3kvZGVzdHJveScsIHJlcXVpcmVzQXJnOiB0cnVlIH0pXG4gICAgLm9wdGlvbignYWxsb3ctZGVsZXRlLWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnRG8gbm90IGZhaWwgdGhlIHRlc3Qgd2hlbiByZXNvdXJjZXMgZmFpbCB0byBkZWxldGUgZHVyaW5nIGEgc3RhY2sgdXBkYXRlJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1mcm9tLXRhZ3MnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnRGVwbG95IHNuYXBzaG90cyBmcm9tIHRoZSBnaXZlbiBnaXQgdGFncyBpbiBzZXF1ZW5jZSBiZWZvcmUgZGVwbG95aW5nIHRoZSBjdXJyZW50IGNvZGUuIEltcGxpZXMgLS1mb3JjZS4gT25seSB3b3JrcyBpZiBzbmFwc2hvdHMgYXJlIHJlZ2lvbi1hZ25vc3RpYy4nLCByZXF1aXJlc0FyZzogdHJ1ZSB9KVxuICAgIC5zdHJpY3QoKVxuICAgIC5wYXJzZShhcmdzKTtcblxuICBjb25zdCB0ZXN0czogc3RyaW5nW10gPSBhcmd2Ll87XG4gIGNvbnN0IHBhcmFsbGVsUmVnaW9ucyA9IGFycmF5RnJvbVlhcmdzKGFyZ3ZbJ3BhcmFsbGVsLXJlZ2lvbnMnXSk7XG4gIGNvbnN0IHRlc3RSZWdpb25zOiBzdHJpbmdbXSA9IHBhcmFsbGVsUmVnaW9ucyA/PyBbJ3VzLWVhc3QtMScsICd1cy1lYXN0LTInLCAndXMtd2VzdC0yJ107XG4gIGNvbnN0IHByb2ZpbGVzID0gYXJyYXlGcm9tWWFyZ3MoYXJndi5wcm9maWxlcyk7XG4gIGNvbnN0IGZyb21GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhcmd2Wydmcm9tLWZpbGUnXTtcbiAgY29uc3QgbWF4V29ya2VyczogbnVtYmVyID0gYXJndlsnbWF4LXdvcmtlcnMnXTtcbiAgY29uc3QgdmVyYm9zaXR5OiBudW1iZXIgPSBhcmd2LnZlcmJvc2U7XG4gIGNvbnN0IHZlcmJvc2U6IGJvb2xlYW4gPSB2ZXJib3NpdHkgPj0gMTtcblxuICBjb25zdCBudW1UZXN0cyA9IHRlc3RSZWdpb25zLmxlbmd0aCAqIChwcm9maWxlcyA/PyBbMV0pLmxlbmd0aDtcbiAgaWYgKG1heFdvcmtlcnMgPCBudW1UZXN0cykge1xuICAgIGxvZ2dlci53YXJuaW5nKCdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuICVzIHRlc3RzIGluIHBhcmFsbGVsLCBidXQgb25seSBoYXZlICVzIHdvcmtlcnMuIE5vdCBhbGwgb2YgeW91ciBwcm9maWxlcytyZWdpb25zIHdpbGwgYmUgdXRpbGl6ZWQnLCBudW1UZXN0cywgbWF4V29ya2Vycyk7XG4gIH1cblxuICBpZiAodGVzdHMubGVuZ3RoID4gMCAmJiBmcm9tRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBsaXN0IG9mIHRlc3RzIGNhbm5vdCBiZSBwcm92aWRlZCBpZiBcIi0tZnJvbS1maWxlXCIgaXMgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGlmIChhcmd2LnN0cmljdCAmJiBhcmd2LmV4Y2x1ZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgLS1zdHJpY3Qgd2l0aCAtLWV4Y2x1ZGUnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICA/IChmcy5yZWFkRmlsZVN5bmMoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSlcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5maWx0ZXIoeCA9PiB4KVxuICAgICAgLmZpbHRlcih4ID0+ICF4LnN0YXJ0c1dpdGgoJyMnKSlcbiAgICA6ICh0ZXN0cy5sZW5ndGggPiAwID8gdGVzdHMgOiB1bmRlZmluZWQpOyAvLyAndW5kZWZpbmVkJyBtZWFucyBubyByZXF1ZXN0XG5cbiAgaWYgKGFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10gIT09IHVuZGVmaW5lZCAmJiBhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLWRpc2FibGUtdXBkYXRlLXdvcmtmbG93IGFuZCAtLVtuby1ddXBkYXRlLXdvcmtmbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gIH1cblxuICBsZXQgdXBkYXRlV29ya2Zsb3cgPSBhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSAhPT0gdW5kZWZpbmVkID8gISFhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSA6ICFhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddO1xuXG4gIGNvbnN0IHVwZGF0ZUZyb21UYWdzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ3VwZGF0ZS1mcm9tLXRhZ3MnXVxuICAgID8gYXJndlsndXBkYXRlLWZyb20tdGFncyddLnNwbGl0KCcsJykubWFwKCh0OiBzdHJpbmcpID0+IHQudHJpbSgpKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmICh1cGRhdGVGcm9tVGFncyAmJiBhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tdXBkYXRlLWZyb20tdGFncyBhbmQgLS1uby11cGRhdGUtd29ya2Zsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGVzdHM6IHJlcXVlc3RlZFRlc3RzLFxuICAgIGFwcDogYXJndi5hcHAgYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgdGVzdFJlZ2V4OiBhcnJheUZyb21ZYXJncyhhcmd2Wyd0ZXN0LXJlZ2V4J10pLFxuICAgIHRlc3RSZWdpb25zLFxuICAgIG9yaWdpbmFsUmVnaW9uczogcGFyYWxsZWxSZWdpb25zLFxuICAgIHByb2ZpbGVzLFxuICAgIHJ1blVwZGF0ZU9uRmFpbGVkOiAoYXJndlsndXBkYXRlLW9uLWZhaWxlZCddID8/IGZhbHNlKSBhcyBib29sZWFuLFxuICAgIGZyb21GaWxlLFxuICAgIGV4Y2x1ZGU6IGFyZ3YuZXhjbHVkZSBhcyBib29sZWFuLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbGlzdDogYXJndi5saXN0IGFzIGJvb2xlYW4sXG4gICAgZGlyZWN0b3J5OiBhcmd2LmRpcmVjdG9yeSBhcyBzdHJpbmcsXG4gICAgaW5zcGVjdEZhaWx1cmVzOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10gYXMgYm9vbGVhbixcbiAgICB2ZXJib3NpdHksXG4gICAgdmVyYm9zZSxcbiAgICBjbGVhbjogYXJndi5jbGVhbiBhcyBib29sZWFuLFxuICAgIGZvcmNlOiBhcmd2LmZvcmNlIGFzIGJvb2xlYW4sXG4gICAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10gYXMgYm9vbGVhbixcbiAgICB1cGRhdGVXb3JrZmxvdyxcbiAgICBsYW5ndWFnZTogYXJyYXlGcm9tWWFyZ3MoYXJndi5sYW5ndWFnZSksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggYXMgYm9vbGVhbixcbiAgICBzdHJpY3Q6IGFyZ3Yuc3RyaWN0IGFzIGJvb2xlYW4sXG4gICAgdW5zdGFibGU6IGFycmF5RnJvbVlhcmdzKGFyZ3YudW5zdGFibGUpID8/IFtdLFxuICAgIHByb3h5OiBhcmd2LnByb3h5IGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIGNhQnVuZGxlUGF0aDogYXJndlsnY2EtYnVuZGxlLXBhdGgnXSBhcyAoc3RyaW5nIHwgdW5kZWZpbmVkKSxcbiAgICByb2xlQXJuOiBhcmd2Wydyb2xlLWFybiddIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIGFsbG93RGVsZXRlRmFpbHVyZXM6IGFyZ3ZbJ2FsbG93LWRlbGV0ZS1mYWlsdXJlcyddIGFzIGJvb2xlYW4sXG4gICAgdXBkYXRlRnJvbVRhZ3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3M6IHN0cmluZ1tdKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQ2xpQXJncyhhcmdzKTtcblxuICAgIC8vIFByb2Nlc3MgdW5zdGFibGUgZmVhdHVyZXMgYW5kIGVtaXQgYXBwcm9wcmlhdGUgd2FybmluZ3NcbiAgICBvcHRpb25zLnVuc3RhYmxlID0gcHJvY2Vzc1Vuc3RhYmxlRmVhdHVyZXMob3B0aW9ucy51bnN0YWJsZSk7XG5cbiAgICBhd2FpdCBydW4ob3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bihvcHRpb25zOiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZUNsaUFyZ3M+KSB7XG4gIC8vIC0tdXBkYXRlLWZyb20tdGFncyBpbXBsaWVzIC0tZm9yY2UgKGFsd2F5cyBkZXBsb3kgYWxsIG1hdGNoZWQgdGVzdHMpXG4gIGlmIChvcHRpb25zLnVwZGF0ZUZyb21UYWdzKSB7XG4gICAgb3B0aW9ucy5mb3JjZSA9IHRydWU7XG4gIH1cblxuICBjb25zdCB0ZXN0c0Zyb21BcmdzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMocGF0aC5yZXNvbHZlKG9wdGlvbnMuZGlyZWN0b3J5KSkuZnJvbUNsaU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gTGlzdCBvbmx5IHByaW50cyB0aGUgZGlzY292ZXJlZCB0ZXN0c1xuICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBvb2wgPSB3b3JrZXJwb29sLnBvb2wocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ2xpYicsICd3b3JrZXJzJywgJ2V4dHJhY3QnLCAnaW5kZXguanMnKSwge1xuICAgIG1heFdvcmtlcnM6IG9wdGlvbnMud2F0Y2ggPyAxIDogb3B0aW9ucy5tYXhXb3JrZXJzLFxuICB9KTtcblxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBmYWlsZWRTbmFwc2hvdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB2YWxpZGF0ZVdhdGNoQXJncyh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0ZXN0UmVnaW9uczogb3B0aW9ucy5vcmlnaW5hbFJlZ2lvbnMsXG4gICAgdGVzdHM6IHRlc3RzRnJvbUFyZ3MsXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFvcHRpb25zLndhdGNoKSB7XG4gICAgICAvLyBhbHdheXMgcnVuIHNuYXBzaG90IHRlc3RzLCBidXQgaWYgJy0tZm9yY2UnIGlzIHBhc3NlZCB0aGVuXG4gICAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgICAgLy8gZmFpbGVkIHNuYXBzaG90IHRlc3RzXG4gICAgICBmYWlsZWRTbmFwc2hvdHMgPSBhd2FpdCBydW5TbmFwc2hvdFRlc3RzKHBvb2wsIHRlc3RzRnJvbUFyZ3MsIHtcbiAgICAgICAgcmV0YWluOiBvcHRpb25zLmluc3BlY3RGYWlsdXJlcyxcbiAgICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IG9wdGlvbnMudGVzdFJlZ2lvbnMsXG4gICAgICAgIHByb2ZpbGVzOiBvcHRpb25zLnByb2ZpbGVzLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6IG9wdGlvbnMudXBkYXRlV29ya2Zsb3csXG4gICAgICAgIHVwZGF0ZUZyb21UYWdzOiBvcHRpb25zLnVwZGF0ZUZyb21UYWdzLFxuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgICAgcHJveHk6IG9wdGlvbnMucHJveHksXG4gICAgICAgIGNhQnVuZGxlUGF0aDogb3B0aW9ucy5jYUJ1bmRsZVBhdGgsXG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgICAgYWxsb3dEZWxldGVGYWlsdXJlczogb3B0aW9ucy5hbGxvd0RlbGV0ZUZhaWx1cmVzLFxuICAgICAgfSk7XG4gICAgICB0ZXN0c1N1Y2NlZWRlZCA9IHN1Y2Nlc3M7XG5cbiAgICAgIGlmIChvcHRpb25zLmNsZWFuID09PSBmYWxzZSkge1xuICAgICAgICBsb2dnZXIud2FybmluZygnTm90IGNsZWFuaW5nIHVwIHN0YWNrcyBzaW5jZSBcIi0tbm8tY2xlYW5cIiB3YXMgdXNlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoQm9vbGVhbihvcHRpb25zLnZlcmJvc2UpKSB7XG4gICAgICAgIHByaW50TWV0cmljcyhtZXRyaWNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU29tZSBpbnRlZ3JhdGlvbiB0ZXN0cyBmYWlsZWQhJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLndhdGNoKSB7XG4gICAgICBhd2FpdCB3YXRjaEludGVncmF0aW9uVGVzdChwb29sLCB7XG4gICAgICAgIHdhdGNoOiB0cnVlLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICAuLi50ZXN0c1RvUnVuWzBdLFxuICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGVzID8gb3B0aW9ucy5wcm9maWxlc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVnaW9uOiBvcHRpb25zLnRlc3RSZWdpb25zWzBdLFxuICAgICAgICBwcm94eTogb3B0aW9ucy5wcm94eSxcbiAgICAgICAgY2FCdW5kbGVQYXRoOiBvcHRpb25zLmNhQnVuZGxlUGF0aCxcbiAgICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHZvaWQgcG9vbC50ZXJtaW5hdGUoKTtcbiAgfVxuXG4gIGlmIChkZXN0cnVjdGl2ZUNoYW5nZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFvcHRpb25zLnJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2F0Y2hBcmdzKGFyZ3M6IHtcbiAgdGVzdHM6IEludGVnVGVzdFtdO1xuICB0ZXN0UmVnaW9ucz86IHN0cmluZ1tdO1xuICBwcm9maWxlcz86IHN0cmluZ1tdO1xuICBtYXhXb3JrZXJzOiBudW1iZXI7XG4gIGZvcmNlOiBib29sZWFuO1xuICBkcnlSdW46IGJvb2xlYW47XG4gIHVwZGF0ZVdvcmtmbG93OiBib29sZWFuO1xuICBydW5VcGRhdGVPbkZhaWxlZDogYm9vbGVhbjtcbiAgd2F0Y2g6IGJvb2xlYW47XG59KSB7XG4gIGlmIChhcmdzLndhdGNoKSB7XG4gICAgaWYgKFxuICAgICAgKGFyZ3MudGVzdFJlZ2lvbnMgJiYgYXJncy50ZXN0UmVnaW9ucy5sZW5ndGggPiAxKVxuICAgICAgICB8fCAoYXJncy5wcm9maWxlcyAmJiBhcmdzLnByb2ZpbGVzLmxlbmd0aCA+IDEpXG4gICAgICAgIHx8IGFyZ3MudGVzdHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW5uaW5nIHdpdGggd2F0Y2ggb25seSBzdXBwb3J0cyBhIHNpbmdsZSB0ZXN0LiBPbmx5IHByb3ZpZGUgYSBzaW5nbGUgb3B0aW9uJytcbiAgICAgICAgJ3RvIGAtLXByb2ZpbGVzYCBgLS1wYXJhbGxlbC1yZWdpb25zYCBgLS1tYXgtd29ya2VycycpO1xuICAgIH1cblxuICAgIGlmIChhcmdzLnJ1blVwZGF0ZU9uRmFpbGVkIHx8IGFyZ3MudXBkYXRlV29ya2Zsb3cgfHwgYXJncy5mb3JjZSB8fCBhcmdzLmRyeVJ1bikge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ2FyZ3MgYC0tdXBkYXRlLW9uLWZhaWxlZGAsIGAtLXVwZGF0ZS13b3JrZmxvd2AsIGAtLWZvcmNlYCwgYC0tZHJ5LXJ1bmAgaGF2ZSBubyBlZmZlY3Qgd2hlbiBydW5uaW5nIHdpdGggYC0td2F0Y2hgJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50RGVzdHJ1Y3RpdmVDaGFuZ2VzKGNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10pOiB2b2lkIHtcbiAgaWYgKGNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgVGhpcyB0ZXN0IGNvbnRhaW5zICVzICEhIScsIGNoYWxrLmJvbGQoJ2Rlc3RydWN0aXZlIGNoYW5nZXMnKSk7XG4gICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICBsb2dnZXIud2FybmluZygnICAgIFN0YWNrOiAlcyAtIFJlc291cmNlOiAlcyAtIEltcGFjdDogJXMnLCBjaGFuZ2Uuc3RhY2tOYW1lLCBjaGFuZ2UubG9naWNhbElkLCBjaGFuZ2UuaW1wYWN0KTtcbiAgICB9KTtcbiAgICBsb2dnZXIud2FybmluZygnISEhIElmIHRoZXNlIGRlc3RydWN0aXZlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeSwgcGxlYXNlIGluZGljYXRlIHRoaXMgb24gdGhlIFBSICEhIScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50TWV0cmljcyhtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSk6IHZvaWQge1xuICBsb2dnZXIuaGlnaGxpZ2h0KCcgICAtLS0gSW50ZWdyYXRpb24gdGVzdCBtZXRyaWNzIC0tLScpO1xuICBjb25zdCBzb3J0ZWRNZXRyaWNzID0gbWV0cmljcy5zb3J0KChhLCBiKSA9PiBhLmR1cmF0aW9uIC0gYi5kdXJhdGlvbik7XG4gIHNvcnRlZE1ldHJpY3MuZm9yRWFjaChtZXRyaWMgPT4ge1xuICAgIGxvZ2dlci5wcmludCgnUHJvZmlsZSAlcyArIFJlZ2lvbiAlcyB0b3RhbCB0aW1lOiAlcycsIG1ldHJpYy5wcm9maWxlLCBtZXRyaWMucmVnaW9uLCBtZXRyaWMuZHVyYXRpb24pO1xuICAgIGNvbnN0IHNvcnRlZFRlc3RzID0gT2JqZWN0LmVudHJpZXMobWV0cmljLnRlc3RzKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgc29ydGVkVGVzdHMuZm9yRWFjaCh0ZXN0ID0+IGxvZ2dlci5wcmludCgnICAlczogJXMnLCB0ZXN0WzBdLCB0ZXN0WzFdKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBhIFlhcmdzIGlucHV0IGFycmF5IHRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZVxuICogbW9kZWwgKHRlbGxpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhYnNlbmNlIGFuZCBhbiBlbXB0eSBhcnJheSlcbiAqXG4gKiAtIEFuIGVtcHR5IGFycmF5IGlzIHRoZSBkZWZhdWx0IGNhc2UsIG1lYW5pbmcgdGhlIHVzZXIgZGlkbid0IHBhc3MgYW55IGFyZ3VtZW50cy4gV2UgcmV0dXJuXG4gKiAgIHVuZGVmaW5lZC5cbiAqIC0gSWYgdGhlIHVzZXIgcGFzc2VkIGEgc2luZ2xlIGVtcHR5IHN0cmluZywgdGhleSBkaWQgc29tZXRoaW5nIGxpa2UgYC0tYXJyYXk9YCwgd2hpY2ggd2UnbGxcbiAqICAgdGFrZSB0byBtZWFuIHRoZXkgcGFzc2VkIGFuIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZyb21ZYXJncyh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICh4cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIG1haW4oYXJncykudGhlbigpLmNhdGNoKCgpID0+IHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZCBDTEkgb3B0aW9ucyBmcm9tIGEgY29uZmlnIGZpbGUgaWYgcHJvdmlkZWQuXG4gKlxuICogQHJldHVybnMgcGFyc2VkIENMSSBjb25maWcgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBjb25maWdGcm9tRmlsZShmaWxlTmFtZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBDb2VyY2UgZnVuY3Rpb24gZm9yIHlhcmdzIGFycmF5IG9wdGlvbnMgdG8gc3VwcG9ydCBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzLlxuICogWWFyZ3MgZG9lc24ndCBuYXRpdmVseSBzcGxpdCBgLS1vcHRpb249YSxiLGNgIGludG8gWydhJywgJ2InLCAnYyddLlxuICovXG5mdW5jdGlvbiBzcGxpdEJ5Q29tbWEoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4geHMuZmxhdE1hcCh4ID0+IHguc3BsaXQoJywnKSkubWFwKHggPT4geC50cmltKCkpO1xufVxuIl19
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLG9DQXVIQztBQUVELG9CQVlDO0FBZ01ELGtCQUlDO0FBM1ZELGdGQUFnRjtBQUNoRix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUEwQjtBQUMxQix1REFBeUM7QUFDekMsaURBQW1DO0FBRW5DLGtFQUE4RDtBQUM5RCwyREFBNEY7QUFFNUYsdUNBQWtFO0FBQ2xFLHFFQUFvRTtBQUVwRSw2Q0FBNkM7QUFDN0MsK0NBQStDO0FBQy9DLGlFQUFpRTtBQUNqRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0IsU0FBZ0IsWUFBWSxDQUFDLE9BQWlCLEVBQUU7SUFDOUMsTUFBTSxJQUFJLEdBQUcsS0FBSztTQUNmLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztTQUN0QyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxJQUFJO1FBQ1osWUFBWSxFQUFFLGNBQWM7UUFDNUIsT0FBTyxFQUFFLG1CQUFtQjtRQUM1QixJQUFJLEVBQUUseUZBQXlGO0tBQ2hHLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO1NBQy9GLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsOEVBQThFLEVBQUUsQ0FBQztTQUN6SSxNQUFNLENBQUMsU0FB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdCwgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IEludGVncmF0aW9uVGVzdHMgfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBwcm9jZXNzVW5zdGFibGVGZWF0dXJlcywgYXZhaWxhYmxlRmVhdHVyZXNEZXNjcmlwdGlvbiB9IGZyb20gJy4vdW5zdGFibGUtZmVhdHVyZXMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyB3YXRjaEludGVncmF0aW9uVGVzdCB9IGZyb20gJy4vd29ya2Vycy9pbnRlZy13YXRjaC13b3JrZXInO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzE5Mjlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL2lzc3Vlcy8xNDkyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgeWFyZ3MgPSByZXF1aXJlKCd5YXJncycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGlBcmdzKGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignY29uZmlnJywge1xuICAgICAgY29uZmlnOiB0cnVlLFxuICAgICAgY29uZmlnUGFyc2VyOiBjb25maWdGcm9tRmlsZSxcbiAgICAgIGRlZmF1bHQ6ICdpbnRlZy5jb25maWcuanNvbicsXG4gICAgICBkZXNjOiAnTG9hZCBvcHRpb25zIGZyb20gYSBKU09OIGNvbmZpZyBmaWxlLiBPcHRpb25zIHByb3ZpZGVkIGFzIENMSSBhcmd1bWVudHMgdGFrZSBwcmVjZWRlbnQuJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ3dhdGNoJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnUGVyZm9ybSBpbnRlZyB0ZXN0cyBpbiB3YXRjaCBtb2RlJyB9KVxuICAgIC5vcHRpb24oJ2xpc3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdMaXN0IHRlc3RzIGluc3RlYWQgb2YgcnVubmluZyB0aGVtJyB9KVxuICAgIC5vcHRpb24oJ2NsZWFuJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHRydWUsIGRlc2M6ICdDbGVhbiB1cCBhbmQgZGVsZXRlIHN0YWNrIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSwgY29lcmNlOiBzcGxpdEJ5Q29tbWEgfSlcbiAgICAub3B0aW9ucygnZGlyZWN0b3J5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogJ3Rlc3QnLCBkZXNjOiAnc3RhcnRpbmcgZGlyZWN0b3J5IHRvIGRpc2NvdmVyIGludGVncmF0aW9uIHRlc3RzLiBUZXN0cyB3aWxsIGJlIGRpc2NvdmVyZWQgcmVjdXJzaXZlbHkgZnJvbSB0aGlzIGRpcmVjdG9yeScgfSlcbiAgICAub3B0aW9ucygncHJvZmlsZXMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdsaXN0IG9mIEFXUyBwcm9maWxlcyB0byB1c2UuIFRlc3RzIHdpbGwgYmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyBlYWNoIHByb2ZpbGUrcmVnaW9ucycsIGRlZmF1bHQ6IFtdLCBjb2VyY2U6IHNwbGl0QnlDb21tYSB9KVxuICAgIC5vcHRpb25zKCdtYXgtd29ya2VycycsIHsgdHlwZTogJ251bWJlcicsIGRlc2M6ICdUaGUgbWF4IG51bWJlciBvZiB3b3JrZXJwb29sIHdvcmtlcnMgdG8gdXNlIHdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbCcsIGRlZmF1bHQ6IDE2IH0pXG4gICAgLm9wdGlvbnMoJ2V4Y2x1ZGUnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ1J1biBhbGwgdGVzdHMgaW4gdGhlIGRpcmVjdG9yeSwgZXhjZXB0IHRoZSBzcGVjaWZpZWQgVEVTVHMnLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ3N0cmljdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0ZhaWwgaWYgYW55IHNwZWNpZmllZCB0ZXN0cyBhcmUgbm90IGZvdW5kJyB9KVxuICAgIC5vcHRpb25zKCdmcm9tLWZpbGUnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnUmVhZCBURVNUIG5hbWVzIGZyb20gYSBmaWxlIChvbmUgVEVTVCBwZXIgbGluZSknIH0pXG4gICAgLm9wdGlvbignaW5zcGVjdC1mYWlsdXJlcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnS2VlcCB0aGUgaW50ZWcgdGVzdCBjbG91ZCBhc3NlbWJseSBpZiBhIGZhaWx1cmUgb2NjdXJzIGZvciBpbnNwZWN0aW9uJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdERVBSRUNBVEVELCB1c2UgLS1bbm9dLXVwZGF0ZS13b3JrZmxvdyBpbnN0ZWFkJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdEZXBsb3lzIHRoZSBjb21taXR0ZWQgc25hcHNob3QgYmVmb3JlIHRoZSB1cGRhdGVkIGFwcGxpY2F0aW9uLiBPbmx5IHdvcmtzIGlmIHNuYXBzaG90cyBhcmUgcmVnaW9uLWFnbm9zdGljLicgfSlcbiAgICAub3B0aW9uKCdsYW5ndWFnZScsIHtcbiAgICAgIGFsaWFzOiAnbCcsXG4gICAgICBkZWZhdWx0OiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCcsICdweXRob24nLCAnZ28nXSxcbiAgICAgIGNob2ljZXM6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIG5hcmdzOiAxLFxuICAgICAgZGVzYzogJ1VzZSB0aGVzZSBwcmVzZXRzIHRvIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGxhbmd1YWdlcycsXG4gICAgfSlcbiAgICAub3B0aW9uKCdhcHAnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiB1bmRlZmluZWQsIGRlc2M6ICdUaGUgY3VzdG9tIENMSSBjb21tYW5kIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgdGVzdCBmaWxlcy4gWW91IGNhbiBpbmNsdWRlIHtmaWxlUGF0aH0gdG8gc3BlY2lmeSB3aGVyZSBpbiB0aGUgY29tbWFuZCB0aGUgdGVzdCBmaWxlIHBhdGggc2hvdWxkIGJlIGluc2VydGVkLiBFeGFtcGxlOiAtLWFwcD1cInB5dGhvbjMuOCB7ZmlsZVBhdGh9XCIuJyB9KVxuICAgIC5vcHRpb24oJ3Rlc3QtcmVnZXgnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdEZXRlY3QgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBtYXRjaGluZyB0aGlzIEphdmFTY3JpcHQgcmVnZXggcGF0dGVybi4gSWYgdXNlZCBtdWx0aXBsZSB0aW1lcywgYWxsIGZpbGVzIG1hdGNoaW5nIGFueSBvbmUgb2YgdGhlIHBhdHRlcm5zIGFyZSBkZXRlY3RlZC4nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb24oJ3Byb3h5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1VzZSB0aGUgaW5kaWNhdGVkIHByb3h5LiBXaWxsIHJlYWQgZnJvbSBIVFRQU19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBub3Qgc3BlY2lmaWVkJywgcmVxdWlyZXNBcmc6IHRydWUgfSlcbiAgICAub3B0aW9uKCdjYS1idW5kbGUtcGF0aCcsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdQYXRoIHRvIENBIGNlcnRpZmljYXRlIHRvIHVzZSB3aGVuIHZhbGlkYXRpbmcgSFRUUFMgcmVxdWVzdHMuIFdpbGwgcmVhZCBmcm9tIEFXU19DQV9CVU5ETEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgbm90IHNwZWNpZmllZCcsIHJlcXVpcmVzQXJnOiB0cnVlIH0pXG4gICAgLm9wdGlvbigndW5zdGFibGUnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6IGBPcHQtaW4gdG8gdXNpbmcgdW5zdGFibGUgZmVhdHVyZXMuIEJ5IHVzaW5nIHRoZXNlIGZsYWdzIHlvdSBhY2tub3dsZWRnZSB0aGF0IHNjb3BlIGFuZCBBUEkgb2YgdW5zdGFibGUgZmVhdHVyZXMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gU3BlY2lmeSBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCB1bnN0YWJsZSBmZWF0dXJlIHlvdSB3YW50IHRvIG9wdC1pbiB0by4gJHthdmFpbGFibGVGZWF0dXJlc0Rlc2NyaXB0aW9uKCl9YCwgbmFyZ3M6IDEsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbigncm9sZS1hcm4nLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnQVJOIG9mIHRoZSBJQU0gcm9sZSBmb3IgQ2xvdWRGb3JtYXRpb24gdG8gYXNzdW1lIGR1cmluZyBkZXBsb3kvZGVzdHJveScsIHJlcXVpcmVzQXJnOiB0cnVlIH0pXG4gICAgLm9wdGlvbignYWxsb3ctZGVsZXRlLWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnRG8gbm90IGZhaWwgdGhlIHRlc3Qgd2hlbiByZXNvdXJjZXMgZmFpbCB0byBkZWxldGUgZHVyaW5nIGEgc3RhY2sgdXBkYXRlJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1mcm9tLXRhZ3MnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnRGVwbG95IHNuYXBzaG90cyBmcm9tIHRoZSBnaXZlbiBnaXQgdGFncyBpbiBzZXF1ZW5jZSBiZWZvcmUgZGVwbG95aW5nIHRoZSBjdXJyZW50IGNvZGUuIEltcGxpZXMgLS1mb3JjZS4gT25seSB3b3JrcyBpZiBzbmFwc2hvdHMgYXJlIHJlZ2lvbi1hZ25vc3RpYy4nLCByZXF1aXJlc0FyZzogdHJ1ZSB9KVxuICAgIC5zdHJpY3QoKVxuICAgIC5wYXJzZShhcmdzKTtcblxuICBjb25zdCB0ZXN0czogc3RyaW5nW10gPSBhcmd2Ll87XG4gIGNvbnN0IHBhcmFsbGVsUmVnaW9ucyA9IGFycmF5RnJvbVlhcmdzKGFyZ3ZbJ3BhcmFsbGVsLXJlZ2lvbnMnXSk7XG4gIGNvbnN0IHRlc3RSZWdpb25zOiBzdHJpbmdbXSA9IHBhcmFsbGVsUmVnaW9ucyA/PyBbJ3VzLWVhc3QtMScsICd1cy1lYXN0LTInLCAndXMtd2VzdC0yJ107XG4gIGNvbnN0IHByb2ZpbGVzID0gYXJyYXlGcm9tWWFyZ3MoYXJndi5wcm9maWxlcyk7XG4gIGNvbnN0IGZyb21GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhcmd2Wydmcm9tLWZpbGUnXTtcbiAgY29uc3QgbWF4V29ya2VyczogbnVtYmVyID0gYXJndlsnbWF4LXdvcmtlcnMnXTtcbiAgY29uc3QgdmVyYm9zaXR5OiBudW1iZXIgPSBhcmd2LnZlcmJvc2U7XG4gIGNvbnN0IHZlcmJvc2U6IGJvb2xlYW4gPSB2ZXJib3NpdHkgPj0gMTtcblxuICBjb25zdCBudW1UZXN0cyA9IHRlc3RSZWdpb25zLmxlbmd0aCAqIChwcm9maWxlcyA/PyBbMV0pLmxlbmd0aDtcbiAgaWYgKG1heFdvcmtlcnMgPCBudW1UZXN0cykge1xuICAgIGxvZ2dlci53YXJuaW5nKCdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuICVzIHRlc3RzIGluIHBhcmFsbGVsLCBidXQgb25seSBoYXZlICVzIHdvcmtlcnMuIE5vdCBhbGwgb2YgeW91ciBwcm9maWxlcytyZWdpb25zIHdpbGwgYmUgdXRpbGl6ZWQnLCBudW1UZXN0cywgbWF4V29ya2Vycyk7XG4gIH1cblxuICBpZiAodGVzdHMubGVuZ3RoID4gMCAmJiBmcm9tRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBsaXN0IG9mIHRlc3RzIGNhbm5vdCBiZSBwcm92aWRlZCBpZiBcIi0tZnJvbS1maWxlXCIgaXMgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGlmIChhcmd2LnN0cmljdCAmJiBhcmd2LmV4Y2x1ZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgLS1zdHJpY3Qgd2l0aCAtLWV4Y2x1ZGUnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICA/IChmcy5yZWFkRmlsZVN5bmMoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSlcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5maWx0ZXIoeCA9PiB4KVxuICAgICAgLmZpbHRlcih4ID0+ICF4LnN0YXJ0c1dpdGgoJyMnKSlcbiAgICA6ICh0ZXN0cy5sZW5ndGggPiAwID8gdGVzdHMgOiB1bmRlZmluZWQpOyAvLyAndW5kZWZpbmVkJyBtZWFucyBubyByZXF1ZXN0XG5cbiAgaWYgKGFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10gIT09IHVuZGVmaW5lZCAmJiBhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLWRpc2FibGUtdXBkYXRlLXdvcmtmbG93IGFuZCAtLVtuby1ddXBkYXRlLXdvcmtmbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gIH1cblxuICAvLyBObyB1cGRhdGUgd29ya2Zsb3cgYnkgZGVmYXVsdFxuICBsZXQgdXBkYXRlV29ya2Zsb3cgPSBhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSAhPT0gdW5kZWZpbmVkID8gISFhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSA6IGZhbHNlO1xuXG4gIGNvbnN0IHVwZGF0ZUZyb21UYWdzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ3VwZGF0ZS1mcm9tLXRhZ3MnXVxuICAgID8gYXJndlsndXBkYXRlLWZyb20tdGFncyddLnNwbGl0KCcsJykubWFwKCh0OiBzdHJpbmcpID0+IHQudHJpbSgpKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmICh1cGRhdGVGcm9tVGFncyAmJiBhcmd2Wyd1cGRhdGUtd29ya2Zsb3cnXSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tdXBkYXRlLWZyb20tdGFncyBhbmQgLS1uby11cGRhdGUtd29ya2Zsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGVzdHM6IHJlcXVlc3RlZFRlc3RzLFxuICAgIGFwcDogYXJndi5hcHAgYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgdGVzdFJlZ2V4OiBhcnJheUZyb21ZYXJncyhhcmd2Wyd0ZXN0LXJlZ2V4J10pLFxuICAgIHRlc3RSZWdpb25zLFxuICAgIG9yaWdpbmFsUmVnaW9uczogcGFyYWxsZWxSZWdpb25zLFxuICAgIHByb2ZpbGVzLFxuICAgIHJ1blVwZGF0ZU9uRmFpbGVkOiAoYXJndlsndXBkYXRlLW9uLWZhaWxlZCddID8/IGZhbHNlKSBhcyBib29sZWFuLFxuICAgIGZyb21GaWxlLFxuICAgIGV4Y2x1ZGU6IGFyZ3YuZXhjbHVkZSBhcyBib29sZWFuLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbGlzdDogYXJndi5saXN0IGFzIGJvb2xlYW4sXG4gICAgZGlyZWN0b3J5OiBhcmd2LmRpcmVjdG9yeSBhcyBzdHJpbmcsXG4gICAgaW5zcGVjdEZhaWx1cmVzOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10gYXMgYm9vbGVhbixcbiAgICB2ZXJib3NpdHksXG4gICAgdmVyYm9zZSxcbiAgICBjbGVhbjogYXJndi5jbGVhbiBhcyBib29sZWFuLFxuICAgIGZvcmNlOiBhcmd2LmZvcmNlIGFzIGJvb2xlYW4sXG4gICAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10gYXMgYm9vbGVhbixcbiAgICB1cGRhdGVXb3JrZmxvdyxcbiAgICBsYW5ndWFnZTogYXJyYXlGcm9tWWFyZ3MoYXJndi5sYW5ndWFnZSksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggYXMgYm9vbGVhbixcbiAgICBzdHJpY3Q6IGFyZ3Yuc3RyaWN0IGFzIGJvb2xlYW4sXG4gICAgdW5zdGFibGU6IGFycmF5RnJvbVlhcmdzKGFyZ3YudW5zdGFibGUpID8/IFtdLFxuICAgIHByb3h5OiBhcmd2LnByb3h5IGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIGNhQnVuZGxlUGF0aDogYXJndlsnY2EtYnVuZGxlLXBhdGgnXSBhcyAoc3RyaW5nIHwgdW5kZWZpbmVkKSxcbiAgICByb2xlQXJuOiBhcmd2Wydyb2xlLWFybiddIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIGFsbG93RGVsZXRlRmFpbHVyZXM6IGFyZ3ZbJ2FsbG93LWRlbGV0ZS1mYWlsdXJlcyddIGFzIGJvb2xlYW4sXG4gICAgdXBkYXRlRnJvbVRhZ3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3M6IHN0cmluZ1tdKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQ2xpQXJncyhhcmdzKTtcblxuICAgIC8vIFByb2Nlc3MgdW5zdGFibGUgZmVhdHVyZXMgYW5kIGVtaXQgYXBwcm9wcmlhdGUgd2FybmluZ3NcbiAgICBvcHRpb25zLnVuc3RhYmxlID0gcHJvY2Vzc1Vuc3RhYmxlRmVhdHVyZXMob3B0aW9ucy51bnN0YWJsZSk7XG5cbiAgICBhd2FpdCBydW4ob3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bihvcHRpb25zOiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZUNsaUFyZ3M+KSB7XG4gIC8vIC0tdXBkYXRlLWZyb20tdGFncyBpbXBsaWVzIC0tZm9yY2UgKGFsd2F5cyBkZXBsb3kgYWxsIG1hdGNoZWQgdGVzdHMpXG4gIGlmIChvcHRpb25zLnVwZGF0ZUZyb21UYWdzKSB7XG4gICAgb3B0aW9ucy5mb3JjZSA9IHRydWU7XG4gIH1cblxuICBjb25zdCB0ZXN0c0Zyb21BcmdzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMocGF0aC5yZXNvbHZlKG9wdGlvbnMuZGlyZWN0b3J5KSkuZnJvbUNsaU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gTGlzdCBvbmx5IHByaW50cyB0aGUgZGlzY292ZXJlZCB0ZXN0c1xuICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBvb2wgPSB3b3JrZXJwb29sLnBvb2wocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ2xpYicsICd3b3JrZXJzJywgJ2V4dHJhY3QnLCAnaW5kZXguanMnKSwge1xuICAgIG1heFdvcmtlcnM6IG9wdGlvbnMud2F0Y2ggPyAxIDogb3B0aW9ucy5tYXhXb3JrZXJzLFxuICB9KTtcblxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBmYWlsZWRTbmFwc2hvdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB2YWxpZGF0ZVdhdGNoQXJncyh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0ZXN0UmVnaW9uczogb3B0aW9ucy5vcmlnaW5hbFJlZ2lvbnMsXG4gICAgdGVzdHM6IHRlc3RzRnJvbUFyZ3MsXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFvcHRpb25zLndhdGNoKSB7XG4gICAgICAvLyBhbHdheXMgcnVuIHNuYXBzaG90IHRlc3RzLCBidXQgaWYgJy0tZm9yY2UnIGlzIHBhc3NlZCB0aGVuXG4gICAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgICAgLy8gZmFpbGVkIHNuYXBzaG90IHRlc3RzXG4gICAgICBmYWlsZWRTbmFwc2hvdHMgPSBhd2FpdCBydW5TbmFwc2hvdFRlc3RzKHBvb2wsIHRlc3RzRnJvbUFyZ3MsIHtcbiAgICAgICAgcmV0YWluOiBvcHRpb25zLmluc3BlY3RGYWlsdXJlcyxcbiAgICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IG9wdGlvbnMudGVzdFJlZ2lvbnMsXG4gICAgICAgIHByb2ZpbGVzOiBvcHRpb25zLnByb2ZpbGVzLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6IG9wdGlvbnMudXBkYXRlV29ya2Zsb3csXG4gICAgICAgIHVwZGF0ZUZyb21UYWdzOiBvcHRpb25zLnVwZGF0ZUZyb21UYWdzLFxuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgICAgcHJveHk6IG9wdGlvbnMucHJveHksXG4gICAgICAgIGNhQnVuZGxlUGF0aDogb3B0aW9ucy5jYUJ1bmRsZVBhdGgsXG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgICAgYWxsb3dEZWxldGVGYWlsdXJlczogb3B0aW9ucy5hbGxvd0RlbGV0ZUZhaWx1cmVzLFxuICAgICAgfSk7XG4gICAgICB0ZXN0c1N1Y2NlZWRlZCA9IHN1Y2Nlc3M7XG5cbiAgICAgIGlmIChvcHRpb25zLmNsZWFuID09PSBmYWxzZSkge1xuICAgICAgICBsb2dnZXIud2FybmluZygnTm90IGNsZWFuaW5nIHVwIHN0YWNrcyBzaW5jZSBcIi0tbm8tY2xlYW5cIiB3YXMgdXNlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoQm9vbGVhbihvcHRpb25zLnZlcmJvc2UpKSB7XG4gICAgICAgIHByaW50TWV0cmljcyhtZXRyaWNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU29tZSBpbnRlZ3JhdGlvbiB0ZXN0cyBmYWlsZWQhJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLndhdGNoKSB7XG4gICAgICBhd2FpdCB3YXRjaEludGVncmF0aW9uVGVzdChwb29sLCB7XG4gICAgICAgIHdhdGNoOiB0cnVlLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICAuLi50ZXN0c1RvUnVuWzBdLFxuICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGVzID8gb3B0aW9ucy5wcm9maWxlc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVnaW9uOiBvcHRpb25zLnRlc3RSZWdpb25zWzBdLFxuICAgICAgICBwcm94eTogb3B0aW9ucy5wcm94eSxcbiAgICAgICAgY2FCdW5kbGVQYXRoOiBvcHRpb25zLmNhQnVuZGxlUGF0aCxcbiAgICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHZvaWQgcG9vbC50ZXJtaW5hdGUoKTtcbiAgfVxuXG4gIGlmIChkZXN0cnVjdGl2ZUNoYW5nZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFvcHRpb25zLnJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2F0Y2hBcmdzKGFyZ3M6IHtcbiAgdGVzdHM6IEludGVnVGVzdFtdO1xuICB0ZXN0UmVnaW9ucz86IHN0cmluZ1tdO1xuICBwcm9maWxlcz86IHN0cmluZ1tdO1xuICBtYXhXb3JrZXJzOiBudW1iZXI7XG4gIGZvcmNlOiBib29sZWFuO1xuICBkcnlSdW46IGJvb2xlYW47XG4gIHVwZGF0ZVdvcmtmbG93OiBib29sZWFuO1xuICBydW5VcGRhdGVPbkZhaWxlZDogYm9vbGVhbjtcbiAgd2F0Y2g6IGJvb2xlYW47XG59KSB7XG4gIGlmIChhcmdzLndhdGNoKSB7XG4gICAgaWYgKFxuICAgICAgKGFyZ3MudGVzdFJlZ2lvbnMgJiYgYXJncy50ZXN0UmVnaW9ucy5sZW5ndGggPiAxKVxuICAgICAgICB8fCAoYXJncy5wcm9maWxlcyAmJiBhcmdzLnByb2ZpbGVzLmxlbmd0aCA+IDEpXG4gICAgICAgIHx8IGFyZ3MudGVzdHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW5uaW5nIHdpdGggd2F0Y2ggb25seSBzdXBwb3J0cyBhIHNpbmdsZSB0ZXN0LiBPbmx5IHByb3ZpZGUgYSBzaW5nbGUgb3B0aW9uJytcbiAgICAgICAgJ3RvIGAtLXByb2ZpbGVzYCBgLS1wYXJhbGxlbC1yZWdpb25zYCBgLS1tYXgtd29ya2VycycpO1xuICAgIH1cblxuICAgIGlmIChhcmdzLnJ1blVwZGF0ZU9uRmFpbGVkIHx8IGFyZ3MudXBkYXRlV29ya2Zsb3cgfHwgYXJncy5mb3JjZSB8fCBhcmdzLmRyeVJ1bikge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ2FyZ3MgYC0tdXBkYXRlLW9uLWZhaWxlZGAsIGAtLXVwZGF0ZS13b3JrZmxvd2AsIGAtLWZvcmNlYCwgYC0tZHJ5LXJ1bmAgaGF2ZSBubyBlZmZlY3Qgd2hlbiBydW5uaW5nIHdpdGggYC0td2F0Y2hgJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50RGVzdHJ1Y3RpdmVDaGFuZ2VzKGNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10pOiB2b2lkIHtcbiAgaWYgKGNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgVGhpcyB0ZXN0IGNvbnRhaW5zICVzICEhIScsIGNoYWxrLmJvbGQoJ2Rlc3RydWN0aXZlIGNoYW5nZXMnKSk7XG4gICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICBsb2dnZXIud2FybmluZygnICAgIFN0YWNrOiAlcyAtIFJlc291cmNlOiAlcyAtIEltcGFjdDogJXMnLCBjaGFuZ2Uuc3RhY2tOYW1lLCBjaGFuZ2UubG9naWNhbElkLCBjaGFuZ2UuaW1wYWN0KTtcbiAgICB9KTtcbiAgICBsb2dnZXIud2FybmluZygnISEhIElmIHRoZXNlIGRlc3RydWN0aXZlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeSwgcGxlYXNlIGluZGljYXRlIHRoaXMgb24gdGhlIFBSICEhIScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50TWV0cmljcyhtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSk6IHZvaWQge1xuICBsb2dnZXIuaGlnaGxpZ2h0KCcgICAtLS0gSW50ZWdyYXRpb24gdGVzdCBtZXRyaWNzIC0tLScpO1xuICBjb25zdCBzb3J0ZWRNZXRyaWNzID0gbWV0cmljcy5zb3J0KChhLCBiKSA9PiBhLmR1cmF0aW9uIC0gYi5kdXJhdGlvbik7XG4gIHNvcnRlZE1ldHJpY3MuZm9yRWFjaChtZXRyaWMgPT4ge1xuICAgIGxvZ2dlci5wcmludCgnUHJvZmlsZSAlcyArIFJlZ2lvbiAlcyB0b3RhbCB0aW1lOiAlcycsIG1ldHJpYy5wcm9maWxlLCBtZXRyaWMucmVnaW9uLCBtZXRyaWMuZHVyYXRpb24pO1xuICAgIGNvbnN0IHNvcnRlZFRlc3RzID0gT2JqZWN0LmVudHJpZXMobWV0cmljLnRlc3RzKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgc29ydGVkVGVzdHMuZm9yRWFjaCh0ZXN0ID0+IGxvZ2dlci5wcmludCgnICAlczogJXMnLCB0ZXN0WzBdLCB0ZXN0WzFdKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBhIFlhcmdzIGlucHV0IGFycmF5IHRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZVxuICogbW9kZWwgKHRlbGxpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhYnNlbmNlIGFuZCBhbiBlbXB0eSBhcnJheSlcbiAqXG4gKiAtIEFuIGVtcHR5IGFycmF5IGlzIHRoZSBkZWZhdWx0IGNhc2UsIG1lYW5pbmcgdGhlIHVzZXIgZGlkbid0IHBhc3MgYW55IGFyZ3VtZW50cy4gV2UgcmV0dXJuXG4gKiAgIHVuZGVmaW5lZC5cbiAqIC0gSWYgdGhlIHVzZXIgcGFzc2VkIGEgc2luZ2xlIGVtcHR5IHN0cmluZywgdGhleSBkaWQgc29tZXRoaW5nIGxpa2UgYC0tYXJyYXk9YCwgd2hpY2ggd2UnbGxcbiAqICAgdGFrZSB0byBtZWFuIHRoZXkgcGFzc2VkIGFuIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZyb21ZYXJncyh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICh4cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIG1haW4oYXJncykudGhlbigpLmNhdGNoKCgpID0+IHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZCBDTEkgb3B0aW9ucyBmcm9tIGEgY29uZmlnIGZpbGUgaWYgcHJvdmlkZWQuXG4gKlxuICogQHJldHVybnMgcGFyc2VkIENMSSBjb25maWcgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBjb25maWdGcm9tRmlsZShmaWxlTmFtZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBDb2VyY2UgZnVuY3Rpb24gZm9yIHlhcmdzIGFycmF5IG9wdGlvbnMgdG8gc3VwcG9ydCBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzLlxuICogWWFyZ3MgZG9lc24ndCBuYXRpdmVseSBzcGxpdCBgLS1vcHRpb249YSxiLGNgIGludG8gWydhJywgJ2InLCAnYyddLlxuICovXG5mdW5jdGlvbiBzcGxpdEJ5Q29tbWEoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4geHMuZmxhdE1hcCh4ID0+IHguc3BsaXQoJywnKSkubWFwKHggPT4geC50cmltKCkpO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkit-lib.d.ts","sourceRoot":"","sources":["toolkit-lib.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAa,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG7J,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"toolkit-lib.d.ts","sourceRoot":"","sources":["toolkit-lib.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAa,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG7J,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,IAAI;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;gBAExC,OAAO,EAAE,uBAAuB;IAyBnD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACU,KAAK,CAAC,OAAO,EAAE,YAAY;IAkCxC;;OAEG;IACU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU1D;;OAEG;IACU,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAiBrE;;OAEG;IACU,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW;IA0B9D;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,cAAc;IAU5C;;OAEG;YACW,EAAE;IA8ChB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,cAAc;CA4B7B"}
|
|
@@ -225,7 +225,7 @@ class ToolkitLibRunnerEngine {
|
|
|
225
225
|
deploymentMethod: {
|
|
226
226
|
method: 'change-set',
|
|
227
227
|
},
|
|
228
|
-
outputsFile: options.outputsFile ? path.
|
|
228
|
+
outputsFile: options.outputsFile ? path.resolve(this.options.workingDirectory, options.outputsFile) : undefined,
|
|
229
229
|
});
|
|
230
230
|
return {
|
|
231
231
|
deleteFailures: result.stacks.flatMap(s => s.deleteFailures),
|
|
@@ -274,17 +274,9 @@ class ToolkitLibRunnerEngine {
|
|
|
274
274
|
* Creates a Cloud Assembly Source from the provided options.
|
|
275
275
|
*/
|
|
276
276
|
async cx(options) {
|
|
277
|
-
if (!options.app) {
|
|
278
|
-
throw new Error('No app provided');
|
|
279
|
-
}
|
|
280
|
-
// check if the app is a path to existing snapshot and then use it as an assembly directory
|
|
281
|
-
const potentialCxPath = path.join(this.options.workingDirectory, options.app);
|
|
282
|
-
if (fs.pathExistsSync(potentialCxPath) && fs.statSync(potentialCxPath).isDirectory()) {
|
|
283
|
-
return this.toolkit.fromAssemblyDirectory(potentialCxPath);
|
|
284
|
-
}
|
|
285
277
|
let outdir;
|
|
286
278
|
if (options.output) {
|
|
287
|
-
outdir = path.
|
|
279
|
+
outdir = path.resolve(this.options.workingDirectory, options.output);
|
|
288
280
|
}
|
|
289
281
|
// If the target directory already exists, we assume it's a pre-synthesized assembly and use it directly.
|
|
290
282
|
// This helps a lot with speed if we run `cdk list` on previously synth'ed directory, which happens
|
|
@@ -295,6 +287,14 @@ class ToolkitLibRunnerEngine {
|
|
|
295
287
|
if (outdir && fs.pathExistsSync(outdir) && fs.statSync(outdir).isDirectory()) {
|
|
296
288
|
return this.toolkit.fromAssemblyDirectory(outdir);
|
|
297
289
|
}
|
|
290
|
+
if (!options.app) {
|
|
291
|
+
throw new Error('No app provided');
|
|
292
|
+
}
|
|
293
|
+
// check if the app is a path to existing snapshot and then use it as an assembly directory
|
|
294
|
+
const potentialCxPath = path.join(this.options.workingDirectory, options.app);
|
|
295
|
+
if (fs.pathExistsSync(potentialCxPath) && fs.statSync(potentialCxPath).isDirectory()) {
|
|
296
|
+
return this.toolkit.fromAssemblyDirectory(potentialCxPath);
|
|
297
|
+
}
|
|
298
298
|
return this.toolkit.fromCdkApp(options.app, {
|
|
299
299
|
workingDirectory: this.options.workingDirectory,
|
|
300
300
|
outdir,
|
|
@@ -413,4 +413,4 @@ class NoopIoHost {
|
|
|
413
413
|
return msg.defaultResponse;
|
|
414
414
|
}
|
|
415
415
|
}
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLG9FQUE2RDtBQUc3RCxzREFBbUo7QUFDbkosa0RBQTBCO0FBQzFCLDZDQUErQjtBQUUvQiwrQ0FBbUQ7QUF1RW5EOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDaEIsT0FBTyxDQUFVO0lBQ2pCLE9BQU8sQ0FBMEI7SUFDakMsVUFBVSxDQUFVO0lBQ3BCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBRTNELFlBQW1CLE9BQWdDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFFOUMsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRXpDLG9FQUFvRTtRQUNwRSx1REFBdUQ7UUFDdkQsdUNBQXVDO1FBQ3ZDLEVBQUU7UUFDRixjQUFjO1FBQ2QsK0RBQStEO1FBQy9ELFVBQVU7UUFDVixtQkFBbUI7UUFFbkIsd0ZBQXdGO1FBQ3hGLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsa0JBQWtCO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsYUFBNkI7UUFDdEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9B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QUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaFNELHdEQWdTQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxpQkFBa0IsU0FBUSxrQ0FBb0I7SUFDbEQsWUFBbUIsUUFBbUMsRUFBRTtRQUN0RCxLQUFLLENBQUM7WUFDSixHQUFHLEtBQUs7WUFDUixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQXVCO1FBQ3pDLElBQUksS0FBSyxDQUFDO1FBQ1YsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUFFLEtBQUssR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDO2dCQUFDLE1BQU07WUFDdkMsS0FBSyxNQUFNO2dCQUFFLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO2dCQUFDLE1BQU07WUFDekMsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxJQUFJLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixHQUFHLEdBQUc7WUFDTixPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVU7SUFDUCxLQUFLLENBQUMsTUFBTTtJQUNuQixDQUFDO0lBQ00sS0FBSyxDQUFDLGVBQWUsQ0FBSSxHQUEwQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgVU5LTk9XTl9SRUdJT04gfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0Q2RrT3B0aW9ucyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYS9saWIvaW50ZWctdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgSUlvSG9zdCwgSW9NZXNzYWdlLCBJb1JlcXVlc3QsIElSZWFkYWJsZUNsb3VkQXNzZW1ibHksIE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMsIFN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBCYXNlQ3JlZGVudGlhbHMsIEV4cGFuZFN0YWNrU2VsZWN0aW9uLCBNZW1vcnlDb250ZXh0LCBOb25JbnRlcmFjdGl2ZUlvSG9zdCwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IENka0RlcGxveVJlc3VsdCwgQ3hPcHRpb25zLCBEZXBsb3lPcHRpb25zLCBEZXN0cm95T3B0aW9ucywgSUNkaywgTGlzdE9wdGlvbnMsIFN5bnRoT3B0aW9ucywgV2F0Y2hFdmVudHMsIFdhdGNoT3B0aW9ucyB9IGZyb20gJy4vY2RrLWludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm94eUFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3Byb3h5LWFnZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0TGliRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIHJ1biB0aGUgY2RrIGNvbW1hbmRzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqIGluIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHJ1bm5pbmdcbiAgICogdGhlIGNkayBhcHBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd091dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIENESyBhcHAgc2hvdWxkIHN5bnRoZXNpemUgaXRzZWxmIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2Ugd2hlbiBhdXRoZW50aWNhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb2ZpbGUgaXMgcGFzc2VkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJveHksIFByb3h5QWdlbnQgYXV0by1kZXRlY3RzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTIHJlcXVlc3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBDQSBidW5kbGVcbiAgICovXG4gIHJlYWRvbmx5IGNhQnVuZGxlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItYWN0aW9uIG9wdGlvbnMgdGhhdCBjYW4gb3ZlcnJpZGUgdGhlIGVuZ2luZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTIHJlcXVlc3RzXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBydW5uZXIgZW5naW5lIHBvd2VyZWQgZGlyZWN0bHkgYnkgdGhlIHRvb2xraXQtbGliXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29sa2l0TGliUnVubmVyRW5naW5lIGltcGxlbWVudHMgSUNkayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdDogVG9vbGtpdDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3V0cHV0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSG9zdDogSW50ZWdSdW5uZXJJb0hvc3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRvb2xraXQ+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvb2xraXRMaWJFbmdpbmVPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnNob3dPdXRwdXQgPSBvcHRpb25zLnNob3dPdXRwdXQgPz8gZmFsc2U7XG5cbiAgICAvLyBXZSBhbHdheXMgY3JlYXRlIHRoaXMgZm9yIG91cnNlbHZlcyB0byBlbWl0IHdhcm5pbmdzLCBidXQgcG90ZW50aWFsbHlcbiAgICAvLyBkb24ndCBwYXNzIGl0IHRvIHRoZSB0b29sa2l0LlxuICAgIHRoaXMuaW9Ib3N0ID0gbmV3IEludGVnUnVubmVySW9Ib3N0KCk7XG5cbiAgICB0aGlzLnRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdCgpO1xuXG4gICAgLy8gQFRPRE8gLSB0aGVzZSBvcHRpb25zIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHRoZSBhY3Rpb24gY2FsbHNcbiAgICAvLyBidXQgdG9vbGtpdC1saWIgbmVlZHMgdGhlbSBhdCB0aGUgY29uc3RydWN0b3IgbGV2ZWwuXG4gICAgLy8gTmVlZCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZW0uXG4gICAgLy9cbiAgICAvLyBWYWxpZGF0aW9uc1xuICAgIC8vICAtIGFzc2VtYmx5RmFpbHVyZUF0OiBvcHRpb25zLnN0cmljdCA/PyBvcHRpb25zLmlnbm9yZUVycm9yc1xuICAgIC8vIExvZ2dpbmdcbiAgICAvLyAgLSBvcHRpb25zLmNvbG9yXG5cbiAgICAvLyBAVE9ETyAtIHNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgaW4gdG9vbGtpdC1saWIgdGhlc2Ugb3B0aW9ucyB3b3VsZCBnbyBvbiB0aGUgSW9Ib3N0XG4gICAgLy8gIC0gb3B0aW9ucy50cmFjZVxuICAgIC8vICAtIG9wdGlvbnMudmVyYm9zZVxuICAgIC8vICAtIG9wdGlvbnMuanNvblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgYSBUb29sa2l0IGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gYWN0aW9uIG9wdGlvbnMuXG4gICAqIENhY2hlcyBpbnN0YW5jZXMgYnkgdGhlaXIgcmVzb2x2ZWQgY29uZmlndXJhdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAgKiBkdXBsaWNhdGUgVG9vbGtpdCBpbnN0YW5jZXMgZm9yIGlkZW50aWNhbCBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgZ2V0T3JDcmVhdGVUb29sa2l0KGFjdGlvbk9wdGlvbnM/OiBBY3Rpb25PcHRpb25zKTogVG9vbGtpdCB7XG4gICAgY29uc3QgcHJvZmlsZSA9IGFjdGlvbk9wdGlvbnM/LnByb2ZpbGUgPz8gdGhpcy5vcHRpb25zLnByb2ZpbGU7XG4gICAgY29uc3QgcHJveHkgPSBhY3Rpb25PcHRpb25zPy5wcm94eSA/PyB0aGlzLm9wdGlvbnMucHJveHk7XG4gICAgY29uc3QgY2FCdW5kbGVQYXRoID0gYWN0aW9uT3B0aW9ucz8uY2FCdW5kbGVQYXRoID8/IHRoaXMub3B0aW9ucy5jYUJ1bmRsZVBhdGg7XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW3Byb2ZpbGUsIHByb3h5LCBjYUJ1bmRsZVBhdGhdKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudG9vbGtpdENhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbGtpdCA9IG5ldyBUb29sa2l0KHtcbiAgICAgIGlvSG9zdDogdGhpcy5zaG93T3V0cHV0ID8gdGhpcy5pb0hvc3QgOiBuZXcgTm9vcElvSG9zdCgpLFxuICAgICAgc2RrQ29uZmlnOiB7XG4gICAgICAgIGJhc2VDcmVkZW50aWFsczogQmFzZUNyZWRlbnRpYWxzLmF3c0NsaUNvbXBhdGlibGUoe1xuICAgICAgICAgIHByb2ZpbGUsXG4gICAgICAgICAgZGVmYXVsdFJlZ2lvbjogdGhpcy5vcHRpb25zLnJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICAgIGh0dHBPcHRpb25zOiB7XG4gICAgICAgICAgYWdlbnQ6IFByb3h5QWdlbnRQcm92aWRlci5nZXRPckNyZWF0ZSh7IHByb3h5QWRkcmVzczogcHJveHksIGNhQnVuZGxlUGF0aCB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnRvb2xraXRDYWNoZS5zZXQoa2V5LCB0b29sa2l0KTtcbiAgICByZXR1cm4gdG9vbGtpdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplcyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN5bnRoKG9wdGlvbnM6IFN5bnRoT3B0aW9ucykge1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeCh7XG4gICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgIGxvb2t1cHM6IGZhbHNlLFxuICAgICAgcmVzb2x2ZURlZmF1bHRFbnZpcm9ubWVudDogZmFsc2UsXG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgdmVyc2lvblJlcG9ydGluZzogZmFsc2UsXG4gICAgICBwYXRoTWV0YWRhdGE6IGZhbHNlLFxuICAgICAgYXNzZXRNZXRhZGF0YTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdXNpbmcgbG9jayA9IGF3YWl0IHRoaXMudG9vbGtpdC5zeW50aChjeCwge1xuICAgICAgICB2YWxpZGF0ZVN0YWNrczogZmFsc2UsXG4gICAgICAgIHN0YWNrczoge1xuICAgICAgICAgIHN0cmF0ZWd5OiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MsXG4gICAgICAgICAgZmFpbE9uRW1wdHk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlUmVnaW9uKGxvY2spO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcygnTWlzc2luZyBjb250ZXh0IGtleXMnKSkge1xuICAgICAgICAvLyBAVE9ETyAtIHNpbGVudGx5IGlnbm9yZSBtaXNzaW5nIGNvbnRleHRcbiAgICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBhbiB1bmRlZmluZWQgY2FzZSBpbiB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB3aGljaCBkb2Vzbid0IHVzZSB0aGUgdG9vbGtpdCBjb2RlXG4gICAgICAgIC8vIGFuZCB3b24ndCBmYWlsIGZvciBtaXNzaW5nIGNvbnRleHQuIFRvIHByZXNlcnZlIGV4aXN0aW5nIGJlaGF2aW9yLCB3ZSBkbyB0aGUgc2FtZSBoZXJlLlxuICAgICAgICAvLyBIb3dldmVyIGluIGZ1dHVyZSB3ZSBuZWVkIHRvIGZpbmQgYSB3YXkgZm9yIGludGVnIHRlc3RzIHRvIHByb3ZpZGUgY29udGV4dCB0aHJvdWdoIHNuYXBzaG90cy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgdGhlIHN0YWNrcyBpbiB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3Qob3B0aW9uczogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IHRoaXMuZ2V0T3JDcmVhdGVUb29sa2l0KG9wdGlvbnMpO1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCB0b29sa2l0Lmxpc3QoY3gsIHtcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcy5tYXAocyA9PiBzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8Q2RrRGVwbG95UmVzdWx0PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IHRoaXMuZ2V0T3JDcmVhdGVUb29sa2l0KG9wdGlvbnMpO1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b29sa2l0LmRlcGxveShjeCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgdHJhY2VMb2dzOiBvcHRpb25zLnRyYWNlTG9ncyxcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgICAgZGVwbG95bWVudE1ldGhvZDoge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgIH0sXG4gICAgICBvdXRwdXRzRmlsZTogb3B0aW9ucy5vdXRwdXRzRmlsZSA/IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXRzRmlsZSkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlbGV0ZUZhaWx1cmVzOiByZXN1bHQuc3RhY2tzLmZsYXRNYXAocyA9PiBzLmRlbGV0ZUZhaWx1cmVzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoZXMgdGhlIENESyBhcHAgZm9yIGNoYW5nZXMgYW5kIGRlcGxveXMgdGhlbSBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd2F0Y2gob3B0aW9uczogV2F0Y2hPcHRpb25zLCBldmVudHM/OiBXYXRjaEV2ZW50cykge1xuICAgIGNvbnN0IHRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdChvcHRpb25zKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdhdGNoZXIgPSBhd2FpdCB0b29sa2l0LndhdGNoKGN4LCB7XG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgICAgdHJhY2VMb2dzOiBvcHRpb25zLnRyYWNlTG9ncyxcbiAgICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgd2F0Y2hlci53YWl0Rm9yRW5kKCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGV2ZW50cz8ub25TdGRlcnIpIHtcbiAgICAgICAgZXZlbnRzLm9uU3RkZXJyKFN0cmluZyhlKSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnRzPy5vbkNsb3NlKSB7XG4gICAgICAgIGV2ZW50cy5vbkNsb3NlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudHM/Lm9uQ2xvc2UpIHtcbiAgICAgIGV2ZW50cy5vbkNsb3NlKDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0aW9uczogRGVzdHJveU9wdGlvbnMpIHtcbiAgICBjb25zdCB0b29sa2l0ID0gdGhpcy5nZXRPckNyZWF0ZVRvb2xraXQob3B0aW9ucyk7XG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5kZXN0cm95KGN4LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWQgQXNzZW1ibHkgU291cmNlIGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGN4KG9wdGlvbnM6IEN4T3B0aW9ucyk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBpZiAoIW9wdGlvbnMuYXBwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFwcCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBhcHAgaXMgYSBwYXRoIHRvIGV4aXN0aW5nIHNuYXBzaG90IGFuZCB0aGVuIHVzZSBpdCBhcyBhbiBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICBjb25zdCBwb3RlbnRpYWxDeFBhdGggPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMuYXBwKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocG90ZW50aWFsQ3hQYXRoKSAmJiBmcy5zdGF0U3luYyhwb3RlbnRpYWxDeFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUFzc2VtYmx5RGlyZWN0b3J5KHBvdGVudGlhbEN4UGF0aCk7XG4gICAgfVxuXG4gICAgbGV0IG91dGRpcjtcbiAgICBpZiAob3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIG91dGRpciA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCB3ZSBhc3N1bWUgaXQncyBhIHByZS1zeW50aGVzaXplZCBhc3NlbWJseSBhbmQgdXNlIGl0IGRpcmVjdGx5LlxuICAgIC8vIFRoaXMgaGVscHMgYSBsb3Qgd2l0aCBzcGVlZCBpZiB3ZSBydW4gYGNkayBsaXN0YCBvbiBwcmV2aW91c2x5IHN5bnRoJ2VkIGRpcmVjdG9yeSwgd2hpY2ggaGFwcGVuc1xuICAgIC8vIGEgYnVuY2ggaW4gdGhlIGludGVnLXJ1bm5lci5cbiAgICAvL1xuICAgIC8vIElkZWFsbHkgd2Ugd291bGQgcmVwcmVzZW50IGEgcHJldmlvdXNseSBwcm9kdWNlZCBhc3NlbWJseSB3aXRoIGFuIG9iamVjdCB0aGF0IHdlIHBhc3MgYXJvdW5kLCBidXRcbiAgICAvLyB0aGF0J3MgYSBiaWdnZXIgQVBJIGNoYW5nZS5cbiAgICBpZiAob3V0ZGlyICYmIGZzLnBhdGhFeGlzdHNTeW5jKG91dGRpcikgJiYgZnMuc3RhdFN5bmMob3V0ZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sa2l0LmZyb21Bc3NlbWJseURpcmVjdG9yeShvdXRkaXIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUNka0FwcChvcHRpb25zLmFwcCwge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBvdXRkaXIsXG4gICAgICBsb29rdXBzOiBvcHRpb25zLmxvb2t1cHMsXG4gICAgICBjb250ZXh0U3RvcmU6IG5ldyBNZW1vcnlDb250ZXh0KG9wdGlvbnMuY29udGV4dCksXG4gICAgICByZXNvbHZlRGVmYXVsdEVudmlyb25tZW50OiBvcHRpb25zLnJlc29sdmVEZWZhdWx0RW52aXJvbm1lbnQsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zLmVudixcbiAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICB9LFxuICAgICAgc3ludGhPcHRpb25zOiB7XG4gICAgICAgIGRlYnVnOiBvcHRpb25zLmRlYnVnLFxuICAgICAgICB2ZXJzaW9uUmVwb3J0aW5nOiBvcHRpb25zLnZlcnNpb25SZXBvcnRpbmcgPz8gZmFsc2UsXG4gICAgICAgIHBhdGhNZXRhZGF0YTogb3B0aW9ucy5wYXRoTWV0YWRhdGEgPz8gZmFsc2UsXG4gICAgICAgIGFzc2V0TWV0YWRhdGE6IG9wdGlvbnMuYXNzZXRNZXRhZGF0YSA/PyBmYWxzZSxcbiAgICAgICAgYXNzZXRTdGFnaW5nOiBvcHRpb25zLnN0YWdpbmcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTdGFja1NlbGVjdG9yIGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHN0YWNrU2VsZWN0b3Iob3B0aW9uczogRGVmYXVsdENka09wdGlvbnMgJiB7IHJlYWRvbmx5IGV4Y2x1c2l2ZWx5PzogYm9vbGVhbiB9KTogU3RhY2tTZWxlY3RvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmF0ZWd5OiBvcHRpb25zLmFsbCA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuQUxMX1NUQUNLUyA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NVVNUX01BVENILFxuICAgICAgcGF0dGVybnM6IG9wdGlvbnMuc3RhY2tzID8/IFsnKionXSxcbiAgICAgIGV4cGFuZDogb3B0aW9ucy5leGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgdGhlIHJlZ2lvbnMgZm9yIHRoZSBzdGFja3MgaW4gdGhlIENsb3VkQXNzZW1ibHkgbWF0Y2ggdGhlIHJlZ2lvbnMgcmVxdWVzdGVkIG9uIHRoZSBlbmdpbmVcbiAgICpcbiAgICogVGhpcyBwcmV2ZW50cyBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBpbnRlZyB0ZXN0IGFwcC4gUGVvcGxlIHRlbmQgdG8gcHV0OlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBuZXcgU3RhY2soYXBwLCAnU3RhY2snLCB7XG4gICAqICAgZW52OiB7XG4gICAqICAgICByZWdpb246ICdzb21lLXJlZ2lvbi10aGF0LXN1aXRzLW1lJyxcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogSW50byB0aGVpciBpbnRlZyB0ZXN0cywgaW5zdGVhZCBvZjpcbiAgICpcbiAgICogYGBgdHNcbiAgICoge1xuICAgKiAgIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIGNhdGNoZXMgdGhhdCBtaXNjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVJlZ2lvbihhc206IElSZWFkYWJsZUNsb3VkQXNzZW1ibHkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyB0aGlzIGhhcHBlbnMgZm9yIGV4aXN0aW5nIHNuYXBzaG90cywgaW4gdGhhdCBjYXNlIG5vdGhpbmcgdG8gY2hlY2tcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlZ2lvbiA9PT0gVU5LTk9XTl9SRUdJT04pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGFzbS5jbG91ZEFzc2VtYmx5LnN0YWNrc1JlY3Vyc2l2ZWx5KSB7XG4gICAgICBpZiAoc3RhY2suZW52aXJvbm1lbnQucmVnaW9uICE9PSB0aGlzLm9wdGlvbnMucmVnaW9uICYmIHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbiAhPT0gVU5LTk9XTl9SRUdJT04pIHtcbiAgICAgICAgdGhpcy5pb0hvc3Qubm90aWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdkZXBsb3knLFxuICAgICAgICAgIGNvZGU6ICdDREtfUlVOTkVSX1cwMDAwJyxcbiAgICAgICAgICB0aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgbWVzc2FnZTogYFN0YWNrICR7c3RhY2suZGlzcGxheU5hbWV9IHN5bnRoZXNpemVzIGZvciByZWdpb24gJHtzdGFjay5lbnZpcm9ubWVudC5yZWdpb259LCBldmVuIHRob3VnaCAke3RoaXMub3B0aW9ucy5yZWdpb259IHdhcyByZXF1ZXN0ZWQuIFBsZWFzZSBjb25maWd1cmUgXFxgeyBlbnY6IHsgcmVnaW9uOiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT04sIGFjY291bnQ6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQgfSB9XFxgLCBvciB1c2Ugbm8gZW52IGF0IGFsbC4gRG8gbm90IGhhcmRjb2RlIGEgcmVnaW9uIG9yIGFjY291bnQuYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgc3RhY2tSZWdpb246IHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbixcbiAgICAgICAgICAgIHJlcXVlc3RlZFJlZ2lvbjogdGhpcy5vcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFuIElvSG9zdCB1c2VkIGluIHRoZSBpbnRlZy1ydW5uZXIgdG8gcHJvdmlkZSBub24taW50ZXJhY3RpdmUgb3V0cHV0XG4gKi9cbmNsYXNzIEludGVnUnVubmVySW9Ib3N0IGV4dGVuZHMgTm9uSW50ZXJhY3RpdmVJb0hvc3Qge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaXNUVFk6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBhc3luYyBub3RpZnkobXNnOiBJb01lc3NhZ2U8dW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29sb3I7XG4gICAgc3dpdGNoIChtc2cubGV2ZWwpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzogY29sb3IgPSBjaGFsay5yZWQ7IGJyZWFrO1xuICAgICAgY2FzZSAnd2Fybic6IGNvbG9yID0gY2hhbGsueWVsbG93OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IGNvbG9yID0gY2hhbGsuZ3JheTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIubm90aWZ5KHtcbiAgICAgIC4uLm1zZyxcbiAgICAgIG1lc3NhZ2U6IGNvbG9yKG1zZy5tZXNzYWdlKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIElvSG9zdCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmdcbiAqL1xuY2xhc3MgTm9vcElvSG9zdCBpbXBsZW1lbnRzIElJb0hvc3Qge1xuICBwdWJsaWMgYXN5bmMgbm90aWZ5KCk6IFByb21pc2U8dm9pZD4ge1xuICB9XG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0UmVzcG9uc2U8VD4obXNnOiBJb1JlcXVlc3Q8dW5rbm93biwgVD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gbXNnLmRlZmF1bHRSZXNwb25zZTtcbiAgfVxufVxuIl19
|
|
416
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLG9FQUE2RDtBQUc3RCxzREFBbUo7QUFDbkosa0RBQTBCO0FBQzFCLDZDQUErQjtBQUUvQiwrQ0FBbUQ7QUF1RW5EOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDaEIsT0FBTyxDQUFVO0lBQ2pCLE9BQU8sQ0FBMEI7SUFDakMsVUFBVSxDQUFVO0lBQ3BCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBRTNELFlBQW1CLE9BQWdDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFFOUMsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRXpDLG9FQUFvRTtRQUNwRSx1REFBdUQ7UUFDdkQsdUNBQXVDO1FBQ3ZDLEVBQUU7UUFDRixjQUFjO1FBQ2QsK0RBQStEO1FBQy9ELFVBQVU7UUFDVixtQkFBbUI7UUFFbkIsd0ZBQXdGO1FBQ3hGLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsa0JBQWtCO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsYUFBNkI7UUFDdEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxhQUFhLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUUzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQztZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDeEQsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRSw2QkFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUNoRCxPQUFPO29CQUNQLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07aUJBQ25DLENBQUM7Z0JBQ0YsV0FBVyxFQUFFO29CQUNYLEtBQUssRUFBRSxnQ0FBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO2lCQUM3RTthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBcUI7UUFDdEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLE9BQU8sRUFBRSxLQUFLO1lBQ2QseUJBQXlCLEVBQUUsS0FBSztZQUNoQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUM7OztnQkFDSCxNQUFZLElBQUksa0NBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQzlDLGNBQWMsRUFBRSxLQUFLO29CQUNyQixNQUFNLEVBQUU7d0JBQ04sUUFBUSxFQUFFLG9DQUFzQixDQUFDLFVBQVU7d0JBQzNDLFdBQVcsRUFBRSxLQUFLO3FCQUNuQjtpQkFDRixDQUFDLE9BQUEsQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7Ozs7O1NBQ2pDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztnQkFDL0MsMENBQTBDO2dCQUMxQyxtR0FBbUc7Z0JBQ25HLDBGQUEwRjtnQkFDMUYsZ0dBQWdHO2dCQUNoRyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBb0I7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFzQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDbkMsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRSxZQUFZO2FBQ3JCO1lBQ0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDaEgsQ0FBQyxDQUFDO1FBQ0gsT0FBTztZQUNMLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDN0QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBcUIsRUFBRSxNQUFvQjtRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQ25DLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBdUI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsQyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFrQjtRQUNqQyxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCx5R0FBeUc7UUFDekcsbUdBQW1HO1FBQ25HLCtCQUErQjtRQUMvQixFQUFFO1FBQ0Ysb0dBQW9HO1FBQ3BHLDhCQUE4QjtRQUM5QixJQUFJLE1BQU0sSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM3RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCwyRkFBMkY7UUFDM0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1lBQy9DLE1BQU07WUFDTixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsWUFBWSxFQUFFLElBQUksMkJBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2hELHlCQUF5QixFQUFFLE9BQU8sQ0FBQyx5QkFBeUI7WUFDNUQsR0FBRyxFQUFFO2dCQUNILEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNuQixHQUFHLE9BQU8sQ0FBQyxHQUFHO2FBQ2Y7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLElBQUksS0FBSztnQkFDbkQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksS0FBSztnQkFDM0MsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksS0FBSztnQkFDN0MsWUFBWSxFQUFFLE9BQU8sQ0FBQyxPQUFPO2FBQzlCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLE9BQStEO1FBQ25GLE9BQU87WUFDTCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0NBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQ0FBc0IsQ0FBQyxrQkFBa0I7WUFDckcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGtDQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0NBQW9CLENBQUMsUUFBUTtTQUN4RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0ssS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUEyQjtRQUN0RCxxRUFBcUU7UUFDckUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxtQ0FBYyxFQUFFLENBQUM7WUFDM0MsT0FBTztRQUNULENBQUM7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN4RCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLG1DQUFjLEVBQUUsQ0FBQztnQkFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQ2pCLE1BQU0sRUFBRSxRQUFRO29CQUNoQixJQUFJLEVBQUUsa0JBQWtCO29CQUN4QixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7b0JBQ2hCLEtBQUssRUFBRSxNQUFNO29CQUNiLE9BQU8sRUFBRSxTQUFTLEtBQUssQ0FBQyxXQUFXLDJCQUEyQixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0saUJBQWlCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxnTUFBZ007b0JBQzFULElBQUksRUFBRTt3QkFDSixTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVc7d0JBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU07d0JBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07cUJBQ3JDO2lCQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNOLHNDQUFzQzt3QkFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaFNELHdEQWdTQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxpQkFBa0IsU0FBUSxrQ0FBb0I7SUFDbEQsWUFBbUIsUUFBbUMsRUFBRTtRQUN0RCxLQUFLLENBQUM7WUFDSixHQUFHLEtBQUs7WUFDUixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQXVCO1FBQ3pDLElBQUksS0FBSyxDQUFDO1FBQ1YsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUFFLEtBQUssR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDO2dCQUFDLE1BQU07WUFDdkMsS0FBSyxNQUFNO2dCQUFFLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO2dCQUFDLE1BQU07WUFDekMsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxJQUFJLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixHQUFHLEdBQUc7WUFDTixPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVU7SUFDUCxLQUFLLENBQUMsTUFBTTtJQUNuQixDQUFDO0lBQ00sS0FBSyxDQUFDLGVBQWUsQ0FBSSxHQUEwQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgVU5LTk9XTl9SRUdJT04gfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0Q2RrT3B0aW9ucyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYS9saWIvaW50ZWctdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgSUlvSG9zdCwgSW9NZXNzYWdlLCBJb1JlcXVlc3QsIElSZWFkYWJsZUNsb3VkQXNzZW1ibHksIE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMsIFN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBCYXNlQ3JlZGVudGlhbHMsIEV4cGFuZFN0YWNrU2VsZWN0aW9uLCBNZW1vcnlDb250ZXh0LCBOb25JbnRlcmFjdGl2ZUlvSG9zdCwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IENka0RlcGxveVJlc3VsdCwgQ3hPcHRpb25zLCBEZXBsb3lPcHRpb25zLCBEZXN0cm95T3B0aW9ucywgSUNkaywgTGlzdE9wdGlvbnMsIFN5bnRoT3B0aW9ucywgV2F0Y2hFdmVudHMsIFdhdGNoT3B0aW9ucyB9IGZyb20gJy4vY2RrLWludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm94eUFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3Byb3h5LWFnZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0TGliRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIHJ1biB0aGUgY2RrIGNvbW1hbmRzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqIGluIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHJ1bm5pbmdcbiAgICogdGhlIGNkayBhcHBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd091dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIENESyBhcHAgc2hvdWxkIHN5bnRoZXNpemUgaXRzZWxmIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIHdoZW4gYXV0aGVudGljYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwcm9maWxlIGlzIHBhc3NlZCwgdGhlIGRlZmF1bHQgcHJvZmlsZSBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIGluZGljYXRlZCBwcm94eVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb3h5LCBQcm94eUFnZW50IGF1dG8tZGV0ZWN0cyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJveHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gQ0EgY2VydGlmaWNhdGUgdG8gdXNlIHdoZW4gdmFsaWRhdGluZyBIVFRQUyByZXF1ZXN0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgQ0EgYnVuZGxlXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyLWFjdGlvbiBvcHRpb25zIHRoYXQgY2FuIG92ZXJyaWRlIHRoZSBlbmdpbmUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIGluZGljYXRlZCBwcm94eVxuICAgKi9cbiAgcmVhZG9ubHkgcHJveHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gQ0EgY2VydGlmaWNhdGUgdG8gdXNlIHdoZW4gdmFsaWRhdGluZyBIVFRQUyByZXF1ZXN0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcnVubmVyIGVuZ2luZSBwb3dlcmVkIGRpcmVjdGx5IGJ5IHRoZSB0b29sa2l0LWxpYlxuICovXG5leHBvcnQgY2xhc3MgVG9vbGtpdExpYlJ1bm5lckVuZ2luZSBpbXBsZW1lbnRzIElDZGsge1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXQ6IFRvb2xraXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogVG9vbGtpdExpYkVuZ2luZU9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd091dHB1dDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hvc3Q6IEludGVnUnVubmVySW9Ib3N0O1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBUb29sa2l0PigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zaG93T3V0cHV0ID0gb3B0aW9ucy5zaG93T3V0cHV0ID8/IGZhbHNlO1xuXG4gICAgLy8gV2UgYWx3YXlzIGNyZWF0ZSB0aGlzIGZvciBvdXJzZWx2ZXMgdG8gZW1pdCB3YXJuaW5ncywgYnV0IHBvdGVudGlhbGx5XG4gICAgLy8gZG9uJ3QgcGFzcyBpdCB0byB0aGUgdG9vbGtpdC5cbiAgICB0aGlzLmlvSG9zdCA9IG5ldyBJbnRlZ1J1bm5lcklvSG9zdCgpO1xuXG4gICAgdGhpcy50b29sa2l0ID0gdGhpcy5nZXRPckNyZWF0ZVRvb2xraXQoKTtcblxuICAgIC8vIEBUT0RPIC0gdGhlc2Ugb3B0aW9ucyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBvbiB0aGUgYWN0aW9uIGNhbGxzXG4gICAgLy8gYnV0IHRvb2xraXQtbGliIG5lZWRzIHRoZW0gYXQgdGhlIGNvbnN0cnVjdG9yIGxldmVsLlxuICAgIC8vIE5lZWQgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGVtLlxuICAgIC8vXG4gICAgLy8gVmFsaWRhdGlvbnNcbiAgICAvLyAgLSBhc3NlbWJseUZhaWx1cmVBdDogb3B0aW9ucy5zdHJpY3QgPz8gb3B0aW9ucy5pZ25vcmVFcnJvcnNcbiAgICAvLyBMb2dnaW5nXG4gICAgLy8gIC0gb3B0aW9ucy5jb2xvclxuXG4gICAgLy8gQFRPRE8gLSBzaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IGluIHRvb2xraXQtbGliIHRoZXNlIG9wdGlvbnMgd291bGQgZ28gb24gdGhlIElvSG9zdFxuICAgIC8vICAtIG9wdGlvbnMudHJhY2VcbiAgICAvLyAgLSBvcHRpb25zLnZlcmJvc2VcbiAgICAvLyAgLSBvcHRpb25zLmpzb25cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3IgY3JlYXRlIGEgVG9vbGtpdCBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIGFjdGlvbiBvcHRpb25zLlxuICAgKiBDYWNoZXMgaW5zdGFuY2VzIGJ5IHRoZWlyIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgICogZHVwbGljYXRlIFRvb2xraXQgaW5zdGFuY2VzIGZvciBpZGVudGljYWwgc2V0dGluZ3MuXG4gICAqL1xuICBwcml2YXRlIGdldE9yQ3JlYXRlVG9vbGtpdChhY3Rpb25PcHRpb25zPzogQWN0aW9uT3B0aW9ucyk6IFRvb2xraXQge1xuICAgIGNvbnN0IHByb2ZpbGUgPSBhY3Rpb25PcHRpb25zPy5wcm9maWxlID8/IHRoaXMub3B0aW9ucy5wcm9maWxlO1xuICAgIGNvbnN0IHByb3h5ID0gYWN0aW9uT3B0aW9ucz8ucHJveHkgPz8gdGhpcy5vcHRpb25zLnByb3h5O1xuICAgIGNvbnN0IGNhQnVuZGxlUGF0aCA9IGFjdGlvbk9wdGlvbnM/LmNhQnVuZGxlUGF0aCA/PyB0aGlzLm9wdGlvbnMuY2FCdW5kbGVQYXRoO1xuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtwcm9maWxlLCBwcm94eSwgY2FCdW5kbGVQYXRoXSk7XG5cbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnRvb2xraXRDYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgVG9vbGtpdCh7XG4gICAgICBpb0hvc3Q6IHRoaXMuc2hvd091dHB1dCA/IHRoaXMuaW9Ib3N0IDogbmV3IE5vb3BJb0hvc3QoKSxcbiAgICAgIHNka0NvbmZpZzoge1xuICAgICAgICBiYXNlQ3JlZGVudGlhbHM6IEJhc2VDcmVkZW50aWFscy5hd3NDbGlDb21wYXRpYmxlKHtcbiAgICAgICAgICBwcm9maWxlLFxuICAgICAgICAgIGRlZmF1bHRSZWdpb246IHRoaXMub3B0aW9ucy5yZWdpb24sXG4gICAgICAgIH0pLFxuICAgICAgICBodHRwT3B0aW9uczoge1xuICAgICAgICAgIGFnZW50OiBQcm94eUFnZW50UHJvdmlkZXIuZ2V0T3JDcmVhdGUoeyBwcm94eUFkZHJlc3M6IHByb3h5LCBjYUJ1bmRsZVBhdGggfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy50b29sa2l0Q2FjaGUuc2V0KGtleSwgdG9vbGtpdCk7XG4gICAgcmV0dXJuIHRvb2xraXQ7XG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW50aChvcHRpb25zOiBTeW50aE9wdGlvbnMpIHtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3goe1xuICAgICAgYXBwOiBvcHRpb25zLmFwcCxcbiAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQsXG4gICAgICBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gICAgICBsb29rdXBzOiBmYWxzZSxcbiAgICAgIHJlc29sdmVEZWZhdWx0RW52aXJvbm1lbnQ6IGZhbHNlLFxuICAgICAgZW52OiBvcHRpb25zLmVudixcbiAgICAgIHZlcnNpb25SZXBvcnRpbmc6IGZhbHNlLFxuICAgICAgcGF0aE1ldGFkYXRhOiBmYWxzZSxcbiAgICAgIGFzc2V0TWV0YWRhdGE6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIGxvY2sgPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgoY3gsIHtcbiAgICAgICAgdmFsaWRhdGVTdGFja3M6IGZhbHNlLFxuICAgICAgICBzdGFja3M6IHtcbiAgICAgICAgICBzdHJhdGVneTogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTLFxuICAgICAgICAgIGZhaWxPbkVtcHR5OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVJlZ2lvbihsb2NrKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ01pc3NpbmcgY29udGV4dCBrZXlzJykpIHtcbiAgICAgICAgLy8gQFRPRE8gLSBzaWxlbnRseSBpZ25vcmUgbWlzc2luZyBjb250ZXh0XG4gICAgICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgYW4gdW5kZWZpbmVkIGNhc2UgaW4gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggZG9lc24ndCB1c2UgdGhlIHRvb2xraXQgY29kZVxuICAgICAgICAvLyBhbmQgd29uJ3QgZmFpbCBmb3IgbWlzc2luZyBjb250ZXh0LiBUbyBwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvciwgd2UgZG8gdGhlIHNhbWUgaGVyZS5cbiAgICAgICAgLy8gSG93ZXZlciBpbiBmdXR1cmUgd2UgbmVlZCB0byBmaW5kIGEgd2F5IGZvciBpbnRlZyB0ZXN0cyB0byBwcm92aWRlIGNvbnRleHQgdGhyb3VnaCBzbmFwc2hvdHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIHRoZSBzdGFja3MgaW4gdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0KG9wdGlvbnM6IExpc3RPcHRpb25zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdChvcHRpb25zKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgdG9vbGtpdC5saXN0KGN4LCB7XG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGFja3MubWFwKHMgPT4gcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3lzIHRoZSBDREsgYXBwXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVwbG95KG9wdGlvbnM6IERlcGxveU9wdGlvbnMpOiBQcm9taXNlPENka0RlcGxveVJlc3VsdD4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSB0aGlzLmdldE9yQ3JlYXRlVG9vbGtpdChvcHRpb25zKTtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdG9vbGtpdC5kZXBsb3koY3gsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgIHRyYWNlTG9nczogb3B0aW9ucy50cmFjZUxvZ3MsXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICB9LFxuICAgICAgb3V0cHV0c0ZpbGU6IG9wdGlvbnMub3V0cHV0c0ZpbGUgPyBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMub3V0cHV0c0ZpbGUpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBkZWxldGVGYWlsdXJlczogcmVzdWx0LnN0YWNrcy5mbGF0TWFwKHMgPT4gcy5kZWxldGVGYWlsdXJlcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVzIHRoZSBDREsgYXBwIGZvciBjaGFuZ2VzIGFuZCBkZXBsb3lzIHRoZW0gYXV0b21hdGljYWxseVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdhdGNoKG9wdGlvbnM6IFdhdGNoT3B0aW9ucywgZXZlbnRzPzogV2F0Y2hFdmVudHMpIHtcbiAgICBjb25zdCB0b29sa2l0ID0gdGhpcy5nZXRPckNyZWF0ZVRvb2xraXQob3B0aW9ucyk7XG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3YXRjaGVyID0gYXdhaXQgdG9vbGtpdC53YXRjaChjeCwge1xuICAgICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICAgIHRyYWNlTG9nczogb3B0aW9ucy50cmFjZUxvZ3MsXG4gICAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiBvcHRpb25zLmRlcGxveW1lbnRNZXRob2QsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHdhdGNoZXIud2FpdEZvckVuZCgpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChldmVudHM/Lm9uU3RkZXJyKSB7XG4gICAgICAgIGV2ZW50cy5vblN0ZGVycihTdHJpbmcoZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50cz8ub25DbG9zZSkge1xuICAgICAgICBldmVudHMub25DbG9zZSgxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRzPy5vbkNsb3NlKSB7XG4gICAgICBldmVudHMub25DbG9zZSgwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXN0cm95KG9wdGlvbnM6IERlc3Ryb3lPcHRpb25zKSB7XG4gICAgY29uc3QgdG9vbGtpdCA9IHRoaXMuZ2V0T3JDcmVhdGVUb29sa2l0KG9wdGlvbnMpO1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcblxuICAgIGF3YWl0IHRvb2xraXQuZGVzdHJveShjeCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkIEFzc2VtYmx5IFNvdXJjZSBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjeChvcHRpb25zOiBDeE9wdGlvbnMpOiBQcm9taXNlPElDbG91ZEFzc2VtYmx5U291cmNlPiB7XG4gICAgbGV0IG91dGRpcjtcbiAgICBpZiAob3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIG91dGRpciA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCB3ZSBhc3N1bWUgaXQncyBhIHByZS1zeW50aGVzaXplZCBhc3NlbWJseSBhbmQgdXNlIGl0IGRpcmVjdGx5LlxuICAgIC8vIFRoaXMgaGVscHMgYSBsb3Qgd2l0aCBzcGVlZCBpZiB3ZSBydW4gYGNkayBsaXN0YCBvbiBwcmV2aW91c2x5IHN5bnRoJ2VkIGRpcmVjdG9yeSwgd2hpY2ggaGFwcGVuc1xuICAgIC8vIGEgYnVuY2ggaW4gdGhlIGludGVnLXJ1bm5lci5cbiAgICAvL1xuICAgIC8vIElkZWFsbHkgd2Ugd291bGQgcmVwcmVzZW50IGEgcHJldmlvdXNseSBwcm9kdWNlZCBhc3NlbWJseSB3aXRoIGFuIG9iamVjdCB0aGF0IHdlIHBhc3MgYXJvdW5kLCBidXRcbiAgICAvLyB0aGF0J3MgYSBiaWdnZXIgQVBJIGNoYW5nZS5cbiAgICBpZiAob3V0ZGlyICYmIGZzLnBhdGhFeGlzdHNTeW5jKG91dGRpcikgJiYgZnMuc3RhdFN5bmMob3V0ZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sa2l0LmZyb21Bc3NlbWJseURpcmVjdG9yeShvdXRkaXIpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5hcHApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXBwIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhlIGFwcCBpcyBhIHBhdGggdG8gZXhpc3Rpbmcgc25hcHNob3QgYW5kIHRoZW4gdXNlIGl0IGFzIGFuIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIGNvbnN0IHBvdGVudGlhbEN4UGF0aCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5hcHApO1xuICAgIGlmIChmcy5wYXRoRXhpc3RzU3luYyhwb3RlbnRpYWxDeFBhdGgpICYmIGZzLnN0YXRTeW5jKHBvdGVudGlhbEN4UGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbGtpdC5mcm9tQXNzZW1ibHlEaXJlY3RvcnkocG90ZW50aWFsQ3hQYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b29sa2l0LmZyb21DZGtBcHAob3B0aW9ucy5hcHAsIHtcbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgb3V0ZGlyLFxuICAgICAgbG9va3Vwczogb3B0aW9ucy5sb29rdXBzLFxuICAgICAgY29udGV4dFN0b3JlOiBuZXcgTWVtb3J5Q29udGV4dChvcHRpb25zLmNvbnRleHQpLFxuICAgICAgcmVzb2x2ZURlZmF1bHRFbnZpcm9ubWVudDogb3B0aW9ucy5yZXNvbHZlRGVmYXVsdEVudmlyb25tZW50LFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnRoaXMub3B0aW9ucy5lbnYsXG4gICAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgICAgfSxcbiAgICAgIHN5bnRoT3B0aW9uczoge1xuICAgICAgICBkZWJ1Zzogb3B0aW9ucy5kZWJ1ZyxcbiAgICAgICAgdmVyc2lvblJlcG9ydGluZzogb3B0aW9ucy52ZXJzaW9uUmVwb3J0aW5nID8/IGZhbHNlLFxuICAgICAgICBwYXRoTWV0YWRhdGE6IG9wdGlvbnMucGF0aE1ldGFkYXRhID8/IGZhbHNlLFxuICAgICAgICBhc3NldE1ldGFkYXRhOiBvcHRpb25zLmFzc2V0TWV0YWRhdGEgPz8gZmFsc2UsXG4gICAgICAgIGFzc2V0U3RhZ2luZzogb3B0aW9ucy5zdGFnaW5nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU3RhY2tTZWxlY3RvciBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGFja1NlbGVjdG9yKG9wdGlvbnM6IERlZmF1bHRDZGtPcHRpb25zICYgeyByZWFkb25seSBleGNsdXNpdmVseT86IGJvb2xlYW4gfSk6IFN0YWNrU2VsZWN0b3Ige1xuICAgIHJldHVybiB7XG4gICAgICBzdHJhdGVneTogb3B0aW9ucy5hbGwgPyBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MgOiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LlBBVFRFUk5fTVVTVF9NQVRDSCxcbiAgICAgIHBhdHRlcm5zOiBvcHRpb25zLnN0YWNrcyA/PyBbJyoqJ10sXG4gICAgICBleHBhbmQ6IG9wdGlvbnMuZXhjbHVzaXZlbHkgPyBFeHBhbmRTdGFja1NlbGVjdGlvbi5OT05FIDogRXhwYW5kU3RhY2tTZWxlY3Rpb24uVVBTVFJFQU0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IHRoZSByZWdpb25zIGZvciB0aGUgc3RhY2tzIGluIHRoZSBDbG91ZEFzc2VtYmx5IG1hdGNoIHRoZSByZWdpb25zIHJlcXVlc3RlZCBvbiB0aGUgZW5naW5lXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaW50ZWcgdGVzdCBhcHAuIFBlb3BsZSB0ZW5kIHRvIHB1dDpcbiAgICpcbiAgICogYGBgdHNcbiAgICogbmV3IFN0YWNrKGFwcCwgJ1N0YWNrJywge1xuICAgKiAgIGVudjoge1xuICAgKiAgICAgcmVnaW9uOiAnc29tZS1yZWdpb24tdGhhdC1zdWl0cy1tZScsXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEludG8gdGhlaXIgaW50ZWcgdGVzdHMsIGluc3RlYWQgb2Y6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogICByZWdpb246IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTixcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBjYXRjaGVzIHRoYXQgbWlzY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVSZWdpb24oYXNtOiBJUmVhZGFibGVDbG91ZEFzc2VtYmx5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gdGhpcyBoYXBwZW5zIGZvciBleGlzdGluZyBzbmFwc2hvdHMsIGluIHRoYXQgY2FzZSBub3RoaW5nIHRvIGNoZWNrXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZWdpb24gPT09IFVOS05PV05fUkVHSU9OKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBhc20uY2xvdWRBc3NlbWJseS5zdGFja3NSZWN1cnNpdmVseSkge1xuICAgICAgaWYgKHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbiAhPT0gdGhpcy5vcHRpb25zLnJlZ2lvbiAmJiBzdGFjay5lbnZpcm9ubWVudC5yZWdpb24gIT09IFVOS05PV05fUkVHSU9OKSB7XG4gICAgICAgIHRoaXMuaW9Ib3N0Lm5vdGlmeSh7XG4gICAgICAgICAgYWN0aW9uOiAnZGVwbG95JyxcbiAgICAgICAgICBjb2RlOiAnQ0RLX1JVTk5FUl9XMDAwMCcsXG4gICAgICAgICAgdGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgICAgIG1lc3NhZ2U6IGBTdGFjayAke3N0YWNrLmRpc3BsYXlOYW1lfSBzeW50aGVzaXplcyBmb3IgcmVnaW9uICR7c3RhY2suZW52aXJvbm1lbnQucmVnaW9ufSwgZXZlbiB0aG91Z2ggJHt0aGlzLm9wdGlvbnMucmVnaW9ufSB3YXMgcmVxdWVzdGVkLiBQbGVhc2UgY29uZmlndXJlIFxcYHsgZW52OiB7IHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLCBhY2NvdW50OiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UIH0gfVxcYCwgb3IgdXNlIG5vIGVudiBhdCBhbGwuIERvIG5vdCBoYXJkY29kZSBhIHJlZ2lvbiBvciBhY2NvdW50LmAsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgc3RhY2tOYW1lOiBzdGFjay5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHN0YWNrUmVnaW9uOiBzdGFjay5lbnZpcm9ubWVudC5yZWdpb24sXG4gICAgICAgICAgICByZXF1ZXN0ZWRSZWdpb246IHRoaXMub3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJb0hvc3QgdXNlZCBpbiB0aGUgaW50ZWctcnVubmVyIHRvIHByb3ZpZGUgbm9uLWludGVyYWN0aXZlIG91dHB1dFxuICovXG5jbGFzcyBJbnRlZ1J1bm5lcklvSG9zdCBleHRlbmRzIE5vbkludGVyYWN0aXZlSW9Ib3N0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBOb25JbnRlcmFjdGl2ZUlvSG9zdFByb3BzID0ge30pIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGlzVFRZOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgYXN5bmMgbm90aWZ5KG1zZzogSW9NZXNzYWdlPHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGNvbG9yO1xuICAgIHN3aXRjaCAobXNnLmxldmVsKSB7XG4gICAgICBjYXNlICdlcnJvcic6IGNvbG9yID0gY2hhbGsucmVkOyBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm4nOiBjb2xvciA9IGNoYWxrLnllbGxvdzsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBjb2xvciA9IGNoYWxrLmdyYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLm5vdGlmeSh7XG4gICAgICAuLi5tc2csXG4gICAgICBtZXNzYWdlOiBjb2xvcihtc2cubWVzc2FnZSksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJb0hvc3QgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nXG4gKi9cbmNsYXNzIE5vb3BJb0hvc3QgaW1wbGVtZW50cyBJSW9Ib3N0IHtcbiAgcHVibGljIGFzeW5jIG5vdGlmeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgfVxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdFJlc3BvbnNlPFQ+KG1zZzogSW9SZXF1ZXN0PHVua25vd24sIFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG1zZy5kZWZhdWx0UmVzcG9uc2U7XG4gIH1cbn1cbiJdfQ==
|
package/lib/files.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* path.join, but do the right thing if the second path is absolute
|
|
3
|
+
*
|
|
4
|
+
* `path.join` will stick the paths together no matter what, and `path.resolve`
|
|
5
|
+
* will make both absolute. This does not make the paths unnecessarily absolute,
|
|
6
|
+
* but will just use the second path if it is absolute.
|
|
7
|
+
*/
|
|
8
|
+
export declare function absAwareJoin(one: string, two: string): string;
|
|
9
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["files.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7D"}
|
package/lib/files.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.absAwareJoin = absAwareJoin;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
/**
|
|
39
|
+
* path.join, but do the right thing if the second path is absolute
|
|
40
|
+
*
|
|
41
|
+
* `path.join` will stick the paths together no matter what, and `path.resolve`
|
|
42
|
+
* will make both absolute. This does not make the paths unnecessarily absolute,
|
|
43
|
+
* but will just use the second path if it is absolute.
|
|
44
|
+
*/
|
|
45
|
+
function absAwareJoin(one, two) {
|
|
46
|
+
if (path.isAbsolute(two)) {
|
|
47
|
+
return two;
|
|
48
|
+
}
|
|
49
|
+
return path.join(one, two);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLG9DQUtDO0FBZEQsMkNBQTZCO0FBRTdCOzs7Ozs7R0FNRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUNuRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIHBhdGguam9pbiwgYnV0IGRvIHRoZSByaWdodCB0aGluZyBpZiB0aGUgc2Vjb25kIHBhdGggaXMgYWJzb2x1dGVcbiAqXG4gKiBgcGF0aC5qb2luYCB3aWxsIHN0aWNrIHRoZSBwYXRocyB0b2dldGhlciBubyBtYXR0ZXIgd2hhdCwgYW5kIGBwYXRoLnJlc29sdmVgXG4gKiB3aWxsIG1ha2UgYm90aCBhYnNvbHV0ZS4gVGhpcyBkb2VzIG5vdCBtYWtlIHRoZSBwYXRocyB1bm5lY2Vzc2FyaWx5IGFic29sdXRlLFxuICogYnV0IHdpbGwganVzdCB1c2UgdGhlIHNlY29uZCBwYXRoIGlmIGl0IGlzIGFic29sdXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJzQXdhcmVKb2luKG9uZTogc3RyaW5nLCB0d286IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwYXRoLmlzQWJzb2x1dGUodHdvKSkge1xuICAgIHJldHVybiB0d287XG4gIH1cbiAgcmV0dXJuIHBhdGguam9pbihvbmUsIHR3byk7XG59XG5cbiJdfQ==
|