@mnemonica/tactica 0.4.6 → 0.4.7

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/lib/cli.js CHANGED
@@ -759,7 +759,7 @@ export * from './registry${options.esm ? '.js' : ''}';
759
759
  console.log(`Generated instrumentation.json at: ${instrumentationPath} (${instrumentation.length} points)`);
760
760
  console.log(` creation graph: ${nodeCount} nodes, ${edgeCount} edges, ${anchorCount} anchors`);
761
761
  }
762
- // Always generate control.json (lethe contract, format 1.1): the same
762
+ // Always generate control.json (lethe contract, format 1.2): the same
763
763
  // creation graph and points as instrumentation.json, rendered under the
764
764
  // cross-language `callers`/`points` keys.
765
765
  const controlPath = writer.writeControlFile(instrumentation, creationGraph);
@@ -862,4 +862,4 @@ function main() {
862
862
  if (require.main === module) {
863
863
  main();
864
864
  }
865
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQSs4Qlosb0JBQUk7QUFBRSxrQkFBRztBQUFFLHNCQUFLO0FBQUUsOEJBQVM7QUE3OEI1Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG1DQUF1QztBQUN2QywrQ0FBaUM7QUFDakMseUNBQStDO0FBQy9DLCtEQUEyRDtBQUMzRCwyQ0FFcUI7QUFDckIscUNBQXVDO0FBQ3ZDLGlEQUFvRDtBQUNwRCxxREFBd0Q7QUFDeEQscUNBRWtCO0FBQ2xCLG1DQUVpQjtBQTBCakI7O0dBRUc7QUFDSCxTQUFTLFNBQVMsQ0FBRSxJQUFjO0lBQ2pDLE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztJQUUvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBRSxDQUFDLENBQUUsQ0FBQztRQUV0QixRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2QsS0FBSyxJQUFJLENBQUM7WUFDVixLQUFLLFNBQVM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE1BQU07WUFDUCxLQUFLLElBQUksQ0FBQztZQUNWLEtBQUssV0FBVztnQkFDZixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBRSxFQUFFLENBQUMsQ0FBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1AsS0FBSyxJQUFJLENBQUM7WUFDVixLQUFLLFVBQVU7Z0JBQ2QsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUUsRUFBRSxDQUFDLENBQUUsQ0FBQztnQkFDaEMsTUFBTTtZQUNQLEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxXQUFX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QUM7WUFDcEIsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7QUFDRixDQUFDO0FBRUQsMkJBQTJCO0FBQzNCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUM3QixJQUFJLEVBQUUsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgTW5lbW9uaWNhQW5hbHl6ZXIgfSBmcm9tICcuL2FuYWx5emVyJztcbmltcG9ydCB7IFRvcG9sb2dpY2FBbmFseXplciB9IGZyb20gJy4vdG9wb2xvZ2ljYS1hbmFseXplcic7XG5pbXBvcnQge1xuXHRUeXBlc0dlbmVyYXRvciwgR3JhcGhSZWZlcmVuY2VSZXNvbHZlciBcbn0gZnJvbSAnLi9nZW5lcmF0b3InO1xuaW1wb3J0IHsgVHlwZXNXcml0ZXIgfSBmcm9tICcuL3dyaXRlcic7XG5pbXBvcnQgeyBNb2R1bGVHcmFwaEJ1aWxkZXIgfSBmcm9tICcuL21vZHVsZS1ncmFwaCc7XG5pbXBvcnQgeyBDcmVhdGlvbkdyYXBoQnVpbGRlciB9IGZyb20gJy4vY3JlYXRpb24tZ3JhcGgnO1xuaW1wb3J0IHtcblx0TG9jYWxTY29wZVdhbGtlciwgU2NvcGVUeXBlUmVzb2x2ZXJcbn0gZnJvbSAnLi9zY29wZXMnO1xuaW1wb3J0IHtcblx0cmVzb2x2ZUdyYXBoVHlwZVJlZmVyZW5jZSwgVHlwZUdyYXBoSW1wbCBcbn0gZnJvbSAnLi9ncmFwaCc7XG5pbXBvcnQge1xuXHRUYWN0aWNhQ29uZmlnLCBUeXBlTm9kZSwgRURTSW5mbywgU2NvcGVBbmFseXNpc1xufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRhY3RpY2FQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMnO1xuXG4vKipcbiAqIENMSSBlbnRyeSBwb2ludCBmb3IgVGFjdGljYVxuICpcbiAqIFJ1bnMgdGhlIGFuYWx5emVyIG92ZXIgYSB0c2NvbmZpZyBwcm9qZWN0IGFuZCB3cml0ZXMgLnRhY3RpY2EvIG91dHB1dFxuICovXG5cbmludGVyZmFjZSBDTElPcHRpb25zIGV4dGVuZHMgVGFjdGljYUNvbmZpZyB7XG5cdHdhdGNoPzogYm9vbGVhbjtcblx0cHJvamVjdD86IHN0cmluZztcblx0aGVscD86IGJvb2xlYW47XG5cdC8qKiBDdXN0b20gdG9wb2xvZ2ljYSBkaXJlY3RvcmllcyB0byBzY2FuICovXG5cdHRvcG9sb2dpY2FEaXJzPzogc3RyaW5nW107XG5cdC8qKiBBZGQgLmpzIGV4dGVuc2lvbnMgdG8gcmVsYXRpdmUgaW1wb3J0cyBmb3IgRVNNIE5vZGVOZXh0IHJlc29sdXRpb24gKi9cblx0ZXNtPzogYm9vbGVhbjtcblx0LyoqIEVuYWJsZSBFRFMgKEV4ZWN1dGlvbiBEYXRhIFN0b3JhZ2UpIHRyYWNraW5nICovXG5cdGVkcz86IGJvb2xlYW47XG5cdC8qKiBQcm9ncmFtbWF0aWMgcGx1Z2luczsgY29uZmlnLWZpbGUgcGx1Z2lucyBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhlc2UgKi9cblx0cGx1Z2lucz86IFRhY3RpY2FQbHVnaW5bXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXJncyAoYXJnczogc3RyaW5nW10pOiBDTElPcHRpb25zIHtcblx0Y29uc3Qgb3B0aW9uczogQ0xJT3B0aW9ucyA9IHt9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGFyZyA9IGFyZ3NbIGkgXTtcblxuXHRcdHN3aXRjaCAoYXJnKSB7XG5cdFx0Y2FzZSAnLXcnOlxuXHRcdGNhc2UgJy0td2F0Y2gnOlxuXHRcdFx0b3B0aW9ucy53YXRjaCA9IHRydWU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICctcCc6XG5cdFx0Y2FzZSAnLS1wcm9qZWN0Jzpcblx0XHRcdG9wdGlvbnMucHJvamVjdCA9IGFyZ3NbICsraSBdO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLW8nOlxuXHRcdGNhc2UgJy0tb3V0cHV0Jzpcblx0XHRcdG9wdGlvbnMub3V0cHV0RGlyID0gYXJnc1sgKytpIF07XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICctaSc6XG5cdFx0Y2FzZSAnLS1pbmNsdWRlJzpcblx0XHRcdG9wdGlvbnMuaW5jbHVkZSA9IChvcHRpb25zLmluY2x1ZGUgfHwgW10pLmNvbmNhdChhcmdzWyArK2kgXS5zcGxpdCgnLCcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy1lJzpcblx0XHRjYXNlICctLWV4Y2x1ZGUnOlxuXHRcdFx0b3B0aW9ucy5leGNsdWRlID0gKG9wdGlvbnMuZXhjbHVkZSB8fCBbXSkuY29uY2F0KGFyZ3NbICsraSBdLnNwbGl0KCcsJykpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLW0nOlxuXHRcdGNhc2UgJy0tbW9kdWxlLWF1Z21lbnRhdGlvbic6XG5cdFx0XHRvcHRpb25zLmdsb2JhbEF1Z21lbnRhdGlvbiA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLXYnOlxuXHRcdGNhc2UgJy0tdmVyYm9zZSc6XG5cdFx0XHRvcHRpb25zLnZlcmJvc2UgPSB0cnVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLXQnOlxuXHRcdGNhc2UgJy0tdG9wb2xvZ2ljYSc6XG5cdFx0XHRvcHRpb25zLnRvcG9sb2dpY2FEaXJzID0gKG9wdGlvbnMudG9wb2xvZ2ljYURpcnMgfHwgW10pLmNvbmNhdChhcmdzWyArK2kgXS5zcGxpdCgnLCcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy0tZXNtJzpcblx0XHRcdG9wdGlvbnMuZXNtID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy0tZWRzJzpcblx0XHRcdG9wdGlvbnMuZWRzID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy0tbm8tZWRzJzpcblx0XHRcdG9wdGlvbnMuZWRzID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICctaCc6XG5cdFx0Y2FzZSAnLS1oZWxwJzpcblx0XHRcdG9wdGlvbnMuaGVscCA9IHRydWU7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBQcmludCBoZWxwIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gcHJpbnRIZWxwICgpOiB2b2lkIHtcblx0Y29uc29sZS5sb2coYFxuVGFjdGljYSAtIFR5cGUgZGVmaW5pdGlvbiBnZW5lcmF0b3IgZm9yIE1uZW1vbmljYVxuXG5Vc2FnZTogdGFjdGljYSBbb3B0aW9uc11cblxuT3B0aW9uczpcbiAgLXcsIC0td2F0Y2ggICAgICAgICAgICAgICBXYXRjaCBmb3IgZmlsZSBjaGFuZ2VzIGFuZCByZWdlbmVyYXRlIHR5cGVzXG4gIC1wLCAtLXByb2plY3QgICAgICAgICAgICAgUGF0aCB0byB0c2NvbmZpZy5qc29uIChkZWZhdWx0OiAuL3RzY29uZmlnLmpzb24pXG4gIC1vLCAtLW91dHB1dCAgICAgICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSlcbiAgLWksIC0taW5jbHVkZSAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIHBhdHRlcm5zIHRvIGluY2x1ZGVcbiAgLWUsIC0tZXhjbHVkZSAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIHBhdHRlcm5zIHRvIGV4Y2x1ZGVcbiAgLXQsIC0tdG9wb2xvZ2ljYSAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0b3BvbG9naWNhIGRpcmVjdG9yaWVzIHRvIHNjYW5cbiAgLW0sIC0tbW9kdWxlLWF1Z21lbnRhdGlvbiBVc2UgbW9kdWxlIGF1Z21lbnRhdGlvbiBpbnN0ZWFkIG9mIGdsb2JhbCAobGVnYWN5IG1vZGUpXG4gIC0tZXNtICAgICAgICAgICAgICAgICAgICAgQWRkIC5qcyBleHRlbnNpb25zIHRvIHJlbGF0aXZlIGltcG9ydHMgKE5vZGVOZXh0IEVTTSlcbiAgLS1lZHMgICAgICAgICAgICAgICAgICAgICBFbmFibGUgRURTIChFeGVjdXRpb24gRGF0YSBTdG9yYWdlKSB0cmFja2luZ1xuICAtLW5vLWVkcyAgICAgICAgICAgICAgICAgIERpc2FibGUgRURTIHRyYWNraW5nXG4gIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbG9nZ2luZ1xuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcblxuQ29uZmlndXJhdGlvbjpcbiAgRnJhbWV3b3JrIGluc3RydW1lbnRhdGlvbiB2b2NhYnVsYXJ5IGlzIHN1cHBsaWVkIGJ5IHBsdWdpbnMuIFBsYWNlIGFcbiAgLnRhY3RpY2EuanMgKG9yIHRhY3RpY2EuY29uZmlnLmpzKSBuZXh0IHRvIHlvdXIgdHNjb25maWcuanNvbjpcblxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7IHBsdWdpbnM6IFsgJ3lvdXItZnJhbWV3b3JrLWFkYXB0ZXIvdGFjdGljYScgXSB9O1xuXG4gIEVudHJpZXMgYXJlIG1vZHVsZSBzcGVjaWZpZXJzIChyZXF1aXJlZCByZWxhdGl2ZSB0byB0aGUgY29uZmlnIGZpbGUpIG9yXG4gIGlubGluZSBwbHVnaW4gb2JqZWN0cy4gV2l0aG91dCBwbHVnaW5zLCBpbnN0cnVtZW50YXRpb24uanNvbiBwb2ludHMgPSBbXS5cblxuRXhhbXBsZXM6XG4gIHRhY3RpY2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIHR5cGVzIHdpdGggZ2xvYmFsIGF1Z21lbnRhdGlvbiAoZGVmYXVsdClcbiAgdGFjdGljYSAtLXdhdGNoICAgICAgICAgICAgICAgICAgICAgICMgV2F0Y2ggbW9kZVxuICB0YWN0aWNhIC0tbW9kdWxlLWF1Z21lbnRhdGlvbiAgICAgICAgIyBVc2UgbGVnYWN5IG1vZHVsZSBhdWdtZW50YXRpb24gbW9kZVxuICB0YWN0aWNhIC0tcHJvamVjdCAuL3NyYy90c2NvbmZpZy5qc29uICMgQ3VzdG9tIHRzY29uZmlnIHBhdGhcbiAgdGFjdGljYSAtLW91dHB1dCAuL3R5cGVzL21uZW1vbmljYSAgICMgQ3VzdG9tIG91dHB1dCBkaXJlY3RvcnlcbiAgdGFjdGljYSAtLXRvcG9sb2dpY2EgLi9zcmMvYWktdHlwZXMgICMgU2NhbiBzcGVjaWZpYyB0b3BvbG9naWNhIGRpcmVjdG9yeVxuYCk7XG59XG5cbi8qKlxuICogRmluZCB0c2NvbmZpZy5qc29uXG4gKi9cbmZ1bmN0aW9uIGZpbmRUc0NvbmZpZyAocHJvamVjdFBhdGg/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAocHJvamVjdFBhdGgpIHtcblx0XHRpZiAoZnMuZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcblx0XHRcdHJldHVybiBwcm9qZWN0UGF0aDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0IGZpbGUgbm90IGZvdW5kOiAke3Byb2plY3RQYXRofWApO1xuXHR9XG5cblx0Ly8gTG9vayBmb3IgdHNjb25maWcuanNvbiBpbiBjdXJyZW50IGRpcmVjdG9yeSBhbmQgcGFyZW50IGRpcmVjdG9yaWVzXG5cdGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcblx0d2hpbGUgKGN1cnJlbnREaXIgIT09IHBhdGguZGlybmFtZShjdXJyZW50RGlyKSkge1xuXHRcdGNvbnN0IHRzY29uZmlnUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCAndHNjb25maWcuanNvbicpO1xuXHRcdGlmIChmcy5leGlzdHNTeW5jKHRzY29uZmlnUGF0aCkpIHtcblx0XHRcdHJldHVybiB0c2NvbmZpZ1BhdGg7XG5cdFx0fVxuXHRcdGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExvYWQgVHlwZVNjcmlwdCBwcm9ncmFtIGZyb20gdHNjb25maWdcbiAqL1xuZnVuY3Rpb24gbG9hZFByb2dyYW0gKHRzY29uZmlnUGF0aDogc3RyaW5nKTogdHMuUHJvZ3JhbSB7XG5cdGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c2NvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG5cblx0aWYgKGNvbmZpZ0ZpbGUuZXJyb3IpIHtcblx0XHRjb25zdCBlcnJvclRleHQgPSB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KFxuXHRcdFx0Y29uZmlnRmlsZS5lcnJvci5tZXNzYWdlVGV4dCxcblx0XHRcdCdcXG4nXG5cdFx0KTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHJlYWRpbmcgdHNjb25maWc6ICR7ZXJyb3JUZXh0fWApO1xuXHR9XG5cblx0Ly8gVGFjdGljYSBhbmFseXplcyB3aXRoIGl0cyBvd24gYnVuZGxlZCBUeXBlU2NyaXB0LCB3aGljaCBtYXkgYmUgbmV3ZXJcblx0Ly8gdGhhbiB0aGUgY29tcGlsZXIgdGhlIHVzZXIncyB0c2NvbmZpZyB3YXMgd3JpdHRlbiBmb3IgKGUuZy4gYSBUUzUtZXJhXG5cdC8vIGNvbmZpZyBjYXJyeWluZyBgYmFzZVVybGAsIGRlcHJlY2F0ZWQtZXJyb3JlZCBieSBUUzYncyBUUzUxMDEpLlxuXHQvLyBBbmFseXNpcyBuZXZlciBlbWl0cyB1c2VyIGNvZGUsIHNvIGRlcHJlY2F0aW9uIGVycm9ycyBhcmUgYWJvdXQgdGhlXG5cdC8vIHVzZXIncyBidWlsZCBwaXBlbGluZSwgbm90IGFib3V0IGFuYWx5emFiaWxpdHkg4oCUIHNpbGVuY2UgdGhlbSBmb3IgdGhlXG5cdC8vIGFuYWx5c2lzIHByb2dyYW0uIFVuY29uZGl0aW9uYWw6IGEgdXNlci1waW5uZWQgb2xkZXIgdmFsdWUgKCc1LjAnKVxuXHQvLyBkb2VzIG5vdCBzaWxlbmNlIDYuMCBkZXByZWNhdGlvbnMgYW5kIHdvdWxkIHN0aWxsIGZhdGFsIGJlbG93LlxuXHRjb25zdCByYXdDb25maWcgPSBjb25maWdGaWxlLmNvbmZpZyA/PyB7fTtcblx0cmF3Q29uZmlnLmNvbXBpbGVyT3B0aW9ucyA9IHtcblx0XHQuLi5yYXdDb25maWcuY29tcGlsZXJPcHRpb25zLFxuXHRcdGlnbm9yZURlcHJlY2F0aW9ucyA6ICc2LjAnLFxuXHR9O1xuXG5cdGNvbnN0IHBhcnNlZENvbmZpZyA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KFxuXHRcdHJhd0NvbmZpZyxcblx0XHR0cy5zeXMsXG5cdFx0cGF0aC5kaXJuYW1lKHRzY29uZmlnUGF0aClcblx0KTtcblxuXHRpZiAocGFyc2VkQ29uZmlnLmVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlcyA9IHBhcnNlZENvbmZpZy5lcnJvcnMubWFwKGUgPT5cblx0XHRcdHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZS5tZXNzYWdlVGV4dCwgJ1xcbicpKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgdHNjb25maWc6ICR7ZXJyb3JNZXNzYWdlcy5qb2luKCdcXG4nKX1gKTtcblx0fVxuXG5cdGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHtcblx0XHRyb290TmFtZXMgOiBwYXJzZWRDb25maWcuZmlsZU5hbWVzLFxuXHRcdG9wdGlvbnMgICA6IHBhcnNlZENvbmZpZy5vcHRpb25zLFxuXHR9KTtcblxuXHRyZXR1cm4gcHJvZ3JhbTtcbn1cblxuLyoqXG4gKiBMb29rIHVwIGEgdmFyaWFibGUgYnkgbmFtZSBzdGFydGluZyBmcm9tIGEgc2NvcGUsIHdhbGtpbmcgb3V0d2FyZCB0aHJvdWdoXG4gKiBwYXJlbnRTY29wZUlkLiBUaGUgaW5uZXJtb3N0IGJpbmRpbmcgd2lucyBldmVuIHdoZW4gaXQgY2FycmllcyBubyB0eXBlUGF0aFxuICogKHNoYWRvd2luZyBob25lc3R5IOKAlCBhbiB1bnR5cGVkIGxvY2FsIHNoYWRvd3MgYSB0eXBlZCBvdXRlciBvbmUpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkVmFyaWFibGVUeXBlUGF0aCAoXG5cdG5hbWU6IHN0cmluZyxcblx0c2NvcGVJZDogc3RyaW5nLFxuXHRzY29wZUFuYWx5c2lzOiBTY29wZUFuYWx5c2lzXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgY3VycmVudDogc3RyaW5nIHwgdW5kZWZpbmVkID0gc2NvcGVJZDtcblx0d2hpbGUgKGN1cnJlbnQpIHtcblx0XHRjb25zdCB2YXJpYWJsZSA9IHNjb3BlQW5hbHlzaXMudmFyaWFibGVzLmdldChgJHtjdXJyZW50fSMke25hbWV9YCk7XG5cdFx0aWYgKHZhcmlhYmxlKSB7XG5cdFx0XHRjb25zdCB7IHR5cGVQYXRoIH0gPSB2YXJpYWJsZTtcblx0XHRcdHJldHVybiB0eXBlUGF0aDtcblx0XHR9XG5cdFx0Y3VycmVudCA9IHNjb3BlQW5hbHlzaXMuc2NvcGVzLmdldChjdXJyZW50KT8ucGFyZW50U2NvcGVJZDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEpvaW4gZGF0YSBmb3IgbW5lbW9ncmFwaGljYSdzIHdyYXBwZXJzIGxheWVyOiBwaW4gZWFjaCB3cmFwIGVudHJ5IHRvIHRoZVxuICogc2NvcGUgaG9sZGluZyBpdHMgY2FsbCBzaXRlLCBhbmQgcmVzb2x2ZSB0aGUgd3JhcHBlZCBpbnN0YW5jZSBhcmd1bWVudCdzXG4gKiBtbmVtb25pY2EgdHlwZSB0aHJvdWdoIHRoZSBzY29wZS12YXJpYWJsZSBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gYXR0YWNoV3JhcEpvaW5EYXRhIChcblx0ZWRzOiBNYXA8c3RyaW5nLCBFRFNJbmZvW10+LFxuXHRzY29wZVdhbGtlcjogTG9jYWxTY29wZVdhbGtlcixcblx0c2NvcGVBbmFseXNpczogU2NvcGVBbmFseXNpc1xuKTogdm9pZCB7XG5cdGZvciAoY29uc3QgZW50cmllcyBvZiBlZHMudmFsdWVzKCkpIHtcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcblx0XHRcdGlmIChlbnRyeS5raW5kICE9PSAnd3JhcCcpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBob2xkZXJTY29wZUlkID0gc2NvcGVXYWxrZXIuZmluZEhvbGRlclNjb3BlSWQoZW50cnkubG9jYXRpb24pO1xuXHRcdFx0aWYgKCFob2xkZXJTY29wZUlkKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0ZW50cnkuc2NvcGVJZCA9IGhvbGRlclNjb3BlSWQ7XG5cdFx0XHRpZiAoIWVudHJ5Lmluc3RhbmNlQXJnKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgd3JhcHNUeXBlUGF0aCA9IHJlc29sdmVTY29wZWRWYXJpYWJsZVR5cGVQYXRoKFxuXHRcdFx0XHRlbnRyeS5pbnN0YW5jZUFyZyxcblx0XHRcdFx0aG9sZGVyU2NvcGVJZCxcblx0XHRcdFx0c2NvcGVBbmFseXNpc1xuXHRcdFx0KTtcblx0XHRcdGlmICh3cmFwc1R5cGVQYXRoKSB7XG5cdFx0XHRcdGVudHJ5LndyYXBzVHlwZVBhdGggPSB3cmFwc1R5cGVQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJlbmRlciB0eXBlIGhpZXJhcmNoeSBhcyBhbiBBU0NJSSB0cmVlIHN0cmluZy5cbiAqIERpc3BsYXktb25seTogc2libGluZ3MgYXJlIHNvcnRlZCBieSBmdWxsUGF0aCBhdCByZW5kZXIgdGltZSAoY29kZS11bml0XG4gKiBvcmRlciDigJQgZGVmYXVsdC1jb2xsZWN0aW9uIFBhc2NhbENhc2Ugcm9vdHMgbGFuZCBiZWZvcmUgdGhlXG4gKiBgY29sbGVjdGlvbl9OOjpgLXByZWZpeGVkIG9uZXMpLiBUaGUgZ3JhcGggaXRzZWxmIGtlZXBzIGRpc2NvdmVyeSBvcmRlcjtcbiAqIGhpZXJhcmNoeS5qc29uIGlzIHVuYWZmZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclR5cGVIaWVyYXJjaHkgKGdyYXBoOiBUeXBlR3JhcGhJbXBsKTogc3RyaW5nIHtcblx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gWyAnVHlwZSBIaWVyYXJjaHkgKFRyaWUpOicgXTtcblxuXHRmdW5jdGlvbiBzb3J0ZWRCeUZ1bGxQYXRoIChub2RlczogVHlwZU5vZGVbXSk6IFR5cGVOb2RlW10ge1xuXHRcdGNvbnN0IHNvcnRlZCA9IEFycmF5LmZyb20obm9kZXMpO1xuXHRcdHNvcnRlZC5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRpZiAoYS5mdWxsUGF0aCA8IGIuZnVsbFBhdGgpIHsgcmV0dXJuIC0xOyB9XG5cdFx0XHRpZiAoYS5mdWxsUGF0aCA+IGIuZnVsbFBhdGgpIHsgcmV0dXJuIDE7IH1cblx0XHRcdHJldHVybiAwO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzb3J0ZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJOb2RlIChub2RlOiBUeXBlTm9kZSwgcHJlZml4ID0gJycsIGlzTGFzdCA9IHRydWUpOiB2b2lkIHtcblx0XHRjb25zdCBjb25uZWN0b3IgPSBpc0xhc3QgPyAn4pSU4pSA4pSAICcgOiAn4pSc4pSA4pSAICc7XG5cdFx0Ly8gVXNlIG5vZGUuZnVsbFBhdGggZGlyZWN0bHkgYW5kIGNvbnZlcnQgZG90cyB0byB1bmRlcnNjb3Jlc1xuXHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IG5vZGUuZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyk7XG5cdFx0bGluZXMucHVzaChgJHtwcmVmaXh9JHtjb25uZWN0b3J9JHtpbnN0YW5jZU5hbWV9YCk7XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IHNvcnRlZEJ5RnVsbFBhdGgoQXJyYXkuZnJvbShub2RlLmNoaWxkcmVuLnZhbHVlcygpKSk7XG5cdFx0Y29uc3QgbmV3UHJlZml4ID0gcHJlZml4ICsgKGlzTGFzdCA/ICcgICAgJyA6ICfilIIgICAnKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHJlbmRlck5vZGUoY2hpbGRyZW5bIGkgXSwgbmV3UHJlZml4LCBpID09PSBjaGlsZHJlbi5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCByb290cyA9IHNvcnRlZEJ5RnVsbFBhdGgoQXJyYXkuZnJvbShncmFwaC5yb290cy52YWx1ZXMoKSkpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0cmVuZGVyTm9kZShyb290c1sgaSBdLCAnJywgaSA9PT0gcm9vdHMubGVuZ3RoIC0gMSk7XG5cdH1cblx0Ly8gRW1wdHkgbGluZSBhdCBlbmRcblx0bGluZXMucHVzaCgnJyk7XG5cblx0Y29uc3QgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUHJpbnQgdHlwZSBoaWVyYXJjaHkgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmZ1bmN0aW9uIHByaW50VHlwZUhpZXJhcmNoeSAoZ3JhcGg6IFR5cGVHcmFwaEltcGwpOiB2b2lkIHtcblx0Y29uc3Qgb3V0cHV0ID0gcmVuZGVyVHlwZUhpZXJhcmNoeShncmFwaCk7XG5cdGNvbnNvbGUubG9nKG91dHB1dCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgQG1uZW1vbmljYS9kaXZlIGlzIHByZXNlbnQgaW4gcGFja2FnZS5qc29uIGRlcGVuZGVuY2llc1xuICovXG5mdW5jdGlvbiBoYXNEaXZlRGVwZW5kZW5jeSAocHJvamVjdERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAncGFja2FnZS5qc29uJyk7XG5cdGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuXHRcdGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cdFx0Y29uc3QgZGVwcyA9IHBrZy5kZXBlbmRlbmNpZXMgfHwge307XG5cdFx0Y29uc3QgZGV2RGVwcyA9IHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge307XG5cdFx0Y29uc3QgcGVlckRlcHMgPSBwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fTtcblx0XHRyZXR1cm4gJ0BtbmVtb25pY2EvZGl2ZScgaW4gZGVwcyB8fCAnQG1uZW1vbmljYS9kaXZlJyBpbiBkZXZEZXBzIHx8ICdAbW5lbW9uaWNhL2RpdmUnIGluIHBlZXJEZXBzO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBTY2FuIGZvciB0b3BvbG9naWNhIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzXG4gKi9cbmZ1bmN0aW9uIHNjYW5Ub3BvbG9naWNhRGlyZWN0b3JpZXMgKHByb2plY3REaXI6IHN0cmluZywgY3VzdG9tRGlycz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRjb25zdCBkaXJzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vIEZpcnN0LCBhZGQgY3VzdG9tIGRpcmVjdG9yaWVzIGlmIHNwZWNpZmllZFxuXHRpZiAoY3VzdG9tRGlycykge1xuXHRcdGZvciAoY29uc3QgZGlyIG9mIGN1c3RvbURpcnMpIHtcblx0XHRcdGNvbnN0IGRpclBhdGggPSBwYXRoLmlzQWJzb2x1dGUoZGlyKSA/IGRpciA6IHBhdGguam9pbihwcm9qZWN0RGlyLCBkaXIpO1xuXHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHRkaXJzLnB1c2goZGlyUGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFdhcm5pbmc6IFRvcG9sb2dpY2EgZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtkaXJQYXRofWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoZW4gYXV0by1kaXNjb3ZlciBzdGFuZGFyZCB0b3BvbG9naWNhIGRpcmVjdG9yaWVzXG5cdGNvbnN0IHBvc3NpYmxlRGlycyA9IFsgJ2FpLXR5cGVzJywgJ3R5cGVzJywgJ3RvcG9sb2dpY2EtdHlwZXMnIF07XG5cblx0Zm9yIChjb25zdCBkaXJOYW1lIG9mIHBvc3NpYmxlRGlycykge1xuXHRcdGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4ocHJvamVjdERpciwgZGlyTmFtZSk7XG5cdFx0aWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0Ly8gQXZvaWQgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCFkaXJzLmluY2x1ZGVzKGRpclBhdGgpKSB7XG5cdFx0XHRcdGRpcnMucHVzaChkaXJQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbHNvIHNjYW4gc3JjLyBzdWJkaXJlY3Rvcnlcblx0Y29uc3Qgc3JjUGF0aCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnc3JjJyk7XG5cdGlmIChmcy5leGlzdHNTeW5jKHNyY1BhdGgpICYmIGZzLnN0YXRTeW5jKHNyY1BhdGgpLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRmb3IgKGNvbnN0IGRpck5hbWUgb2YgcG9zc2libGVEaXJzKSB7XG5cdFx0XHRjb25zdCBkaXJQYXRoID0gcGF0aC5qb2luKHNyY1BhdGgsIGRpck5hbWUpO1xuXHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHQvLyBBdm9pZCBkdXBsaWNhdGVzXG5cdFx0XHRcdGlmICghZGlycy5pbmNsdWRlcyhkaXJQYXRoKSkge1xuXHRcdFx0XHRcdGRpcnMucHVzaChkaXJQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkaXJzO1xufVxuXG4vKipcbiAqIENvbmZpZyBmaWxlIGNhbmRpZGF0ZXMgKGVzbGludC1zdHlsZSBwcm9qZWN0IGNvbmZpZyksIHNlYXJjaGVkIG5leHQgdG9cbiAqIHRoZSByZXNvbHZlZCB0c2NvbmZpZyBmaXJzdCwgdGhlbiBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqL1xuY29uc3QgQ09ORklHX0ZJTEVfTkFNRVMgPSBbICcudGFjdGljYS5qcycsICd0YWN0aWNhLmNvbmZpZy5qcycgXTtcblxuaW50ZXJmYWNlIFRhY3RpY2FDb25maWdGaWxlIHtcblx0cGx1Z2lucz86IEFycmF5PFRhY3RpY2FQbHVnaW4gfCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIExvYWQgZnJhbWV3b3JrLXZvY2FidWxhcnkgcGx1Z2luczogcHJvZ3JhbW1hdGljIG9wdGlvbnMgZmlyc3QsIHRoZW4gdGhlXG4gKiBwcm9qZWN0IGNvbmZpZyBmaWxlLiBTdHJpbmcgZW50cmllcyBhcmUgbW9kdWxlIHNwZWNpZmllcnMgcmVxdWlyZWRcbiAqIHJlbGF0aXZlIHRvIHRoZSBjb25maWcgZmlsZSAoZS5nLiBhbiBhZGFwdGVyIHBhY2thZ2UncyBwbHVnaW4gc3VicGF0aCkuXG4gKiBXaXRob3V0IGEgY29uZmlnIGZpbGUgYW5kIHdpdGhvdXQgcHJvZ3JhbW1hdGljIHBsdWdpbnMgdGhlIGFuYWx5emVyXG4gKiBzdGF5cyBmcmFtZXdvcmstYmxpbmQgYW5kIGluc3RydW1lbnRhdGlvbi5qc29uIGNhcnJpZXMgZW1wdHkgcG9pbnRzLlxuICovXG5mdW5jdGlvbiBsb2FkVGFjdGljYVBsdWdpbnMgKHByb2plY3REaXI6IHN0cmluZywgb3B0aW9uczogQ0xJT3B0aW9ucyk6IFRhY3RpY2FQbHVnaW5bXSB7XG5cdGNvbnN0IHBsdWdpbnM6IFRhY3RpY2FQbHVnaW5bXSA9IFsgLi4uKG9wdGlvbnMucGx1Z2lucyB8fCBbXSkgXTtcblxuXHRjb25zdCBzZWFyY2hEaXJzID0gWyBwcm9qZWN0RGlyIF07XG5cdGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cdGlmIChjd2QgIT09IHByb2plY3REaXIpIHtcblx0XHRzZWFyY2hEaXJzLnB1c2goY3dkKTtcblx0fVxuXG5cdGxldCBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGZvciAoY29uc3QgZGlyIG9mIHNlYXJjaERpcnMpIHtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgQ09ORklHX0ZJTEVfTkFNRVMpIHtcblx0XHRcdGNvbnN0IGNhbmRpZGF0ZSA9IHBhdGguam9pbihkaXIsIG5hbWUpO1xuXHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoY2FuZGlkYXRlKSkge1xuXHRcdFx0XHRjb25maWdQYXRoID0gY2FuZGlkYXRlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZ1BhdGgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICghY29uZmlnUGF0aCkge1xuXHRcdHJldHVybiBwbHVnaW5zO1xuXHR9XG5cblx0Ly8gY3JlYXRlUmVxdWlyZSBhbmNob3JlZCBhdCB0aGUgY29uZmlnIGZpbGU6IHRoZSBjb25maWcncyBvd24gaW1wb3J0c1xuXHQvLyBhbmQgc3RyaW5nIHBsdWdpbiBzcGVjaWZpZXJzIHJlc29sdmUgYWdhaW5zdCB0aGUgcHJvamVjdCdzIG1vZHVsZXNcblx0Y29uc3QgY29uZmlnUmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoY29uZmlnUGF0aCk7XG5cdGNvbnN0IGxvYWRlZCA9IGNvbmZpZ1JlcXVpcmUoY29uZmlnUGF0aCk7XG5cdGNvbnN0IGNvbmZpZzogVGFjdGljYUNvbmZpZ0ZpbGUgPSBsb2FkZWQgJiYgdHlwZW9mIGxvYWRlZCA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGxvYWRlZFxuXHRcdD8gbG9hZGVkLmRlZmF1bHRcblx0XHQ6IGxvYWRlZDtcblx0Y29uc3QgZW50cmllcyA9IGNvbmZpZyAmJiBBcnJheS5pc0FycmF5KGNvbmZpZy5wbHVnaW5zKSA/IGNvbmZpZy5wbHVnaW5zIDogW107XG5cblx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0aWYgKHR5cGVvZiBlbnRyeSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHBsdWdpbnMucHVzaChlbnRyeSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbW9kID0gY29uZmlnUmVxdWlyZShlbnRyeSk7XG5cdFx0Y29uc3QgcGx1Z2luOiBUYWN0aWNhUGx1Z2luID0gbW9kICYmIHR5cGVvZiBtb2QgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBtb2Rcblx0XHRcdD8gbW9kLmRlZmF1bHRcblx0XHRcdDogbW9kO1xuXHRcdHBsdWdpbnMucHVzaChwbHVnaW4pO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnN0IG5hbWVzID0gcGx1Z2lucy5tYXAocGx1Z2luID0+IHBsdWdpbi5uYW1lIHx8ICcodW5uYW1lZCknKS5qb2luKCcsICcpO1xuXHRcdGNvbnNvbGUubG9nKGBMb2FkZWQgdGFjdGljYSBjb25maWc6ICR7Y29uZmlnUGF0aH0gKHBsdWdpbnM6ICR7bmFtZXMgfHwgJ25vbmUnfSlgKTtcblx0fVxuXG5cdHJldHVybiBwbHVnaW5zO1xufVxuXG4vKipcbiAqIFJ1biB0eXBlIGdlbmVyYXRpb24uIFJldHVybnMgMCBvbiBzdWNjZXNzOyAxIHdoZW4gdGhlIGdyYXBoIGlkZW50aXR5IGxhd1xuICogYWJvcnRlZCB0aGUgcnVuIChmYWlsdXJlcyBwcmludGVkLCBubyAudGFjdGljYSBvdXRwdXQgd3JpdHRlbikuXG4gKi9cbmZ1bmN0aW9uIHJ1biAob3B0aW9uczogQ0xJT3B0aW9ucyk6IG51bWJlciB7XG5cdGNvbnN0IHRzY29uZmlnUGF0aCA9IGZpbmRUc0NvbmZpZyhvcHRpb25zLnByb2plY3QpO1xuXG5cdGlmICghdHNjb25maWdQYXRoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignRXJyb3I6IENvdWxkIG5vdCBmaW5kIHRzY29uZmlnLmpzb24nKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0Y29uc29sZS5sb2coYFVzaW5nIHRzY29uZmlnOiAke3RzY29uZmlnUGF0aH1gKTtcblx0fVxuXG5cdC8vIEZyYW1ld29yayB2b2NhYnVsYXJ5IGFycml2ZXMgdmlhIHBsdWdpbnMg4oCUIGEgY29uZmlnIGZpbGUgbmV4dCB0byB0aGVcblx0Ly8gdHNjb25maWcgKG9yIGluIGN3ZCkgYW5kL29yIHByb2dyYW1tYXRpYyBvcHRpb25zLiBOb25lIGxvYWRlZCBtZWFuc1xuXHQvLyB0aGUgYW5hbHl6ZXIgZGV0ZWN0cyB6ZXJvIGluc3RydW1lbnRhdGlvbiBwb2ludHMuXG5cdGNvbnN0IHBsdWdpbnMgPSBsb2FkVGFjdGljYVBsdWdpbnMocGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZSh0c2NvbmZpZ1BhdGgpKSwgb3B0aW9ucyk7XG5cblx0Ly8gTG9hZCBUeXBlU2NyaXB0IHByb2dyYW1cblx0Y29uc3QgcHJvZ3JhbSA9IGxvYWRQcm9ncmFtKHRzY29uZmlnUGF0aCk7XG5cblx0Ly8gQ3JlYXRlIGFuYWx5emVyXG5cdGNvbnN0IGFuYWx5emVyID0gbmV3IE1uZW1vbmljYUFuYWx5emVyKHByb2dyYW0sIHBsdWdpbnMpO1xuXG5cdC8vIERldGVybWluZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBleGNsdXNpb25cblx0Y29uc3Qgb3V0cHV0RGlyID0gb3B0aW9ucy5vdXRwdXREaXIgfHwgJy50YWN0aWNhJztcblx0Y29uc3Qgb3V0cHV0RGlyUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvdXRwdXREaXIpO1xuXHQvLyBUaGUgcHJvamVjdC1jb252ZW50aW9uYWwgLnRhY3RpY2EgZGlyIChuZXh0IHRvIHRzY29uZmlnKSBpcyBBTFdBWVNcblx0Ly8gZXhjbHVkZWQsIGV2ZW4gd2hlbiAtLW91dHB1dCBwb2ludHMgZWxzZXdoZXJlOiBnZW5lcmF0ZWQgZmlsZXMgYXJlXG5cdC8vIG5ldmVyIHByb2plY3Qgc291cmNlLiByZXNvbHZlKCkgYm90aCBzaWRlcyDigJQgdHNjb25maWdQYXRoIG1heSBiZVxuXHQvLyByZWxhdGl2ZSAoJy4vdHNjb25maWcuanNvbicpIHdoaWxlIHNvdXJjZUZpbGUuZmlsZU5hbWUgaXMgYWJzb2x1dGVcblx0Y29uc3QgY29udmVudGlvbmFsT3V0cHV0RGlyID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBhdGguZGlybmFtZSh0c2NvbmZpZ1BhdGgpLCAnLnRhY3RpY2EnKTtcblxuXHQvLyBDb2xsZWN0IHNvdXJjZSBmaWxlcyB0byBhbmFseXplXG5cdGNvbnN0IHNvdXJjZUZpbGVzOiB0cy5Tb3VyY2VGaWxlW10gPSBbXTtcblx0Zm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuXHRcdGlmIChzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBhYnNvbHV0ZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXHRcdGlmIChhYnNvbHV0ZUZpbGVOYW1lLnN0YXJ0c1dpdGgob3V0cHV0RGlyUGF0aCArIHBhdGguc2VwKSB8fFxuXHRcdFx0YWJzb2x1dGVGaWxlTmFtZS5zdGFydHNXaXRoKGNvbnZlbnRpb25hbE91dHB1dERpciArIHBhdGguc2VwKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZXhjbHVkZSBwYXR0ZXJuc1xuXHRcdGlmIChvcHRpb25zLmV4Y2x1ZGUpIHtcblx0XHRcdGNvbnN0IHNob3VsZEV4Y2x1ZGUgPSBvcHRpb25zLmV4Y2x1ZGUuc29tZShwYXR0ZXJuID0+XG5cdFx0XHRcdHNvdXJjZUZpbGUuZmlsZU5hbWUuaW5jbHVkZXMocGF0dGVybi5yZXBsYWNlKC9cXCovZywgJycpKSk7XG5cdFx0XHRpZiAoc2hvdWxkRXhjbHVkZSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDaGVjayBpbmNsdWRlIHBhdHRlcm5zXG5cdFx0aWYgKG9wdGlvbnMuaW5jbHVkZSAmJiBvcHRpb25zLmluY2x1ZGUubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgc2hvdWxkSW5jbHVkZSA9IG9wdGlvbnMuaW5jbHVkZS5zb21lKHBhdHRlcm4gPT5cblx0XHRcdFx0c291cmNlRmlsZS5maWxlTmFtZS5pbmNsdWRlcyhwYXR0ZXJuLnJlcGxhY2UoL1xcKi9nLCAnJykpKTtcblx0XHRcdGlmICghc2hvdWxkSW5jbHVkZSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzb3VyY2VGaWxlcy5wdXNoKHNvdXJjZUZpbGUpO1xuXHR9XG5cblx0Ly8gU2NhbiBmb3IgdG9wb2xvZ2ljYSBkaXJlY3Rvcnkgc3RydWN0dXJlcyBGSVJTVFxuXHRjb25zdCBwcm9qZWN0RGlyID0gcGF0aC5kaXJuYW1lKHRzY29uZmlnUGF0aCk7XG5cdGNvbnN0IHRvcG9sb2dpY2FEaXJzID0gc2NhblRvcG9sb2dpY2FEaXJlY3Rvcmllcyhwcm9qZWN0RGlyLCBvcHRpb25zLnRvcG9sb2dpY2FEaXJzKTtcblxuXHRpZiAodG9wb2xvZ2ljYURpcnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zb2xlLmxvZyhgRm91bmQgdG9wb2xvZ2ljYSBkaXJlY3RvcmllczogJHt0b3BvbG9naWNhRGlycy5qb2luKCcsICcpfWApO1xuXHR9XG5cblx0Ly8gQW5hbHl6ZSB0b3BvbG9naWNhIGRpcmVjdG9yaWVzIEJFRk9SRSB1c2FnZSBjb2xsZWN0aW9uXG5cdGNvbnN0IHRvcG9sb2dpY2FBbmFseXplciA9IG5ldyBUb3BvbG9naWNhQW5hbHl6ZXIoKTtcblx0Y29uc3QgdG9wb2xvZ2ljYVR5cGVzID0gbmV3IE1hcDxzdHJpbmcsIGltcG9ydCgnLi90eXBlcycpLlR5cGVOb2RlPigpO1xuXHRmb3IgKGNvbnN0IGRpciBvZiB0b3BvbG9naWNhRGlycykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRvcG9sb2dpY2FBbmFseXplci5hbmFseXplRGlyZWN0b3J5KGRpcik7XG5cdFx0aWYgKHJlc3VsdC50eXBlcy5zaXplID4gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB0b3BvbG9naWNhIHR5cGVzIGZvciBkZWZpbml0aW9ucyBhbmQgdXNhZ2UgdHJhY2tpbmdcblx0XHRcdGZvciAoY29uc3QgWyB0eXBlUGF0aCwgbm9kZSBdIG9mIHJlc3VsdC50eXBlcykge1xuXHRcdFx0XHR0b3BvbG9naWNhVHlwZXMuc2V0KHR5cGVQYXRoLCBub2RlKTtcblx0XHRcdH1cblx0XHRcdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coYEFkZGVkICR7cmVzdWx0LnR5cGVzLnNpemV9IHR5cGVzIGZyb20gJHtkaXJ9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0XHRyZXN1bHQuZXJyb3JzLmZvckVhY2goZXJyID0+IGNvbnNvbGUud2FybihgW1RvcG9sb2dpY2FdICR7ZXJyfWApKTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGQgdG9wb2xvZ2ljYSB0eXBlcyB0byBhbmFseXplciBzbyB0aGV5J3JlIGF2YWlsYWJsZSBmb3IgdXNhZ2UgZGV0ZWN0aW9uXG5cdC8vIFByb2Nlc3MgaW4gb3JkZXIgb2YgcGF0aCBkZXB0aCAocGFyZW50cyBmaXJzdCkgdG8gZW5zdXJlIHByb3BlciBoaWVyYXJjaHlcblx0Y29uc3Qgc29ydGVkVHlwZXMgPSBBcnJheS5mcm9tKHRvcG9sb2dpY2FUeXBlcy5lbnRyaWVzKCkpLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBkZXB0aEEgPSAoYVsgMCBdLm1hdGNoKC9cXC4vZykgfHwgW10pLmxlbmd0aDtcblx0XHRjb25zdCBkZXB0aEIgPSAoYlsgMCBdLm1hdGNoKC9cXC4vZykgfHwgW10pLmxlbmd0aDtcblx0XHRyZXR1cm4gZGVwdGhBIC0gZGVwdGhCO1xuXHR9KTtcblx0Zm9yIChjb25zdCBbIHR5cGVQYXRoLCBub2RlIF0gb2Ygc29ydGVkVHlwZXMpIHtcblx0XHRhbmFseXplci5hZGRUb3BvbG9naWNhVHlwZSh0eXBlUGF0aCwgbm9kZSk7XG5cdH1cblxuXHQvLyBGaXJzdCBwYXNzOiBjb2xsZWN0IGFsbCBkZWZpbml0aW9ucy5cblx0Ly8gTW9kdWxlLXNjb3BlIHRyYWNraW5nIChpbXBvcnRzL2V4cG9ydHMgZm9yIG1vZHVsZXMuanNvbikgaGFwcGVucyBpbiB0aGVcblx0Ly8gc2FtZSBwYXNzIOKAlCBpdCBuZWVkcyBvbmx5IHRoZSBBU1QsIG5vdCB0aGUgY29sbGVjdGVkIGRlZmluaXRpb25zLlxuXHRjb25zdCBtb2R1bGVHcmFwaEJ1aWxkZXIgPSBuZXcgTW9kdWxlR3JhcGhCdWlsZGVyKHByb2dyYW0pO1xuXHRmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2Ygc291cmNlRmlsZXMpIHtcblx0XHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhgQW5hbHl6aW5nIChkZWZpbml0aW9ucyk6ICR7c291cmNlRmlsZS5maWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0YW5hbHl6ZXIuYW5hbHl6ZUZpbGUoc291cmNlRmlsZSk7XG5cdFx0XHRtb2R1bGVHcmFwaEJ1aWxkZXIuYWRkRmlsZShzb3VyY2VGaWxlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGFuYWx5emluZyAke3NvdXJjZUZpbGUuZmlsZU5hbWV9OmAsIGVycik7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2Vjb25kIHBhc3M6IGNvbGxlY3QgdXNhZ2VzIChub3cgYWxsIGRlZmluaXRpb25zIGFyZSBrbm93biwgaW5jbHVkaW5nIHRvcG9sb2dpY2EpXG5cdGFuYWx5emVyLnJlc2V0VXNhZ2VzKCk7XG5cdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRcdGNvbnNvbGUubG9nKGBBbmFseXppbmcgKHVzYWdlcyk6ICR7c291cmNlRmlsZS5maWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0YW5hbHl6ZXIuYW5hbHl6ZUZpbGUoc291cmNlRmlsZSk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBFcnJvciBhbmFseXppbmcgJHtzb3VyY2VGaWxlLmZpbGVOYW1lfTpgLCBlcnIpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXG5cdC8vIEdlbmVyYXRlIHR5cGVzIGZyb20gbW5lbW9uaWNhIGFuYWx5c2lzXG5cdC8vIE5vdGU6IHRvcG9sb2dpY2EgdHlwZXMgYXJlIGFscmVhZHkgYWRkZWQgdG8gdGhlIGFuYWx5emVyJ3MgZ3JhcGggdmlhIGFkZFRvcG9sb2dpY2FUeXBlKClcblx0Y29uc3QgZ3JhcGggPSBhbmFseXplci5nZXRHcmFwaCgpO1xuXG5cdC8vIFBhdGgtYXdhcmUgZ3JhcGggcmVmZXJlbmNlIHJlc29sdXRpb24gKGlkZW50aXR5IGxhdyk6IHRoZSBnZW5lcmF0b3Jcblx0Ly8gcmVzb2x2ZXMgbmFtZXMgdGhyb3VnaCB0aGUgc2FtZSByZWxhdGl2ZS1maXJzdC9yb290L3VuaXF1ZSB0aWVycyB0aGVcblx0Ly8gYW5hbHl6ZXIgdXNlczsgdGhlIGFuYWx5emVyJ3Mgb3duIHZhbHVlL2ltcG9ydCB0aWVycyBhbHJlYWR5IHZldHRlZCB0aGVcblx0Ly8gdHlwZSBzdHJpbmdzIGR1cmluZyBleHRyYWN0aW9uXG5cdGNvbnN0IHJlZmVyZW5jZVJlc29sdmVyOiBHcmFwaFJlZmVyZW5jZVJlc29sdmVyID0gKHNpbXBsZU5hbWUsIGFuY2hvcikgPT4ge1xuXHRcdGNvbnN0IHJlZlJlc3VsdCA9IHJlc29sdmVHcmFwaFR5cGVSZWZlcmVuY2UoZ3JhcGgsIHNpbXBsZU5hbWUsIGFuY2hvcik7XG5cdFx0aWYgKHJlZlJlc3VsdC5zdGF0dXMgPT09ICd1bmlxdWUnKSB7XG5cdFx0XHRyZXR1cm4gcmVmUmVzdWx0Lm5vZGU7XG5cdFx0fVxuXHRcdGlmIChyZWZSZXN1bHQuc3RhdHVzID09PSAnYW1iaWd1b3VzJykge1xuXHRcdFx0cmV0dXJuICdhbWJpZ3VvdXMnO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9O1xuXHRjb25zdCBnZW5lcmF0b3IgPSBuZXcgVHlwZXNHZW5lcmF0b3IoZ3JhcGgsIG9wdGlvbnMuZXNtLCBvcHRpb25zLm91dHB1dERpciwgcmVmZXJlbmNlUmVzb2x2ZXIpO1xuXG5cdC8vIENoZWNrIGlmIG1vZHVsZSBhdWdtZW50YXRpb24gbW9kZSBpcyByZXF1ZXN0ZWQgKGxlZ2FjeSlcblx0Y29uc3QgdXNlTW9kdWxlQXVnbWVudGF0aW9uID0gb3B0aW9ucy5nbG9iYWxBdWdtZW50YXRpb24gPT09IGZhbHNlO1xuXG5cdC8vIEdlbmVyYXRlIGV2ZXJ5dGhpbmcgaW50byBtZW1vcnkgRklSU1Qg4oCUIHRoZSBoYXJkLWZhaWwgbGF3IGJlbG93IG1heVxuXHQvLyBhYm9ydCB0aGUgcnVuLCBhbmQgbm8gLnRhY3RpY2Egb3V0cHV0IGF0IGFsbCBtYXkgYmUgd3JpdHRlbiB0aGVuXG5cdGxldCBnZW5lcmF0ZWRUeXBlczogeyBjb250ZW50OiBzdHJpbmc7IHR5cGVzOiBzdHJpbmdbXSB9O1xuXHRsZXQgcmVnaXN0cnlUeXBlczogeyBjb250ZW50OiBzdHJpbmc7IHR5cGVzOiBzdHJpbmdbXSB9IHwgdW5kZWZpbmVkO1xuXHRsZXQgb3V0cHV0UGF0aDogc3RyaW5nO1xuXG5cdGlmICh1c2VNb2R1bGVBdWdtZW50YXRpb24pIHtcblx0XHQvLyBMZWdhY3kgbW9kZTogZ2VuZXJhdGUgZ2xvYmFsIGF1Z21lbnRhdGlvbiBmaWxlIChpbmRleC5kLnRzKVxuXHRcdGdlbmVyYXRlZFR5cGVzID0gZ2VuZXJhdG9yLmdlbmVyYXRlR2xvYmFsQXVnbWVudGF0aW9uKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRGVmYXVsdCBtb2RlOiBnZW5lcmF0ZSB0eXBlcy50cyBmb3IgbWFudWFsIGltcG9ydHNcblx0XHRnZW5lcmF0ZWRUeXBlcyA9IGdlbmVyYXRvci5nZW5lcmF0ZVR5cGVzRmlsZSgpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgcmVnaXN0cnkudHMgZm9yIHR5cGUtc2FmZSBsb29rdXAoKSBmdW5jdGlvblxuXHRcdHJlZ2lzdHJ5VHlwZXMgPSBnZW5lcmF0b3IuZ2VuZXJhdGVUeXBlUmVnaXN0cnkoKTtcblx0fVxuXG5cdC8vIEhBUkQgRkFJTCAoZ3JhcGggaWRlbnRpdHkgbGF3KTogc2FtZS1uYW1lc3BhY2UgZHVwbGljYXRlIG1uZW1vbmljYVxuXHQvLyBkZWZpbml0aW9ucywgcGx1cyBncmFwaCByZWZlcmVuY2VzIHRoYXQgc3RheSBhbWJpZ3VvdXMgYWZ0ZXJcblx0Ly8gcGF0aC1hd2FyZSByZXNvbHV0aW9uIG9yIHJlc29sdmUgdG8gbm90aGluZy4gUHJpbnQgZXZlcnkgZmFpbHVyZSB3aXRoXG5cdC8vIGFsbCBpdHMgbG9jYXRpb25zIGFuZCB3cml0ZSBOTyAudGFjdGljYSBvdXRwdXQgYXQgYWxsLlxuXHRjb25zdCBmYXRhbEVycm9ycyA9IFsgLi4uYW5hbHl6ZXIuZ2V0UmVzb2x1dGlvbkVycm9ycygpLCAuLi5nZW5lcmF0b3IuZ2V0UmVzb2x1dGlvbkVycm9ycygpIF07XG5cdGlmIChmYXRhbEVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGxldCBwcmludGVkID0gMDtcblx0XHRmb3IgKGNvbnN0IGVycm9yIG9mIGZhdGFsRXJyb3JzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBgJHtlcnJvci5tZXNzYWdlfXwke2Vycm9yLmxvY2F0aW9ucy5qb2luKCd8Jyl9YDtcblx0XHRcdGlmIChzZWVuLmhhcyhrZXkpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0c2Vlbi5hZGQoa2V5KTtcblx0XHRcdHByaW50ZWQrKztcblx0XHRcdGNvbnNvbGUuZXJyb3IoYHRhY3RpY2E6ICR7ZXJyb3IubWVzc2FnZX1gKTtcblx0XHRcdGZvciAoY29uc3QgbG9jYXRpb24gb2YgZXJyb3IubG9jYXRpb25zKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYCAgYXQgJHtsb2NhdGlvbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc29sZS5lcnJvcihgdGFjdGljYTogYWJvcnRpbmcg4oCUICR7cHJpbnRlZH0gcmVzb2x1dGlvbiBmYWlsdXJlKHMpOyBubyAudGFjdGljYSBvdXRwdXQgd3JpdHRlbmApO1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0Ly8gUHJvamVjdCByb290IGFuY2hvcnMgdGhlIHJlbGF0aXZlIHBhdGhzIHRoZSB3cml0ZXIgZW1pdHM6IC50YWN0aWNhXG5cdC8vIG91dHB1dCBtdXN0IHN0YXkgcG9ydGFibGUgd2hlbiB0aGUgY2hlY2tvdXQgbW92ZXMgYmV0d2VlbiBtYWNoaW5lcy5cblx0Ly8gcmVzb2x2ZSgpIGJvdGggc2lkZXMg4oCUIHRzY29uZmlnUGF0aCBpdHNlbGYgbWF5IGJlIHJlbGF0aXZlLlxuXHRjb25zdCBwcm9qZWN0Um9vdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwYXRoLmRpcm5hbWUodHNjb25maWdQYXRoKSk7XG5cdGNvbnN0IHdyaXRlciA9IG5ldyBUeXBlc1dyaXRlcihvcHRpb25zLm91dHB1dERpciwgcHJvamVjdFJvb3QpO1xuXG5cdGlmICh1c2VNb2R1bGVBdWdtZW50YXRpb24pIHtcblx0XHQvLyBMZWdhY3kgbW9kZTogd3JpdGUgZ2xvYmFsIGF1Z21lbnRhdGlvbiBmaWxlIChpbmRleC5kLnRzKVxuXHRcdG91dHB1dFBhdGggPSB3cml0ZXIud3JpdGVHbG9iYWxBdWdtZW50YXRpb24oZ2VuZXJhdGVkVHlwZXMpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIERlZmF1bHQgbW9kZTogd3JpdGUgdHlwZXMudHMgZm9yIG1hbnVhbCBpbXBvcnRzXG5cdFx0b3V0cHV0UGF0aCA9IHdyaXRlci53cml0ZVR5cGVzRmlsZShnZW5lcmF0ZWRUeXBlcyk7XG5cblx0XHRjb25zdCByZWdpc3RyeVBhdGggPSB3cml0ZXIud3JpdGVUbygncmVnaXN0cnkudHMnLCByZWdpc3RyeVR5cGVzIS5jb250ZW50KTtcblxuXHRcdC8vIEdlbmVyYXRlIGluZGV4LnRzIHRvIGV4cG9ydCBldmVyeXRoaW5nXG5cdFx0Y29uc3QgaW5kZXhDb250ZW50ID0gYC8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVFxuLy8gRXhwb3J0IGFsbCBnZW5lcmF0ZWQgdHlwZXNcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyR7b3B0aW9ucy5lc20gPyAnLmpzJyA6ICcnfSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5JHtvcHRpb25zLmVzbSA/ICcuanMnIDogJyd9JztcbmA7XG5cdFx0d3JpdGVyLndyaXRlVG8oJ2luZGV4LnRzJywgaW5kZXhDb250ZW50KTtcblxuXHRcdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgcmVnaXN0cnkudHMgYXQ6ICR7cmVnaXN0cnlQYXRofWApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEdlbmVyYXRlIGRlZmluaXRpb25zLmpzb24gYW5kIHVzYWdlcy5qc29uIGZvciBjb2RlIG5hdmlnYXRpb25cblx0Ly8gSW5jbHVkZSBib3RoIG1uZW1vbmljYSBhbmQgdG9wb2xvZ2ljYSBkZWZpbml0aW9uc1xuXHRjb25zdCBkZWZpbml0aW9ucyA9IG5ldyBNYXAoYW5hbHl6ZXIuZ2V0RGVmaW5pdGlvbnMoKSk7XG5cdGNvbnN0IHVzYWdlcyA9IG5ldyBNYXAoYW5hbHl6ZXIuZ2V0VXNhZ2VzKCkpO1xuXHRcblx0Ly8gQWRkIHRvcG9sb2dpY2EgdHlwZXMgdG8gZGVmaW5pdGlvbnNcblx0Zm9yIChjb25zdCBbIGZ1bGxQYXRoLCB0eXBlTm9kZSBdIG9mIHRvcG9sb2dpY2FUeXBlcykge1xuXHRcdC8vIFNraXAgaWYgYWxyZWFkeSBleGlzdHMgKHByZWZlciBtbmVtb25pY2EncyBhbmFseXNpcylcblx0XHRpZiAoZGVmaW5pdGlvbnMuaGFzKGZ1bGxQYXRoKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdFxuXHRcdGNvbnN0IGRlZmluaXRpb246IGltcG9ydCgnLi90eXBlcycpLkRlZmluaXRpb25JbmZvID0ge1xuXHRcdFx0bmFtZSAgICAgICAgOiB0eXBlTm9kZS5uYW1lLFxuXHRcdFx0bG9jYXRpb24gICAgOiBgJHt0eXBlTm9kZS5zb3VyY2VGaWxlfToke3R5cGVOb2RlLmxpbmV9OiR7dHlwZU5vZGUuY29sdW1ufWAsXG5cdFx0XHRraW5kICAgICAgICA6ICdkZWZpbmUnLFxuXHRcdFx0cGFyZW50ICAgICAgOiB0eXBlTm9kZS5wYXJlbnQgPyB0eXBlTm9kZS5wYXJlbnQuZnVsbFBhdGggOiBudWxsLFxuXHRcdFx0c3RyaWN0Q2hhaW4gOiB0cnVlLFxuXHRcdFx0YmxvY2tFcnJvcnMgOiBmYWxzZVxuXHRcdH07XG5cdFx0ZGVmaW5pdGlvbnMuc2V0KGZ1bGxQYXRoLCBkZWZpbml0aW9uKTtcblx0fVxuXG5cdC8vIExvY2FsLXNjb3BlIHdhbGsgKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgUGhhc2UgMik6IGZ1bmN0aW9uL21ldGhvZC9hcnJvd1xuXHQvLyBzY29wZXMgb25seSAobm8gYmxvY2sgc2NvcGVzIOKAlCBkZWNpc2lvbiA1KSwgdmFyaWFibGVzIHdpdGggaXNNdXRhYmxlIGFuZFxuXHQvLyByZWFzc2lnbm1lbnQgc2l0ZXMgKGRlY2lzaW9uIDYpLiBSdW5zIGFmdGVyIGRlZmluaXRpb25zIGFyZSBrbm93biBzb1xuXHQvLyB2YXJpYWJsZSB0eXBlUGF0aHMgY2FuIHJlc29sdmU7IGhvbGRlclNjb3BlSWQgaXMgYXR0YWNoZWQgdG8gdXNhZ2VzXG5cdC8vIGJlZm9yZSB0aGV5IGFyZSB3cml0dGVuLlxuXHRjb25zdCBzY29wZVdhbGtlciA9IG5ldyBMb2NhbFNjb3BlV2Fsa2VyKCk7XG5cdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdHNjb3BlV2Fsa2VyLmFkZEZpbGUoc291cmNlRmlsZSk7XG5cdH1cblx0Y29uc3Qgc2NvcGVSZXNvbHZlcjogU2NvcGVUeXBlUmVzb2x2ZXIgPSB7XG5cdFx0cmVzb2x2ZUJ5TmFtZSA6IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0aWYgKGRlZmluaXRpb25zLmhhcyhuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdH1cblx0XHRcdGxldCBmb3VuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0Zm9yIChjb25zdCBbIGZ1bGxQYXRoLCBkZWZpbml0aW9uIF0gb2YgZGVmaW5pdGlvbnMpIHtcblx0XHRcdFx0aWYgKGRlZmluaXRpb24ubmFtZSAhPT0gbmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmb3VuZCkge1xuXHRcdFx0XHRcdC8vIEFtYmlndW91cyBuYW1lIOKAlCBubyB0eXBlIGNoZWNrZXIsIHNvIHJlZnVzZSB0byBndWVzc1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm91bmQgPSBmdWxsUGF0aDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9LFxuXHRcdGhhc1BhdGggOiAoZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVmaW5pdGlvbnMuaGFzKGZ1bGxQYXRoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0XHQvLyBUaGUgYW5hbHl6ZXIncyBvd24gbG9va3VwIGxhdywgYWdhaW5zdCB0aGUgc2FtZSBjb21wbGV0ZSBncmFwaCB0aGVcblx0XHQvLyB1c2FnZXMgcGFzcyByZXNvbHZlZCB3aXRoIOKAlCBhIGxvb2t1cCgpIGluaXRpYWxpemVyIHRoZSBhbmFseXplclxuXHRcdC8vIGFjY2VwdGVkIChlLmcuIGFuIGltcG9ydGVkIEhvbGRlci5sb29rdXAoJ1Rva2VuJykpIGxhbmRzIHRoZSBzYW1lXG5cdFx0Ly8gZnVsbFBhdGggaW4gc2NvcGVzLmpzb24gaW5zdGVhZCBvZiBzdGFydmluZyB0aGUgY3JlYXRpb24tZ3JhcGhcblx0XHQvLyBhbmNob3JzLiBSZWplY3RlZCBsb29rdXBzIHN0YXkgdHlwZVBhdGgtbGVzcyBoZXJlOyB0aGUgYW5hbHl6ZXJcblx0XHQvLyBhbHJlYWR5IGhhcmQtZmFpbGVkIHRoZSBydW4gYWJvdmUuXG5cdFx0cmVzb2x2ZUxvb2t1cCA6IChjYWxsOiB0cy5DYWxsRXhwcmVzc2lvbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRjb25zdCByZXNvbHZlZCA9IGFuYWx5emVyLnJlc29sdmVMb29rdXBDYWxsUGF0aChjYWxsKTtcblx0XHRcdHJldHVybiByZXNvbHZlZDtcblx0XHR9LFxuXHR9O1xuXHRjb25zdCBzY29wZUFuYWx5c2lzID0gc2NvcGVXYWxrZXIuYnVpbGQoc2NvcGVSZXNvbHZlcik7XG5cdExvY2FsU2NvcGVXYWxrZXIuYXR0YWNoSG9sZGVyU2NvcGVJZHModXNhZ2VzLCBzY29wZVdhbGtlcik7XG5cblx0Y29uc3QgZGVmaW5pdGlvbnNQYXRoID0gd3JpdGVyLndyaXRlRGVmaW5pdGlvbnNGaWxlKGRlZmluaXRpb25zLCBncmFwaCk7XG5cdGNvbnN0IHVzYWdlc1BhdGggPSB3cml0ZXIud3JpdGVVc2FnZXNGaWxlKHVzYWdlcyk7XG5cblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgZGVmaW5pdGlvbnMuanNvbiBhdDogJHtkZWZpbml0aW9uc1BhdGh9YCk7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCB1c2FnZXMuanNvbiBhdDogJHt1c2FnZXNQYXRofWApO1xuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIEVEUyBzZXR0aW5nOiBleHBsaWNpdCBmbGFnID4gYXV0by1kZXRlY3QgZGl2ZSA+IGRlZmF1bHQgb2ZmXG5cdGxldCBlbmFibGVFRFMgPSBvcHRpb25zLmVkcztcblx0aWYgKGVuYWJsZUVEUyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZW5hYmxlRURTID0gaGFzRGl2ZURlcGVuZGVuY3kocHJvamVjdERpcik7XG5cdH1cblxuXHRpZiAoZW5hYmxlRURTKSB7XG5cdFx0Y29uc3QgZWRzID0gYW5hbHl6ZXIuZ2V0RURTVXNhZ2VzKCk7XG5cdFx0YXR0YWNoV3JhcEpvaW5EYXRhKGVkcywgc2NvcGVXYWxrZXIsIHNjb3BlQW5hbHlzaXMpO1xuXHRcdGNvbnN0IGVkc1BhdGggPSB3cml0ZXIud3JpdGVFRFNGaWxlKGVkcyk7XG5cdFx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBlZHMuanNvbiBhdDogJHtlZHNQYXRofWApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEFsd2F5cyBnZW5lcmF0ZSBmbG93Lmpzb24gKG5hdGl2ZSBpbnN0YW5jZSB1c2FnZSB0cmFja2luZylcblx0Y29uc3QgZmxvdyA9IGFuYWx5emVyLmdldEZsb3dVc2FnZXMoKTtcblx0Y29uc3QgZmxvd1BhdGggPSB3cml0ZXIud3JpdGVGbG93RmlsZShmbG93KTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnN0IGZsb3dDb3VudCA9IEFycmF5LmZyb20oZmxvdy52YWx1ZXMoKSkucmVkdWNlKChzdW0sIGFycikgPT4gc3VtICsgYXJyLmxlbmd0aCwgMCk7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBmbG93Lmpzb24gYXQ6ICR7Zmxvd1BhdGh9ICgke2Zsb3dDb3VudH0gZmxvdyBlbnRyaWVzKWApO1xuXHR9XG5cblx0Ly8gQWx3YXlzIGdlbmVyYXRlIG1vZHVsZXMuanNvbiAobW9kdWxlLXNjb3BlIGdyYXBoOiBpbXBvcnRzL2V4cG9ydHMsXG5cdC8vIGRlcGVuZGVuY2llcywgY3ljbGVzLCBjcm9zcy1tb2R1bGUgbW5lbW9uaWNhLXR5cGUgZWRnZXMpXG5cdGNvbnN0IGRlZmluZWRUeXBlc0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcblx0Zm9yIChjb25zdCBbIGZ1bGxQYXRoLCBkZWZpbml0aW9uIF0gb2YgZGVmaW5pdGlvbnMpIHtcblx0XHRjb25zdCB7IGxvY2F0aW9uIH0gPSBkZWZpbml0aW9uO1xuXHRcdGNvbnN0IGxhc3RDb2xvbiA9IGxvY2F0aW9uLmxhc3RJbmRleE9mKCc6Jyk7XG5cdFx0Y29uc3QgcHJldkNvbG9uID0gbG9jYXRpb24ubGFzdEluZGV4T2YoJzonLCBsYXN0Q29sb24gLSAxKTtcblx0XHRjb25zdCBmaWxlID0gbG9jYXRpb24uc2xpY2UoMCwgcHJldkNvbG9uKTtcblx0XHRjb25zdCBsaXN0ID0gZGVmaW5lZFR5cGVzQnlGaWxlLmdldChmaWxlKSA/PyBbXTtcblx0XHRsaXN0LnB1c2goZnVsbFBhdGgpO1xuXHRcdGRlZmluZWRUeXBlc0J5RmlsZS5zZXQoZmlsZSwgbGlzdCk7XG5cdH1cblx0Y29uc3QgbW9kdWxlR3JhcGggPSBtb2R1bGVHcmFwaEJ1aWxkZXIuYnVpbGQoZGVmaW5lZFR5cGVzQnlGaWxlKTtcblx0Y29uc3QgbW9kdWxlc1BhdGggPSB3cml0ZXIud3JpdGVNb2R1bGVzRmlsZShtb2R1bGVHcmFwaCk7XG5cdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zdCBtb2R1bGVDb3VudCA9IG1vZHVsZUdyYXBoLm1vZHVsZXMuc2l6ZTtcblx0XHRjb25zdCBlZGdlQ291bnQgPSBtb2R1bGVHcmFwaC5lZGdlcy5sZW5ndGg7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBtb2R1bGVzLmpzb24gYXQ6ICR7bW9kdWxlc1BhdGh9ICgke21vZHVsZUNvdW50fSBtb2R1bGVzLCAke2VkZ2VDb3VudH0gZWRnZXMpYCk7XG5cdH1cblxuXHQvLyBBbHdheXMgZ2VuZXJhdGUgc2NvcGVzLmpzb24gKGxvY2FsLXNjb3BlIHdhbGtlcjogc2NvcGVzLCB2YXJpYWJsZXMsXG5cdC8vIHJlYXNzaWdubWVudCBmbG93LXRlcm1pbmF0aW9uIHBvaW50cylcblx0Y29uc3Qgc2NvcGVzUGF0aCA9IHdyaXRlci53cml0ZVNjb3Blc0ZpbGUoc2NvcGVBbmFseXNpcyk7XG5cdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zdCBzY29wZUNvdW50ID0gc2NvcGVBbmFseXNpcy5zY29wZXMuc2l6ZTtcblx0XHRjb25zdCB2YXJpYWJsZUNvdW50ID0gc2NvcGVBbmFseXNpcy52YXJpYWJsZXMuc2l6ZTtcblx0XHRjb25zb2xlLmxvZyhgR2VuZXJhdGVkIHNjb3Blcy5qc29uIGF0OiAke3Njb3Blc1BhdGh9ICgke3Njb3BlQ291bnR9IHNjb3BlcywgJHt2YXJpYWJsZUNvdW50fSB2YXJpYWJsZXMpYCk7XG5cdH1cblxuXHQvLyBUaGUgaW5zaWRlLW91dCBjcmVhdGlvbiB3YWxrIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIFBoYXNlIDMpOiBhbmNob3JzXG5cdC8vIGFyZSB0aGUgaW5zdGFudGlhdGlvbiB1c2FnZXM7IGNhbGxlcnMgYXJlIGZvbGxvd2VkIHNhbWUtZmlsZSBhbmRcblx0Ly8gY3Jvc3MtZmlsZSAobW9kdWxlIGdyYXBoLCBiYXJyZWxzIGNoYXNlZCkgdW50aWwgb25seSBzdGFydGVycyByZW1haW4uXG5cdGNvbnN0IHNvdXJjZUZpbGVzQnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIHRzLlNvdXJjZUZpbGU+KCk7XG5cdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdHNvdXJjZUZpbGVzQnlQYXRoLnNldChwYXRoLnJlc29sdmUoc291cmNlRmlsZS5maWxlTmFtZSksIHNvdXJjZUZpbGUpO1xuXHR9XG5cdGNvbnN0IGNyZWF0aW9uR3JhcGhCdWlsZGVyID0gbmV3IENyZWF0aW9uR3JhcGhCdWlsZGVyKG1vZHVsZUdyYXBoLCBzY29wZUFuYWx5c2lzLCBzY29wZVdhbGtlciwgc291cmNlRmlsZXNCeVBhdGgpO1xuXHRjb25zdCBjcmVhdGlvbkdyYXBoID0gY3JlYXRpb25HcmFwaEJ1aWxkZXIuYnVpbGQodXNhZ2VzKTtcblxuXHQvLyBBbHdheXMgZ2VuZXJhdGUgaW5zdHJ1bWVudGF0aW9uLmpzb24gKGZyYW1ld29yayBsaWZlY3ljbGUgY3Jvc3Nyb2Fkc1xuXHQvLyBmcm9tIHRoZSBsb2FkZWQgcGx1Z2lucyDigJQgc3ludGFjdGljIGRldGVjdGlvbiBuZWVkcyBubyBkaXZlXG5cdC8vIGRlcGVuZGVuY3ksIHVubGlrZSBlZHMuanNvbikuIHYyIGNhcnJpZXMgdGhlIGNyZWF0aW9uIGdyYXBoXG5cdC8vIGFsb25nc2lkZSB0aGUgcG9pbnRzLlxuXHRjb25zdCBpbnN0cnVtZW50YXRpb24gPSBhbmFseXplci5nZXRJbnN0cnVtZW50YXRpb25Qb2ludHMoKTtcblx0Y29uc3QgaW5zdHJ1bWVudGF0aW9uUGF0aCA9IHdyaXRlci53cml0ZUluc3RydW1lbnRhdGlvbkZpbGUoaW5zdHJ1bWVudGF0aW9uLCBjcmVhdGlvbkdyYXBoKTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnN0IG5vZGVDb3VudCA9IGNyZWF0aW9uR3JhcGgubm9kZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGVkZ2VDb3VudCA9IGNyZWF0aW9uR3JhcGguZWRnZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGFuY2hvckNvdW50ID0gY3JlYXRpb25HcmFwaC5hbmNob3JzLmxlbmd0aDtcblx0XHRjb25zb2xlLmxvZyhgR2VuZXJhdGVkIGluc3RydW1lbnRhdGlvbi5qc29uIGF0OiAke2luc3RydW1lbnRhdGlvblBhdGh9ICgke2luc3RydW1lbnRhdGlvbi5sZW5ndGh9IHBvaW50cylgKTtcblx0XHRjb25zb2xlLmxvZyhgICBjcmVhdGlvbiBncmFwaDogJHtub2RlQ291bnR9IG5vZGVzLCAke2VkZ2VDb3VudH0gZWRnZXMsICR7YW5jaG9yQ291bnR9IGFuY2hvcnNgKTtcblx0fVxuXG5cdC8vIEFsd2F5cyBnZW5lcmF0ZSBjb250cm9sLmpzb24gKGxldGhlIGNvbnRyYWN0LCBmb3JtYXQgMS4xKTogdGhlIHNhbWVcblx0Ly8gY3JlYXRpb24gZ3JhcGggYW5kIHBvaW50cyBhcyBpbnN0cnVtZW50YXRpb24uanNvbiwgcmVuZGVyZWQgdW5kZXIgdGhlXG5cdC8vIGNyb3NzLWxhbmd1YWdlIGBjYWxsZXJzYC9gcG9pbnRzYCBrZXlzLlxuXHRjb25zdCBjb250cm9sUGF0aCA9IHdyaXRlci53cml0ZUNvbnRyb2xGaWxlKGluc3RydW1lbnRhdGlvbiwgY3JlYXRpb25HcmFwaCk7XG5cdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zb2xlLmxvZyhgR2VuZXJhdGVkIGNvbnRyb2wuanNvbiBhdDogJHtjb250cm9sUGF0aH1gKTtcblx0fVxuXG5cdC8vIEdlbmVyYXRlIGhpZXJhcmNoeS5qc29uIChzdHJ1Y3R1cmVkKSBhbmQgaGllcmFyY2h5LnR4dCAoQVNDSUkgdHJlZSkgZm9yIHRoZSBUcmllXG5cdGNvbnN0IGhpZXJhcmNoeVJvb3RzID0gZ3JhcGgudG9IaWVyYXJjaHkoKTtcblx0Y29uc3QgaGllcmFyY2h5SnNvblBhdGggPSB3cml0ZXIud3JpdGVIaWVyYXJjaHlGaWxlKGhpZXJhcmNoeVJvb3RzKTtcblx0Y29uc3QgaGllcmFyY2h5VGV4dCA9IHJlbmRlclR5cGVIaWVyYXJjaHkoZ3JhcGgpO1xuXHRjb25zdCBoaWVyYXJjaHlUeHRQYXRoID0gd3JpdGVyLndyaXRlVG8oJ2hpZXJhcmNoeS50eHQnLCBoaWVyYXJjaHlUZXh0KTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgaGllcmFyY2h5Lmpzb24gYXQ6ICR7aGllcmFyY2h5SnNvblBhdGh9YCk7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBoaWVyYXJjaHkudHh0IGF0OiAke2hpZXJhcmNoeVR4dFBhdGh9YCk7XG5cdH1cblxuXHQvLyBBbHdheXMgZ2VuZXJhdGUgY29sbGVjdGlvbnMuanNvbiAodGhlIGNvbGxlY3Rpb24gbWFuaWZlc3Q6IGlkcywgZGlzcGxheVxuXHQvLyBuYW1lcywgT3B0aW9uLUIgcmVnaXN0cnkgaW50ZXJmYWNlcywgY2FsbCBzaXRlcyDigJQgdGhlIGlk4oaUaW50ZXJmYWNlIGpvaW5cblx0Ly8ga2V5IGJldHdlZW4gdGhlIHByZWZpeGVkIGdyYXBoIG91dHB1dHMgYW5kIHRoZSB0eXBlcy50cyBhbGlhc2VzKVxuXHRjb25zdCBjb2xsZWN0aW9uc1BhdGggPSB3cml0ZXIud3JpdGVDb2xsZWN0aW9uc0ZpbGUoYW5hbHl6ZXIuZ2V0Q29sbGVjdGlvbnNNYW5pZmVzdCgpKTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgY29sbGVjdGlvbnMuanNvbiBhdDogJHtjb2xsZWN0aW9uc1BhdGh9YCk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCB0eXBlcyBhdDogJHtvdXRwdXRQYXRofWApO1xuXHRcdGNvbnNvbGUubG9nKGBNb2RlOiAke3VzZU1vZHVsZUF1Z21lbnRhdGlvbiA/ICdnbG9iYWwgYXVnbWVudGF0aW9uIChsZWdhY3kpJyA6ICd0eXBlcyBmaWxlIChkZWZhdWx0KSd9YCk7XG5cdFx0Y29uc29sZS5sb2coYEZvdW5kICR7Z2VuZXJhdGVkVHlwZXMudHlwZXMubGVuZ3RofSB0eXBlczpgKTtcblx0XHRwcmludFR5cGVIaWVyYXJjaHkoZ3JhcGgpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgJHtnZW5lcmF0ZWRUeXBlcy50eXBlcy5sZW5ndGh9IHR5cGVzIGF0ICR7b3B0aW9ucy5vdXRwdXREaXIgfHwgJy50YWN0aWNhJ31gKTtcblx0XHRpZiAodXNlTW9kdWxlQXVnbWVudGF0aW9uKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnVXNpbmcgZ2xvYmFsIGF1Z21lbnRhdGlvbiBtb2RlIChsZWdhY3ksIHVzZSBkZWZhdWx0IG1vZGUgZm9yIHR5cGVzLnRzIG9ubHkpJyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIDA7XG59XG5cbi8qKlxuICogV2F0Y2ggbW9kZVxuICovXG5mdW5jdGlvbiB3YXRjaCAob3B0aW9uczogQ0xJT3B0aW9ucyk6IHZvaWQge1xuXHRjb25zb2xlLmxvZygnU3RhcnRpbmcgd2F0Y2ggbW9kZS4uLicpO1xuXG5cdC8vIEluaXRpYWwgcnVuXG5cdHJ1bihvcHRpb25zKTtcblxuXHQvLyBTZXQgdXAgZmlsZSB3YXRjaGluZ1xuXHRjb25zdCBjaG9raWRhciA9IHJlcXVpcmUoJ2Nob2tpZGFyJyk7XG5cdGNvbnN0IHRzY29uZmlnUGF0aCA9IGZpbmRUc0NvbmZpZyhvcHRpb25zLnByb2plY3QpO1xuXG5cdGlmICghdHNjb25maWdQYXRoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignRXJyb3I6IENvdWxkIG5vdCBmaW5kIHRzY29uZmlnLmpzb24nKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCBwcm9qZWN0RGlyID0gcGF0aC5kaXJuYW1lKHRzY29uZmlnUGF0aCk7XG5cdGNvbnN0IHdhdGNoUGF0aHMgPSBvcHRpb25zLmluY2x1ZGUgfHwgWyAnKiovKi50cycgXTtcblx0Y29uc3QgaWdub3JlUGF0aHMgPSBvcHRpb25zLmV4Y2x1ZGUgfHwgWyAnKiovKi5kLnRzJywgJ25vZGVfbW9kdWxlcy8qKicsICcudGFjdGljYS8qKicgXTtcblxuXHRjb25zdCB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2god2F0Y2hQYXRocywge1xuXHRcdGN3ZCAgICAgICAgOiBwcm9qZWN0RGlyLFxuXHRcdGlnbm9yZWQgICAgOiBpZ25vcmVQYXRocyxcblx0XHRwZXJzaXN0ZW50IDogdHJ1ZSxcblx0fSk7XG5cblx0d2F0Y2hlci5vbignY2hhbmdlJywgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSBjaGFuZ2VkOiAke2ZpbGVQYXRofWApO1xuXHRcdH1cblx0XHRydW4ob3B0aW9ucyk7XG5cdH0pO1xuXG5cdHdhdGNoZXIub24oJ2FkZCcsIChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgYWRkZWQ6ICR7ZmlsZVBhdGh9YCk7XG5cdFx0fVxuXHRcdHJ1bihvcHRpb25zKTtcblx0fSk7XG5cblx0Y29uc29sZS5sb2coJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uIChQcmVzcyBDdHJsK0MgdG8gc3RvcCknKTtcbn1cblxuLyoqXG4gKiBNYWluIGVudHJ5IHBvaW50XG4gKi9cbmZ1bmN0aW9uIG1haW4gKCk6IHZvaWQge1xuXHRjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuXHRjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3MpO1xuXG5cdGlmIChvcHRpb25zLmhlbHApIHtcblx0XHRwcmludEhlbHAoKTtcblx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGlmIChvcHRpb25zLndhdGNoKSB7XG5cdFx0XHR3YXRjaChvcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29kZSA9IHJ1bihvcHRpb25zKTtcblx0XHRcdGlmIChjb2RlKSB7XG5cdFx0XHRcdHByb2Nlc3MuZXhpdChjb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcik7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG59XG5cbi8vIFJ1biBpZiBleGVjdXRlZCBkaXJlY3RseVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG5cdG1haW4oKTtcbn1cblxuZXhwb3J0IHtcblx0bWFpbiwgcnVuLCB3YXRjaCwgcGFyc2VBcmdzIFxufTtcbiJdfQ==
865
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQSs4Qlosb0JBQUk7QUFBRSxrQkFBRztBQUFFLHNCQUFLO0FBQUUsOEJBQVM7QUE3OEI1Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG1DQUF1QztBQUN2QywrQ0FBaUM7QUFDakMseUNBQStDO0FBQy9DLCtEQUEyRDtBQUMzRCwyQ0FFcUI7QUFDckIscUNBQXVDO0FBQ3ZDLGlEQUFvRDtBQUNwRCxxREFBd0Q7QUFDeEQscUNBRWtCO0FBQ2xCLG1DQUVpQjtBQTBCakI7O0dBRUc7QUFDSCxTQUFTLFNBQVMsQ0FBRSxJQUFjO0lBQ2pDLE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztJQUUvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBRSxDQUFDLENBQUUsQ0FBQztRQUV0QixRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2QsS0FBSyxJQUFJLENBQUM7WUFDVixLQUFLLFNBQVM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE1BQU07WUFDUCxLQUFLLElBQUksQ0FBQztZQUNWLEtBQUssV0FBVztnQkFDZixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBRSxFQUFFLENBQUMsQ0FBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1AsS0FBSyxJQUFJLENBQUM7WUFDVixLQUFLLFVBQVU7Z0JBQ2QsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUUsRUFBRSxDQUFDLENBQUUsQ0FBQztnQkFDaEMsTUFBTTtZQUNQLEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxXQUFX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QUM7WUFDcEIsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7QUFDRixDQUFDO0FBRUQsMkJBQTJCO0FBQzNCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUM3QixJQUFJLEVBQUUsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgTW5lbW9uaWNhQW5hbHl6ZXIgfSBmcm9tICcuL2FuYWx5emVyJztcbmltcG9ydCB7IFRvcG9sb2dpY2FBbmFseXplciB9IGZyb20gJy4vdG9wb2xvZ2ljYS1hbmFseXplcic7XG5pbXBvcnQge1xuXHRUeXBlc0dlbmVyYXRvciwgR3JhcGhSZWZlcmVuY2VSZXNvbHZlciBcbn0gZnJvbSAnLi9nZW5lcmF0b3InO1xuaW1wb3J0IHsgVHlwZXNXcml0ZXIgfSBmcm9tICcuL3dyaXRlcic7XG5pbXBvcnQgeyBNb2R1bGVHcmFwaEJ1aWxkZXIgfSBmcm9tICcuL21vZHVsZS1ncmFwaCc7XG5pbXBvcnQgeyBDcmVhdGlvbkdyYXBoQnVpbGRlciB9IGZyb20gJy4vY3JlYXRpb24tZ3JhcGgnO1xuaW1wb3J0IHtcblx0TG9jYWxTY29wZVdhbGtlciwgU2NvcGVUeXBlUmVzb2x2ZXJcbn0gZnJvbSAnLi9zY29wZXMnO1xuaW1wb3J0IHtcblx0cmVzb2x2ZUdyYXBoVHlwZVJlZmVyZW5jZSwgVHlwZUdyYXBoSW1wbCBcbn0gZnJvbSAnLi9ncmFwaCc7XG5pbXBvcnQge1xuXHRUYWN0aWNhQ29uZmlnLCBUeXBlTm9kZSwgRURTSW5mbywgU2NvcGVBbmFseXNpc1xufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRhY3RpY2FQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMnO1xuXG4vKipcbiAqIENMSSBlbnRyeSBwb2ludCBmb3IgVGFjdGljYVxuICpcbiAqIFJ1bnMgdGhlIGFuYWx5emVyIG92ZXIgYSB0c2NvbmZpZyBwcm9qZWN0IGFuZCB3cml0ZXMgLnRhY3RpY2EvIG91dHB1dFxuICovXG5cbmludGVyZmFjZSBDTElPcHRpb25zIGV4dGVuZHMgVGFjdGljYUNvbmZpZyB7XG5cdHdhdGNoPzogYm9vbGVhbjtcblx0cHJvamVjdD86IHN0cmluZztcblx0aGVscD86IGJvb2xlYW47XG5cdC8qKiBDdXN0b20gdG9wb2xvZ2ljYSBkaXJlY3RvcmllcyB0byBzY2FuICovXG5cdHRvcG9sb2dpY2FEaXJzPzogc3RyaW5nW107XG5cdC8qKiBBZGQgLmpzIGV4dGVuc2lvbnMgdG8gcmVsYXRpdmUgaW1wb3J0cyBmb3IgRVNNIE5vZGVOZXh0IHJlc29sdXRpb24gKi9cblx0ZXNtPzogYm9vbGVhbjtcblx0LyoqIEVuYWJsZSBFRFMgKEV4ZWN1dGlvbiBEYXRhIFN0b3JhZ2UpIHRyYWNraW5nICovXG5cdGVkcz86IGJvb2xlYW47XG5cdC8qKiBQcm9ncmFtbWF0aWMgcGx1Z2luczsgY29uZmlnLWZpbGUgcGx1Z2lucyBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhlc2UgKi9cblx0cGx1Z2lucz86IFRhY3RpY2FQbHVnaW5bXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXJncyAoYXJnczogc3RyaW5nW10pOiBDTElPcHRpb25zIHtcblx0Y29uc3Qgb3B0aW9uczogQ0xJT3B0aW9ucyA9IHt9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGFyZyA9IGFyZ3NbIGkgXTtcblxuXHRcdHN3aXRjaCAoYXJnKSB7XG5cdFx0Y2FzZSAnLXcnOlxuXHRcdGNhc2UgJy0td2F0Y2gnOlxuXHRcdFx0b3B0aW9ucy53YXRjaCA9IHRydWU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICctcCc6XG5cdFx0Y2FzZSAnLS1wcm9qZWN0Jzpcblx0XHRcdG9wdGlvbnMucHJvamVjdCA9IGFyZ3NbICsraSBdO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLW8nOlxuXHRcdGNhc2UgJy0tb3V0cHV0Jzpcblx0XHRcdG9wdGlvbnMub3V0cHV0RGlyID0gYXJnc1sgKytpIF07XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICctaSc6XG5cdFx0Y2FzZSAnLS1pbmNsdWRlJzpcblx0XHRcdG9wdGlvbnMuaW5jbHVkZSA9IChvcHRpb25zLmluY2x1ZGUgfHwgW10pLmNvbmNhdChhcmdzWyArK2kgXS5zcGxpdCgnLCcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy1lJzpcblx0XHRjYXNlICctLWV4Y2x1ZGUnOlxuXHRcdFx0b3B0aW9ucy5leGNsdWRlID0gKG9wdGlvbnMuZXhjbHVkZSB8fCBbXSkuY29uY2F0KGFyZ3NbICsraSBdLnNwbGl0KCcsJykpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLW0nOlxuXHRcdGNhc2UgJy0tbW9kdWxlLWF1Z21lbnRhdGlvbic6XG5cdFx0XHRvcHRpb25zLmdsb2JhbEF1Z21lbnRhdGlvbiA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLXYnOlxuXHRcdGNhc2UgJy0tdmVyYm9zZSc6XG5cdFx0XHRvcHRpb25zLnZlcmJvc2UgPSB0cnVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLXQnOlxuXHRcdGNhc2UgJy0tdG9wb2xvZ2ljYSc6XG5cdFx0XHRvcHRpb25zLnRvcG9sb2dpY2FEaXJzID0gKG9wdGlvbnMudG9wb2xvZ2ljYURpcnMgfHwgW10pLmNvbmNhdChhcmdzWyArK2kgXS5zcGxpdCgnLCcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy0tZXNtJzpcblx0XHRcdG9wdGlvbnMuZXNtID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy0tZWRzJzpcblx0XHRcdG9wdGlvbnMuZWRzID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJy0tbm8tZWRzJzpcblx0XHRcdG9wdGlvbnMuZWRzID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICctaCc6XG5cdFx0Y2FzZSAnLS1oZWxwJzpcblx0XHRcdG9wdGlvbnMuaGVscCA9IHRydWU7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBQcmludCBoZWxwIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gcHJpbnRIZWxwICgpOiB2b2lkIHtcblx0Y29uc29sZS5sb2coYFxuVGFjdGljYSAtIFR5cGUgZGVmaW5pdGlvbiBnZW5lcmF0b3IgZm9yIE1uZW1vbmljYVxuXG5Vc2FnZTogdGFjdGljYSBbb3B0aW9uc11cblxuT3B0aW9uczpcbiAgLXcsIC0td2F0Y2ggICAgICAgICAgICAgICBXYXRjaCBmb3IgZmlsZSBjaGFuZ2VzIGFuZCByZWdlbmVyYXRlIHR5cGVzXG4gIC1wLCAtLXByb2plY3QgICAgICAgICAgICAgUGF0aCB0byB0c2NvbmZpZy5qc29uIChkZWZhdWx0OiAuL3RzY29uZmlnLmpzb24pXG4gIC1vLCAtLW91dHB1dCAgICAgICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSlcbiAgLWksIC0taW5jbHVkZSAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIHBhdHRlcm5zIHRvIGluY2x1ZGVcbiAgLWUsIC0tZXhjbHVkZSAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIHBhdHRlcm5zIHRvIGV4Y2x1ZGVcbiAgLXQsIC0tdG9wb2xvZ2ljYSAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0b3BvbG9naWNhIGRpcmVjdG9yaWVzIHRvIHNjYW5cbiAgLW0sIC0tbW9kdWxlLWF1Z21lbnRhdGlvbiBVc2UgbW9kdWxlIGF1Z21lbnRhdGlvbiBpbnN0ZWFkIG9mIGdsb2JhbCAobGVnYWN5IG1vZGUpXG4gIC0tZXNtICAgICAgICAgICAgICAgICAgICAgQWRkIC5qcyBleHRlbnNpb25zIHRvIHJlbGF0aXZlIGltcG9ydHMgKE5vZGVOZXh0IEVTTSlcbiAgLS1lZHMgICAgICAgICAgICAgICAgICAgICBFbmFibGUgRURTIChFeGVjdXRpb24gRGF0YSBTdG9yYWdlKSB0cmFja2luZ1xuICAtLW5vLWVkcyAgICAgICAgICAgICAgICAgIERpc2FibGUgRURTIHRyYWNraW5nXG4gIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbG9nZ2luZ1xuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcblxuQ29uZmlndXJhdGlvbjpcbiAgRnJhbWV3b3JrIGluc3RydW1lbnRhdGlvbiB2b2NhYnVsYXJ5IGlzIHN1cHBsaWVkIGJ5IHBsdWdpbnMuIFBsYWNlIGFcbiAgLnRhY3RpY2EuanMgKG9yIHRhY3RpY2EuY29uZmlnLmpzKSBuZXh0IHRvIHlvdXIgdHNjb25maWcuanNvbjpcblxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7IHBsdWdpbnM6IFsgJ3lvdXItZnJhbWV3b3JrLWFkYXB0ZXIvdGFjdGljYScgXSB9O1xuXG4gIEVudHJpZXMgYXJlIG1vZHVsZSBzcGVjaWZpZXJzIChyZXF1aXJlZCByZWxhdGl2ZSB0byB0aGUgY29uZmlnIGZpbGUpIG9yXG4gIGlubGluZSBwbHVnaW4gb2JqZWN0cy4gV2l0aG91dCBwbHVnaW5zLCBpbnN0cnVtZW50YXRpb24uanNvbiBwb2ludHMgPSBbXS5cblxuRXhhbXBsZXM6XG4gIHRhY3RpY2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIHR5cGVzIHdpdGggZ2xvYmFsIGF1Z21lbnRhdGlvbiAoZGVmYXVsdClcbiAgdGFjdGljYSAtLXdhdGNoICAgICAgICAgICAgICAgICAgICAgICMgV2F0Y2ggbW9kZVxuICB0YWN0aWNhIC0tbW9kdWxlLWF1Z21lbnRhdGlvbiAgICAgICAgIyBVc2UgbGVnYWN5IG1vZHVsZSBhdWdtZW50YXRpb24gbW9kZVxuICB0YWN0aWNhIC0tcHJvamVjdCAuL3NyYy90c2NvbmZpZy5qc29uICMgQ3VzdG9tIHRzY29uZmlnIHBhdGhcbiAgdGFjdGljYSAtLW91dHB1dCAuL3R5cGVzL21uZW1vbmljYSAgICMgQ3VzdG9tIG91dHB1dCBkaXJlY3RvcnlcbiAgdGFjdGljYSAtLXRvcG9sb2dpY2EgLi9zcmMvYWktdHlwZXMgICMgU2NhbiBzcGVjaWZpYyB0b3BvbG9naWNhIGRpcmVjdG9yeVxuYCk7XG59XG5cbi8qKlxuICogRmluZCB0c2NvbmZpZy5qc29uXG4gKi9cbmZ1bmN0aW9uIGZpbmRUc0NvbmZpZyAocHJvamVjdFBhdGg/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAocHJvamVjdFBhdGgpIHtcblx0XHRpZiAoZnMuZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcblx0XHRcdHJldHVybiBwcm9qZWN0UGF0aDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0IGZpbGUgbm90IGZvdW5kOiAke3Byb2plY3RQYXRofWApO1xuXHR9XG5cblx0Ly8gTG9vayBmb3IgdHNjb25maWcuanNvbiBpbiBjdXJyZW50IGRpcmVjdG9yeSBhbmQgcGFyZW50IGRpcmVjdG9yaWVzXG5cdGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcblx0d2hpbGUgKGN1cnJlbnREaXIgIT09IHBhdGguZGlybmFtZShjdXJyZW50RGlyKSkge1xuXHRcdGNvbnN0IHRzY29uZmlnUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCAndHNjb25maWcuanNvbicpO1xuXHRcdGlmIChmcy5leGlzdHNTeW5jKHRzY29uZmlnUGF0aCkpIHtcblx0XHRcdHJldHVybiB0c2NvbmZpZ1BhdGg7XG5cdFx0fVxuXHRcdGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExvYWQgVHlwZVNjcmlwdCBwcm9ncmFtIGZyb20gdHNjb25maWdcbiAqL1xuZnVuY3Rpb24gbG9hZFByb2dyYW0gKHRzY29uZmlnUGF0aDogc3RyaW5nKTogdHMuUHJvZ3JhbSB7XG5cdGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c2NvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG5cblx0aWYgKGNvbmZpZ0ZpbGUuZXJyb3IpIHtcblx0XHRjb25zdCBlcnJvclRleHQgPSB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KFxuXHRcdFx0Y29uZmlnRmlsZS5lcnJvci5tZXNzYWdlVGV4dCxcblx0XHRcdCdcXG4nXG5cdFx0KTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHJlYWRpbmcgdHNjb25maWc6ICR7ZXJyb3JUZXh0fWApO1xuXHR9XG5cblx0Ly8gVGFjdGljYSBhbmFseXplcyB3aXRoIGl0cyBvd24gYnVuZGxlZCBUeXBlU2NyaXB0LCB3aGljaCBtYXkgYmUgbmV3ZXJcblx0Ly8gdGhhbiB0aGUgY29tcGlsZXIgdGhlIHVzZXIncyB0c2NvbmZpZyB3YXMgd3JpdHRlbiBmb3IgKGUuZy4gYSBUUzUtZXJhXG5cdC8vIGNvbmZpZyBjYXJyeWluZyBgYmFzZVVybGAsIGRlcHJlY2F0ZWQtZXJyb3JlZCBieSBUUzYncyBUUzUxMDEpLlxuXHQvLyBBbmFseXNpcyBuZXZlciBlbWl0cyB1c2VyIGNvZGUsIHNvIGRlcHJlY2F0aW9uIGVycm9ycyBhcmUgYWJvdXQgdGhlXG5cdC8vIHVzZXIncyBidWlsZCBwaXBlbGluZSwgbm90IGFib3V0IGFuYWx5emFiaWxpdHkg4oCUIHNpbGVuY2UgdGhlbSBmb3IgdGhlXG5cdC8vIGFuYWx5c2lzIHByb2dyYW0uIFVuY29uZGl0aW9uYWw6IGEgdXNlci1waW5uZWQgb2xkZXIgdmFsdWUgKCc1LjAnKVxuXHQvLyBkb2VzIG5vdCBzaWxlbmNlIDYuMCBkZXByZWNhdGlvbnMgYW5kIHdvdWxkIHN0aWxsIGZhdGFsIGJlbG93LlxuXHRjb25zdCByYXdDb25maWcgPSBjb25maWdGaWxlLmNvbmZpZyA/PyB7fTtcblx0cmF3Q29uZmlnLmNvbXBpbGVyT3B0aW9ucyA9IHtcblx0XHQuLi5yYXdDb25maWcuY29tcGlsZXJPcHRpb25zLFxuXHRcdGlnbm9yZURlcHJlY2F0aW9ucyA6ICc2LjAnLFxuXHR9O1xuXG5cdGNvbnN0IHBhcnNlZENvbmZpZyA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KFxuXHRcdHJhd0NvbmZpZyxcblx0XHR0cy5zeXMsXG5cdFx0cGF0aC5kaXJuYW1lKHRzY29uZmlnUGF0aClcblx0KTtcblxuXHRpZiAocGFyc2VkQ29uZmlnLmVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlcyA9IHBhcnNlZENvbmZpZy5lcnJvcnMubWFwKGUgPT5cblx0XHRcdHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZS5tZXNzYWdlVGV4dCwgJ1xcbicpKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgdHNjb25maWc6ICR7ZXJyb3JNZXNzYWdlcy5qb2luKCdcXG4nKX1gKTtcblx0fVxuXG5cdGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHtcblx0XHRyb290TmFtZXMgOiBwYXJzZWRDb25maWcuZmlsZU5hbWVzLFxuXHRcdG9wdGlvbnMgICA6IHBhcnNlZENvbmZpZy5vcHRpb25zLFxuXHR9KTtcblxuXHRyZXR1cm4gcHJvZ3JhbTtcbn1cblxuLyoqXG4gKiBMb29rIHVwIGEgdmFyaWFibGUgYnkgbmFtZSBzdGFydGluZyBmcm9tIGEgc2NvcGUsIHdhbGtpbmcgb3V0d2FyZCB0aHJvdWdoXG4gKiBwYXJlbnRTY29wZUlkLiBUaGUgaW5uZXJtb3N0IGJpbmRpbmcgd2lucyBldmVuIHdoZW4gaXQgY2FycmllcyBubyB0eXBlUGF0aFxuICogKHNoYWRvd2luZyBob25lc3R5IOKAlCBhbiB1bnR5cGVkIGxvY2FsIHNoYWRvd3MgYSB0eXBlZCBvdXRlciBvbmUpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkVmFyaWFibGVUeXBlUGF0aCAoXG5cdG5hbWU6IHN0cmluZyxcblx0c2NvcGVJZDogc3RyaW5nLFxuXHRzY29wZUFuYWx5c2lzOiBTY29wZUFuYWx5c2lzXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgY3VycmVudDogc3RyaW5nIHwgdW5kZWZpbmVkID0gc2NvcGVJZDtcblx0d2hpbGUgKGN1cnJlbnQpIHtcblx0XHRjb25zdCB2YXJpYWJsZSA9IHNjb3BlQW5hbHlzaXMudmFyaWFibGVzLmdldChgJHtjdXJyZW50fSMke25hbWV9YCk7XG5cdFx0aWYgKHZhcmlhYmxlKSB7XG5cdFx0XHRjb25zdCB7IHR5cGVQYXRoIH0gPSB2YXJpYWJsZTtcblx0XHRcdHJldHVybiB0eXBlUGF0aDtcblx0XHR9XG5cdFx0Y3VycmVudCA9IHNjb3BlQW5hbHlzaXMuc2NvcGVzLmdldChjdXJyZW50KT8ucGFyZW50U2NvcGVJZDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEpvaW4gZGF0YSBmb3IgbW5lbW9ncmFwaGljYSdzIHdyYXBwZXJzIGxheWVyOiBwaW4gZWFjaCB3cmFwIGVudHJ5IHRvIHRoZVxuICogc2NvcGUgaG9sZGluZyBpdHMgY2FsbCBzaXRlLCBhbmQgcmVzb2x2ZSB0aGUgd3JhcHBlZCBpbnN0YW5jZSBhcmd1bWVudCdzXG4gKiBtbmVtb25pY2EgdHlwZSB0aHJvdWdoIHRoZSBzY29wZS12YXJpYWJsZSBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gYXR0YWNoV3JhcEpvaW5EYXRhIChcblx0ZWRzOiBNYXA8c3RyaW5nLCBFRFNJbmZvW10+LFxuXHRzY29wZVdhbGtlcjogTG9jYWxTY29wZVdhbGtlcixcblx0c2NvcGVBbmFseXNpczogU2NvcGVBbmFseXNpc1xuKTogdm9pZCB7XG5cdGZvciAoY29uc3QgZW50cmllcyBvZiBlZHMudmFsdWVzKCkpIHtcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcblx0XHRcdGlmIChlbnRyeS5raW5kICE9PSAnd3JhcCcpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBob2xkZXJTY29wZUlkID0gc2NvcGVXYWxrZXIuZmluZEhvbGRlclNjb3BlSWQoZW50cnkubG9jYXRpb24pO1xuXHRcdFx0aWYgKCFob2xkZXJTY29wZUlkKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0ZW50cnkuc2NvcGVJZCA9IGhvbGRlclNjb3BlSWQ7XG5cdFx0XHRpZiAoIWVudHJ5Lmluc3RhbmNlQXJnKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgd3JhcHNUeXBlUGF0aCA9IHJlc29sdmVTY29wZWRWYXJpYWJsZVR5cGVQYXRoKFxuXHRcdFx0XHRlbnRyeS5pbnN0YW5jZUFyZyxcblx0XHRcdFx0aG9sZGVyU2NvcGVJZCxcblx0XHRcdFx0c2NvcGVBbmFseXNpc1xuXHRcdFx0KTtcblx0XHRcdGlmICh3cmFwc1R5cGVQYXRoKSB7XG5cdFx0XHRcdGVudHJ5LndyYXBzVHlwZVBhdGggPSB3cmFwc1R5cGVQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJlbmRlciB0eXBlIGhpZXJhcmNoeSBhcyBhbiBBU0NJSSB0cmVlIHN0cmluZy5cbiAqIERpc3BsYXktb25seTogc2libGluZ3MgYXJlIHNvcnRlZCBieSBmdWxsUGF0aCBhdCByZW5kZXIgdGltZSAoY29kZS11bml0XG4gKiBvcmRlciDigJQgZGVmYXVsdC1jb2xsZWN0aW9uIFBhc2NhbENhc2Ugcm9vdHMgbGFuZCBiZWZvcmUgdGhlXG4gKiBgY29sbGVjdGlvbl9OOjpgLXByZWZpeGVkIG9uZXMpLiBUaGUgZ3JhcGggaXRzZWxmIGtlZXBzIGRpc2NvdmVyeSBvcmRlcjtcbiAqIGhpZXJhcmNoeS5qc29uIGlzIHVuYWZmZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclR5cGVIaWVyYXJjaHkgKGdyYXBoOiBUeXBlR3JhcGhJbXBsKTogc3RyaW5nIHtcblx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gWyAnVHlwZSBIaWVyYXJjaHkgKFRyaWUpOicgXTtcblxuXHRmdW5jdGlvbiBzb3J0ZWRCeUZ1bGxQYXRoIChub2RlczogVHlwZU5vZGVbXSk6IFR5cGVOb2RlW10ge1xuXHRcdGNvbnN0IHNvcnRlZCA9IEFycmF5LmZyb20obm9kZXMpO1xuXHRcdHNvcnRlZC5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRpZiAoYS5mdWxsUGF0aCA8IGIuZnVsbFBhdGgpIHsgcmV0dXJuIC0xOyB9XG5cdFx0XHRpZiAoYS5mdWxsUGF0aCA+IGIuZnVsbFBhdGgpIHsgcmV0dXJuIDE7IH1cblx0XHRcdHJldHVybiAwO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzb3J0ZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJOb2RlIChub2RlOiBUeXBlTm9kZSwgcHJlZml4ID0gJycsIGlzTGFzdCA9IHRydWUpOiB2b2lkIHtcblx0XHRjb25zdCBjb25uZWN0b3IgPSBpc0xhc3QgPyAn4pSU4pSA4pSAICcgOiAn4pSc4pSA4pSAICc7XG5cdFx0Ly8gVXNlIG5vZGUuZnVsbFBhdGggZGlyZWN0bHkgYW5kIGNvbnZlcnQgZG90cyB0byB1bmRlcnNjb3Jlc1xuXHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IG5vZGUuZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyk7XG5cdFx0bGluZXMucHVzaChgJHtwcmVmaXh9JHtjb25uZWN0b3J9JHtpbnN0YW5jZU5hbWV9YCk7XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9IHNvcnRlZEJ5RnVsbFBhdGgoQXJyYXkuZnJvbShub2RlLmNoaWxkcmVuLnZhbHVlcygpKSk7XG5cdFx0Y29uc3QgbmV3UHJlZml4ID0gcHJlZml4ICsgKGlzTGFzdCA/ICcgICAgJyA6ICfilIIgICAnKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHJlbmRlck5vZGUoY2hpbGRyZW5bIGkgXSwgbmV3UHJlZml4LCBpID09PSBjaGlsZHJlbi5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCByb290cyA9IHNvcnRlZEJ5RnVsbFBhdGgoQXJyYXkuZnJvbShncmFwaC5yb290cy52YWx1ZXMoKSkpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0cmVuZGVyTm9kZShyb290c1sgaSBdLCAnJywgaSA9PT0gcm9vdHMubGVuZ3RoIC0gMSk7XG5cdH1cblx0Ly8gRW1wdHkgbGluZSBhdCBlbmRcblx0bGluZXMucHVzaCgnJyk7XG5cblx0Y29uc3QgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUHJpbnQgdHlwZSBoaWVyYXJjaHkgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmZ1bmN0aW9uIHByaW50VHlwZUhpZXJhcmNoeSAoZ3JhcGg6IFR5cGVHcmFwaEltcGwpOiB2b2lkIHtcblx0Y29uc3Qgb3V0cHV0ID0gcmVuZGVyVHlwZUhpZXJhcmNoeShncmFwaCk7XG5cdGNvbnNvbGUubG9nKG91dHB1dCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgQG1uZW1vbmljYS9kaXZlIGlzIHByZXNlbnQgaW4gcGFja2FnZS5qc29uIGRlcGVuZGVuY2llc1xuICovXG5mdW5jdGlvbiBoYXNEaXZlRGVwZW5kZW5jeSAocHJvamVjdERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAncGFja2FnZS5qc29uJyk7XG5cdGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuXHRcdGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cdFx0Y29uc3QgZGVwcyA9IHBrZy5kZXBlbmRlbmNpZXMgfHwge307XG5cdFx0Y29uc3QgZGV2RGVwcyA9IHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge307XG5cdFx0Y29uc3QgcGVlckRlcHMgPSBwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fTtcblx0XHRyZXR1cm4gJ0BtbmVtb25pY2EvZGl2ZScgaW4gZGVwcyB8fCAnQG1uZW1vbmljYS9kaXZlJyBpbiBkZXZEZXBzIHx8ICdAbW5lbW9uaWNhL2RpdmUnIGluIHBlZXJEZXBzO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBTY2FuIGZvciB0b3BvbG9naWNhIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzXG4gKi9cbmZ1bmN0aW9uIHNjYW5Ub3BvbG9naWNhRGlyZWN0b3JpZXMgKHByb2plY3REaXI6IHN0cmluZywgY3VzdG9tRGlycz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRjb25zdCBkaXJzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vIEZpcnN0LCBhZGQgY3VzdG9tIGRpcmVjdG9yaWVzIGlmIHNwZWNpZmllZFxuXHRpZiAoY3VzdG9tRGlycykge1xuXHRcdGZvciAoY29uc3QgZGlyIG9mIGN1c3RvbURpcnMpIHtcblx0XHRcdGNvbnN0IGRpclBhdGggPSBwYXRoLmlzQWJzb2x1dGUoZGlyKSA/IGRpciA6IHBhdGguam9pbihwcm9qZWN0RGlyLCBkaXIpO1xuXHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHRkaXJzLnB1c2goZGlyUGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFdhcm5pbmc6IFRvcG9sb2dpY2EgZGlyZWN0b3J5IG5vdCBmb3VuZDogJHtkaXJQYXRofWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoZW4gYXV0by1kaXNjb3ZlciBzdGFuZGFyZCB0b3BvbG9naWNhIGRpcmVjdG9yaWVzXG5cdGNvbnN0IHBvc3NpYmxlRGlycyA9IFsgJ2FpLXR5cGVzJywgJ3R5cGVzJywgJ3RvcG9sb2dpY2EtdHlwZXMnIF07XG5cblx0Zm9yIChjb25zdCBkaXJOYW1lIG9mIHBvc3NpYmxlRGlycykge1xuXHRcdGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4ocHJvamVjdERpciwgZGlyTmFtZSk7XG5cdFx0aWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0Ly8gQXZvaWQgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCFkaXJzLmluY2x1ZGVzKGRpclBhdGgpKSB7XG5cdFx0XHRcdGRpcnMucHVzaChkaXJQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbHNvIHNjYW4gc3JjLyBzdWJkaXJlY3Rvcnlcblx0Y29uc3Qgc3JjUGF0aCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnc3JjJyk7XG5cdGlmIChmcy5leGlzdHNTeW5jKHNyY1BhdGgpICYmIGZzLnN0YXRTeW5jKHNyY1BhdGgpLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRmb3IgKGNvbnN0IGRpck5hbWUgb2YgcG9zc2libGVEaXJzKSB7XG5cdFx0XHRjb25zdCBkaXJQYXRoID0gcGF0aC5qb2luKHNyY1BhdGgsIGRpck5hbWUpO1xuXHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHQvLyBBdm9pZCBkdXBsaWNhdGVzXG5cdFx0XHRcdGlmICghZGlycy5pbmNsdWRlcyhkaXJQYXRoKSkge1xuXHRcdFx0XHRcdGRpcnMucHVzaChkaXJQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkaXJzO1xufVxuXG4vKipcbiAqIENvbmZpZyBmaWxlIGNhbmRpZGF0ZXMgKGVzbGludC1zdHlsZSBwcm9qZWN0IGNvbmZpZyksIHNlYXJjaGVkIG5leHQgdG9cbiAqIHRoZSByZXNvbHZlZCB0c2NvbmZpZyBmaXJzdCwgdGhlbiBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqL1xuY29uc3QgQ09ORklHX0ZJTEVfTkFNRVMgPSBbICcudGFjdGljYS5qcycsICd0YWN0aWNhLmNvbmZpZy5qcycgXTtcblxuaW50ZXJmYWNlIFRhY3RpY2FDb25maWdGaWxlIHtcblx0cGx1Z2lucz86IEFycmF5PFRhY3RpY2FQbHVnaW4gfCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIExvYWQgZnJhbWV3b3JrLXZvY2FidWxhcnkgcGx1Z2luczogcHJvZ3JhbW1hdGljIG9wdGlvbnMgZmlyc3QsIHRoZW4gdGhlXG4gKiBwcm9qZWN0IGNvbmZpZyBmaWxlLiBTdHJpbmcgZW50cmllcyBhcmUgbW9kdWxlIHNwZWNpZmllcnMgcmVxdWlyZWRcbiAqIHJlbGF0aXZlIHRvIHRoZSBjb25maWcgZmlsZSAoZS5nLiBhbiBhZGFwdGVyIHBhY2thZ2UncyBwbHVnaW4gc3VicGF0aCkuXG4gKiBXaXRob3V0IGEgY29uZmlnIGZpbGUgYW5kIHdpdGhvdXQgcHJvZ3JhbW1hdGljIHBsdWdpbnMgdGhlIGFuYWx5emVyXG4gKiBzdGF5cyBmcmFtZXdvcmstYmxpbmQgYW5kIGluc3RydW1lbnRhdGlvbi5qc29uIGNhcnJpZXMgZW1wdHkgcG9pbnRzLlxuICovXG5mdW5jdGlvbiBsb2FkVGFjdGljYVBsdWdpbnMgKHByb2plY3REaXI6IHN0cmluZywgb3B0aW9uczogQ0xJT3B0aW9ucyk6IFRhY3RpY2FQbHVnaW5bXSB7XG5cdGNvbnN0IHBsdWdpbnM6IFRhY3RpY2FQbHVnaW5bXSA9IFsgLi4uKG9wdGlvbnMucGx1Z2lucyB8fCBbXSkgXTtcblxuXHRjb25zdCBzZWFyY2hEaXJzID0gWyBwcm9qZWN0RGlyIF07XG5cdGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cdGlmIChjd2QgIT09IHByb2plY3REaXIpIHtcblx0XHRzZWFyY2hEaXJzLnB1c2goY3dkKTtcblx0fVxuXG5cdGxldCBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGZvciAoY29uc3QgZGlyIG9mIHNlYXJjaERpcnMpIHtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgQ09ORklHX0ZJTEVfTkFNRVMpIHtcblx0XHRcdGNvbnN0IGNhbmRpZGF0ZSA9IHBhdGguam9pbihkaXIsIG5hbWUpO1xuXHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoY2FuZGlkYXRlKSkge1xuXHRcdFx0XHRjb25maWdQYXRoID0gY2FuZGlkYXRlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZ1BhdGgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICghY29uZmlnUGF0aCkge1xuXHRcdHJldHVybiBwbHVnaW5zO1xuXHR9XG5cblx0Ly8gY3JlYXRlUmVxdWlyZSBhbmNob3JlZCBhdCB0aGUgY29uZmlnIGZpbGU6IHRoZSBjb25maWcncyBvd24gaW1wb3J0c1xuXHQvLyBhbmQgc3RyaW5nIHBsdWdpbiBzcGVjaWZpZXJzIHJlc29sdmUgYWdhaW5zdCB0aGUgcHJvamVjdCdzIG1vZHVsZXNcblx0Y29uc3QgY29uZmlnUmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoY29uZmlnUGF0aCk7XG5cdGNvbnN0IGxvYWRlZCA9IGNvbmZpZ1JlcXVpcmUoY29uZmlnUGF0aCk7XG5cdGNvbnN0IGNvbmZpZzogVGFjdGljYUNvbmZpZ0ZpbGUgPSBsb2FkZWQgJiYgdHlwZW9mIGxvYWRlZCA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGxvYWRlZFxuXHRcdD8gbG9hZGVkLmRlZmF1bHRcblx0XHQ6IGxvYWRlZDtcblx0Y29uc3QgZW50cmllcyA9IGNvbmZpZyAmJiBBcnJheS5pc0FycmF5KGNvbmZpZy5wbHVnaW5zKSA/IGNvbmZpZy5wbHVnaW5zIDogW107XG5cblx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0aWYgKHR5cGVvZiBlbnRyeSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHBsdWdpbnMucHVzaChlbnRyeSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbW9kID0gY29uZmlnUmVxdWlyZShlbnRyeSk7XG5cdFx0Y29uc3QgcGx1Z2luOiBUYWN0aWNhUGx1Z2luID0gbW9kICYmIHR5cGVvZiBtb2QgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBtb2Rcblx0XHRcdD8gbW9kLmRlZmF1bHRcblx0XHRcdDogbW9kO1xuXHRcdHBsdWdpbnMucHVzaChwbHVnaW4pO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnN0IG5hbWVzID0gcGx1Z2lucy5tYXAocGx1Z2luID0+IHBsdWdpbi5uYW1lIHx8ICcodW5uYW1lZCknKS5qb2luKCcsICcpO1xuXHRcdGNvbnNvbGUubG9nKGBMb2FkZWQgdGFjdGljYSBjb25maWc6ICR7Y29uZmlnUGF0aH0gKHBsdWdpbnM6ICR7bmFtZXMgfHwgJ25vbmUnfSlgKTtcblx0fVxuXG5cdHJldHVybiBwbHVnaW5zO1xufVxuXG4vKipcbiAqIFJ1biB0eXBlIGdlbmVyYXRpb24uIFJldHVybnMgMCBvbiBzdWNjZXNzOyAxIHdoZW4gdGhlIGdyYXBoIGlkZW50aXR5IGxhd1xuICogYWJvcnRlZCB0aGUgcnVuIChmYWlsdXJlcyBwcmludGVkLCBubyAudGFjdGljYSBvdXRwdXQgd3JpdHRlbikuXG4gKi9cbmZ1bmN0aW9uIHJ1biAob3B0aW9uczogQ0xJT3B0aW9ucyk6IG51bWJlciB7XG5cdGNvbnN0IHRzY29uZmlnUGF0aCA9IGZpbmRUc0NvbmZpZyhvcHRpb25zLnByb2plY3QpO1xuXG5cdGlmICghdHNjb25maWdQYXRoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignRXJyb3I6IENvdWxkIG5vdCBmaW5kIHRzY29uZmlnLmpzb24nKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0Y29uc29sZS5sb2coYFVzaW5nIHRzY29uZmlnOiAke3RzY29uZmlnUGF0aH1gKTtcblx0fVxuXG5cdC8vIEZyYW1ld29yayB2b2NhYnVsYXJ5IGFycml2ZXMgdmlhIHBsdWdpbnMg4oCUIGEgY29uZmlnIGZpbGUgbmV4dCB0byB0aGVcblx0Ly8gdHNjb25maWcgKG9yIGluIGN3ZCkgYW5kL29yIHByb2dyYW1tYXRpYyBvcHRpb25zLiBOb25lIGxvYWRlZCBtZWFuc1xuXHQvLyB0aGUgYW5hbHl6ZXIgZGV0ZWN0cyB6ZXJvIGluc3RydW1lbnRhdGlvbiBwb2ludHMuXG5cdGNvbnN0IHBsdWdpbnMgPSBsb2FkVGFjdGljYVBsdWdpbnMocGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZSh0c2NvbmZpZ1BhdGgpKSwgb3B0aW9ucyk7XG5cblx0Ly8gTG9hZCBUeXBlU2NyaXB0IHByb2dyYW1cblx0Y29uc3QgcHJvZ3JhbSA9IGxvYWRQcm9ncmFtKHRzY29uZmlnUGF0aCk7XG5cblx0Ly8gQ3JlYXRlIGFuYWx5emVyXG5cdGNvbnN0IGFuYWx5emVyID0gbmV3IE1uZW1vbmljYUFuYWx5emVyKHByb2dyYW0sIHBsdWdpbnMpO1xuXG5cdC8vIERldGVybWluZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBleGNsdXNpb25cblx0Y29uc3Qgb3V0cHV0RGlyID0gb3B0aW9ucy5vdXRwdXREaXIgfHwgJy50YWN0aWNhJztcblx0Y29uc3Qgb3V0cHV0RGlyUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvdXRwdXREaXIpO1xuXHQvLyBUaGUgcHJvamVjdC1jb252ZW50aW9uYWwgLnRhY3RpY2EgZGlyIChuZXh0IHRvIHRzY29uZmlnKSBpcyBBTFdBWVNcblx0Ly8gZXhjbHVkZWQsIGV2ZW4gd2hlbiAtLW91dHB1dCBwb2ludHMgZWxzZXdoZXJlOiBnZW5lcmF0ZWQgZmlsZXMgYXJlXG5cdC8vIG5ldmVyIHByb2plY3Qgc291cmNlLiByZXNvbHZlKCkgYm90aCBzaWRlcyDigJQgdHNjb25maWdQYXRoIG1heSBiZVxuXHQvLyByZWxhdGl2ZSAoJy4vdHNjb25maWcuanNvbicpIHdoaWxlIHNvdXJjZUZpbGUuZmlsZU5hbWUgaXMgYWJzb2x1dGVcblx0Y29uc3QgY29udmVudGlvbmFsT3V0cHV0RGlyID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBhdGguZGlybmFtZSh0c2NvbmZpZ1BhdGgpLCAnLnRhY3RpY2EnKTtcblxuXHQvLyBDb2xsZWN0IHNvdXJjZSBmaWxlcyB0byBhbmFseXplXG5cdGNvbnN0IHNvdXJjZUZpbGVzOiB0cy5Tb3VyY2VGaWxlW10gPSBbXTtcblx0Zm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuXHRcdGlmIChzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBhYnNvbHV0ZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXHRcdGlmIChhYnNvbHV0ZUZpbGVOYW1lLnN0YXJ0c1dpdGgob3V0cHV0RGlyUGF0aCArIHBhdGguc2VwKSB8fFxuXHRcdFx0YWJzb2x1dGVGaWxlTmFtZS5zdGFydHNXaXRoKGNvbnZlbnRpb25hbE91dHB1dERpciArIHBhdGguc2VwKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZXhjbHVkZSBwYXR0ZXJuc1xuXHRcdGlmIChvcHRpb25zLmV4Y2x1ZGUpIHtcblx0XHRcdGNvbnN0IHNob3VsZEV4Y2x1ZGUgPSBvcHRpb25zLmV4Y2x1ZGUuc29tZShwYXR0ZXJuID0+XG5cdFx0XHRcdHNvdXJjZUZpbGUuZmlsZU5hbWUuaW5jbHVkZXMocGF0dGVybi5yZXBsYWNlKC9cXCovZywgJycpKSk7XG5cdFx0XHRpZiAoc2hvdWxkRXhjbHVkZSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDaGVjayBpbmNsdWRlIHBhdHRlcm5zXG5cdFx0aWYgKG9wdGlvbnMuaW5jbHVkZSAmJiBvcHRpb25zLmluY2x1ZGUubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgc2hvdWxkSW5jbHVkZSA9IG9wdGlvbnMuaW5jbHVkZS5zb21lKHBhdHRlcm4gPT5cblx0XHRcdFx0c291cmNlRmlsZS5maWxlTmFtZS5pbmNsdWRlcyhwYXR0ZXJuLnJlcGxhY2UoL1xcKi9nLCAnJykpKTtcblx0XHRcdGlmICghc2hvdWxkSW5jbHVkZSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzb3VyY2VGaWxlcy5wdXNoKHNvdXJjZUZpbGUpO1xuXHR9XG5cblx0Ly8gU2NhbiBmb3IgdG9wb2xvZ2ljYSBkaXJlY3Rvcnkgc3RydWN0dXJlcyBGSVJTVFxuXHRjb25zdCBwcm9qZWN0RGlyID0gcGF0aC5kaXJuYW1lKHRzY29uZmlnUGF0aCk7XG5cdGNvbnN0IHRvcG9sb2dpY2FEaXJzID0gc2NhblRvcG9sb2dpY2FEaXJlY3Rvcmllcyhwcm9qZWN0RGlyLCBvcHRpb25zLnRvcG9sb2dpY2FEaXJzKTtcblxuXHRpZiAodG9wb2xvZ2ljYURpcnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zb2xlLmxvZyhgRm91bmQgdG9wb2xvZ2ljYSBkaXJlY3RvcmllczogJHt0b3BvbG9naWNhRGlycy5qb2luKCcsICcpfWApO1xuXHR9XG5cblx0Ly8gQW5hbHl6ZSB0b3BvbG9naWNhIGRpcmVjdG9yaWVzIEJFRk9SRSB1c2FnZSBjb2xsZWN0aW9uXG5cdGNvbnN0IHRvcG9sb2dpY2FBbmFseXplciA9IG5ldyBUb3BvbG9naWNhQW5hbHl6ZXIoKTtcblx0Y29uc3QgdG9wb2xvZ2ljYVR5cGVzID0gbmV3IE1hcDxzdHJpbmcsIGltcG9ydCgnLi90eXBlcycpLlR5cGVOb2RlPigpO1xuXHRmb3IgKGNvbnN0IGRpciBvZiB0b3BvbG9naWNhRGlycykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRvcG9sb2dpY2FBbmFseXplci5hbmFseXplRGlyZWN0b3J5KGRpcik7XG5cdFx0aWYgKHJlc3VsdC50eXBlcy5zaXplID4gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB0b3BvbG9naWNhIHR5cGVzIGZvciBkZWZpbml0aW9ucyBhbmQgdXNhZ2UgdHJhY2tpbmdcblx0XHRcdGZvciAoY29uc3QgWyB0eXBlUGF0aCwgbm9kZSBdIG9mIHJlc3VsdC50eXBlcykge1xuXHRcdFx0XHR0b3BvbG9naWNhVHlwZXMuc2V0KHR5cGVQYXRoLCBub2RlKTtcblx0XHRcdH1cblx0XHRcdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coYEFkZGVkICR7cmVzdWx0LnR5cGVzLnNpemV9IHR5cGVzIGZyb20gJHtkaXJ9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0XHRyZXN1bHQuZXJyb3JzLmZvckVhY2goZXJyID0+IGNvbnNvbGUud2FybihgW1RvcG9sb2dpY2FdICR7ZXJyfWApKTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGQgdG9wb2xvZ2ljYSB0eXBlcyB0byBhbmFseXplciBzbyB0aGV5J3JlIGF2YWlsYWJsZSBmb3IgdXNhZ2UgZGV0ZWN0aW9uXG5cdC8vIFByb2Nlc3MgaW4gb3JkZXIgb2YgcGF0aCBkZXB0aCAocGFyZW50cyBmaXJzdCkgdG8gZW5zdXJlIHByb3BlciBoaWVyYXJjaHlcblx0Y29uc3Qgc29ydGVkVHlwZXMgPSBBcnJheS5mcm9tKHRvcG9sb2dpY2FUeXBlcy5lbnRyaWVzKCkpLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBkZXB0aEEgPSAoYVsgMCBdLm1hdGNoKC9cXC4vZykgfHwgW10pLmxlbmd0aDtcblx0XHRjb25zdCBkZXB0aEIgPSAoYlsgMCBdLm1hdGNoKC9cXC4vZykgfHwgW10pLmxlbmd0aDtcblx0XHRyZXR1cm4gZGVwdGhBIC0gZGVwdGhCO1xuXHR9KTtcblx0Zm9yIChjb25zdCBbIHR5cGVQYXRoLCBub2RlIF0gb2Ygc29ydGVkVHlwZXMpIHtcblx0XHRhbmFseXplci5hZGRUb3BvbG9naWNhVHlwZSh0eXBlUGF0aCwgbm9kZSk7XG5cdH1cblxuXHQvLyBGaXJzdCBwYXNzOiBjb2xsZWN0IGFsbCBkZWZpbml0aW9ucy5cblx0Ly8gTW9kdWxlLXNjb3BlIHRyYWNraW5nIChpbXBvcnRzL2V4cG9ydHMgZm9yIG1vZHVsZXMuanNvbikgaGFwcGVucyBpbiB0aGVcblx0Ly8gc2FtZSBwYXNzIOKAlCBpdCBuZWVkcyBvbmx5IHRoZSBBU1QsIG5vdCB0aGUgY29sbGVjdGVkIGRlZmluaXRpb25zLlxuXHRjb25zdCBtb2R1bGVHcmFwaEJ1aWxkZXIgPSBuZXcgTW9kdWxlR3JhcGhCdWlsZGVyKHByb2dyYW0pO1xuXHRmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2Ygc291cmNlRmlsZXMpIHtcblx0XHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhgQW5hbHl6aW5nIChkZWZpbml0aW9ucyk6ICR7c291cmNlRmlsZS5maWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0YW5hbHl6ZXIuYW5hbHl6ZUZpbGUoc291cmNlRmlsZSk7XG5cdFx0XHRtb2R1bGVHcmFwaEJ1aWxkZXIuYWRkRmlsZShzb3VyY2VGaWxlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGFuYWx5emluZyAke3NvdXJjZUZpbGUuZmlsZU5hbWV9OmAsIGVycik7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2Vjb25kIHBhc3M6IGNvbGxlY3QgdXNhZ2VzIChub3cgYWxsIGRlZmluaXRpb25zIGFyZSBrbm93biwgaW5jbHVkaW5nIHRvcG9sb2dpY2EpXG5cdGFuYWx5emVyLnJlc2V0VXNhZ2VzKCk7XG5cdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRcdGNvbnNvbGUubG9nKGBBbmFseXppbmcgKHVzYWdlcyk6ICR7c291cmNlRmlsZS5maWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0YW5hbHl6ZXIuYW5hbHl6ZUZpbGUoc291cmNlRmlsZSk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBFcnJvciBhbmFseXppbmcgJHtzb3VyY2VGaWxlLmZpbGVOYW1lfTpgLCBlcnIpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXG5cdC8vIEdlbmVyYXRlIHR5cGVzIGZyb20gbW5lbW9uaWNhIGFuYWx5c2lzXG5cdC8vIE5vdGU6IHRvcG9sb2dpY2EgdHlwZXMgYXJlIGFscmVhZHkgYWRkZWQgdG8gdGhlIGFuYWx5emVyJ3MgZ3JhcGggdmlhIGFkZFRvcG9sb2dpY2FUeXBlKClcblx0Y29uc3QgZ3JhcGggPSBhbmFseXplci5nZXRHcmFwaCgpO1xuXG5cdC8vIFBhdGgtYXdhcmUgZ3JhcGggcmVmZXJlbmNlIHJlc29sdXRpb24gKGlkZW50aXR5IGxhdyk6IHRoZSBnZW5lcmF0b3Jcblx0Ly8gcmVzb2x2ZXMgbmFtZXMgdGhyb3VnaCB0aGUgc2FtZSByZWxhdGl2ZS1maXJzdC9yb290L3VuaXF1ZSB0aWVycyB0aGVcblx0Ly8gYW5hbHl6ZXIgdXNlczsgdGhlIGFuYWx5emVyJ3Mgb3duIHZhbHVlL2ltcG9ydCB0aWVycyBhbHJlYWR5IHZldHRlZCB0aGVcblx0Ly8gdHlwZSBzdHJpbmdzIGR1cmluZyBleHRyYWN0aW9uXG5cdGNvbnN0IHJlZmVyZW5jZVJlc29sdmVyOiBHcmFwaFJlZmVyZW5jZVJlc29sdmVyID0gKHNpbXBsZU5hbWUsIGFuY2hvcikgPT4ge1xuXHRcdGNvbnN0IHJlZlJlc3VsdCA9IHJlc29sdmVHcmFwaFR5cGVSZWZlcmVuY2UoZ3JhcGgsIHNpbXBsZU5hbWUsIGFuY2hvcik7XG5cdFx0aWYgKHJlZlJlc3VsdC5zdGF0dXMgPT09ICd1bmlxdWUnKSB7XG5cdFx0XHRyZXR1cm4gcmVmUmVzdWx0Lm5vZGU7XG5cdFx0fVxuXHRcdGlmIChyZWZSZXN1bHQuc3RhdHVzID09PSAnYW1iaWd1b3VzJykge1xuXHRcdFx0cmV0dXJuICdhbWJpZ3VvdXMnO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9O1xuXHRjb25zdCBnZW5lcmF0b3IgPSBuZXcgVHlwZXNHZW5lcmF0b3IoZ3JhcGgsIG9wdGlvbnMuZXNtLCBvcHRpb25zLm91dHB1dERpciwgcmVmZXJlbmNlUmVzb2x2ZXIpO1xuXG5cdC8vIENoZWNrIGlmIG1vZHVsZSBhdWdtZW50YXRpb24gbW9kZSBpcyByZXF1ZXN0ZWQgKGxlZ2FjeSlcblx0Y29uc3QgdXNlTW9kdWxlQXVnbWVudGF0aW9uID0gb3B0aW9ucy5nbG9iYWxBdWdtZW50YXRpb24gPT09IGZhbHNlO1xuXG5cdC8vIEdlbmVyYXRlIGV2ZXJ5dGhpbmcgaW50byBtZW1vcnkgRklSU1Qg4oCUIHRoZSBoYXJkLWZhaWwgbGF3IGJlbG93IG1heVxuXHQvLyBhYm9ydCB0aGUgcnVuLCBhbmQgbm8gLnRhY3RpY2Egb3V0cHV0IGF0IGFsbCBtYXkgYmUgd3JpdHRlbiB0aGVuXG5cdGxldCBnZW5lcmF0ZWRUeXBlczogeyBjb250ZW50OiBzdHJpbmc7IHR5cGVzOiBzdHJpbmdbXSB9O1xuXHRsZXQgcmVnaXN0cnlUeXBlczogeyBjb250ZW50OiBzdHJpbmc7IHR5cGVzOiBzdHJpbmdbXSB9IHwgdW5kZWZpbmVkO1xuXHRsZXQgb3V0cHV0UGF0aDogc3RyaW5nO1xuXG5cdGlmICh1c2VNb2R1bGVBdWdtZW50YXRpb24pIHtcblx0XHQvLyBMZWdhY3kgbW9kZTogZ2VuZXJhdGUgZ2xvYmFsIGF1Z21lbnRhdGlvbiBmaWxlIChpbmRleC5kLnRzKVxuXHRcdGdlbmVyYXRlZFR5cGVzID0gZ2VuZXJhdG9yLmdlbmVyYXRlR2xvYmFsQXVnbWVudGF0aW9uKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRGVmYXVsdCBtb2RlOiBnZW5lcmF0ZSB0eXBlcy50cyBmb3IgbWFudWFsIGltcG9ydHNcblx0XHRnZW5lcmF0ZWRUeXBlcyA9IGdlbmVyYXRvci5nZW5lcmF0ZVR5cGVzRmlsZSgpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgcmVnaXN0cnkudHMgZm9yIHR5cGUtc2FmZSBsb29rdXAoKSBmdW5jdGlvblxuXHRcdHJlZ2lzdHJ5VHlwZXMgPSBnZW5lcmF0b3IuZ2VuZXJhdGVUeXBlUmVnaXN0cnkoKTtcblx0fVxuXG5cdC8vIEhBUkQgRkFJTCAoZ3JhcGggaWRlbnRpdHkgbGF3KTogc2FtZS1uYW1lc3BhY2UgZHVwbGljYXRlIG1uZW1vbmljYVxuXHQvLyBkZWZpbml0aW9ucywgcGx1cyBncmFwaCByZWZlcmVuY2VzIHRoYXQgc3RheSBhbWJpZ3VvdXMgYWZ0ZXJcblx0Ly8gcGF0aC1hd2FyZSByZXNvbHV0aW9uIG9yIHJlc29sdmUgdG8gbm90aGluZy4gUHJpbnQgZXZlcnkgZmFpbHVyZSB3aXRoXG5cdC8vIGFsbCBpdHMgbG9jYXRpb25zIGFuZCB3cml0ZSBOTyAudGFjdGljYSBvdXRwdXQgYXQgYWxsLlxuXHRjb25zdCBmYXRhbEVycm9ycyA9IFsgLi4uYW5hbHl6ZXIuZ2V0UmVzb2x1dGlvbkVycm9ycygpLCAuLi5nZW5lcmF0b3IuZ2V0UmVzb2x1dGlvbkVycm9ycygpIF07XG5cdGlmIChmYXRhbEVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGxldCBwcmludGVkID0gMDtcblx0XHRmb3IgKGNvbnN0IGVycm9yIG9mIGZhdGFsRXJyb3JzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBgJHtlcnJvci5tZXNzYWdlfXwke2Vycm9yLmxvY2F0aW9ucy5qb2luKCd8Jyl9YDtcblx0XHRcdGlmIChzZWVuLmhhcyhrZXkpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0c2Vlbi5hZGQoa2V5KTtcblx0XHRcdHByaW50ZWQrKztcblx0XHRcdGNvbnNvbGUuZXJyb3IoYHRhY3RpY2E6ICR7ZXJyb3IubWVzc2FnZX1gKTtcblx0XHRcdGZvciAoY29uc3QgbG9jYXRpb24gb2YgZXJyb3IubG9jYXRpb25zKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYCAgYXQgJHtsb2NhdGlvbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc29sZS5lcnJvcihgdGFjdGljYTogYWJvcnRpbmcg4oCUICR7cHJpbnRlZH0gcmVzb2x1dGlvbiBmYWlsdXJlKHMpOyBubyAudGFjdGljYSBvdXRwdXQgd3JpdHRlbmApO1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0Ly8gUHJvamVjdCByb290IGFuY2hvcnMgdGhlIHJlbGF0aXZlIHBhdGhzIHRoZSB3cml0ZXIgZW1pdHM6IC50YWN0aWNhXG5cdC8vIG91dHB1dCBtdXN0IHN0YXkgcG9ydGFibGUgd2hlbiB0aGUgY2hlY2tvdXQgbW92ZXMgYmV0d2VlbiBtYWNoaW5lcy5cblx0Ly8gcmVzb2x2ZSgpIGJvdGggc2lkZXMg4oCUIHRzY29uZmlnUGF0aCBpdHNlbGYgbWF5IGJlIHJlbGF0aXZlLlxuXHRjb25zdCBwcm9qZWN0Um9vdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwYXRoLmRpcm5hbWUodHNjb25maWdQYXRoKSk7XG5cdGNvbnN0IHdyaXRlciA9IG5ldyBUeXBlc1dyaXRlcihvcHRpb25zLm91dHB1dERpciwgcHJvamVjdFJvb3QpO1xuXG5cdGlmICh1c2VNb2R1bGVBdWdtZW50YXRpb24pIHtcblx0XHQvLyBMZWdhY3kgbW9kZTogd3JpdGUgZ2xvYmFsIGF1Z21lbnRhdGlvbiBmaWxlIChpbmRleC5kLnRzKVxuXHRcdG91dHB1dFBhdGggPSB3cml0ZXIud3JpdGVHbG9iYWxBdWdtZW50YXRpb24oZ2VuZXJhdGVkVHlwZXMpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIERlZmF1bHQgbW9kZTogd3JpdGUgdHlwZXMudHMgZm9yIG1hbnVhbCBpbXBvcnRzXG5cdFx0b3V0cHV0UGF0aCA9IHdyaXRlci53cml0ZVR5cGVzRmlsZShnZW5lcmF0ZWRUeXBlcyk7XG5cblx0XHRjb25zdCByZWdpc3RyeVBhdGggPSB3cml0ZXIud3JpdGVUbygncmVnaXN0cnkudHMnLCByZWdpc3RyeVR5cGVzIS5jb250ZW50KTtcblxuXHRcdC8vIEdlbmVyYXRlIGluZGV4LnRzIHRvIGV4cG9ydCBldmVyeXRoaW5nXG5cdFx0Y29uc3QgaW5kZXhDb250ZW50ID0gYC8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVFxuLy8gRXhwb3J0IGFsbCBnZW5lcmF0ZWQgdHlwZXNcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyR7b3B0aW9ucy5lc20gPyAnLmpzJyA6ICcnfSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5JHtvcHRpb25zLmVzbSA/ICcuanMnIDogJyd9JztcbmA7XG5cdFx0d3JpdGVyLndyaXRlVG8oJ2luZGV4LnRzJywgaW5kZXhDb250ZW50KTtcblxuXHRcdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgcmVnaXN0cnkudHMgYXQ6ICR7cmVnaXN0cnlQYXRofWApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEdlbmVyYXRlIGRlZmluaXRpb25zLmpzb24gYW5kIHVzYWdlcy5qc29uIGZvciBjb2RlIG5hdmlnYXRpb25cblx0Ly8gSW5jbHVkZSBib3RoIG1uZW1vbmljYSBhbmQgdG9wb2xvZ2ljYSBkZWZpbml0aW9uc1xuXHRjb25zdCBkZWZpbml0aW9ucyA9IG5ldyBNYXAoYW5hbHl6ZXIuZ2V0RGVmaW5pdGlvbnMoKSk7XG5cdGNvbnN0IHVzYWdlcyA9IG5ldyBNYXAoYW5hbHl6ZXIuZ2V0VXNhZ2VzKCkpO1xuXHRcblx0Ly8gQWRkIHRvcG9sb2dpY2EgdHlwZXMgdG8gZGVmaW5pdGlvbnNcblx0Zm9yIChjb25zdCBbIGZ1bGxQYXRoLCB0eXBlTm9kZSBdIG9mIHRvcG9sb2dpY2FUeXBlcykge1xuXHRcdC8vIFNraXAgaWYgYWxyZWFkeSBleGlzdHMgKHByZWZlciBtbmVtb25pY2EncyBhbmFseXNpcylcblx0XHRpZiAoZGVmaW5pdGlvbnMuaGFzKGZ1bGxQYXRoKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdFxuXHRcdGNvbnN0IGRlZmluaXRpb246IGltcG9ydCgnLi90eXBlcycpLkRlZmluaXRpb25JbmZvID0ge1xuXHRcdFx0bmFtZSAgICAgICAgOiB0eXBlTm9kZS5uYW1lLFxuXHRcdFx0bG9jYXRpb24gICAgOiBgJHt0eXBlTm9kZS5zb3VyY2VGaWxlfToke3R5cGVOb2RlLmxpbmV9OiR7dHlwZU5vZGUuY29sdW1ufWAsXG5cdFx0XHRraW5kICAgICAgICA6ICdkZWZpbmUnLFxuXHRcdFx0cGFyZW50ICAgICAgOiB0eXBlTm9kZS5wYXJlbnQgPyB0eXBlTm9kZS5wYXJlbnQuZnVsbFBhdGggOiBudWxsLFxuXHRcdFx0c3RyaWN0Q2hhaW4gOiB0cnVlLFxuXHRcdFx0YmxvY2tFcnJvcnMgOiBmYWxzZVxuXHRcdH07XG5cdFx0ZGVmaW5pdGlvbnMuc2V0KGZ1bGxQYXRoLCBkZWZpbml0aW9uKTtcblx0fVxuXG5cdC8vIExvY2FsLXNjb3BlIHdhbGsgKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgUGhhc2UgMik6IGZ1bmN0aW9uL21ldGhvZC9hcnJvd1xuXHQvLyBzY29wZXMgb25seSAobm8gYmxvY2sgc2NvcGVzIOKAlCBkZWNpc2lvbiA1KSwgdmFyaWFibGVzIHdpdGggaXNNdXRhYmxlIGFuZFxuXHQvLyByZWFzc2lnbm1lbnQgc2l0ZXMgKGRlY2lzaW9uIDYpLiBSdW5zIGFmdGVyIGRlZmluaXRpb25zIGFyZSBrbm93biBzb1xuXHQvLyB2YXJpYWJsZSB0eXBlUGF0aHMgY2FuIHJlc29sdmU7IGhvbGRlclNjb3BlSWQgaXMgYXR0YWNoZWQgdG8gdXNhZ2VzXG5cdC8vIGJlZm9yZSB0aGV5IGFyZSB3cml0dGVuLlxuXHRjb25zdCBzY29wZVdhbGtlciA9IG5ldyBMb2NhbFNjb3BlV2Fsa2VyKCk7XG5cdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdHNjb3BlV2Fsa2VyLmFkZEZpbGUoc291cmNlRmlsZSk7XG5cdH1cblx0Y29uc3Qgc2NvcGVSZXNvbHZlcjogU2NvcGVUeXBlUmVzb2x2ZXIgPSB7XG5cdFx0cmVzb2x2ZUJ5TmFtZSA6IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0aWYgKGRlZmluaXRpb25zLmhhcyhuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdH1cblx0XHRcdGxldCBmb3VuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0Zm9yIChjb25zdCBbIGZ1bGxQYXRoLCBkZWZpbml0aW9uIF0gb2YgZGVmaW5pdGlvbnMpIHtcblx0XHRcdFx0aWYgKGRlZmluaXRpb24ubmFtZSAhPT0gbmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmb3VuZCkge1xuXHRcdFx0XHRcdC8vIEFtYmlndW91cyBuYW1lIOKAlCBubyB0eXBlIGNoZWNrZXIsIHNvIHJlZnVzZSB0byBndWVzc1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm91bmQgPSBmdWxsUGF0aDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9LFxuXHRcdGhhc1BhdGggOiAoZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVmaW5pdGlvbnMuaGFzKGZ1bGxQYXRoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0XHQvLyBUaGUgYW5hbHl6ZXIncyBvd24gbG9va3VwIGxhdywgYWdhaW5zdCB0aGUgc2FtZSBjb21wbGV0ZSBncmFwaCB0aGVcblx0XHQvLyB1c2FnZXMgcGFzcyByZXNvbHZlZCB3aXRoIOKAlCBhIGxvb2t1cCgpIGluaXRpYWxpemVyIHRoZSBhbmFseXplclxuXHRcdC8vIGFjY2VwdGVkIChlLmcuIGFuIGltcG9ydGVkIEhvbGRlci5sb29rdXAoJ1Rva2VuJykpIGxhbmRzIHRoZSBzYW1lXG5cdFx0Ly8gZnVsbFBhdGggaW4gc2NvcGVzLmpzb24gaW5zdGVhZCBvZiBzdGFydmluZyB0aGUgY3JlYXRpb24tZ3JhcGhcblx0XHQvLyBhbmNob3JzLiBSZWplY3RlZCBsb29rdXBzIHN0YXkgdHlwZVBhdGgtbGVzcyBoZXJlOyB0aGUgYW5hbHl6ZXJcblx0XHQvLyBhbHJlYWR5IGhhcmQtZmFpbGVkIHRoZSBydW4gYWJvdmUuXG5cdFx0cmVzb2x2ZUxvb2t1cCA6IChjYWxsOiB0cy5DYWxsRXhwcmVzc2lvbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRjb25zdCByZXNvbHZlZCA9IGFuYWx5emVyLnJlc29sdmVMb29rdXBDYWxsUGF0aChjYWxsKTtcblx0XHRcdHJldHVybiByZXNvbHZlZDtcblx0XHR9LFxuXHR9O1xuXHRjb25zdCBzY29wZUFuYWx5c2lzID0gc2NvcGVXYWxrZXIuYnVpbGQoc2NvcGVSZXNvbHZlcik7XG5cdExvY2FsU2NvcGVXYWxrZXIuYXR0YWNoSG9sZGVyU2NvcGVJZHModXNhZ2VzLCBzY29wZVdhbGtlcik7XG5cblx0Y29uc3QgZGVmaW5pdGlvbnNQYXRoID0gd3JpdGVyLndyaXRlRGVmaW5pdGlvbnNGaWxlKGRlZmluaXRpb25zLCBncmFwaCk7XG5cdGNvbnN0IHVzYWdlc1BhdGggPSB3cml0ZXIud3JpdGVVc2FnZXNGaWxlKHVzYWdlcyk7XG5cblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgZGVmaW5pdGlvbnMuanNvbiBhdDogJHtkZWZpbml0aW9uc1BhdGh9YCk7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCB1c2FnZXMuanNvbiBhdDogJHt1c2FnZXNQYXRofWApO1xuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIEVEUyBzZXR0aW5nOiBleHBsaWNpdCBmbGFnID4gYXV0by1kZXRlY3QgZGl2ZSA+IGRlZmF1bHQgb2ZmXG5cdGxldCBlbmFibGVFRFMgPSBvcHRpb25zLmVkcztcblx0aWYgKGVuYWJsZUVEUyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZW5hYmxlRURTID0gaGFzRGl2ZURlcGVuZGVuY3kocHJvamVjdERpcik7XG5cdH1cblxuXHRpZiAoZW5hYmxlRURTKSB7XG5cdFx0Y29uc3QgZWRzID0gYW5hbHl6ZXIuZ2V0RURTVXNhZ2VzKCk7XG5cdFx0YXR0YWNoV3JhcEpvaW5EYXRhKGVkcywgc2NvcGVXYWxrZXIsIHNjb3BlQW5hbHlzaXMpO1xuXHRcdGNvbnN0IGVkc1BhdGggPSB3cml0ZXIud3JpdGVFRFNGaWxlKGVkcyk7XG5cdFx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBlZHMuanNvbiBhdDogJHtlZHNQYXRofWApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEFsd2F5cyBnZW5lcmF0ZSBmbG93Lmpzb24gKG5hdGl2ZSBpbnN0YW5jZSB1c2FnZSB0cmFja2luZylcblx0Y29uc3QgZmxvdyA9IGFuYWx5emVyLmdldEZsb3dVc2FnZXMoKTtcblx0Y29uc3QgZmxvd1BhdGggPSB3cml0ZXIud3JpdGVGbG93RmlsZShmbG93KTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnN0IGZsb3dDb3VudCA9IEFycmF5LmZyb20oZmxvdy52YWx1ZXMoKSkucmVkdWNlKChzdW0sIGFycikgPT4gc3VtICsgYXJyLmxlbmd0aCwgMCk7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBmbG93Lmpzb24gYXQ6ICR7Zmxvd1BhdGh9ICgke2Zsb3dDb3VudH0gZmxvdyBlbnRyaWVzKWApO1xuXHR9XG5cblx0Ly8gQWx3YXlzIGdlbmVyYXRlIG1vZHVsZXMuanNvbiAobW9kdWxlLXNjb3BlIGdyYXBoOiBpbXBvcnRzL2V4cG9ydHMsXG5cdC8vIGRlcGVuZGVuY2llcywgY3ljbGVzLCBjcm9zcy1tb2R1bGUgbW5lbW9uaWNhLXR5cGUgZWRnZXMpXG5cdGNvbnN0IGRlZmluZWRUeXBlc0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcblx0Zm9yIChjb25zdCBbIGZ1bGxQYXRoLCBkZWZpbml0aW9uIF0gb2YgZGVmaW5pdGlvbnMpIHtcblx0XHRjb25zdCB7IGxvY2F0aW9uIH0gPSBkZWZpbml0aW9uO1xuXHRcdGNvbnN0IGxhc3RDb2xvbiA9IGxvY2F0aW9uLmxhc3RJbmRleE9mKCc6Jyk7XG5cdFx0Y29uc3QgcHJldkNvbG9uID0gbG9jYXRpb24ubGFzdEluZGV4T2YoJzonLCBsYXN0Q29sb24gLSAxKTtcblx0XHRjb25zdCBmaWxlID0gbG9jYXRpb24uc2xpY2UoMCwgcHJldkNvbG9uKTtcblx0XHRjb25zdCBsaXN0ID0gZGVmaW5lZFR5cGVzQnlGaWxlLmdldChmaWxlKSA/PyBbXTtcblx0XHRsaXN0LnB1c2goZnVsbFBhdGgpO1xuXHRcdGRlZmluZWRUeXBlc0J5RmlsZS5zZXQoZmlsZSwgbGlzdCk7XG5cdH1cblx0Y29uc3QgbW9kdWxlR3JhcGggPSBtb2R1bGVHcmFwaEJ1aWxkZXIuYnVpbGQoZGVmaW5lZFR5cGVzQnlGaWxlKTtcblx0Y29uc3QgbW9kdWxlc1BhdGggPSB3cml0ZXIud3JpdGVNb2R1bGVzRmlsZShtb2R1bGVHcmFwaCk7XG5cdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zdCBtb2R1bGVDb3VudCA9IG1vZHVsZUdyYXBoLm1vZHVsZXMuc2l6ZTtcblx0XHRjb25zdCBlZGdlQ291bnQgPSBtb2R1bGVHcmFwaC5lZGdlcy5sZW5ndGg7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBtb2R1bGVzLmpzb24gYXQ6ICR7bW9kdWxlc1BhdGh9ICgke21vZHVsZUNvdW50fSBtb2R1bGVzLCAke2VkZ2VDb3VudH0gZWRnZXMpYCk7XG5cdH1cblxuXHQvLyBBbHdheXMgZ2VuZXJhdGUgc2NvcGVzLmpzb24gKGxvY2FsLXNjb3BlIHdhbGtlcjogc2NvcGVzLCB2YXJpYWJsZXMsXG5cdC8vIHJlYXNzaWdubWVudCBmbG93LXRlcm1pbmF0aW9uIHBvaW50cylcblx0Y29uc3Qgc2NvcGVzUGF0aCA9IHdyaXRlci53cml0ZVNjb3Blc0ZpbGUoc2NvcGVBbmFseXNpcyk7XG5cdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zdCBzY29wZUNvdW50ID0gc2NvcGVBbmFseXNpcy5zY29wZXMuc2l6ZTtcblx0XHRjb25zdCB2YXJpYWJsZUNvdW50ID0gc2NvcGVBbmFseXNpcy52YXJpYWJsZXMuc2l6ZTtcblx0XHRjb25zb2xlLmxvZyhgR2VuZXJhdGVkIHNjb3Blcy5qc29uIGF0OiAke3Njb3Blc1BhdGh9ICgke3Njb3BlQ291bnR9IHNjb3BlcywgJHt2YXJpYWJsZUNvdW50fSB2YXJpYWJsZXMpYCk7XG5cdH1cblxuXHQvLyBUaGUgaW5zaWRlLW91dCBjcmVhdGlvbiB3YWxrIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIFBoYXNlIDMpOiBhbmNob3JzXG5cdC8vIGFyZSB0aGUgaW5zdGFudGlhdGlvbiB1c2FnZXM7IGNhbGxlcnMgYXJlIGZvbGxvd2VkIHNhbWUtZmlsZSBhbmRcblx0Ly8gY3Jvc3MtZmlsZSAobW9kdWxlIGdyYXBoLCBiYXJyZWxzIGNoYXNlZCkgdW50aWwgb25seSBzdGFydGVycyByZW1haW4uXG5cdGNvbnN0IHNvdXJjZUZpbGVzQnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIHRzLlNvdXJjZUZpbGU+KCk7XG5cdGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuXHRcdHNvdXJjZUZpbGVzQnlQYXRoLnNldChwYXRoLnJlc29sdmUoc291cmNlRmlsZS5maWxlTmFtZSksIHNvdXJjZUZpbGUpO1xuXHR9XG5cdGNvbnN0IGNyZWF0aW9uR3JhcGhCdWlsZGVyID0gbmV3IENyZWF0aW9uR3JhcGhCdWlsZGVyKG1vZHVsZUdyYXBoLCBzY29wZUFuYWx5c2lzLCBzY29wZVdhbGtlciwgc291cmNlRmlsZXNCeVBhdGgpO1xuXHRjb25zdCBjcmVhdGlvbkdyYXBoID0gY3JlYXRpb25HcmFwaEJ1aWxkZXIuYnVpbGQodXNhZ2VzKTtcblxuXHQvLyBBbHdheXMgZ2VuZXJhdGUgaW5zdHJ1bWVudGF0aW9uLmpzb24gKGZyYW1ld29yayBsaWZlY3ljbGUgY3Jvc3Nyb2Fkc1xuXHQvLyBmcm9tIHRoZSBsb2FkZWQgcGx1Z2lucyDigJQgc3ludGFjdGljIGRldGVjdGlvbiBuZWVkcyBubyBkaXZlXG5cdC8vIGRlcGVuZGVuY3ksIHVubGlrZSBlZHMuanNvbikuIHYyIGNhcnJpZXMgdGhlIGNyZWF0aW9uIGdyYXBoXG5cdC8vIGFsb25nc2lkZSB0aGUgcG9pbnRzLlxuXHRjb25zdCBpbnN0cnVtZW50YXRpb24gPSBhbmFseXplci5nZXRJbnN0cnVtZW50YXRpb25Qb2ludHMoKTtcblx0Y29uc3QgaW5zdHJ1bWVudGF0aW9uUGF0aCA9IHdyaXRlci53cml0ZUluc3RydW1lbnRhdGlvbkZpbGUoaW5zdHJ1bWVudGF0aW9uLCBjcmVhdGlvbkdyYXBoKTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnN0IG5vZGVDb3VudCA9IGNyZWF0aW9uR3JhcGgubm9kZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGVkZ2VDb3VudCA9IGNyZWF0aW9uR3JhcGguZWRnZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGFuY2hvckNvdW50ID0gY3JlYXRpb25HcmFwaC5hbmNob3JzLmxlbmd0aDtcblx0XHRjb25zb2xlLmxvZyhgR2VuZXJhdGVkIGluc3RydW1lbnRhdGlvbi5qc29uIGF0OiAke2luc3RydW1lbnRhdGlvblBhdGh9ICgke2luc3RydW1lbnRhdGlvbi5sZW5ndGh9IHBvaW50cylgKTtcblx0XHRjb25zb2xlLmxvZyhgICBjcmVhdGlvbiBncmFwaDogJHtub2RlQ291bnR9IG5vZGVzLCAke2VkZ2VDb3VudH0gZWRnZXMsICR7YW5jaG9yQ291bnR9IGFuY2hvcnNgKTtcblx0fVxuXG5cdC8vIEFsd2F5cyBnZW5lcmF0ZSBjb250cm9sLmpzb24gKGxldGhlIGNvbnRyYWN0LCBmb3JtYXQgMS4yKTogdGhlIHNhbWVcblx0Ly8gY3JlYXRpb24gZ3JhcGggYW5kIHBvaW50cyBhcyBpbnN0cnVtZW50YXRpb24uanNvbiwgcmVuZGVyZWQgdW5kZXIgdGhlXG5cdC8vIGNyb3NzLWxhbmd1YWdlIGBjYWxsZXJzYC9gcG9pbnRzYCBrZXlzLlxuXHRjb25zdCBjb250cm9sUGF0aCA9IHdyaXRlci53cml0ZUNvbnRyb2xGaWxlKGluc3RydW1lbnRhdGlvbiwgY3JlYXRpb25HcmFwaCk7XG5cdGlmIChvcHRpb25zLnZlcmJvc2UpIHtcblx0XHRjb25zb2xlLmxvZyhgR2VuZXJhdGVkIGNvbnRyb2wuanNvbiBhdDogJHtjb250cm9sUGF0aH1gKTtcblx0fVxuXG5cdC8vIEdlbmVyYXRlIGhpZXJhcmNoeS5qc29uIChzdHJ1Y3R1cmVkKSBhbmQgaGllcmFyY2h5LnR4dCAoQVNDSUkgdHJlZSkgZm9yIHRoZSBUcmllXG5cdGNvbnN0IGhpZXJhcmNoeVJvb3RzID0gZ3JhcGgudG9IaWVyYXJjaHkoKTtcblx0Y29uc3QgaGllcmFyY2h5SnNvblBhdGggPSB3cml0ZXIud3JpdGVIaWVyYXJjaHlGaWxlKGhpZXJhcmNoeVJvb3RzKTtcblx0Y29uc3QgaGllcmFyY2h5VGV4dCA9IHJlbmRlclR5cGVIaWVyYXJjaHkoZ3JhcGgpO1xuXHRjb25zdCBoaWVyYXJjaHlUeHRQYXRoID0gd3JpdGVyLndyaXRlVG8oJ2hpZXJhcmNoeS50eHQnLCBoaWVyYXJjaHlUZXh0KTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgaGllcmFyY2h5Lmpzb24gYXQ6ICR7aGllcmFyY2h5SnNvblBhdGh9YCk7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCBoaWVyYXJjaHkudHh0IGF0OiAke2hpZXJhcmNoeVR4dFBhdGh9YCk7XG5cdH1cblxuXHQvLyBBbHdheXMgZ2VuZXJhdGUgY29sbGVjdGlvbnMuanNvbiAodGhlIGNvbGxlY3Rpb24gbWFuaWZlc3Q6IGlkcywgZGlzcGxheVxuXHQvLyBuYW1lcywgT3B0aW9uLUIgcmVnaXN0cnkgaW50ZXJmYWNlcywgY2FsbCBzaXRlcyDigJQgdGhlIGlk4oaUaW50ZXJmYWNlIGpvaW5cblx0Ly8ga2V5IGJldHdlZW4gdGhlIHByZWZpeGVkIGdyYXBoIG91dHB1dHMgYW5kIHRoZSB0eXBlcy50cyBhbGlhc2VzKVxuXHRjb25zdCBjb2xsZWN0aW9uc1BhdGggPSB3cml0ZXIud3JpdGVDb2xsZWN0aW9uc0ZpbGUoYW5hbHl6ZXIuZ2V0Q29sbGVjdGlvbnNNYW5pZmVzdCgpKTtcblx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgY29sbGVjdGlvbnMuanNvbiBhdDogJHtjb2xsZWN0aW9uc1BhdGh9YCk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0Y29uc29sZS5sb2coYEdlbmVyYXRlZCB0eXBlcyBhdDogJHtvdXRwdXRQYXRofWApO1xuXHRcdGNvbnNvbGUubG9nKGBNb2RlOiAke3VzZU1vZHVsZUF1Z21lbnRhdGlvbiA/ICdnbG9iYWwgYXVnbWVudGF0aW9uIChsZWdhY3kpJyA6ICd0eXBlcyBmaWxlIChkZWZhdWx0KSd9YCk7XG5cdFx0Y29uc29sZS5sb2coYEZvdW5kICR7Z2VuZXJhdGVkVHlwZXMudHlwZXMubGVuZ3RofSB0eXBlczpgKTtcblx0XHRwcmludFR5cGVIaWVyYXJjaHkoZ3JhcGgpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgJHtnZW5lcmF0ZWRUeXBlcy50eXBlcy5sZW5ndGh9IHR5cGVzIGF0ICR7b3B0aW9ucy5vdXRwdXREaXIgfHwgJy50YWN0aWNhJ31gKTtcblx0XHRpZiAodXNlTW9kdWxlQXVnbWVudGF0aW9uKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnVXNpbmcgZ2xvYmFsIGF1Z21lbnRhdGlvbiBtb2RlIChsZWdhY3ksIHVzZSBkZWZhdWx0IG1vZGUgZm9yIHR5cGVzLnRzIG9ubHkpJyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIDA7XG59XG5cbi8qKlxuICogV2F0Y2ggbW9kZVxuICovXG5mdW5jdGlvbiB3YXRjaCAob3B0aW9uczogQ0xJT3B0aW9ucyk6IHZvaWQge1xuXHRjb25zb2xlLmxvZygnU3RhcnRpbmcgd2F0Y2ggbW9kZS4uLicpO1xuXG5cdC8vIEluaXRpYWwgcnVuXG5cdHJ1bihvcHRpb25zKTtcblxuXHQvLyBTZXQgdXAgZmlsZSB3YXRjaGluZ1xuXHRjb25zdCBjaG9raWRhciA9IHJlcXVpcmUoJ2Nob2tpZGFyJyk7XG5cdGNvbnN0IHRzY29uZmlnUGF0aCA9IGZpbmRUc0NvbmZpZyhvcHRpb25zLnByb2plY3QpO1xuXG5cdGlmICghdHNjb25maWdQYXRoKSB7XG5cdFx0Y29uc29sZS5lcnJvcignRXJyb3I6IENvdWxkIG5vdCBmaW5kIHRzY29uZmlnLmpzb24nKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCBwcm9qZWN0RGlyID0gcGF0aC5kaXJuYW1lKHRzY29uZmlnUGF0aCk7XG5cdGNvbnN0IHdhdGNoUGF0aHMgPSBvcHRpb25zLmluY2x1ZGUgfHwgWyAnKiovKi50cycgXTtcblx0Y29uc3QgaWdub3JlUGF0aHMgPSBvcHRpb25zLmV4Y2x1ZGUgfHwgWyAnKiovKi5kLnRzJywgJ25vZGVfbW9kdWxlcy8qKicsICcudGFjdGljYS8qKicgXTtcblxuXHRjb25zdCB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2god2F0Y2hQYXRocywge1xuXHRcdGN3ZCAgICAgICAgOiBwcm9qZWN0RGlyLFxuXHRcdGlnbm9yZWQgICAgOiBpZ25vcmVQYXRocyxcblx0XHRwZXJzaXN0ZW50IDogdHJ1ZSxcblx0fSk7XG5cblx0d2F0Y2hlci5vbignY2hhbmdlJywgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRpZiAob3B0aW9ucy52ZXJib3NlKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSBjaGFuZ2VkOiAke2ZpbGVQYXRofWApO1xuXHRcdH1cblx0XHRydW4ob3B0aW9ucyk7XG5cdH0pO1xuXG5cdHdhdGNoZXIub24oJ2FkZCcsIChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKG9wdGlvbnMudmVyYm9zZSkge1xuXHRcdFx0Y29uc29sZS5sb2coYEZpbGUgYWRkZWQ6ICR7ZmlsZVBhdGh9YCk7XG5cdFx0fVxuXHRcdHJ1bihvcHRpb25zKTtcblx0fSk7XG5cblx0Y29uc29sZS5sb2coJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uIChQcmVzcyBDdHJsK0MgdG8gc3RvcCknKTtcbn1cblxuLyoqXG4gKiBNYWluIGVudHJ5IHBvaW50XG4gKi9cbmZ1bmN0aW9uIG1haW4gKCk6IHZvaWQge1xuXHRjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuXHRjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3MpO1xuXG5cdGlmIChvcHRpb25zLmhlbHApIHtcblx0XHRwcmludEhlbHAoKTtcblx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGlmIChvcHRpb25zLndhdGNoKSB7XG5cdFx0XHR3YXRjaChvcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29kZSA9IHJ1bihvcHRpb25zKTtcblx0XHRcdGlmIChjb2RlKSB7XG5cdFx0XHRcdHByb2Nlc3MuZXhpdChjb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcik7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG59XG5cbi8vIFJ1biBpZiBleGVjdXRlZCBkaXJlY3RseVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG5cdG1haW4oKTtcbn1cblxuZXhwb3J0IHtcblx0bWFpbiwgcnVuLCB3YXRjaCwgcGFyc2VBcmdzIFxufTtcbiJdfQ==
package/lib/types.d.ts CHANGED
@@ -300,14 +300,14 @@ export interface InstrumentationJson {
300
300
  creationGraph?: CreationGraph;
301
301
  }
302
302
  /**
303
- * JSON output for control.json (lethe contract, format 1.1): `callers`
303
+ * JSON output for control.json (lethe contract, format 1.2): `callers`
304
304
  * carries the same creation graph instrumentation.json v2 carries under
305
305
  * `creationGraph`, `points` the same plugin-supplied instrumentation points.
306
306
  * instrumentation.json stays unchanged for mnemographica; control.json is
307
307
  * the cross-language contract rendering of the same data.
308
308
  */
309
309
  export interface ControlJson {
310
- version: '1.1';
310
+ version: '1.2';
311
311
  generatedAt: string;
312
312
  callers: CreationGraph;
313
313
  points: InstrumentationPoint[];
@@ -613,23 +613,24 @@ export interface HierarchyJson {
613
613
  * One entry of the collections.json manifest. The default collection is
614
614
  * emitted first whenever default-collection types exist: it has no call
615
615
  * site, so `id` and `location` stay null (unprefixed fullPaths ARE its
616
- * identity) and its registry interface is the global `TypeRegistry`.
616
+ * identity). Format 1.2: the registry interface is NOT part of the
617
+ * manifest (a TypeScript-only concern — the in-memory
618
+ * `registryInterfaceName` that types.ts/registry.ts are generated from
619
+ * stays on the TypeNode).
617
620
  */
618
621
  export interface CollectionManifestEntry {
619
622
  /** Minted id used in `collectionId::` fullPath prefixes; null for the default collection */
620
623
  id: string | null;
621
624
  /** Variable holding the createTypesCollection() result ('defaultTypes' for the default collection) */
622
625
  name: string;
623
- /** Option-B registry interface name; absent when the collection declares none */
624
- registryInterface?: string;
625
626
  /** createTypesCollection() call site (file:line:col); null for the default collection */
626
627
  location: string | null;
627
628
  /**
628
- * Source language of this collection's codebase (format 1.1; absent in
629
- * 1.0 output, where readers default it to "typescript"). tactica is the
630
- * TypeScript generator, so every entry it writes is "typescript".
629
+ * Source language of this collection's codebase (format 1.2: required —
630
+ * there is no default language). tactica is the TypeScript generator,
631
+ * so every entry it writes is "typescript".
631
632
  */
632
- language?: 'typescript';
633
+ language: 'typescript';
633
634
  }
634
635
  /**
635
636
  * JSON output for collections.json
package/lib/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBIb3cgdGhlIHBhcmFtZXRlciByZWNlaXZlcyBpdHMgdmFsdWUuIE9ubHkgJ3Jlc3QnIGlzIGVtaXR0ZWQgKFRTXG5cdCAqIGAuLi54c2ApOyBhYnNlbnQgbWVhbnMgYW4gb3JkaW5hcnkgcGFyYW1ldGVyLiBNaXJyb3JzIHRoZSBga2luZGBcblx0ICogdm9jYWJ1bGFyeSBvZiB0aGUgbGV0aGUgZGVmaW5pdGlvbnMgY29udHJhY3QgKGRlZmluaXRpb25zLmpzb24gYXJncykuXG5cdCAqL1xuXHRraW5kPzogJ3Jlc3QnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVOb2RlIHtcblx0LyoqIFR5cGUgbmFtZSAoZS5nLiwgXCJTZWNvbmRUeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIEZ1bGwgcGF0aCAoZS5nLiwgXCJGaXJzdFR5cGUuU2Vjb25kVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogUHJvcGVydGllcyBkZWZpbmVkIGluIHRoaXMgdHlwZSdzIGNvbnN0cnVjdG9yICovXG5cdHByb3BlcnRpZXM6IE1hcDxzdHJpbmcsIFByb3BlcnR5SW5mbz47XG5cdC8qKiBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIChmb3IgVHlwZVJlZ2lzdHJ5IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSkgKi9cblx0Y29uc3RydWN0b3JQYXJhbXM/OiBDb25zdHJ1Y3RvclBhcmFtSW5mb1tdO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBjb25zdHJ1Y3QgaGFuZGxlciBpcyBhbiBhc3luYyBmdW5jdGlvbi9hcnJvdyAoZGV0ZWN0ZWRcblx0ICogc3ludGFjdGljYWxseSBieSB0aGUgYXN5bmMgbW9kaWZpZXIpLiBFbWl0dGVkIGNvbnN0cnVjdG9yIHNoYXBlcyB0aGVuXG5cdCAqIHJlc29sdmUgdG8gUHJvbWlzZTxJbnN0YW5jZVR5cGU+LiBBc3luYyBDTEFTU0VTIGFyZSBuZXZlciBmbGFnZ2VkIOKAlFxuXHQgKiB0aGV5IGFyZSB0eXBlZCBieSB0aGUgdXNlciBpbiB1c2VybGFuZCAoZG9jdW1lbnRlZCBpbiBBR0VOVFMubWQpLlxuXHQgKi9cblx0aXNBc3luYz86IGJvb2xlYW47XG5cdC8qKiBQYXJlbnQgdHlwZSBub2RlICovXG5cdHBhcmVudD86IFR5cGVOb2RlO1xuXHQvKiogQ2hpbGQgdHlwZXMgKi9cblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIFNvdXJjZSBmaWxlIHBhdGggKi9cblx0c291cmNlRmlsZTogc3RyaW5nO1xuXHQvKiogTGluZSBudW1iZXIgaW4gc291cmNlICovXG5cdGxpbmU6IG51bWJlcjtcblx0LyoqIENvbHVtbiBudW1iZXIgaW4gc291cmNlICovXG5cdGNvbHVtbjogbnVtYmVyO1xuXHQvKiogQ29uc3RydWN0b3IgZnVuY3Rpb24gbmFtZSBvciBjbGFzcyBuYW1lICovXG5cdGNvbnN0cnVjdG9yTmFtZT86IHN0cmluZztcblx0LyoqIENvbGxlY3Rpb24gaWRlbnRpZmllciBpZiB0aGUgdHlwZSBiZWxvbmdzIHRvIGEgY3VzdG9tIGNvbGxlY3Rpb24gKHVuZGVmaW5lZCA9IGRlZmF1bHQvZ2xvYmFsIHJlZ2lzdHJ5KSAqL1xuXHRjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG5cdC8qKiBSZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBmb3IgY3VzdG9tIGNvbGxlY3Rpb25zIHVzaW5nIE9wdGlvbiBCICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZSkgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2VOYW1lPzogc3RyaW5nO1xuXHQvKipcblx0ICogU291cmNlIGZpbGUgb2YgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIGNhbGwg4oCUIHRoZSBtb2R1bGUgdGhlXG5cdCAqIE9wdGlvbiBCIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbiBtdXN0IHRhcmdldCAodGhlIGludGVyZmFjZSBpc1xuXHQgKiBjb25maXJtZWQgZGVjbGFyZWQgdGhlcmUpXG5cdCAqL1xuXHRjb2xsZWN0aW9uU291cmNlRmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3JhcGgge1xuXHQvKiogUm9vdCB0eXBlcywga2V5ZWQgYnkgZnVsbCBwYXRoIChjdXN0b20tY29sbGVjdGlvbiByb290cyBjYXJyeSB0aGUgYGNvbGxlY3Rpb25JZDo6YCBwcmVmaXgpICovXG5cdHJvb3RzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBbGwgdHlwZXMgYnkgZnVsbCBwYXRoICovXG5cdGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBZGQgYSByb290IHR5cGUgKi9cblx0YWRkUm9vdChub2RlOiBUeXBlTm9kZSk6IHZvaWQ7XG5cdC8qKiBGaW5kIGEgdHlwZSBieSBmdWxsIHBhdGggKi9cblx0ZmluZFR5cGUoZnVsbFBhdGg6IHN0cmluZyk6IFR5cGVOb2RlIHwgdW5kZWZpbmVkO1xuXHQvKiogR2V0IGFsbCB0eXBlcyBhcyBhcnJheSAqL1xuXHRnZXRBbGxUeXBlcygpOiBUeXBlTm9kZVtdO1xuXHQvKiogQ2xlYXIgdGhlIGdyYXBoICovXG5cdGNsZWFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG5cdC8qKiBUeXBlcyBmb3VuZCBpbiB0aGUgYW5hbHlzaXMgKi9cblx0dHlwZXM6IFR5cGVOb2RlW107XG5cdC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgKi9cblx0ZXJyb3JzOiBBbmFseXplRXJyb3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplRXJyb3Ige1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdGZpbGU6IHN0cmluZztcblx0bGluZTogbnVtYmVyO1xuXHRjb2x1bW46IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRUeXBlcyB7XG5cdC8qKiBDb250ZW50IG9mIHRoZSAuZC50cyBmaWxlICovXG5cdGNvbnRlbnQ6IHN0cmluZztcblx0LyoqIFR5cGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgKi9cblx0dHlwZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBvd24gZmllbGQgb2YgYSB0eXBlLCBpbiBkZWNsYXJhdGlvbiBvcmRlciAoZGVmaW5pdGlvbnMuanNvbiBgZmllbGRzYCxcbiAqIGxldGhlIGNvbnRyYWN0KS4gYHR5cGVgIGlzIHNvdXJjZS1sYW5ndWFnZSB0ZXh0IGZvciBkaXNwbGF5IG9ubHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkZpZWxkIHtcblx0bmFtZTogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdG9wdGlvbmFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9uZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIsIGluIGRlY2xhcmF0aW9uIG9yZGVyIChkZWZpbml0aW9ucy5qc29uIGBhcmdzYCxcbiAqIGxldGhlIGNvbnRyYWN0KS4gVGhlIHJlY2VpdmVyIChgdGhpc2ApIGlzIG5ldmVyIGxpc3RlZC4gYG9wdGlvbmFsYCBhYnNlbnRcbiAqIG1lYW5zIGZhbHNlOyBhIHJlc3QgcGFyYW1ldGVyIGNhcnJpZXMgYGtpbmQ6ICdyZXN0J2AgYW5kIG5vIGBvcHRpb25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkFyZyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbD86IGJvb2xlYW47XG5cdGtpbmQ/OiAncmVzdCc7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uSW5mbyB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogSG93IHR5cGUgd2FzIGNyZWF0ZWQ6ICdkZWZpbmUnIG9yICdkZWNvcmF0ZScgKi9cblx0a2luZDogJ2RlZmluZScgfCAnZGVjb3JhdGUnO1xuXHQvKiogUGFyZW50IHR5cGUgZnVsbCBwYXRoLCBudWxsIGlmIHJvb3QgKi9cblx0cGFyZW50OiBzdHJpbmcgfCBudWxsO1xuXHQvKiogc3RyaWN0Q2hhaW4gY29uZmlnIG9wdGlvbiAqL1xuXHRzdHJpY3RDaGFpbjogYm9vbGVhbjtcblx0LyoqIGJsb2NrRXJyb3JzIGNvbmZpZyBvcHRpb24gKi9cblx0YmxvY2tFcnJvcnM6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSdzIG93biBmaWVsZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIgKGRlZmluaXRpb25zLmpzb24gY29udHJhY3QsXG5cdCAqIGxldGhlIGBmaWVsZGApLiBBYnNlbnQgbWVhbnMgbm90IHJlY29yZGVkOyBhbiBlbXB0eSBhcnJheSBtZWFucyB0aGVcblx0ICogdHlwZSBoYXMgbm8gZmllbGRzLlxuXHQgKi9cblx0ZmllbGRzPzogRGVmaW5pdGlvbkZpZWxkW107XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IncyBwYXJhbWV0ZXJzIGluIGRlY2xhcmF0aW9uIG9yZGVyIChkZWZpbml0aW9ucy5qc29uXG5cdCAqIGNvbnRyYWN0LCBsZXRoZSBgYXJnYCkuIEFic2VudCBtZWFucyBub3QgcmVjb3JkZWQ7IGFuIGVtcHR5IGFycmF5XG5cdCAqIG1lYW5zIHRoZSBjb25zdHJ1Y3RvciB0YWtlcyBub25lLlxuXHQgKi9cblx0YXJncz86IERlZmluaXRpb25BcmdbXTtcbn1cblxuLyoqXG4gKiBVc2FnZSBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZUluZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIHVzYWdlOiBpbnN0YW50aWF0aW9uLCB0eXBlQW5ub3RhdGlvbiwgcHJvcGVydHlBY2Nlc3MsIGxvb2t1cCwgcmVmZXJlbmNlICovXG5cdGtpbmQ6ICdpbnN0YW50aWF0aW9uJyB8ICd0eXBlQW5ub3RhdGlvbicgfCAncHJvcGVydHlBY2Nlc3MnIHwgJ2xvb2t1cCcgfCAncmVmZXJlbmNlJztcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTY29wZSBob2xkaW5nIHRoaXMgdXNhZ2UgKExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZDogbW9kdWxlIHNjb3BlIGlzIHRoZVxuXHQgKiBmaWxlIHBhdGgsIGZ1bmN0aW9uIHNjb3BlcyBhcmUgZmlsZTpsaW5lOmNvbCkuIEFkZGl0aXZlOyBhYnNlbnQgd2hlbiB0aGVcblx0ICogdXNhZ2Ugc2l0cyBvdXRzaWRlIHRyYWNrZWQgZmlsZXMuXG5cdCAqL1xuXHRob2xkZXJTY29wZUlkPzogc3RyaW5nO1xuXHQvKipcblx0ICogQ29uc3RydWN0b3IgZXhwcmVzc2lvbiB0ZXh0IGF0IGFuIGluc3RhbnRpYXRpb24gc2l0ZSAoJ1RoaW5nJyxcblx0ICogJ3VzZXIuQWRtaW5FbnRpdHknLCAnVDInIGZvciBhIGxvb2t1cCBhbGlhcykuIEFkZGl0aXZlOyBzZXQgb25seSBvblxuXHQgKiBraW5kICdpbnN0YW50aWF0aW9uJy4gRmVlZHMgQ3JlYXRpb25BbmNob3IuY29uc3RydWN0b3JUZXh0IChQaGFzZSAzKS5cblx0ICovXG5cdGNvbnN0cnVjdG9yVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZGVmaW5pdGlvbnMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluaXRpb25zSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIERlZmluaXRpb25JbmZvPjtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgdXNhZ2VzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHR1c2FnZXM6IFJlY29yZDxzdHJpbmcsIFVzYWdlSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBFRFMgKEV4ZWN1dGlvbiBEYXRhIFN0b3JhZ2UpIGtpbmQgZm9yIHRyYWNraW5nIGV4ZWN1dGlvbiBmbG93IHBhdHRlcm5zXG4gKi9cbmV4cG9ydCB0eXBlIEVEU0tpbmQgPVxuXHR8ICd3cmFwJ1xuXHR8ICdjb250ZXh0Q29uc3VtZSdcblx0fCAnaG9va0F0dGFjaCc7XG5cbi8qKlxuICogRURTIGluZm8gZm9yIGV4ZWN1dGlvbiBkYXRhIGZsb3cgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRFNJbmZvIHtcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogS2luZCBvZiBFRFMgdXNhZ2UgKi9cblx0a2luZDogRURTS2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBSZXNvbHZlZCB0YXJnZXQgdHlwZSBpZiBkZXRlY3RhYmxlICovXG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBFbmNsb3NpbmcgbW5lbW9uaWNhIHR5cGUgcGF0aCAoZGVmaW5lL2xhenkgaGFuZGxlciBvciBkZWNvcmF0ZWQgY2xhc3MpO1xuXHQgKiBmb3Igd3JhcCBzaXRlcyBvdXRzaWRlIGFueSBoYW5kbGVyLCBhdHRyaWJ1dGVkIHRocm91Z2ggdGhlIGluc3RhbmNlL2NvbnRleHRcblx0ICogYXJndW1lbnQgKHRyYWNrZWQgYXNzaWdubWVudCBvciBwYXJhbWV0ZXIgYW5ub3RhdGlvbiksIHRoZW4gaW5oZXJpdGVkIGRvd25cblx0ICogdGhlIHdyYXAgZ2VuZXJhdGlvbiBjaGFpbiAoYHZpYWApXG5cdCAqL1xuXHRzY29wZT86IHN0cmluZztcblx0LyoqIExvY2F0aW9uIG9mIHRoZSBlbmNsb3Npbmcgd3JhcCBzaXRlIHdob3NlIHJ1bnRpbWUgd3JhcHBpbmcgY2F1c2VkIHRoaXMgZW50cnkgKi9cblx0dmlhPzogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGhzIGluc3RhbnRpYXRlZCBpbnNpZGUgdGhlIHdyYXBwZWQgYm9keSDigJQgZ3VhcmFudGVlZCBwYXRoIGhpdHMgKi9cblx0Y3JlYXRlc1R5cGVzPzogc3RyaW5nW107XG5cdC8qKiBMYWJlbCBzdHJpbmcgbGl0ZXJhbCBwYXNzZWQgdG8gd3JhcChmbiwg4oCmLCAnbGFiZWwnKSB3aGVuIHN0YXRpY2FsbHkgdmlzaWJsZSAqL1xuXHRsYWJlbD86IHN0cmluZztcblx0LyoqIHNjb3BlSWQgKHNjb3Blcy5qc29uKSBvZiB0aGUgd3JhcHBlZCBjYWxsYmFjaydzIG93biBzY29wZSDigJQgam9pbnMgdG8gdGhlIGNyZWF0aW9uIGdyYXBoICovXG5cdGNhbGxiYWNrU2NvcGVJZD86IHN0cmluZztcblx0LyoqIElkZW50aWZpZXIgcGFzc2VkIGFzIHRoZSBpbnN0YW5jZS9jb250ZXh0IGFyZ3VtZW50ICgndXNlcicpLCB3aGVuIGl0IGlzIG9uZSAqL1xuXHRpbnN0YW5jZUFyZz86IHN0cmluZztcblx0LyoqIHNjb3BlSWQgb2YgdGhlIHNjb3BlIGhvbGRpbmcgdGhlIHdyYXAgY2FsbCBzaXRlIOKAlCBqb2lucyB0byB0aGUgY3JlYXRpb24gZ3JhcGggKi9cblx0c2NvcGVJZD86IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSBmdWxsUGF0aCBvZiB0aGUgaW5zdGFuY2UgYXJndW1lbnQsIHJlc29sdmVkIHRocm91Z2ggc2NvcGUgdmFyaWFibGVzICovXG5cdHdyYXBzVHlwZVBhdGg/OiBzdHJpbmc7XG5cdC8qKiBXcmFwLWZhbWlseSBmdW5jdGlvbiBuYW1lICgnd3JhcCcgfCAnd3JhcENvbnN0cnVjdG9yQXJnJyB8IOKApikg4oCUIGpvaW5zIHRoZVxuXHQgKiAgY2FsbCBzaXRlIHRvIGRpdmUncyBlbmdpbmUga25vdCBpbiBncmFwaCBjb25zdW1lcnMgKi9cblx0Zm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGVkcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRURTSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZWRzOiBSZWNvcmQ8c3RyaW5nLCBFRFNJbmZvW10+O1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBraW5kIGZvciBmcmFtZXdvcmsgbGlmZWN5Y2xlIGNyb3Nzcm9hZHNcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdHJ1bWVudGF0aW9uS2luZCA9XG5cdHwgJ2ludGVyY2VwdG9yJ1xuXHR8ICdndWFyZCdcblx0fCAncGlwZSdcblx0fCAnZmlsdGVyJ1xuXHR8ICdtaWRkbGV3YXJlJztcblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24gc2NvcGU6IHdoZXJlIHRoZSBwb2ludCBhdHRhY2hlcy5cbiAqICdnbG9iYWwnIGZvciBwcm92aWRlci10b2tlbiByZWdpc3RyYXRpb25zLCAnbW9kdWxlJyBmb3IgbWlkZGxld2FyZSB3aXJlZFxuICogdmlhIGNvbnN1bWVyLmFwcGx5KCkgQU5EIGZvciBiYXJlIGhlcml0YWdlIGRlY2xhcmF0aW9ucyB3aG9zZSBhdHRhY2htZW50XG4gKiBpcyBzdGF0aWNhbGx5IHVua25vd24sIGBjb250cm9sbGVyOk5hbWVgIC8gYG1ldGhvZDpDbGFzcy5tZXRob2RgIGZvclxuICogZGVjb3JhdG9yLXNjb3BlZCBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdHJ1bWVudGF0aW9uU2NvcGUgPVxuXHR8ICdnbG9iYWwnXG5cdHwgJ21vZHVsZSdcblx0fCBgY29udHJvbGxlcjoke3N0cmluZ31gXG5cdHwgYG1ldGhvZDoke3N0cmluZ31gO1xuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBwb2ludDogYSBmcmFtZXdvcmsgbGlmZWN5Y2xlIGNyb3Nzcm9hZCAoaW50ZXJjZXB0b3IsXG4gKiBndWFyZCwgcGlwZSwgZmlsdGVyLCBtaWRkbGV3YXJlKSBkZXRlY3RlZCBzeW50YWN0aWNhbGx5LiBUaGUgdm9jYWJ1bGFyeVxuICogdGhhdCB0dXJucyBhIHN5bnRhY3RpYyBzaGFwZSBpbnRvIGEgcG9pbnQgY29tZXMgZnJvbSBwbHVnaW5zIOKAlCB3aXRoIG5vXG4gKiBwbHVnaW4gbG9hZGVkLCBubyBwb2ludHMgYXJlIGNvbGxlY3RlZC5cbiAqXG4gKiBEZWR1cGUvc2NvcGUgZGVjaXNpb246IHBvaW50cyBhcmUga2V5ZWQgYnkgKGtpbmQsIGNsYXNzTmFtZSwgbG9jYXRpb24sXG4gKiBzY29wZSkgYW5kIGR1cGxpY2F0ZXMgbWVyZ2UgdGhlaXIgYHRhcmdldHNgLiBBIGNsYXNzIGRldGVjdGVkIGJvdGggYnlcbiAqIGhlcml0YWdlIChhIHBsdWdpbi1saXN0ZWQgYGltcGxlbWVudHNgIGludGVyZmFjZSkgYW5kIGJ5IGEgZGVjb3JhdG9yXG4gKiBzaXRlIHlpZWxkcyBTRVBBUkFURSBlbnRyaWVzIOKAlCB0aGUgY2xhc3MtZGVjbGFyYXRpb24gcG9pbnQga2VlcHMgc2NvcGVcbiAqICdtb2R1bGUnIChhdHRhY2htZW50IHVua25vd24pIHdoaWxlIGVhY2ggcmVnaXN0cmF0aW9uIHNpdGUgY2FycmllcyBpdHNcbiAqIG93biBzY29wZS4gT25lIHBvaW50IHNlcnZpbmcgbXVsdGlwbGUgc2NvcGVzIHZpYSBtZXJnZWQgc2NvcGUgbGlzdHMgd2FzXG4gKiByZWplY3RlZDogY29uc3VtZXJzIChtbmVtb2dyYXBoaWNhIGRpYW1vbmRzKSBrZXkgb2ZmIGEgc2luZ2xlIHNjb3BlIHBlclxuICogcG9pbnQsIGFuZCBzZXBhcmF0ZSBlbnRyaWVzIGtlZXAgdGhhdCBjb250cmFjdCBzaW1wbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1bWVudGF0aW9uUG9pbnQge1xuXHQvKiogS2luZCBvZiBsaWZlY3ljbGUgY3Jvc3Nyb2FkICovXG5cdGtpbmQ6IEluc3RydW1lbnRhdGlvbktpbmQ7XG5cdC8qKiBDbGFzcyBwcm92aWRpbmcgdGhlIGluc3RydW1lbnRhdGlvbiAoZS5nLiwgXCJBdXRoR3VhcmRcIikgKi9cblx0Y2xhc3NOYW1lOiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKGNsYXNzIGRlY2xhcmF0aW9uIHdoZW4gZGVjbGFyZWQgaW4tcHJvamVjdCwgZWxzZSB0aGUgcmVnaXN0cmF0aW9uIHNpdGUpICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDb2RlIHNuaXBwZXQ6IHNpZ25hdHVyZSAvIGZpcnN0IGxpbmUsIGxpa2UgRURTIGBjb2RlYCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBXaGVyZSB0aGUgcG9pbnQgYXR0YWNoZXMgKi9cblx0c2NvcGU6IEluc3RydW1lbnRhdGlvblNjb3BlO1xuXHQvKiogQ29udHJvbGxlci9wcm92aWRlciBuYW1lcyB0aGUgcG9pbnQgYXR0YWNoZXMgdG87IGVtcHR5IGZvciBnbG9iYWwgcG9pbnRzICovXG5cdHRhcmdldHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBpbnN0cnVtZW50YXRpb24uanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvbkpzb24ge1xuXHQvKiogU2NoZW1hIHZlcnNpb246IDIgYWRkcyB0aGUgb3B0aW9uYWwgY3JlYXRpb25HcmFwaCBrZXkgKFBoYXNlIDMpICovXG5cdHZlcnNpb246IG51bWJlcjtcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0cG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdO1xuXHQvKipcblx0ICogSW5zaWRlLW91dCBjcmVhdGlvbiB3YWxrIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIHBsYW4sIFBoYXNlIDMpOiB3aGljaFxuXHQgKiBzY29wZXMgY3JlYXRlIG1uZW1vbmljYSBpbnN0YW5jZXMgYW5kIHdobyBjYWxscyB0aGVtLCB3YWxrZWQgb3V0d2FyZCB0b1xuXHQgKiB0aGUgc3RhcnRlcnMuIEFic2VudCB3aGVuIHRoZSB3cml0ZXIgaXMgY2FsbGVkIHdpdGhvdXQgY3JlYXRpb24tZ3JhcGhcblx0ICogZGF0YSAoZGlyZWN0IGxpYnJhcnkgdXNlKTsgYWx3YXlzIHByZXNlbnQgZnJvbSB0aGUgQ0xJLlxuXHQgKi9cblx0Y3JlYXRpb25HcmFwaD86IENyZWF0aW9uR3JhcGg7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGNvbnRyb2wuanNvbiAobGV0aGUgY29udHJhY3QsIGZvcm1hdCAxLjEpOiBgY2FsbGVyc2BcbiAqIGNhcnJpZXMgdGhlIHNhbWUgY3JlYXRpb24gZ3JhcGggaW5zdHJ1bWVudGF0aW9uLmpzb24gdjIgY2FycmllcyB1bmRlclxuICogYGNyZWF0aW9uR3JhcGhgLCBgcG9pbnRzYCB0aGUgc2FtZSBwbHVnaW4tc3VwcGxpZWQgaW5zdHJ1bWVudGF0aW9uIHBvaW50cy5cbiAqIGluc3RydW1lbnRhdGlvbi5qc29uIHN0YXlzIHVuY2hhbmdlZCBmb3IgbW5lbW9ncmFwaGljYTsgY29udHJvbC5qc29uIGlzXG4gKiB0aGUgY3Jvc3MtbGFuZ3VhZ2UgY29udHJhY3QgcmVuZGVyaW5nIG9mIHRoZSBzYW1lIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbEpzb24ge1xuXHR2ZXJzaW9uOiAnMS4xJztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0Y2FsbGVyczogQ3JlYXRpb25HcmFwaDtcblx0cG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdO1xufVxuXG4vKipcbiAqIEZsb3cga2luZCBmb3IgdHJhY2tpbmcgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHBhdHRlcm5zIOKAlCBXSEFUIEZMT1dTIFdIRVJFXG4gKiBpbiBwbGFpbiBzb3VyY2Ugc2hhcGVzLiBFYWNoIGtpbmQgbmFtZXMgb25lIHN5bnRhY3RpYyBwYXR0ZXJuIHRoYXQgbW92ZXNcbiAqIGEgdHlwZWQgdmFsdWUsIHdpdGggdGhlIHNoYXBlIHRoYXQgcHJvZHVjZXMgaXQ6XG4gKlxuICogICAncHJvcGVydHlSZWFkJyAgICAgIHJlYWRpbmcgYSBmaWVsZCBvZmYgdGhlIGluc3RhbmNlIOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGB1c2VyLm5hbWVgIChhbHNvIGB1c2VyPy5uYW1lYCDigJQgb3B0aW9uYWwgY2hhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzIGFzIGEgcGxhaW4gcHJvcGVydHlSZWFkKVxuICogICAncHJvcGVydHlXcml0ZScgICAgIGFzc2lnbmluZyBhIGZpZWxkIOKAlCBgdXNlci5uYW1lID0gJ3gnYFxuICogICAnbWV0aG9kQ2FsbCcgICAgICAgIGNhbGxpbmcgYSBtZXRob2Qgb24gaXQg4oCUIGB1c2VyLnZhbGlkYXRlKClgXG4gKiAgICdlbGVtZW50QWNjZXNzJyAgICAgYnJhY2tldCByZWFkIOKAlCBgdXNlclsnbmFtZSddYFxuICogICAnZGVzdHJ1Y3R1cmVSZWFkJyAgIGRlc3RydWN0dXJpbmcgcHVsbHMgdGhlIGZpZWxkcyBhcGFydCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgY29uc3QgeyBuYW1lIH0gPSB1c2VyYFxuICogICAncGFzc0FzQXJnJyAgICAgICAgIHRoZSB2YWx1ZSBjcm9zc2VzIGludG8gYSBjYWxsIGFzIGFuIGFyZ3VtZW50IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGBwcm9jZXNzVXNlcih1c2VyKWAgKGNvbnRleHQgbmFtZXMgY2FsbGVlICsgc2xvdClcbiAqICAgJ3JldHVybicgICAgICAgICAgICB0aGUgdmFsdWUgbGVhdmVzIHRoZSBmdW5jdGlvbiBhcyBpdHMgcmVzdWx0IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGByZXR1cm4gdXNlcmBcbiAqICAgJ3NwcmVhZCcgICAgICAgICAgICB0aGUgZmllbGRzIHNjYXR0ZXIgaW50byBhIGxpdGVyYWwg4oCUIGAoeyAuLi51c2VyIH0pYFxuICogICAncmVhc3NpZ25tZW50JyAgICAgIHRoZSBiaW5kaW5nIGlzIHJlLXBvaW50ZWQg4oCUIGB1c2VyID0gb3RoZXJgXG4gKiAgICdpbnN0YW50aWF0aW9uJyAgICAgYSBjb25zdHJ1Y3Rpb24tc2hhcGVkIGNhbGwg4oCUIGBuZXcgVXNlcigpYCAoYWxzb1xuICogICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGZvciBjaGFpbiB0aXBzIGFuZCBjYWxsL2FwcGx5L2ZvcmsvbWVyZ2UpXG4gKlxuICogJ2FycmF5RWxlbWVudCcgYW5kICdjb25kaXRpb25hbEFjY2VzcycgYXJlIHJlc2VydmVkIG1lbWJlcnMgb2YgdGhlXG4gKiB1bmlvbiDigJQgZGVjbGFyZWQsIG5vdCB5ZXQgZW1pdHRlZCBieSB0aGUgYW5hbHl6ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZsb3dLaW5kID1cblx0fCAncHJvcGVydHlSZWFkJ1xuXHR8ICdwcm9wZXJ0eVdyaXRlJ1xuXHR8ICdtZXRob2RDYWxsJ1xuXHR8ICdkZXN0cnVjdHVyZVJlYWQnXG5cdHwgJ3Bhc3NBc0FyZydcblx0fCAncmV0dXJuJ1xuXHR8ICdzcHJlYWQnXG5cdHwgJ2FycmF5RWxlbWVudCdcblx0fCAnY29uZGl0aW9uYWxBY2Nlc3MnXG5cdHwgJ2VsZW1lbnRBY2Nlc3MnXG5cdHwgJ3JlYXNzaWdubWVudCdcblx0fCAnaW5zdGFudGlhdGlvbic7XG5cbi8qKlxuICogRmxvdyBpbmZvIGZvciBuYXRpdmUgaW5zdGFuY2UgdXNhZ2UgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgZmxvdyAqL1xuXHRraW5kOiBGbG93S2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0eSBuYW1lIGlmIGFwcGxpY2FibGUgKi9cblx0cHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYga25vd24gKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqIENvbnRleHQgKGZ1bmN0aW9uIG5hbWUsIHBhcmFtIHBvc2l0aW9uLCBldGMuKSAqL1xuXHRjb250ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBmbG93Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZmxvdzogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT47XG59XG5cbi8qKlxuICogV2hhdCBhIG1vZHVsZS1sZXZlbCBiaW5kaW5nIGlzLiBWYXJpYWJsZXMgYXJlIGNsYXNzaWZpZWQgYXMgJ2NvbnN0J1xuICogcmVnYXJkbGVzcyBvZiBsZXQvdmFyIOKAlCBtdXRhYmlsaXR5IChyZWFzc2lnbm1lbnQgdHJhY2tpbmcpIGlzIHRoZVxuICogbG9jYWwtc2NvcGUgd2Fsa2VyJ3MgY29uY2VybiAoUGhhc2UgMiksIG5vdCB0aGUgbW9kdWxlIGdyYXBoJ3MuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUJpbmRpbmdLaW5kID1cblx0fCAnZnVuY3Rpb24nXG5cdHwgJ2NsYXNzJ1xuXHR8ICdjb25zdCdcblx0fCAndHlwZSdcblx0fCAndW5rbm93bic7XG5cbi8qKlxuICogSG93IGEgYmluZGluZyBlbnRlcnMgYSBtb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgTW9kdWxlSW1wb3J0S2luZCA9XG5cdHwgJ25hbWVkJ1xuXHR8ICdkZWZhdWx0J1xuXHR8ICduYW1lc3BhY2UnXG5cdHwgJ3JlcXVpcmUnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBtb2R1bGUtbGV2ZWwgYmluZGluZyAoZXhwb3J0LCBpbXBvcnQsIG9yIHJlLWV4cG9ydCkuXG4gKlxuICogYG5hbWVgIGlzIGFsd2F5cyB0aGUgbmFtZSB0aGlzIG1vZHVsZSBwcmVzZW50czogdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yXG4gKiBpbXBvcnRzLCB0aGUgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cy4gYGltcG9ydEFsaWFzYCBjYXJyaWVzIHRoZSBvcmlnaW5hbFxuICogbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGl0IGRpZmZlcnMgKGBpbXBvcnQgeyBYIGFzIFkgfWAg4oaSIG5hbWUgJ1knLFxuICogaW1wb3J0QWxpYXMgJ1gnOyBgZXhwb3J0IHsgWCBhcyBZIH0gZnJvbSDigKZgIOKGkiBuYW1lICdZJywgaW1wb3J0QWxpYXMgJ1gnKS5cbiAqIEZvciBkZWZhdWx0IGltcG9ydHMgbmFtZSBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQgdGhlIHNvdXJjZSBsb29rdXAga2V5XG4gKiBpcyAnZGVmYXVsdCcgKGltcGxpZWQgYnkgaW1wb3J0S2luZCk7IGZvciBuYW1lc3BhY2UgaW1wb3J0cy9leHBvcnRzIG5hbWUgaXNcbiAqIHRoZSBuYW1lc3BhY2UgYWxpYXMgKCcqJyBmb3IgYmFyZSBgZXhwb3J0ICogZnJvbSDigKZgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVCaW5kaW5nIHtcblx0LyoqIE5hbWUgYXMgcHJlc2VudGVkIGluIHRoaXMgbW9kdWxlIChsb2NhbCBuYW1lIGZvciBpbXBvcnRzLCBleHBvcnRlZCBuYW1lIGZvciBleHBvcnRzKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBXaGF0IHRoZSBiaW5kaW5nIGlzOyBiYWNrZmlsbGVkIGZyb20gdGhlIG9yaWdpbiBtb2R1bGUgd2hlbiByZXNvbHZhYmxlICovXG5cdGtpbmQ6IE1vZHVsZUJpbmRpbmdLaW5kO1xuXHQvKipcblx0ICogUmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoIG9mIHRoZSBzb3VyY2UgbW9kdWxlICh0aGUgbW9kdWxlIGl0c2VsZiBmb3Jcblx0ICogbG9jYWwgZGVjbGFyYXRpb25zOyB0aGUgcmF3IHNwZWNpZmllciB3aGVuIHJlc29sdXRpb24gZmFpbHMpXG5cdCAqL1xuXHRzb3VyY2VNb2R1bGU6IHN0cmluZztcblx0LyoqIEhvdyB0aGUgYmluZGluZyBlbnRlcnMgdGhlIG1vZHVsZSAoYWJzZW50IG9uIHBsYWluIGxvY2FsIGV4cG9ydHMpICovXG5cdGltcG9ydEtpbmQ/OiBNb2R1bGVJbXBvcnRLaW5kO1xuXHQvKiogT3JpZ2luYWwgbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGFsaWFzZWQgKi9cblx0aW1wb3J0QWxpYXM/OiBzdHJpbmc7XG5cdC8qKiBUcnVlIGZvciBgZXhwb3J0IHsgWCB9IGZyb20gJy4veSdgIC8gYGV4cG9ydCAqIGZyb20gJy4veSdgIChiYXJyZWxzKSAqL1xuXHRpc1JlRXhwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZWQgaW50byBub2RlX21vZHVsZXNcblx0ICogKHRzLnJlc29sdmVNb2R1bGVOYW1lJ3MgaXNFeHRlcm5hbExpYnJhcnlJbXBvcnQpLiBFeHRlcm5hbCBiaW5kaW5ncyBhcmVcblx0ICogcmVjb3JkZWQgZm9yIHJlZmVyZW5jZSBidXQgbmV2ZXIgZW50ZXIgYGRlcGVuZGVuY2llc2AgYW5kIGFyZSBuZXZlciB3YWxrZWQuXG5cdCAqIE5vZGUuanMgYnVpbHRpbnMgYXJlIG5vdCByZWNvcmRlZCBhcyBiaW5kaW5ncyBhdCBhbGwg4oCUIHNlZVxuXHQgKiBNb2R1bGVJbmZvLmJ1aWx0aW5TcGVjaWZpZXJzLlxuXHQgKi9cblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlci1tb2R1bGUgcmVjb3JkIG9mIHRoZSBjcm9zcy1maWxlIGdyYXBoIChtb2R1bGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlSW5mbyB7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKG1hcCBrZXkpICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqL1xuXHRkZWZpbmVkVHlwZXM6IHN0cmluZ1tdO1xuXHQvKiogRXZlcnl0aGluZyB0aGlzIG1vZHVsZSBleHBvcnRzIChsb2NhbCBkZWNsYXJhdGlvbnMgYW5kIHJlLWV4cG9ydHMpICovXG5cdGV4cG9ydGVkQmluZGluZ3M6IE1vZHVsZUJpbmRpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgaW1wb3J0cyAocmUtZXhwb3J0cyBhcHBlYXIgaGVyZSB0b28sIG1hcmtlZCBpc1JlRXhwb3J0KSAqL1xuXHRpbXBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBBYnNvbHV0ZSBwYXRocyBvZiBhbmFseXplZCBwcm9qZWN0IG1vZHVsZXMgdGhpcyBtb2R1bGUgaW1wb3J0cyBmcm9tICovXG5cdGRlcGVuZGVuY2llczogc3RyaW5nW107XG5cdC8qKiBJbXBvcnQgc3BlY2lmaWVycyB0aGF0IG1vZHVsZSByZXNvbHV0aW9uIGNvdWxkIG5vdCByZXNvbHZlIChub2RlIGJ1aWx0aW5zIGV4Y2x1ZGVkIOKAlCBzZWUgYnVpbHRpblNwZWNpZmllcnMpICovXG5cdHVucmVzb2x2ZWRTcGVjaWZpZXJzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIE5vZGUuanMgYnVpbHRpbiBzcGVjaWZpZXJzIHRoaXMgbW9kdWxlIGltcG9ydHMgKCdwYXRoJywgJ25vZGU6ZnMnLCDigKYpLFxuXHQgKiBtYXRjaGVkIGFnYWluc3Qgbm9kZTptb2R1bGUncyBidWlsdGluTW9kdWxlcyBpbiBib3RoIGJhcmUgYW5kXG5cdCAqIGBub2RlOmAtcHJlZml4ZWQgZm9ybXMuIFJlY29yZGVkIGZvciBob25lc3R5IG9ubHk6IGJ1aWx0aW5zIHByb2R1Y2Ugbm9cblx0ICogYmluZGluZ3MsIG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgL2B1bnJlc29sdmVkU3BlY2lmaWVyc2AsIGFuZCBuZXZlclxuXHQgKiBwcm9kdWNlIGVkZ2VzLlxuXHQgKi9cblx0YnVpbHRpblNwZWNpZmllcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY3Jvc3MtbW9kdWxlIHVzYWdlIG9mIGEgbW5lbW9uaWNhIHR5cGU6IHVzYWdlTW9kdWxlIGltcG9ydHMgYSBiaW5kaW5nXG4gKiB3aG9zZSBvcmlnaW4gbW9kdWxlIGRlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NNb2R1bGVVc2FnZSB7XG5cdC8qKiBNYXRjaGVkIG1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIChvciB0aGUgaW1wb3J0ZWQgbmFtZSB3aGVuIHVubWF0Y2hlZCkgKi9cblx0dHlwZVBhdGg6IHN0cmluZztcblx0LyoqIEFic29sdXRlIHBhdGggb2YgdGhlIG1vZHVsZSB3aGVyZSB0aGUgdHlwZSBpcyBkZWZpbmVkIChyZS1leHBvcnQgY2hhaW5zIGNoYXNlZCB0byB0aGUgb3JpZ2luKSAqL1xuXHRkZWZpbml0aW9uTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRpbmcgbW9kdWxlICovXG5cdHVzYWdlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBJbXBvcnQgc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR1c2FnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZ1bGwgbW9kdWxlIGdyYXBoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlR3JhcGgge1xuXHQvKiogS2V5ZWQgYnkgYWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUluZm8+O1xuXHRlZGdlczogQ3Jvc3NNb2R1bGVVc2FnZVtdO1xuXHQvKipcblx0ICogQ2lyY3VsYXIgaW1wb3J0IGNoYWlucyAoZWFjaCBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRocykuIFJlY29yZGVkLCBub3Rcblx0ICogYW4gZXJyb3Ig4oCUIG1uZW1vbmljYSBzdHJpY3RDaGFpbjpmYWxzZSBwZXJtaXRzIG5vbi1saW5lYXIgY29uc3RydWN0aW9uXG5cdCAqL1xuXHRjeWNsZXM6IHN0cmluZ1tdW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIG1vZHVsZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIFdoYXQgYSB0cmFja2VkIHNjb3BlIGlzLiBEZWNpc2lvbiA1IChyZXNvbHZlZCAyMDI2LTA5LTAzKTogZnVuY3Rpb24sXG4gKiBtZXRob2QsIGFuZCBhcnJvdyBzY29wZXMgT05MWSDigJQgbm8gYmxvY2sgc2NvcGVzLiAnbW9kdWxlJyBpcyB0aGUgc3ludGhldGljXG4gKiBwZXItZmlsZSByb290IHNjb3BlIHNvIG1vZHVsZS1sZXZlbCBpbnN0YW5jZSBjcmVhdGlvbnMgYXJlIGxhYmVsZWQsIG5vdFxuICogZHJvcHBlZCAod2Fsa2VyIHBsYW46IFwicmVjb3JkZWQgYXMgYSByb290ZWQgaW5zdGFuY2VcIikuXG4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlS2luZCA9XG5cdHwgJ21vZHVsZSdcblx0fCAnZnVuY3Rpb24nXG5cdHwgJ21ldGhvZCdcblx0fCAnYXJyb3cnO1xuXG4vKipcbiAqIE9uZSB0cmFja2VkIHNjb3BlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZUluZm8ge1xuXHQvKiogVW5pcXVlIGlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlIGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sIG9mIHRoZSBzY29wZSBub2RlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIERlY2lzaW9uIDggbGFiZWxpbmc6IGZ1bmN0aW9uL21ldGhvZCBuYW1lICgnQ2xhc3MubWV0aG9kJyBmb3IgbWV0aG9kcyksIGZpbGU6bGluZSBmb3IgYW5vbnltb3VzIGhvbGRlcnMgKi9cblx0bmFtZTogc3RyaW5nO1xuXHRraW5kOiBTY29wZUtpbmQ7XG5cdC8qKiBOZWFyZXN0IGVuY2xvc2luZyBzY29wZSAodW5kZWZpbmVkIG9uIG1vZHVsZSBzY29wZXMpICovXG5cdHBhcmVudFNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKi9cblx0ZmlsZVBhdGg6IHN0cmluZztcblx0LyoqIFNjb3BlIHN0YXJ0OiBmaWxlLnRzOkxpbmU6Q29sIChtb2R1bGUgc2NvcGU6IGZpbGU6MToxKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSB0cmFja2VkIHZhcmlhYmxlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZVZhcmlhYmxlIHtcblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3duaW5nIHNjb3BlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIHdoZW4ga25vd24gKG5ldyBYKCkgb24gYSBrbm93biB0eXBlLCBuZXcgaW5zdC5TdWIoKSBjaGFpbmluZywgb3IgYSBrbm93biBhbm5vdGF0aW9uKSAqL1xuXHR0eXBlUGF0aD86IHN0cmluZztcblx0LyoqIENoZWFwIHRleHR1YWwgdHlwZTogYW5ub3RhdGlvbiB0ZXh0IG9yIHRpbnkgaW5pdGlhbGl6ZXIgY2xhc3NpZmljYXRpb24gKi9cblx0aW5mZXJyZWRUeXBlPzogc3RyaW5nO1xuXHQvKiogRGVjbGFyYXRpb24gc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRkZWNsYXJhdGlvbjogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcjogYm9vbGVhbjtcblx0LyoqIGNvbnN0ID0gZmFsc2U7IGxldC92YXIgYW5kIHBhcmFtZXRlcnMgPSB0cnVlIChwYXJhbWV0ZXJzIGFyZSByZWFzc2lnbmFibGUpICovXG5cdGlzTXV0YWJsZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFJlYXNzaWdubWVudCBzaXRlcyAoZmlsZS50czpMaW5lOkNvbCkgb2YgdGhpcyBiaW5kaW5nIOKAlCBmbG93LXRlcm1pbmF0aW9uXG5cdCAqIHBvaW50cyAoZGVjaXNpb24gNik6IHRoZSBQaGFzZSAzIHdhbGtlciBzdG9wcyBmb2xsb3dpbmcgdGhlIGJpbmRpbmcgdGhlcmVcblx0ICovXG5cdHJlYXNzaWdubWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIGxvY2FsLXNjb3BlIGFuYWx5c2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVBbmFseXNpcyB7XG5cdC8qKiBLZXllZCBieSBzY29wZUlkICovXG5cdHNjb3BlczogTWFwPHN0cmluZywgU2NvcGVJbmZvPjtcblx0LyoqIEtleWVkIGJ5IGAke3Njb3BlSWR9IyR7bmFtZX1gICovXG5cdHZhcmlhYmxlczogTWFwPHN0cmluZywgU2NvcGVWYXJpYWJsZT47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHNjb3Blcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0c2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBTY29wZUluZm8+O1xuXHR2YXJpYWJsZXM6IFNjb3BlVmFyaWFibGVbXTtcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvZiB0aGUgY3JlYXRpb24gZ3JhcGggKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6XG4gKiBhIHNjb3BlIHRoYXQgY3JlYXRlcyBtbmVtb25pY2EgaW5zdGFuY2VzLCBvciBvbmUgc2l0dGluZyBvbiBhIGNhbGwgcGF0aFxuICogdG8gYSBjcmVhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhOb2RlIHtcblx0LyoqIExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZCAobW9kdWxlIHNjb3BlID0gZmlsZSBwYXRoOyBmdW5jdGlvbiBzY29wZXMgPSBmaWxlOmxpbmU6Y29sKSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogVHJ1ZSB3aGVuIHRoZSB3YWxrIGZvdW5kIG5vIGNhbGxlcnMg4oCUIGFuIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50ICovXG5cdHN0YXJ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT25lIGVkZ2Ugb2YgdGhlIGNyZWF0aW9uIGdyYXBoOiB0aGUgY2FsbGVyIHNjb3BlIGludm9rZXMgb3IgcmVmZXJlbmNlcyB0aGVcbiAqIGNhbGxlZSBzY29wZS4gRGlyZWN0aW9uIGlzIGluc2lkZS1vdXQ6IGNhbGxlciDihpIgY2FsbGVlLCB3aGVyZSB0aGUgY2FsbGVlIGlzXG4gKiBjbG9zZXIgdG8gdGhlIGNyZWF0aW9uIHNpdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaEVkZ2Uge1xuXHQvKiogQ2FsbGluZyBzY29wZSdzIHNjb3BlSWQgKi9cblx0Y2FsbGVyOiBzdHJpbmc7XG5cdC8qKiBDYWxsZWQgKGhvbGRlcikgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGluc3RhbnRpYXRpb24gYW5jaG9yOiBvbmUgbW5lbW9uaWNhIGNyZWF0aW9uIHNpdGUgcGlubmVkIHRvIGl0cyBob2xkZXJcbiAqIHNjb3BlLlxuICpcbiAqIGB2YXJpYWJsZWAvYHRlcm1pbmF0ZWRBdGAgYXJlIGEgZG9jdW1lbnRlZCBoZXVyaXN0aWM6IHRoZSB2YXJpYWJsZSBkZWNsYXJlZFxuICogaW4gdGhlIGhvbGRlciBzY29wZSBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZSBjcmVhdGlvbiwgd2hvc2UgdHlwZVBhdGggKHdoZW5cbiAqIGtub3duKSBtYXRjaGVzIHRoZSBjcmVhdGVkIHR5cGUuIGB0ZXJtaW5hdGVkQXRgIGlzIHRoYXQgdmFyaWFibGUncyBmaXJzdFxuICogcmVhc3NpZ25tZW50IHNpdGUg4oCUIHRoZSBkZWNpc2lvbiA2IGZsb3ctdGVybWluYXRpb24gcG9pbnQgd2hlcmUgdGhlIHdhbGtlclxuICogc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uQW5jaG9yIHtcblx0LyoqIENyZWF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKHRoZSB1c2FnZXMuanNvbiBsb2NhdGlvbikgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFNjb3BlIGhvbGRpbmcgdGhlIGNyZWF0aW9uIChzY29wZXMuanNvbiBzY29wZUlkKSAqL1xuXHRob2xkZXJTY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCBiZWluZyBjcmVhdGVkICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgKCdUaGluZycsICd1c2VyLkFkbWluRW50aXR5JywgYSBsb29rdXAgYWxpYXMgbmFtZSkgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBob2xkZXIgaXMgdGhlIG1vZHVsZSBzY29wZSDigJQgYSByb290ZWQgaW5zdGFuY2UgKHBsYW46XG5cdCAqIGxlZ2l0aW1hdGUgcm9vdCBvciBkZXZlbG9wZXIgZXJyb3I7IGxhYmVsZWQsIG5vdCBwb2xpY2VkKVxuXHQgKi9cblx0cm9vdGVkPzogYm9vbGVhbjtcblx0LyoqIFZhcmlhYmxlIHRoZSBmcmVzaCBpbnN0YW5jZSB3YXMgYm91bmQgdG8gKHNhbWUtbGluZSBoZXVyaXN0aWMpICovXG5cdHZhcmlhYmxlPzogc3RyaW5nO1xuXHQvKiogRmlyc3QgcmVhc3NpZ25tZW50IHNpdGUgb2YgdGhhdCB2YXJpYWJsZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR0ZXJtaW5hdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIGdyYXBoOiBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gbW5lbW9uaWNhIGluc3RhbmNlcyBiZWluZ1xuICogY3JlYXRlZC4gRW1pdHRlZCBhcyB0aGUgYGNyZWF0aW9uR3JhcGhgIGtleSBvZiBpbnN0cnVtZW50YXRpb24uanNvbiB2Mi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoIHtcblx0bm9kZXM6IENyZWF0aW9uR3JhcGhOb2RlW107XG5cdGVkZ2VzOiBDcmVhdGlvbkdyYXBoRWRnZVtdO1xuXHRhbmNob3JzOiBDcmVhdGlvbkFuY2hvcltdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBoaWVyYXJjaHkuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeUpzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHJvb3RzOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogT25lIGVudHJ5IG9mIHRoZSBjb2xsZWN0aW9ucy5qc29uIG1hbmlmZXN0LiBUaGUgZGVmYXVsdCBjb2xsZWN0aW9uIGlzXG4gKiBlbWl0dGVkIGZpcnN0IHdoZW5ldmVyIGRlZmF1bHQtY29sbGVjdGlvbiB0eXBlcyBleGlzdDogaXQgaGFzIG5vIGNhbGxcbiAqIHNpdGUsIHNvIGBpZGAgYW5kIGBsb2NhdGlvbmAgc3RheSBudWxsICh1bnByZWZpeGVkIGZ1bGxQYXRocyBBUkUgaXRzXG4gKiBpZGVudGl0eSkgYW5kIGl0cyByZWdpc3RyeSBpbnRlcmZhY2UgaXMgdGhlIGdsb2JhbCBgVHlwZVJlZ2lzdHJ5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeSB7XG5cdC8qKiBNaW50ZWQgaWQgdXNlZCBpbiBgY29sbGVjdGlvbklkOjpgIGZ1bGxQYXRoIHByZWZpeGVzOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGlkOiBzdHJpbmcgfCBudWxsO1xuXHQvKiogVmFyaWFibGUgaG9sZGluZyB0aGUgY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgcmVzdWx0ICgnZGVmYXVsdFR5cGVzJyBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3B0aW9uLUIgcmVnaXN0cnkgaW50ZXJmYWNlIG5hbWU7IGFic2VudCB3aGVuIHRoZSBjb2xsZWN0aW9uIGRlY2xhcmVzIG5vbmUgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2U/OiBzdHJpbmc7XG5cdC8qKiBjcmVhdGVUeXBlc0NvbGxlY3Rpb24oKSBjYWxsIHNpdGUgKGZpbGU6bGluZTpjb2wpOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGxvY2F0aW9uOiBzdHJpbmcgfCBudWxsO1xuXHQvKipcblx0ICogU291cmNlIGxhbmd1YWdlIG9mIHRoaXMgY29sbGVjdGlvbidzIGNvZGViYXNlIChmb3JtYXQgMS4xOyBhYnNlbnQgaW5cblx0ICogMS4wIG91dHB1dCwgd2hlcmUgcmVhZGVycyBkZWZhdWx0IGl0IHRvIFwidHlwZXNjcmlwdFwiKS4gdGFjdGljYSBpcyB0aGVcblx0ICogVHlwZVNjcmlwdCBnZW5lcmF0b3IsIHNvIGV2ZXJ5IGVudHJ5IGl0IHdyaXRlcyBpcyBcInR5cGVzY3JpcHRcIi5cblx0ICovXG5cdGxhbmd1YWdlPzogJ3R5cGVzY3JpcHQnO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBjb2xsZWN0aW9ucy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbnNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hbmlmZXN0RW50cnlbXTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIGhpZXJhcmNoeSBub2RlIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIkFkbWluVHlwZVwiKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBGdWxsIGRvdHRlZCBwYXRoIChlLmcuLCBcIlVzZXJUeXBlLkFkbWluVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDaGlsZCB0eXBlcyBpbiB0aGUgVHJpZSAqL1xuXHRjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdO1xufVxuXG4vKipcbiAqIEEgZmF0YWwgcmVzb2x1dGlvbiBmYWlsdXJlOiBzYW1lLW5hbWVzcGFjZSBkdXBsaWNhdGUgbW5lbW9uaWNhXG4gKiBkZWZpbml0aW9ucywgb3IgYSBtbmVtb25pY2EtZ3JhcGggdHlwZSByZWZlcmVuY2UgdGhhdCBzdGF5cyBhbWJpZ3VvdXNcbiAqIGFmdGVyIHBhdGgtYXdhcmUgcmVzb2x1dGlvbiAob3IgcmVzb2x2ZXMgdG8gbm90aGluZykuIFRoZSBDTEkgcHJpbnRzXG4gKiBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIC50YWN0aWNhIG91dHB1dCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x1dGlvbkVycm9yIHtcblx0LyoqIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYWlsdXJlICovXG5cdG1lc3NhZ2U6IHN0cmluZztcblx0LyoqIGV2ZXJ5IGludm9sdmVkIHNvdXJjZSBsb2NhdGlvbiwgYGZpbGU6bGluZTpjb2x1bW5gICovXG5cdGxvY2F0aW9uczogc3RyaW5nW107XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBIb3cgdGhlIHBhcmFtZXRlciByZWNlaXZlcyBpdHMgdmFsdWUuIE9ubHkgJ3Jlc3QnIGlzIGVtaXR0ZWQgKFRTXG5cdCAqIGAuLi54c2ApOyBhYnNlbnQgbWVhbnMgYW4gb3JkaW5hcnkgcGFyYW1ldGVyLiBNaXJyb3JzIHRoZSBga2luZGBcblx0ICogdm9jYWJ1bGFyeSBvZiB0aGUgbGV0aGUgZGVmaW5pdGlvbnMgY29udHJhY3QgKGRlZmluaXRpb25zLmpzb24gYXJncykuXG5cdCAqL1xuXHRraW5kPzogJ3Jlc3QnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVOb2RlIHtcblx0LyoqIFR5cGUgbmFtZSAoZS5nLiwgXCJTZWNvbmRUeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIEZ1bGwgcGF0aCAoZS5nLiwgXCJGaXJzdFR5cGUuU2Vjb25kVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogUHJvcGVydGllcyBkZWZpbmVkIGluIHRoaXMgdHlwZSdzIGNvbnN0cnVjdG9yICovXG5cdHByb3BlcnRpZXM6IE1hcDxzdHJpbmcsIFByb3BlcnR5SW5mbz47XG5cdC8qKiBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIChmb3IgVHlwZVJlZ2lzdHJ5IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSkgKi9cblx0Y29uc3RydWN0b3JQYXJhbXM/OiBDb25zdHJ1Y3RvclBhcmFtSW5mb1tdO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBjb25zdHJ1Y3QgaGFuZGxlciBpcyBhbiBhc3luYyBmdW5jdGlvbi9hcnJvdyAoZGV0ZWN0ZWRcblx0ICogc3ludGFjdGljYWxseSBieSB0aGUgYXN5bmMgbW9kaWZpZXIpLiBFbWl0dGVkIGNvbnN0cnVjdG9yIHNoYXBlcyB0aGVuXG5cdCAqIHJlc29sdmUgdG8gUHJvbWlzZTxJbnN0YW5jZVR5cGU+LiBBc3luYyBDTEFTU0VTIGFyZSBuZXZlciBmbGFnZ2VkIOKAlFxuXHQgKiB0aGV5IGFyZSB0eXBlZCBieSB0aGUgdXNlciBpbiB1c2VybGFuZCAoZG9jdW1lbnRlZCBpbiBBR0VOVFMubWQpLlxuXHQgKi9cblx0aXNBc3luYz86IGJvb2xlYW47XG5cdC8qKiBQYXJlbnQgdHlwZSBub2RlICovXG5cdHBhcmVudD86IFR5cGVOb2RlO1xuXHQvKiogQ2hpbGQgdHlwZXMgKi9cblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIFNvdXJjZSBmaWxlIHBhdGggKi9cblx0c291cmNlRmlsZTogc3RyaW5nO1xuXHQvKiogTGluZSBudW1iZXIgaW4gc291cmNlICovXG5cdGxpbmU6IG51bWJlcjtcblx0LyoqIENvbHVtbiBudW1iZXIgaW4gc291cmNlICovXG5cdGNvbHVtbjogbnVtYmVyO1xuXHQvKiogQ29uc3RydWN0b3IgZnVuY3Rpb24gbmFtZSBvciBjbGFzcyBuYW1lICovXG5cdGNvbnN0cnVjdG9yTmFtZT86IHN0cmluZztcblx0LyoqIENvbGxlY3Rpb24gaWRlbnRpZmllciBpZiB0aGUgdHlwZSBiZWxvbmdzIHRvIGEgY3VzdG9tIGNvbGxlY3Rpb24gKHVuZGVmaW5lZCA9IGRlZmF1bHQvZ2xvYmFsIHJlZ2lzdHJ5KSAqL1xuXHRjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG5cdC8qKiBSZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBmb3IgY3VzdG9tIGNvbGxlY3Rpb25zIHVzaW5nIE9wdGlvbiBCICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZSkgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2VOYW1lPzogc3RyaW5nO1xuXHQvKipcblx0ICogU291cmNlIGZpbGUgb2YgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIGNhbGwg4oCUIHRoZSBtb2R1bGUgdGhlXG5cdCAqIE9wdGlvbiBCIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbiBtdXN0IHRhcmdldCAodGhlIGludGVyZmFjZSBpc1xuXHQgKiBjb25maXJtZWQgZGVjbGFyZWQgdGhlcmUpXG5cdCAqL1xuXHRjb2xsZWN0aW9uU291cmNlRmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3JhcGgge1xuXHQvKiogUm9vdCB0eXBlcywga2V5ZWQgYnkgZnVsbCBwYXRoIChjdXN0b20tY29sbGVjdGlvbiByb290cyBjYXJyeSB0aGUgYGNvbGxlY3Rpb25JZDo6YCBwcmVmaXgpICovXG5cdHJvb3RzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBbGwgdHlwZXMgYnkgZnVsbCBwYXRoICovXG5cdGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBZGQgYSByb290IHR5cGUgKi9cblx0YWRkUm9vdChub2RlOiBUeXBlTm9kZSk6IHZvaWQ7XG5cdC8qKiBGaW5kIGEgdHlwZSBieSBmdWxsIHBhdGggKi9cblx0ZmluZFR5cGUoZnVsbFBhdGg6IHN0cmluZyk6IFR5cGVOb2RlIHwgdW5kZWZpbmVkO1xuXHQvKiogR2V0IGFsbCB0eXBlcyBhcyBhcnJheSAqL1xuXHRnZXRBbGxUeXBlcygpOiBUeXBlTm9kZVtdO1xuXHQvKiogQ2xlYXIgdGhlIGdyYXBoICovXG5cdGNsZWFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG5cdC8qKiBUeXBlcyBmb3VuZCBpbiB0aGUgYW5hbHlzaXMgKi9cblx0dHlwZXM6IFR5cGVOb2RlW107XG5cdC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgKi9cblx0ZXJyb3JzOiBBbmFseXplRXJyb3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplRXJyb3Ige1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdGZpbGU6IHN0cmluZztcblx0bGluZTogbnVtYmVyO1xuXHRjb2x1bW46IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRUeXBlcyB7XG5cdC8qKiBDb250ZW50IG9mIHRoZSAuZC50cyBmaWxlICovXG5cdGNvbnRlbnQ6IHN0cmluZztcblx0LyoqIFR5cGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgKi9cblx0dHlwZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBvd24gZmllbGQgb2YgYSB0eXBlLCBpbiBkZWNsYXJhdGlvbiBvcmRlciAoZGVmaW5pdGlvbnMuanNvbiBgZmllbGRzYCxcbiAqIGxldGhlIGNvbnRyYWN0KS4gYHR5cGVgIGlzIHNvdXJjZS1sYW5ndWFnZSB0ZXh0IGZvciBkaXNwbGF5IG9ubHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkZpZWxkIHtcblx0bmFtZTogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdG9wdGlvbmFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9uZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIsIGluIGRlY2xhcmF0aW9uIG9yZGVyIChkZWZpbml0aW9ucy5qc29uIGBhcmdzYCxcbiAqIGxldGhlIGNvbnRyYWN0KS4gVGhlIHJlY2VpdmVyIChgdGhpc2ApIGlzIG5ldmVyIGxpc3RlZC4gYG9wdGlvbmFsYCBhYnNlbnRcbiAqIG1lYW5zIGZhbHNlOyBhIHJlc3QgcGFyYW1ldGVyIGNhcnJpZXMgYGtpbmQ6ICdyZXN0J2AgYW5kIG5vIGBvcHRpb25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkFyZyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbD86IGJvb2xlYW47XG5cdGtpbmQ/OiAncmVzdCc7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uSW5mbyB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogSG93IHR5cGUgd2FzIGNyZWF0ZWQ6ICdkZWZpbmUnIG9yICdkZWNvcmF0ZScgKi9cblx0a2luZDogJ2RlZmluZScgfCAnZGVjb3JhdGUnO1xuXHQvKiogUGFyZW50IHR5cGUgZnVsbCBwYXRoLCBudWxsIGlmIHJvb3QgKi9cblx0cGFyZW50OiBzdHJpbmcgfCBudWxsO1xuXHQvKiogc3RyaWN0Q2hhaW4gY29uZmlnIG9wdGlvbiAqL1xuXHRzdHJpY3RDaGFpbjogYm9vbGVhbjtcblx0LyoqIGJsb2NrRXJyb3JzIGNvbmZpZyBvcHRpb24gKi9cblx0YmxvY2tFcnJvcnM6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSdzIG93biBmaWVsZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIgKGRlZmluaXRpb25zLmpzb24gY29udHJhY3QsXG5cdCAqIGxldGhlIGBmaWVsZGApLiBBYnNlbnQgbWVhbnMgbm90IHJlY29yZGVkOyBhbiBlbXB0eSBhcnJheSBtZWFucyB0aGVcblx0ICogdHlwZSBoYXMgbm8gZmllbGRzLlxuXHQgKi9cblx0ZmllbGRzPzogRGVmaW5pdGlvbkZpZWxkW107XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IncyBwYXJhbWV0ZXJzIGluIGRlY2xhcmF0aW9uIG9yZGVyIChkZWZpbml0aW9ucy5qc29uXG5cdCAqIGNvbnRyYWN0LCBsZXRoZSBgYXJnYCkuIEFic2VudCBtZWFucyBub3QgcmVjb3JkZWQ7IGFuIGVtcHR5IGFycmF5XG5cdCAqIG1lYW5zIHRoZSBjb25zdHJ1Y3RvciB0YWtlcyBub25lLlxuXHQgKi9cblx0YXJncz86IERlZmluaXRpb25BcmdbXTtcbn1cblxuLyoqXG4gKiBVc2FnZSBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZUluZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIHVzYWdlOiBpbnN0YW50aWF0aW9uLCB0eXBlQW5ub3RhdGlvbiwgcHJvcGVydHlBY2Nlc3MsIGxvb2t1cCwgcmVmZXJlbmNlICovXG5cdGtpbmQ6ICdpbnN0YW50aWF0aW9uJyB8ICd0eXBlQW5ub3RhdGlvbicgfCAncHJvcGVydHlBY2Nlc3MnIHwgJ2xvb2t1cCcgfCAncmVmZXJlbmNlJztcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTY29wZSBob2xkaW5nIHRoaXMgdXNhZ2UgKExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZDogbW9kdWxlIHNjb3BlIGlzIHRoZVxuXHQgKiBmaWxlIHBhdGgsIGZ1bmN0aW9uIHNjb3BlcyBhcmUgZmlsZTpsaW5lOmNvbCkuIEFkZGl0aXZlOyBhYnNlbnQgd2hlbiB0aGVcblx0ICogdXNhZ2Ugc2l0cyBvdXRzaWRlIHRyYWNrZWQgZmlsZXMuXG5cdCAqL1xuXHRob2xkZXJTY29wZUlkPzogc3RyaW5nO1xuXHQvKipcblx0ICogQ29uc3RydWN0b3IgZXhwcmVzc2lvbiB0ZXh0IGF0IGFuIGluc3RhbnRpYXRpb24gc2l0ZSAoJ1RoaW5nJyxcblx0ICogJ3VzZXIuQWRtaW5FbnRpdHknLCAnVDInIGZvciBhIGxvb2t1cCBhbGlhcykuIEFkZGl0aXZlOyBzZXQgb25seSBvblxuXHQgKiBraW5kICdpbnN0YW50aWF0aW9uJy4gRmVlZHMgQ3JlYXRpb25BbmNob3IuY29uc3RydWN0b3JUZXh0IChQaGFzZSAzKS5cblx0ICovXG5cdGNvbnN0cnVjdG9yVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZGVmaW5pdGlvbnMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluaXRpb25zSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIERlZmluaXRpb25JbmZvPjtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgdXNhZ2VzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHR1c2FnZXM6IFJlY29yZDxzdHJpbmcsIFVzYWdlSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBFRFMgKEV4ZWN1dGlvbiBEYXRhIFN0b3JhZ2UpIGtpbmQgZm9yIHRyYWNraW5nIGV4ZWN1dGlvbiBmbG93IHBhdHRlcm5zXG4gKi9cbmV4cG9ydCB0eXBlIEVEU0tpbmQgPVxuXHR8ICd3cmFwJ1xuXHR8ICdjb250ZXh0Q29uc3VtZSdcblx0fCAnaG9va0F0dGFjaCc7XG5cbi8qKlxuICogRURTIGluZm8gZm9yIGV4ZWN1dGlvbiBkYXRhIGZsb3cgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRFNJbmZvIHtcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogS2luZCBvZiBFRFMgdXNhZ2UgKi9cblx0a2luZDogRURTS2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBSZXNvbHZlZCB0YXJnZXQgdHlwZSBpZiBkZXRlY3RhYmxlICovXG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBFbmNsb3NpbmcgbW5lbW9uaWNhIHR5cGUgcGF0aCAoZGVmaW5lL2xhenkgaGFuZGxlciBvciBkZWNvcmF0ZWQgY2xhc3MpO1xuXHQgKiBmb3Igd3JhcCBzaXRlcyBvdXRzaWRlIGFueSBoYW5kbGVyLCBhdHRyaWJ1dGVkIHRocm91Z2ggdGhlIGluc3RhbmNlL2NvbnRleHRcblx0ICogYXJndW1lbnQgKHRyYWNrZWQgYXNzaWdubWVudCBvciBwYXJhbWV0ZXIgYW5ub3RhdGlvbiksIHRoZW4gaW5oZXJpdGVkIGRvd25cblx0ICogdGhlIHdyYXAgZ2VuZXJhdGlvbiBjaGFpbiAoYHZpYWApXG5cdCAqL1xuXHRzY29wZT86IHN0cmluZztcblx0LyoqIExvY2F0aW9uIG9mIHRoZSBlbmNsb3Npbmcgd3JhcCBzaXRlIHdob3NlIHJ1bnRpbWUgd3JhcHBpbmcgY2F1c2VkIHRoaXMgZW50cnkgKi9cblx0dmlhPzogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGhzIGluc3RhbnRpYXRlZCBpbnNpZGUgdGhlIHdyYXBwZWQgYm9keSDigJQgZ3VhcmFudGVlZCBwYXRoIGhpdHMgKi9cblx0Y3JlYXRlc1R5cGVzPzogc3RyaW5nW107XG5cdC8qKiBMYWJlbCBzdHJpbmcgbGl0ZXJhbCBwYXNzZWQgdG8gd3JhcChmbiwg4oCmLCAnbGFiZWwnKSB3aGVuIHN0YXRpY2FsbHkgdmlzaWJsZSAqL1xuXHRsYWJlbD86IHN0cmluZztcblx0LyoqIHNjb3BlSWQgKHNjb3Blcy5qc29uKSBvZiB0aGUgd3JhcHBlZCBjYWxsYmFjaydzIG93biBzY29wZSDigJQgam9pbnMgdG8gdGhlIGNyZWF0aW9uIGdyYXBoICovXG5cdGNhbGxiYWNrU2NvcGVJZD86IHN0cmluZztcblx0LyoqIElkZW50aWZpZXIgcGFzc2VkIGFzIHRoZSBpbnN0YW5jZS9jb250ZXh0IGFyZ3VtZW50ICgndXNlcicpLCB3aGVuIGl0IGlzIG9uZSAqL1xuXHRpbnN0YW5jZUFyZz86IHN0cmluZztcblx0LyoqIHNjb3BlSWQgb2YgdGhlIHNjb3BlIGhvbGRpbmcgdGhlIHdyYXAgY2FsbCBzaXRlIOKAlCBqb2lucyB0byB0aGUgY3JlYXRpb24gZ3JhcGggKi9cblx0c2NvcGVJZD86IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSBmdWxsUGF0aCBvZiB0aGUgaW5zdGFuY2UgYXJndW1lbnQsIHJlc29sdmVkIHRocm91Z2ggc2NvcGUgdmFyaWFibGVzICovXG5cdHdyYXBzVHlwZVBhdGg/OiBzdHJpbmc7XG5cdC8qKiBXcmFwLWZhbWlseSBmdW5jdGlvbiBuYW1lICgnd3JhcCcgfCAnd3JhcENvbnN0cnVjdG9yQXJnJyB8IOKApikg4oCUIGpvaW5zIHRoZVxuXHQgKiAgY2FsbCBzaXRlIHRvIGRpdmUncyBlbmdpbmUga25vdCBpbiBncmFwaCBjb25zdW1lcnMgKi9cblx0Zm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGVkcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRURTSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZWRzOiBSZWNvcmQ8c3RyaW5nLCBFRFNJbmZvW10+O1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBraW5kIGZvciBmcmFtZXdvcmsgbGlmZWN5Y2xlIGNyb3Nzcm9hZHNcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdHJ1bWVudGF0aW9uS2luZCA9XG5cdHwgJ2ludGVyY2VwdG9yJ1xuXHR8ICdndWFyZCdcblx0fCAncGlwZSdcblx0fCAnZmlsdGVyJ1xuXHR8ICdtaWRkbGV3YXJlJztcblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24gc2NvcGU6IHdoZXJlIHRoZSBwb2ludCBhdHRhY2hlcy5cbiAqICdnbG9iYWwnIGZvciBwcm92aWRlci10b2tlbiByZWdpc3RyYXRpb25zLCAnbW9kdWxlJyBmb3IgbWlkZGxld2FyZSB3aXJlZFxuICogdmlhIGNvbnN1bWVyLmFwcGx5KCkgQU5EIGZvciBiYXJlIGhlcml0YWdlIGRlY2xhcmF0aW9ucyB3aG9zZSBhdHRhY2htZW50XG4gKiBpcyBzdGF0aWNhbGx5IHVua25vd24sIGBjb250cm9sbGVyOk5hbWVgIC8gYG1ldGhvZDpDbGFzcy5tZXRob2RgIGZvclxuICogZGVjb3JhdG9yLXNjb3BlZCBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdHJ1bWVudGF0aW9uU2NvcGUgPVxuXHR8ICdnbG9iYWwnXG5cdHwgJ21vZHVsZSdcblx0fCBgY29udHJvbGxlcjoke3N0cmluZ31gXG5cdHwgYG1ldGhvZDoke3N0cmluZ31gO1xuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBwb2ludDogYSBmcmFtZXdvcmsgbGlmZWN5Y2xlIGNyb3Nzcm9hZCAoaW50ZXJjZXB0b3IsXG4gKiBndWFyZCwgcGlwZSwgZmlsdGVyLCBtaWRkbGV3YXJlKSBkZXRlY3RlZCBzeW50YWN0aWNhbGx5LiBUaGUgdm9jYWJ1bGFyeVxuICogdGhhdCB0dXJucyBhIHN5bnRhY3RpYyBzaGFwZSBpbnRvIGEgcG9pbnQgY29tZXMgZnJvbSBwbHVnaW5zIOKAlCB3aXRoIG5vXG4gKiBwbHVnaW4gbG9hZGVkLCBubyBwb2ludHMgYXJlIGNvbGxlY3RlZC5cbiAqXG4gKiBEZWR1cGUvc2NvcGUgZGVjaXNpb246IHBvaW50cyBhcmUga2V5ZWQgYnkgKGtpbmQsIGNsYXNzTmFtZSwgbG9jYXRpb24sXG4gKiBzY29wZSkgYW5kIGR1cGxpY2F0ZXMgbWVyZ2UgdGhlaXIgYHRhcmdldHNgLiBBIGNsYXNzIGRldGVjdGVkIGJvdGggYnlcbiAqIGhlcml0YWdlIChhIHBsdWdpbi1saXN0ZWQgYGltcGxlbWVudHNgIGludGVyZmFjZSkgYW5kIGJ5IGEgZGVjb3JhdG9yXG4gKiBzaXRlIHlpZWxkcyBTRVBBUkFURSBlbnRyaWVzIOKAlCB0aGUgY2xhc3MtZGVjbGFyYXRpb24gcG9pbnQga2VlcHMgc2NvcGVcbiAqICdtb2R1bGUnIChhdHRhY2htZW50IHVua25vd24pIHdoaWxlIGVhY2ggcmVnaXN0cmF0aW9uIHNpdGUgY2FycmllcyBpdHNcbiAqIG93biBzY29wZS4gT25lIHBvaW50IHNlcnZpbmcgbXVsdGlwbGUgc2NvcGVzIHZpYSBtZXJnZWQgc2NvcGUgbGlzdHMgd2FzXG4gKiByZWplY3RlZDogY29uc3VtZXJzIChtbmVtb2dyYXBoaWNhIGRpYW1vbmRzKSBrZXkgb2ZmIGEgc2luZ2xlIHNjb3BlIHBlclxuICogcG9pbnQsIGFuZCBzZXBhcmF0ZSBlbnRyaWVzIGtlZXAgdGhhdCBjb250cmFjdCBzaW1wbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1bWVudGF0aW9uUG9pbnQge1xuXHQvKiogS2luZCBvZiBsaWZlY3ljbGUgY3Jvc3Nyb2FkICovXG5cdGtpbmQ6IEluc3RydW1lbnRhdGlvbktpbmQ7XG5cdC8qKiBDbGFzcyBwcm92aWRpbmcgdGhlIGluc3RydW1lbnRhdGlvbiAoZS5nLiwgXCJBdXRoR3VhcmRcIikgKi9cblx0Y2xhc3NOYW1lOiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKGNsYXNzIGRlY2xhcmF0aW9uIHdoZW4gZGVjbGFyZWQgaW4tcHJvamVjdCwgZWxzZSB0aGUgcmVnaXN0cmF0aW9uIHNpdGUpICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDb2RlIHNuaXBwZXQ6IHNpZ25hdHVyZSAvIGZpcnN0IGxpbmUsIGxpa2UgRURTIGBjb2RlYCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBXaGVyZSB0aGUgcG9pbnQgYXR0YWNoZXMgKi9cblx0c2NvcGU6IEluc3RydW1lbnRhdGlvblNjb3BlO1xuXHQvKiogQ29udHJvbGxlci9wcm92aWRlciBuYW1lcyB0aGUgcG9pbnQgYXR0YWNoZXMgdG87IGVtcHR5IGZvciBnbG9iYWwgcG9pbnRzICovXG5cdHRhcmdldHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBpbnN0cnVtZW50YXRpb24uanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvbkpzb24ge1xuXHQvKiogU2NoZW1hIHZlcnNpb246IDIgYWRkcyB0aGUgb3B0aW9uYWwgY3JlYXRpb25HcmFwaCBrZXkgKFBoYXNlIDMpICovXG5cdHZlcnNpb246IG51bWJlcjtcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0cG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdO1xuXHQvKipcblx0ICogSW5zaWRlLW91dCBjcmVhdGlvbiB3YWxrIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIHBsYW4sIFBoYXNlIDMpOiB3aGljaFxuXHQgKiBzY29wZXMgY3JlYXRlIG1uZW1vbmljYSBpbnN0YW5jZXMgYW5kIHdobyBjYWxscyB0aGVtLCB3YWxrZWQgb3V0d2FyZCB0b1xuXHQgKiB0aGUgc3RhcnRlcnMuIEFic2VudCB3aGVuIHRoZSB3cml0ZXIgaXMgY2FsbGVkIHdpdGhvdXQgY3JlYXRpb24tZ3JhcGhcblx0ICogZGF0YSAoZGlyZWN0IGxpYnJhcnkgdXNlKTsgYWx3YXlzIHByZXNlbnQgZnJvbSB0aGUgQ0xJLlxuXHQgKi9cblx0Y3JlYXRpb25HcmFwaD86IENyZWF0aW9uR3JhcGg7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGNvbnRyb2wuanNvbiAobGV0aGUgY29udHJhY3QsIGZvcm1hdCAxLjIpOiBgY2FsbGVyc2BcbiAqIGNhcnJpZXMgdGhlIHNhbWUgY3JlYXRpb24gZ3JhcGggaW5zdHJ1bWVudGF0aW9uLmpzb24gdjIgY2FycmllcyB1bmRlclxuICogYGNyZWF0aW9uR3JhcGhgLCBgcG9pbnRzYCB0aGUgc2FtZSBwbHVnaW4tc3VwcGxpZWQgaW5zdHJ1bWVudGF0aW9uIHBvaW50cy5cbiAqIGluc3RydW1lbnRhdGlvbi5qc29uIHN0YXlzIHVuY2hhbmdlZCBmb3IgbW5lbW9ncmFwaGljYTsgY29udHJvbC5qc29uIGlzXG4gKiB0aGUgY3Jvc3MtbGFuZ3VhZ2UgY29udHJhY3QgcmVuZGVyaW5nIG9mIHRoZSBzYW1lIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbEpzb24ge1xuXHR2ZXJzaW9uOiAnMS4yJztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0Y2FsbGVyczogQ3JlYXRpb25HcmFwaDtcblx0cG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdO1xufVxuXG4vKipcbiAqIEZsb3cga2luZCBmb3IgdHJhY2tpbmcgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHBhdHRlcm5zIOKAlCBXSEFUIEZMT1dTIFdIRVJFXG4gKiBpbiBwbGFpbiBzb3VyY2Ugc2hhcGVzLiBFYWNoIGtpbmQgbmFtZXMgb25lIHN5bnRhY3RpYyBwYXR0ZXJuIHRoYXQgbW92ZXNcbiAqIGEgdHlwZWQgdmFsdWUsIHdpdGggdGhlIHNoYXBlIHRoYXQgcHJvZHVjZXMgaXQ6XG4gKlxuICogICAncHJvcGVydHlSZWFkJyAgICAgIHJlYWRpbmcgYSBmaWVsZCBvZmYgdGhlIGluc3RhbmNlIOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGB1c2VyLm5hbWVgIChhbHNvIGB1c2VyPy5uYW1lYCDigJQgb3B0aW9uYWwgY2hhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzIGFzIGEgcGxhaW4gcHJvcGVydHlSZWFkKVxuICogICAncHJvcGVydHlXcml0ZScgICAgIGFzc2lnbmluZyBhIGZpZWxkIOKAlCBgdXNlci5uYW1lID0gJ3gnYFxuICogICAnbWV0aG9kQ2FsbCcgICAgICAgIGNhbGxpbmcgYSBtZXRob2Qgb24gaXQg4oCUIGB1c2VyLnZhbGlkYXRlKClgXG4gKiAgICdlbGVtZW50QWNjZXNzJyAgICAgYnJhY2tldCByZWFkIOKAlCBgdXNlclsnbmFtZSddYFxuICogICAnZGVzdHJ1Y3R1cmVSZWFkJyAgIGRlc3RydWN0dXJpbmcgcHVsbHMgdGhlIGZpZWxkcyBhcGFydCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgY29uc3QgeyBuYW1lIH0gPSB1c2VyYFxuICogICAncGFzc0FzQXJnJyAgICAgICAgIHRoZSB2YWx1ZSBjcm9zc2VzIGludG8gYSBjYWxsIGFzIGFuIGFyZ3VtZW50IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGBwcm9jZXNzVXNlcih1c2VyKWAgKGNvbnRleHQgbmFtZXMgY2FsbGVlICsgc2xvdClcbiAqICAgJ3JldHVybicgICAgICAgICAgICB0aGUgdmFsdWUgbGVhdmVzIHRoZSBmdW5jdGlvbiBhcyBpdHMgcmVzdWx0IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGByZXR1cm4gdXNlcmBcbiAqICAgJ3NwcmVhZCcgICAgICAgICAgICB0aGUgZmllbGRzIHNjYXR0ZXIgaW50byBhIGxpdGVyYWwg4oCUIGAoeyAuLi51c2VyIH0pYFxuICogICAncmVhc3NpZ25tZW50JyAgICAgIHRoZSBiaW5kaW5nIGlzIHJlLXBvaW50ZWQg4oCUIGB1c2VyID0gb3RoZXJgXG4gKiAgICdpbnN0YW50aWF0aW9uJyAgICAgYSBjb25zdHJ1Y3Rpb24tc2hhcGVkIGNhbGwg4oCUIGBuZXcgVXNlcigpYCAoYWxzb1xuICogICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGZvciBjaGFpbiB0aXBzIGFuZCBjYWxsL2FwcGx5L2ZvcmsvbWVyZ2UpXG4gKlxuICogJ2FycmF5RWxlbWVudCcgYW5kICdjb25kaXRpb25hbEFjY2VzcycgYXJlIHJlc2VydmVkIG1lbWJlcnMgb2YgdGhlXG4gKiB1bmlvbiDigJQgZGVjbGFyZWQsIG5vdCB5ZXQgZW1pdHRlZCBieSB0aGUgYW5hbHl6ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZsb3dLaW5kID1cblx0fCAncHJvcGVydHlSZWFkJ1xuXHR8ICdwcm9wZXJ0eVdyaXRlJ1xuXHR8ICdtZXRob2RDYWxsJ1xuXHR8ICdkZXN0cnVjdHVyZVJlYWQnXG5cdHwgJ3Bhc3NBc0FyZydcblx0fCAncmV0dXJuJ1xuXHR8ICdzcHJlYWQnXG5cdHwgJ2FycmF5RWxlbWVudCdcblx0fCAnY29uZGl0aW9uYWxBY2Nlc3MnXG5cdHwgJ2VsZW1lbnRBY2Nlc3MnXG5cdHwgJ3JlYXNzaWdubWVudCdcblx0fCAnaW5zdGFudGlhdGlvbic7XG5cbi8qKlxuICogRmxvdyBpbmZvIGZvciBuYXRpdmUgaW5zdGFuY2UgdXNhZ2UgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgZmxvdyAqL1xuXHRraW5kOiBGbG93S2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0eSBuYW1lIGlmIGFwcGxpY2FibGUgKi9cblx0cHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYga25vd24gKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqIENvbnRleHQgKGZ1bmN0aW9uIG5hbWUsIHBhcmFtIHBvc2l0aW9uLCBldGMuKSAqL1xuXHRjb250ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBmbG93Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZmxvdzogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT47XG59XG5cbi8qKlxuICogV2hhdCBhIG1vZHVsZS1sZXZlbCBiaW5kaW5nIGlzLiBWYXJpYWJsZXMgYXJlIGNsYXNzaWZpZWQgYXMgJ2NvbnN0J1xuICogcmVnYXJkbGVzcyBvZiBsZXQvdmFyIOKAlCBtdXRhYmlsaXR5IChyZWFzc2lnbm1lbnQgdHJhY2tpbmcpIGlzIHRoZVxuICogbG9jYWwtc2NvcGUgd2Fsa2VyJ3MgY29uY2VybiAoUGhhc2UgMiksIG5vdCB0aGUgbW9kdWxlIGdyYXBoJ3MuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUJpbmRpbmdLaW5kID1cblx0fCAnZnVuY3Rpb24nXG5cdHwgJ2NsYXNzJ1xuXHR8ICdjb25zdCdcblx0fCAndHlwZSdcblx0fCAndW5rbm93bic7XG5cbi8qKlxuICogSG93IGEgYmluZGluZyBlbnRlcnMgYSBtb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgTW9kdWxlSW1wb3J0S2luZCA9XG5cdHwgJ25hbWVkJ1xuXHR8ICdkZWZhdWx0J1xuXHR8ICduYW1lc3BhY2UnXG5cdHwgJ3JlcXVpcmUnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBtb2R1bGUtbGV2ZWwgYmluZGluZyAoZXhwb3J0LCBpbXBvcnQsIG9yIHJlLWV4cG9ydCkuXG4gKlxuICogYG5hbWVgIGlzIGFsd2F5cyB0aGUgbmFtZSB0aGlzIG1vZHVsZSBwcmVzZW50czogdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yXG4gKiBpbXBvcnRzLCB0aGUgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cy4gYGltcG9ydEFsaWFzYCBjYXJyaWVzIHRoZSBvcmlnaW5hbFxuICogbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGl0IGRpZmZlcnMgKGBpbXBvcnQgeyBYIGFzIFkgfWAg4oaSIG5hbWUgJ1knLFxuICogaW1wb3J0QWxpYXMgJ1gnOyBgZXhwb3J0IHsgWCBhcyBZIH0gZnJvbSDigKZgIOKGkiBuYW1lICdZJywgaW1wb3J0QWxpYXMgJ1gnKS5cbiAqIEZvciBkZWZhdWx0IGltcG9ydHMgbmFtZSBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQgdGhlIHNvdXJjZSBsb29rdXAga2V5XG4gKiBpcyAnZGVmYXVsdCcgKGltcGxpZWQgYnkgaW1wb3J0S2luZCk7IGZvciBuYW1lc3BhY2UgaW1wb3J0cy9leHBvcnRzIG5hbWUgaXNcbiAqIHRoZSBuYW1lc3BhY2UgYWxpYXMgKCcqJyBmb3IgYmFyZSBgZXhwb3J0ICogZnJvbSDigKZgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVCaW5kaW5nIHtcblx0LyoqIE5hbWUgYXMgcHJlc2VudGVkIGluIHRoaXMgbW9kdWxlIChsb2NhbCBuYW1lIGZvciBpbXBvcnRzLCBleHBvcnRlZCBuYW1lIGZvciBleHBvcnRzKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBXaGF0IHRoZSBiaW5kaW5nIGlzOyBiYWNrZmlsbGVkIGZyb20gdGhlIG9yaWdpbiBtb2R1bGUgd2hlbiByZXNvbHZhYmxlICovXG5cdGtpbmQ6IE1vZHVsZUJpbmRpbmdLaW5kO1xuXHQvKipcblx0ICogUmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoIG9mIHRoZSBzb3VyY2UgbW9kdWxlICh0aGUgbW9kdWxlIGl0c2VsZiBmb3Jcblx0ICogbG9jYWwgZGVjbGFyYXRpb25zOyB0aGUgcmF3IHNwZWNpZmllciB3aGVuIHJlc29sdXRpb24gZmFpbHMpXG5cdCAqL1xuXHRzb3VyY2VNb2R1bGU6IHN0cmluZztcblx0LyoqIEhvdyB0aGUgYmluZGluZyBlbnRlcnMgdGhlIG1vZHVsZSAoYWJzZW50IG9uIHBsYWluIGxvY2FsIGV4cG9ydHMpICovXG5cdGltcG9ydEtpbmQ/OiBNb2R1bGVJbXBvcnRLaW5kO1xuXHQvKiogT3JpZ2luYWwgbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGFsaWFzZWQgKi9cblx0aW1wb3J0QWxpYXM/OiBzdHJpbmc7XG5cdC8qKiBUcnVlIGZvciBgZXhwb3J0IHsgWCB9IGZyb20gJy4veSdgIC8gYGV4cG9ydCAqIGZyb20gJy4veSdgIChiYXJyZWxzKSAqL1xuXHRpc1JlRXhwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZWQgaW50byBub2RlX21vZHVsZXNcblx0ICogKHRzLnJlc29sdmVNb2R1bGVOYW1lJ3MgaXNFeHRlcm5hbExpYnJhcnlJbXBvcnQpLiBFeHRlcm5hbCBiaW5kaW5ncyBhcmVcblx0ICogcmVjb3JkZWQgZm9yIHJlZmVyZW5jZSBidXQgbmV2ZXIgZW50ZXIgYGRlcGVuZGVuY2llc2AgYW5kIGFyZSBuZXZlciB3YWxrZWQuXG5cdCAqIE5vZGUuanMgYnVpbHRpbnMgYXJlIG5vdCByZWNvcmRlZCBhcyBiaW5kaW5ncyBhdCBhbGwg4oCUIHNlZVxuXHQgKiBNb2R1bGVJbmZvLmJ1aWx0aW5TcGVjaWZpZXJzLlxuXHQgKi9cblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlci1tb2R1bGUgcmVjb3JkIG9mIHRoZSBjcm9zcy1maWxlIGdyYXBoIChtb2R1bGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlSW5mbyB7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKG1hcCBrZXkpICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqL1xuXHRkZWZpbmVkVHlwZXM6IHN0cmluZ1tdO1xuXHQvKiogRXZlcnl0aGluZyB0aGlzIG1vZHVsZSBleHBvcnRzIChsb2NhbCBkZWNsYXJhdGlvbnMgYW5kIHJlLWV4cG9ydHMpICovXG5cdGV4cG9ydGVkQmluZGluZ3M6IE1vZHVsZUJpbmRpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgaW1wb3J0cyAocmUtZXhwb3J0cyBhcHBlYXIgaGVyZSB0b28sIG1hcmtlZCBpc1JlRXhwb3J0KSAqL1xuXHRpbXBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBBYnNvbHV0ZSBwYXRocyBvZiBhbmFseXplZCBwcm9qZWN0IG1vZHVsZXMgdGhpcyBtb2R1bGUgaW1wb3J0cyBmcm9tICovXG5cdGRlcGVuZGVuY2llczogc3RyaW5nW107XG5cdC8qKiBJbXBvcnQgc3BlY2lmaWVycyB0aGF0IG1vZHVsZSByZXNvbHV0aW9uIGNvdWxkIG5vdCByZXNvbHZlIChub2RlIGJ1aWx0aW5zIGV4Y2x1ZGVkIOKAlCBzZWUgYnVpbHRpblNwZWNpZmllcnMpICovXG5cdHVucmVzb2x2ZWRTcGVjaWZpZXJzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIE5vZGUuanMgYnVpbHRpbiBzcGVjaWZpZXJzIHRoaXMgbW9kdWxlIGltcG9ydHMgKCdwYXRoJywgJ25vZGU6ZnMnLCDigKYpLFxuXHQgKiBtYXRjaGVkIGFnYWluc3Qgbm9kZTptb2R1bGUncyBidWlsdGluTW9kdWxlcyBpbiBib3RoIGJhcmUgYW5kXG5cdCAqIGBub2RlOmAtcHJlZml4ZWQgZm9ybXMuIFJlY29yZGVkIGZvciBob25lc3R5IG9ubHk6IGJ1aWx0aW5zIHByb2R1Y2Ugbm9cblx0ICogYmluZGluZ3MsIG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgL2B1bnJlc29sdmVkU3BlY2lmaWVyc2AsIGFuZCBuZXZlclxuXHQgKiBwcm9kdWNlIGVkZ2VzLlxuXHQgKi9cblx0YnVpbHRpblNwZWNpZmllcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY3Jvc3MtbW9kdWxlIHVzYWdlIG9mIGEgbW5lbW9uaWNhIHR5cGU6IHVzYWdlTW9kdWxlIGltcG9ydHMgYSBiaW5kaW5nXG4gKiB3aG9zZSBvcmlnaW4gbW9kdWxlIGRlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NNb2R1bGVVc2FnZSB7XG5cdC8qKiBNYXRjaGVkIG1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIChvciB0aGUgaW1wb3J0ZWQgbmFtZSB3aGVuIHVubWF0Y2hlZCkgKi9cblx0dHlwZVBhdGg6IHN0cmluZztcblx0LyoqIEFic29sdXRlIHBhdGggb2YgdGhlIG1vZHVsZSB3aGVyZSB0aGUgdHlwZSBpcyBkZWZpbmVkIChyZS1leHBvcnQgY2hhaW5zIGNoYXNlZCB0byB0aGUgb3JpZ2luKSAqL1xuXHRkZWZpbml0aW9uTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRpbmcgbW9kdWxlICovXG5cdHVzYWdlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBJbXBvcnQgc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR1c2FnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZ1bGwgbW9kdWxlIGdyYXBoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlR3JhcGgge1xuXHQvKiogS2V5ZWQgYnkgYWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUluZm8+O1xuXHRlZGdlczogQ3Jvc3NNb2R1bGVVc2FnZVtdO1xuXHQvKipcblx0ICogQ2lyY3VsYXIgaW1wb3J0IGNoYWlucyAoZWFjaCBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRocykuIFJlY29yZGVkLCBub3Rcblx0ICogYW4gZXJyb3Ig4oCUIG1uZW1vbmljYSBzdHJpY3RDaGFpbjpmYWxzZSBwZXJtaXRzIG5vbi1saW5lYXIgY29uc3RydWN0aW9uXG5cdCAqL1xuXHRjeWNsZXM6IHN0cmluZ1tdW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIG1vZHVsZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIFdoYXQgYSB0cmFja2VkIHNjb3BlIGlzLiBEZWNpc2lvbiA1IChyZXNvbHZlZCAyMDI2LTA5LTAzKTogZnVuY3Rpb24sXG4gKiBtZXRob2QsIGFuZCBhcnJvdyBzY29wZXMgT05MWSDigJQgbm8gYmxvY2sgc2NvcGVzLiAnbW9kdWxlJyBpcyB0aGUgc3ludGhldGljXG4gKiBwZXItZmlsZSByb290IHNjb3BlIHNvIG1vZHVsZS1sZXZlbCBpbnN0YW5jZSBjcmVhdGlvbnMgYXJlIGxhYmVsZWQsIG5vdFxuICogZHJvcHBlZCAod2Fsa2VyIHBsYW46IFwicmVjb3JkZWQgYXMgYSByb290ZWQgaW5zdGFuY2VcIikuXG4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlS2luZCA9XG5cdHwgJ21vZHVsZSdcblx0fCAnZnVuY3Rpb24nXG5cdHwgJ21ldGhvZCdcblx0fCAnYXJyb3cnO1xuXG4vKipcbiAqIE9uZSB0cmFja2VkIHNjb3BlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZUluZm8ge1xuXHQvKiogVW5pcXVlIGlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlIGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sIG9mIHRoZSBzY29wZSBub2RlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIERlY2lzaW9uIDggbGFiZWxpbmc6IGZ1bmN0aW9uL21ldGhvZCBuYW1lICgnQ2xhc3MubWV0aG9kJyBmb3IgbWV0aG9kcyksIGZpbGU6bGluZSBmb3IgYW5vbnltb3VzIGhvbGRlcnMgKi9cblx0bmFtZTogc3RyaW5nO1xuXHRraW5kOiBTY29wZUtpbmQ7XG5cdC8qKiBOZWFyZXN0IGVuY2xvc2luZyBzY29wZSAodW5kZWZpbmVkIG9uIG1vZHVsZSBzY29wZXMpICovXG5cdHBhcmVudFNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKi9cblx0ZmlsZVBhdGg6IHN0cmluZztcblx0LyoqIFNjb3BlIHN0YXJ0OiBmaWxlLnRzOkxpbmU6Q29sIChtb2R1bGUgc2NvcGU6IGZpbGU6MToxKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSB0cmFja2VkIHZhcmlhYmxlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZVZhcmlhYmxlIHtcblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3duaW5nIHNjb3BlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIHdoZW4ga25vd24gKG5ldyBYKCkgb24gYSBrbm93biB0eXBlLCBuZXcgaW5zdC5TdWIoKSBjaGFpbmluZywgb3IgYSBrbm93biBhbm5vdGF0aW9uKSAqL1xuXHR0eXBlUGF0aD86IHN0cmluZztcblx0LyoqIENoZWFwIHRleHR1YWwgdHlwZTogYW5ub3RhdGlvbiB0ZXh0IG9yIHRpbnkgaW5pdGlhbGl6ZXIgY2xhc3NpZmljYXRpb24gKi9cblx0aW5mZXJyZWRUeXBlPzogc3RyaW5nO1xuXHQvKiogRGVjbGFyYXRpb24gc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRkZWNsYXJhdGlvbjogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcjogYm9vbGVhbjtcblx0LyoqIGNvbnN0ID0gZmFsc2U7IGxldC92YXIgYW5kIHBhcmFtZXRlcnMgPSB0cnVlIChwYXJhbWV0ZXJzIGFyZSByZWFzc2lnbmFibGUpICovXG5cdGlzTXV0YWJsZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFJlYXNzaWdubWVudCBzaXRlcyAoZmlsZS50czpMaW5lOkNvbCkgb2YgdGhpcyBiaW5kaW5nIOKAlCBmbG93LXRlcm1pbmF0aW9uXG5cdCAqIHBvaW50cyAoZGVjaXNpb24gNik6IHRoZSBQaGFzZSAzIHdhbGtlciBzdG9wcyBmb2xsb3dpbmcgdGhlIGJpbmRpbmcgdGhlcmVcblx0ICovXG5cdHJlYXNzaWdubWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIGxvY2FsLXNjb3BlIGFuYWx5c2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVBbmFseXNpcyB7XG5cdC8qKiBLZXllZCBieSBzY29wZUlkICovXG5cdHNjb3BlczogTWFwPHN0cmluZywgU2NvcGVJbmZvPjtcblx0LyoqIEtleWVkIGJ5IGAke3Njb3BlSWR9IyR7bmFtZX1gICovXG5cdHZhcmlhYmxlczogTWFwPHN0cmluZywgU2NvcGVWYXJpYWJsZT47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHNjb3Blcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0c2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBTY29wZUluZm8+O1xuXHR2YXJpYWJsZXM6IFNjb3BlVmFyaWFibGVbXTtcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvZiB0aGUgY3JlYXRpb24gZ3JhcGggKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6XG4gKiBhIHNjb3BlIHRoYXQgY3JlYXRlcyBtbmVtb25pY2EgaW5zdGFuY2VzLCBvciBvbmUgc2l0dGluZyBvbiBhIGNhbGwgcGF0aFxuICogdG8gYSBjcmVhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhOb2RlIHtcblx0LyoqIExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZCAobW9kdWxlIHNjb3BlID0gZmlsZSBwYXRoOyBmdW5jdGlvbiBzY29wZXMgPSBmaWxlOmxpbmU6Y29sKSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogVHJ1ZSB3aGVuIHRoZSB3YWxrIGZvdW5kIG5vIGNhbGxlcnMg4oCUIGFuIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50ICovXG5cdHN0YXJ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT25lIGVkZ2Ugb2YgdGhlIGNyZWF0aW9uIGdyYXBoOiB0aGUgY2FsbGVyIHNjb3BlIGludm9rZXMgb3IgcmVmZXJlbmNlcyB0aGVcbiAqIGNhbGxlZSBzY29wZS4gRGlyZWN0aW9uIGlzIGluc2lkZS1vdXQ6IGNhbGxlciDihpIgY2FsbGVlLCB3aGVyZSB0aGUgY2FsbGVlIGlzXG4gKiBjbG9zZXIgdG8gdGhlIGNyZWF0aW9uIHNpdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaEVkZ2Uge1xuXHQvKiogQ2FsbGluZyBzY29wZSdzIHNjb3BlSWQgKi9cblx0Y2FsbGVyOiBzdHJpbmc7XG5cdC8qKiBDYWxsZWQgKGhvbGRlcikgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGluc3RhbnRpYXRpb24gYW5jaG9yOiBvbmUgbW5lbW9uaWNhIGNyZWF0aW9uIHNpdGUgcGlubmVkIHRvIGl0cyBob2xkZXJcbiAqIHNjb3BlLlxuICpcbiAqIGB2YXJpYWJsZWAvYHRlcm1pbmF0ZWRBdGAgYXJlIGEgZG9jdW1lbnRlZCBoZXVyaXN0aWM6IHRoZSB2YXJpYWJsZSBkZWNsYXJlZFxuICogaW4gdGhlIGhvbGRlciBzY29wZSBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZSBjcmVhdGlvbiwgd2hvc2UgdHlwZVBhdGggKHdoZW5cbiAqIGtub3duKSBtYXRjaGVzIHRoZSBjcmVhdGVkIHR5cGUuIGB0ZXJtaW5hdGVkQXRgIGlzIHRoYXQgdmFyaWFibGUncyBmaXJzdFxuICogcmVhc3NpZ25tZW50IHNpdGUg4oCUIHRoZSBkZWNpc2lvbiA2IGZsb3ctdGVybWluYXRpb24gcG9pbnQgd2hlcmUgdGhlIHdhbGtlclxuICogc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uQW5jaG9yIHtcblx0LyoqIENyZWF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKHRoZSB1c2FnZXMuanNvbiBsb2NhdGlvbikgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFNjb3BlIGhvbGRpbmcgdGhlIGNyZWF0aW9uIChzY29wZXMuanNvbiBzY29wZUlkKSAqL1xuXHRob2xkZXJTY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCBiZWluZyBjcmVhdGVkICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgKCdUaGluZycsICd1c2VyLkFkbWluRW50aXR5JywgYSBsb29rdXAgYWxpYXMgbmFtZSkgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBob2xkZXIgaXMgdGhlIG1vZHVsZSBzY29wZSDigJQgYSByb290ZWQgaW5zdGFuY2UgKHBsYW46XG5cdCAqIGxlZ2l0aW1hdGUgcm9vdCBvciBkZXZlbG9wZXIgZXJyb3I7IGxhYmVsZWQsIG5vdCBwb2xpY2VkKVxuXHQgKi9cblx0cm9vdGVkPzogYm9vbGVhbjtcblx0LyoqIFZhcmlhYmxlIHRoZSBmcmVzaCBpbnN0YW5jZSB3YXMgYm91bmQgdG8gKHNhbWUtbGluZSBoZXVyaXN0aWMpICovXG5cdHZhcmlhYmxlPzogc3RyaW5nO1xuXHQvKiogRmlyc3QgcmVhc3NpZ25tZW50IHNpdGUgb2YgdGhhdCB2YXJpYWJsZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR0ZXJtaW5hdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIGdyYXBoOiBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gbW5lbW9uaWNhIGluc3RhbmNlcyBiZWluZ1xuICogY3JlYXRlZC4gRW1pdHRlZCBhcyB0aGUgYGNyZWF0aW9uR3JhcGhgIGtleSBvZiBpbnN0cnVtZW50YXRpb24uanNvbiB2Mi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoIHtcblx0bm9kZXM6IENyZWF0aW9uR3JhcGhOb2RlW107XG5cdGVkZ2VzOiBDcmVhdGlvbkdyYXBoRWRnZVtdO1xuXHRhbmNob3JzOiBDcmVhdGlvbkFuY2hvcltdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBoaWVyYXJjaHkuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeUpzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHJvb3RzOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogT25lIGVudHJ5IG9mIHRoZSBjb2xsZWN0aW9ucy5qc29uIG1hbmlmZXN0LiBUaGUgZGVmYXVsdCBjb2xsZWN0aW9uIGlzXG4gKiBlbWl0dGVkIGZpcnN0IHdoZW5ldmVyIGRlZmF1bHQtY29sbGVjdGlvbiB0eXBlcyBleGlzdDogaXQgaGFzIG5vIGNhbGxcbiAqIHNpdGUsIHNvIGBpZGAgYW5kIGBsb2NhdGlvbmAgc3RheSBudWxsICh1bnByZWZpeGVkIGZ1bGxQYXRocyBBUkUgaXRzXG4gKiBpZGVudGl0eSkuIEZvcm1hdCAxLjI6IHRoZSByZWdpc3RyeSBpbnRlcmZhY2UgaXMgTk9UIHBhcnQgb2YgdGhlXG4gKiBtYW5pZmVzdCAoYSBUeXBlU2NyaXB0LW9ubHkgY29uY2VybiDigJQgdGhlIGluLW1lbW9yeVxuICogYHJlZ2lzdHJ5SW50ZXJmYWNlTmFtZWAgdGhhdCB0eXBlcy50cy9yZWdpc3RyeS50cyBhcmUgZ2VuZXJhdGVkIGZyb21cbiAqIHN0YXlzIG9uIHRoZSBUeXBlTm9kZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbk1hbmlmZXN0RW50cnkge1xuXHQvKiogTWludGVkIGlkIHVzZWQgaW4gYGNvbGxlY3Rpb25JZDo6YCBmdWxsUGF0aCBwcmVmaXhlczsgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiAqL1xuXHRpZDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIFZhcmlhYmxlIGhvbGRpbmcgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIHJlc3VsdCAoJ2RlZmF1bHRUeXBlcycgZm9yIHRoZSBkZWZhdWx0IGNvbGxlY3Rpb24pICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIGNhbGwgc2l0ZSAoZmlsZTpsaW5lOmNvbCk7IG51bGwgZm9yIHRoZSBkZWZhdWx0IGNvbGxlY3Rpb24gKi9cblx0bG9jYXRpb246IHN0cmluZyB8IG51bGw7XG5cdC8qKlxuXHQgKiBTb3VyY2UgbGFuZ3VhZ2Ugb2YgdGhpcyBjb2xsZWN0aW9uJ3MgY29kZWJhc2UgKGZvcm1hdCAxLjI6IHJlcXVpcmVkIOKAlFxuXHQgKiB0aGVyZSBpcyBubyBkZWZhdWx0IGxhbmd1YWdlKS4gdGFjdGljYSBpcyB0aGUgVHlwZVNjcmlwdCBnZW5lcmF0b3IsXG5cdCAqIHNvIGV2ZXJ5IGVudHJ5IGl0IHdyaXRlcyBpcyBcInR5cGVzY3JpcHRcIi5cblx0ICovXG5cdGxhbmd1YWdlOiAndHlwZXNjcmlwdCc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGNvbGxlY3Rpb25zLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeVtdO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyZWQgaGllcmFyY2h5IG5vZGUgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2h5Tm9kZSB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIEZ1bGwgZG90dGVkIHBhdGggKGUuZy4sIFwiVXNlclR5cGUuQWRtaW5UeXBlXCIpICovXG5cdGZ1bGxQYXRoOiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIENoaWxkIHR5cGVzIGluIHRoZSBUcmllICovXG5cdGNoaWxkcmVuOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogQSBmYXRhbCByZXNvbHV0aW9uIGZhaWx1cmU6IHNhbWUtbmFtZXNwYWNlIGR1cGxpY2F0ZSBtbmVtb25pY2FcbiAqIGRlZmluaXRpb25zLCBvciBhIG1uZW1vbmljYS1ncmFwaCB0eXBlIHJlZmVyZW5jZSB0aGF0IHN0YXlzIGFtYmlndW91c1xuICogYWZ0ZXIgcGF0aC1hd2FyZSByZXNvbHV0aW9uIChvciByZXNvbHZlcyB0byBub3RoaW5nKS4gVGhlIENMSSBwcmludHNcbiAqIGV2ZXJ5IGxvY2F0aW9uIGFuZCB3cml0ZXMgbm8gLnRhY3RpY2Egb3V0cHV0IGF0IGFsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHV0aW9uRXJyb3Ige1xuXHQvKiogaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGZhaWx1cmUgKi9cblx0bWVzc2FnZTogc3RyaW5nO1xuXHQvKiogZXZlcnkgaW52b2x2ZWQgc291cmNlIGxvY2F0aW9uLCBgZmlsZTpsaW5lOmNvbHVtbmAgKi9cblx0bG9jYXRpb25zOiBzdHJpbmdbXTtcbn1cbiJdfQ==