dcdx 1.3.0-next.23 → 1.3.0-next.24

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.
@@ -11028,7 +11028,9 @@ const ActionHandler = async (program, { action, errorHandler }, options) => {
11028
11028
  }, {
11029
11029
  wait: 60 * 1 * 1000
11030
11030
  });
11031
- action(ops).catch(err => {
11031
+ action(ops).then(() => {
11032
+ gracefulExit(0);
11033
+ }).catch(err => {
11032
11034
  if (err instanceof z.ZodError) {
11033
11035
  err.issues.forEach(issue => {
11034
11036
  errorMessage += `Unable to parse option ${issue.path.join(',')}: ${issue.message}\n`;
@@ -11387,4 +11389,4 @@ process.on('SIGINT', () => {
11387
11389
  console.log(`Received term signal, trying to stop gracefully 💪`);
11388
11390
  gracefulExit();
11389
11391
  });
11390
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2NhcGl0YWxpemUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSdW5Gb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2RjYXB0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Q2x1c3RlclVSTC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2luc3RhbGxBcHAuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZWluZGV4UHJvZ3Jlc3MuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZWluZGV4LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuTHVjZW5lVGltaW5nVGVzdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldER1cmF0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZWFkTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZXN1bHRzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVzdWx0c0RpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldE5vZGVOdW1iZXJGb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3RlYXJkb3duQ2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RhdGFiYXNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvQXBwbGljYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9EQ0FQVC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9wZXJmb3JtYW5jZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9zY2FsYWJpbGl0eS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvQWN0aW9uSGFuZGxlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2NvbW1hbmRzL2FwdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY2FwaXRhbGl6ZSA9ICh2YWx1ZSkgPT4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiIsImV4cG9ydCBjb25zdCBnZXRSdW5Gb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnYmFzZWxpbmUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAncmVncmVzc2lvbic6IHJldHVybiAyO1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAzO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiA0O1xuICAgICAgICBjYXNlICdmb3VyLW5vZGUnOiByZXR1cm4gNTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJy4uL2hlbHBlcnMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vaGVscGVycy9nZXRSdW5Gb3JTdGFnZSc7XG5jb25zdCB0b051bWJlciA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gJ3RoaXJkJztcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gJ2ZvdXJ0aCc7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiAnZmlmdGgnO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgZW1wdHlMaW5lID0gKCkgPT4gY29uc29sZS5sb2coJ+KAiycpO1xuZXhwb3J0IGNvbnN0IGdlbmVyaWMgPSB7XG4gICAgaGVhZGVyOiBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9fX18gICAgICBfICAgICAgICAgIF9fX19fICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBcXFxcIF9fX3wgfF8gX19fICAgfCAgICAgfF9fXyBfX198IHxfIF9fXyBfX18gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgfCAuJ3wgIF98IC4nfCAgfCAgIC0tfCAtX3wgICB8ICBffCAtX3wgIF98ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX18vfF9fLHxffCB8X18sfCAgfF9fX19ffF9fX3xffF98X3wgfF9fX3xffCAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIF9fX19fICAgICAgICAgICAgX19fX18gICAgICAgICBfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX18gICAgICAgICBfIF8gICBfIF8gICBcbiAgfCAgXyAgfF9fXyBfX18gICB8ICBfICB8X19fIF9fX3wgIF98X19fIF9fXyBfX19fXyBfX18gX19fIF9fXyBfX18gICB8XyAgIF98X19fIF9fX3wgfCB8X3xffCB8XyBcbiAgfCAgICAgfCAuIHwgLiB8ICB8ICAgX198IC1ffCAgX3wgIF98IC4gfCAgX3wgICAgIHwgLid8ICAgfCAgX3wgLV98ICAgIHwgfCB8IC4gfCAuIHwgfCAnX3wgfCAgX3xcbiAgfF9ffF9ffCAgX3wgIF98ICB8X198ICB8X19ffF98IHxffCB8X19ffF98IHxffF98X3xfXyx8X3xffF9fX3xfX198ICAgIHxffCB8X19ffF9fX3xffF8sX3xffF98ICBcbiAgICAgICAgfF98IHxffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICBXZWxjb21lIHRvIHRoZSBhdXRvbWF0ZWQgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgKERDQVBUKS5cbiAgVGhpcyB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIGFsbCB0aGUgc3RlcHMgdG8gcHJvZHVjZSB0aGUgcmVxdWlyZWQgcGVyZm9ybWFuY2UgdGVzdGluZyByZXN1bHRzXG4gIGZvciB5b3VyIChhbm51YWwpIERhdGEgQ2VudGVyIGFwcHJvdmFsLlxuYFxufTtcbmV4cG9ydCBjb25zdCBpbml0ID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgV2Ugd2lsbCBub3cgZm9sbG93IGFsbCB0aGUgc3RlcHMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgVXNlciBHdWlkZSBGb3IgJHtjYXBpdGFsaXplKHByb2R1Y3QpfS5cbiAgUGxlYXNlIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gcHJpb3IgdG8gc3RhcnRpbmcgdGhlIHRlc3QgcnVuOlxuXG4gIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtJHtwcm9kdWN0fS9cblxuICBPbmNlIHlvdSBzdGFydCB0aGUgdGVzdCBydW4gd2Ugd2lsbCBwcm92aXNpb24gdGhlIGVudmlyb25tZW50IG9uIEFXUy4gXG4gIElNUE9SVEFOVDogVGhpcyBjYW4gaW5jdXIgY29zdHMuXG4gIFxuICBZb3UgY2FuIHN0b3AgdGhpcyBwcm9jZXNzIGF0IGFueSB0aW1lIGJ5IGV4aXRpbmcgdGhpcyBwcm9ncmFtLiBCZSBzdXJlIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gcmVzZXQgXG4gIHRoZSBBV1MgZW52aXJvbm1lbnQgYW5kIHByZXZlbnQgdW5leHBlY3RlZCBjb3N0cy5cblxuICAkIGRjZHggYXB0IHRlYXJkb3duXG5cbiAgWW91IGNhbiBhbHNvIHJlc3VtZS9yZXN0YXJ0IGV2ZXJ5IHBhcnQgb2YgdGhlIHRlc3QgcnVuIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOlxuXG4gICQgZGNkeCBhcHQgaW5pdCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHByb3Zpc2lvbiAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4yIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMyAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjQgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW41IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG5cbiAgV2Ugd2lsbCBjb250aW51ZSB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4ke3Byb2R1Y3QgPT09ICdqaXJhJyA/IGBcbiAgMS4gIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgMy4gIEx1Y2VuZSBJbmRleCB0aW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICA0LiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICA1LiAgU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBvbmUtbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biAzKVxuICA2LiAgU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA3LiAgU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBmb3VyLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNSlcbiAgOC4gIEdlbmVyYXRlIHJlcG9ydHNcbiAgOS4gIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDEwLiBTZWN1cml0eSBTY2FubmVyIGZvciBEYXRhIENlbnRlciBhcHBzXG5gIDogYFxuICAxLiBQcm92aXNpb24gdGhlIGVudmlyb25tZW50XG4gIDIuIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgMy4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICA0LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDUuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gdHdvLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNClcbiAgNi4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBmb3VyLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNSlcbiAgNy4gR2VuZXJhdGUgcmVwb3J0c1xuICA4LiBUZWFyZG93biBvZiBlbnZpcm9ubWVudFxuICA5LiBTZWN1cml0eSBTY2FubmVyIGZvciBEYXRhIENlbnRlciBhcHBzXG5gfWAsXG59O1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbmluZyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gXG4gIHwgIF8gIHwgX18gIHwgICAgIHwgIHwgIHwgICAgIHwgICBfX3wgICAgIHwgICAgIHwgICB8IHwgICAgIHwgICB8IHwgICBfX3xcbiAgfCAgIF9ffCAgICAtfCAgfCAgfCAgfCAgfC0gICAtfF9fICAgfC0gICAtfCAgfCAgfCB8IHwgfC0gICAtfCB8IHwgfCAgfCAgfFxuICB8X198ICB8X198X198X19fX198XFxcXF9fXy98X19fX198X19fX198X19fX198X19fX198X3xfX198X19fX198X3xfX198X19fX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uXG5cbiAgSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOlxuXG4gIDEuIFRoZSBsb2NhdGlvbiBvZiB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgb24geW91ciBkaXNrXG4gIDIuIEFXUyBjcmVkZW50aWFsc1xuICAzLiBQcm9kdWN0IGxpY2Vuc2VcbmAsXG4gICAgYXNrRm9yQVdTQ3JlZGVudGlhbHM6IChwcm9kdWN0KSA9PiBgXG4gIEluIG9yZGVyIHRvIHByb3Zpc2lvbiB0aGUgJHtjYXBpdGFsaXplKHByb2R1Y3QpfSBjbHVzdGVyLCB3ZSBuZWVkIEFkbWluaXN0cmF0b3IgY3JlZGVudGlhbHMgZm9yIEFXUy5cbiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBEQ0FQVCBkb2N1bWVudGF0aW9uIHRvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIHRoZSBBV1MgYWNjZXNzIGtleXM6XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9LyNzZXR1cC0ke3Byb2R1Y3R9LWRhdGEtY2VudGVyLWRldmVsb3BtZW50LWVudmlyb25tZW50LW9uLWs4cy1cbmAsXG4gICAgYXNrRm9yRW52aXJvbm1lbnQ6IGBcbiAgV2hlbiBwcm92aXNpb25pbmcgdGhlIGNsdXN0ZXIsIHdlIG5lZWQgYSB1bmlxdWUgZW52aXJvbm1lbnQgbmFtZS5cbiAgVGhpcyB3aWxsIGFsbG93IHlvdSB0byBjcmVhdGUgbXVsdGlwbGUgY2x1c3RlcnMgKGkuZS4gZm9yIGRpZmZlcmVudCBob3N0IHByb2R1Y3RzKSBhbmQgdG8gaWRlbnRpZnkgd2hpY2ggY2x1c3RlciB0byB1c2UgZHVyaW5nIHRlc3RpbmcgJiB0ZWFyZG93bi5cbmAsXG4gICAgYXNrRm9yTGljZW5zZTogYFxuICBUaGUgaG9zdCBwcm9kdWN0IHJlcXVpcmVzIGEgdmFsaWQgbGljZW5zZS5cblxuICBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgNzJoIGRldmVsb3BlciBsaWNlbnNlIHByb3ZpZGVkIGJ5IEF0bGFzc2lhbi4gSWYgeW91IG5lZWQgYSBtb3JlIGV4dGVuc2l2ZSBsaWNlbnNlLFxuICB5b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIHJlYWR5OiBgXG4gIFdlIGhhdmUgbm93IGdhdGhlcmVkIGFsbCB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHJvdmlzaW9uIHRoZSBjbHVzdGVyLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuICBcbiAgV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAgUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBhd3NDcmVkZW50aWFsc1BlcnNpc3RlZDogJ+KclCBBV1MgY3JlZGVudGlhbHMgd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgIHRlcnJhZm9ybUNvbmZpZ3VyYXRpb25QZXJzaXN0ZWQ6IGDinJQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzYFxufTtcbmV4cG9ydCBjb25zdCBSdW4xID0ge1xuICAgIGhlYWRlcjogKCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gICBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfF8gIHwgIFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICAgX3wgfF8gXG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX19fX3xcblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIFRoaXMgd2lsbCBwcm9kdWNlIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSByZXN1bHRzLlxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgYmFzZWxpbmUgdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG5XZSB3aWxsIG5vdyBzdGFydCB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0XG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBSdW4yID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8ICBffFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICBUaGlzIHdpbGwgYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydC5cbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICBJbiBhZGRpdGlvbiwgYSBMdWNlbmUgSW5kZXggVGltaW5nIFRlc3QgaXMgYWxzbyBwYXJ0IG9mIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RzLmAgOiAnJ31cbiAgVGhlIHNlY29uZCBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAyLiBCZW5jaG1hcmsgdGhlIHJlLWluZGV4IHRpbWUgd2l0aCB5b3VyIGFwcCBpbnN0YWxsZWRcbiAgMy4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmAgOiBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIFBlcmZvcm1hbmNlIHJlc3VsdHMgZ2VuZXJhdGlvbiB3aXRoIHRoZSBhcHAgaW5zdGFsbGVkXG5gfVxuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKHN0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gYFxuICDinJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMiAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IEx1Y2VuZVRpbWluZ1Rlc3QgPSB7XG4gICAgaGVhZGVyOiAoX3Byb2R1Y3QsIHN0YWdlKSA9PiBgXG4gIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8ICB8ICB8ICB8ICB8ICAgICB8ICAgX198ICAgfCB8ICAgX198XG4gIHwgIHxfX3wgIHwgIHwgICAtLXwgICBfX3wgfCB8IHwgICBfX3xcbiAgfF9fX19ffF9fX19ffF9fX19ffF9fX19ffF98X19ffF9fX19ffFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfF8gICBffCAgICAgfCAgICAgfCAgICAgfCAgIHwgfCAgIF9ffFxuICAgIHwgfCB8LSAgIC18IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gICAgfF98IHxfX19fX3xffF98X3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgICAgICAgXG4gICAgICB8XyAgIF98ICAgX198ICAgX198XyAgIF98ICAgICAgICBcbiAgICAgICAgfCB8IHwgICBfX3xfXyAgIHwgfCB8ICAgICAgICAgIFxuICAgICAgICB8X3wgfF9fX19ffF9fX19ffCB8X3wgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWRcbiAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBQZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IChydW4gMilcblxuICBBZnRlciB0aGUgcmUtaW5kZXggaXMgY29tcGxldGVkIGEgc2NyZWVuc2hvdCBpcyBjcmVhdGVkIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJlcXVpcmVkIHRlc3QgcmVzdWx0c1xuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgV2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHRoZSBMdWNlbmUgSW5kZXggdGltaW5nIHRlc3RcbiAgT25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgYSBicm93c2VyIHdpbmRvdyBpcyBvcGVuZWQgdG8gY2FwdHVyZSB0aGUgdGVzdCByZXN1bHRzLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluaWcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuYCxcbiAgICBmYWlsdXJlOiAoX3N0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50KSA9PiBgXG4gIOKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcmVpbmRleCAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYFxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFJlYWR5IHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG7inJQgRmluaXNoZWQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fIF9fIFxuICB8ICAgX198ICAgICB8ICBfICB8ICB8ICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8XyAgIF98ICB8ICB8XG4gIHxfXyAgIHwgICAtLXwgICAgIHwgIHxfX3wgICAgIHwgX18gLXwtICAgLXwgIHxfX3wtICAgLXwgfCB8IHxfICAgX3xcbiAgfF9fX19ffF9fX19ffF9ffF9ffF9fX19ffF9ffF9ffF9fX19ffF9fX19ffF9fX19ffF9fX19ffCB8X3wgICB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8X198X198X19fX198X198ICB8X19fX198X198X198IHxffCAgICAgICAgICAgICAgICAgICAgXG5gXG59O1xuZXhwb3J0IGNvbnN0IFRlYXJkb3duID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fICBfX19fXyBfIF8gXyBfX19fXyBcbiAgfF8gICBffCAgIF9ffCAgXyAgfCBfXyAgfCAgICBcXFxcfCAgICAgfCB8IHwgfCAgIHwgfFxuICAgIHwgfCB8ICAgX198ICAgICB8ICAgIC18ICB8ICB8ICB8ICB8IHwgfCB8IHwgfCB8XG4gICAgfF98IHxfX19fX3xfX3xfX3xfX3xfX3xfX19fL3xfX19fX3xfX19fX3xffF9fX3xcblxuICBXZSB3aWxsIG5vdyB0ZXJtaW5hdGUgdGhlIGNsdXN0ZXIgdXNlZCBpbiB0aGUgRGF0YSBDZW50ZXIgQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgdGVzdGluZy5cbmBcbn07XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBpbnN0YWxsID0gYXN5bmMgKGN3ZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBcbiAgU3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuICBVc2luZyBEQ0FQVCBjb25maWd1cmF0aW9uIGZyb20gJHtjd2R9XG5gKTtcbiAgICBjb25zdCBiYXNlRGlyID0gam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKTtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpLCAnIyB0ZXJyYWZvcm0gb3V0cHV0JywgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJ2F3c19lbnZzJyxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2RjYXB0LnRmdmFyczovZGF0YS1jZW50ZXItdGVycmFmb3JtL2NvbmYudGZ2YXJzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2RjYXB0LXNuYXBzaG90cy5qc29uOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGNhcHQtc25hcHNob3RzLmpzb25gLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vbG9nczovZGF0YS1jZW50ZXItdGVycmFmb3JtL2xvZ3NgLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vb3V0cHV0cy5qc29uOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vb3V0cHV0cy5qc29uYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW5sYWJzL3RlcnJhZm9ybTpsYXRlc3QnLFxuICAgICAgICAgICAgJy4vaW5zdGFsbC5zaCcsICctYycsICdjb25mLnRmdmFycydcbiAgICAgICAgXSwgeyBjd2Q6IGJhc2VEaXIsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgRmluaXNoZWQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuICBDbHVzdGVyIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluICR7YmFzZURpcn0vb3V0cHV0cy5qc29uXG5gKTtcbn07XG5leHBvcnQgY29uc3QgcnVuVGVzdCA9IGFzeW5jIChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0KSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJy4vYXBwL3V0aWwvazhzL2F3c19lbnZzJyxcbiAgICAgICAgICAgICctZScsIGBSRUdJT049dXMtZWFzdC0yYCxcbiAgICAgICAgICAgICctZScsIGBFTlZJUk9OTUVOVF9OQU1FPSR7ZW52aXJvbm1lbnR9YCxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9L2FwcC91dGlsL2s4cy9ienRfb25fcG9kLnNoOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vYnp0X29uX3BvZC5zaGAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06bGF0ZXN0JyxcbiAgICAgICAgICAgICdiYXNoJywgJ2J6dF9vbl9wb2Quc2gnLCBgJHtwcm9kdWN0fS55bWxgXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ3Jlc3Npb25SZXBvcnQgPSBhc3luYyAoY3dkLCBydW4xRGlyLCBydW4yRGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjFEaXJ9Oi9yZXN1bHRzL3J1bjFgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuMkRpcn06L3Jlc3VsdHMvcnVuMmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiBSZXBvcnRgKTtcbn07XG5leHBvcnQgY29uc3Qgc2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAoY3dkLCBydW4zRGlyLCBydW40RGlyLCBydW41RGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjNEaXJ9Oi9yZXN1bHRzL3J1bjNgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuNERpcn06L3Jlc3VsdHMvcnVuNGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW41RGlyfTovcmVzdWx0cy9ydW41YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ2Nzdl9jaGFydF9nZW5lcmF0b3IucHknLCAnc2NhbGVfcHJvZmlsZS55bWwnXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBTY2FsYWJpbGl0eSBCZW5jaG1hcmsgUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHRlcm1pbmF0ZSA9IGFzeW5jIChjd2QsIGVudmlyb25tZW50KSA9PiB7XG4gICAgY29uc3QgYmFzZURpciA9IHJlc29sdmUoam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICdhd3NfZW52cycsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGF0YS1jZW50ZXItdGVycmFmb3JtJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L3Rlcm1pbmF0ZV9jbHVzdGVyLnB5Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vdGVybWluYXRlX2NsdXN0ZXIucHlgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbi9kY2FwdCcsXG4gICAgICAgICAgICAndGVybWluYXRlX2NsdXN0ZXIucHknLCAnLS1jbHVzdGVyX25hbWUnLCBgYXRsYXMtJHtlbnZpcm9ubWVudH0tY2x1c3RlcmAsICctLWF3c19yZWdpb24nLCAndXMtZWFzdC0yJ1xuICAgICAgICBdLCB7IGN3ZDogam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKSwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgdGVybWluYXRpbmcgdGhlIERDIGNsdXN0ZXIgb24gQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uYCk7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIGFzIHB3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHNpbXBsZUdpdCBmcm9tICdzaW1wbGUtZ2l0JztcbmltcG9ydCB7IGVtcHR5TGluZSB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBnZXRBcHREaWN0b3J5ID0gYXN5bmMgKGN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBmb3JjZSkgPT4ge1xuICAgIC8vIFRyYW5zbGF0ZSBjb21tb24gcmVsYXRpdmUgcGF0aHMgdG8gYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgcmVzdWx0ID0gY3dkLnN0YXJ0c1dpdGgoJ34vJylcbiAgICAgICAgPyBjd2QucmVwbGFjZSgnfi8nLCBob21lZGlyKCkpXG4gICAgICAgIDogY3dkLnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgID8gY3dkLnJlcGxhY2UoJy4vJywgcHdkKCkgKyAnLycpXG4gICAgICAgICAgICA6IGN3ZCA9PT0gJy4nXG4gICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgIDogY3dkO1xuICAgIC8vIElmIHdlIGFyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIHF1ZXN0aW9ucyBmaXJzdFxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBBUFQgZGlyZWN0b3J5LCB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4uLlxuICAgICAgICBsZXQgdXNlQ3VycmVudERpcmVjdG9yeSA9IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlO1xuICAgICAgICAvLyAuLi51bmxlc3MgdG9sZCBvdGhlcndpc2VcbiAgICAgICAgaWYgKGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBXZSd2ZSBmb3VuZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnk6XG4gICR7cmVzdWx0fVxuYCk7XG4gICAgICAgICAgICB1c2VDdXJyZW50RGlyZWN0b3J5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYERvIHlvdSB3aXNoIHRvIHVzZSB0aGlzIGRpcmVjdG9yeT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFzayBmb3IgdGhlIGFsdGVybmF0aXZlXG4gICAgICAgIGxldCBkaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICAgIGlmICghdXNlQ3VycmVudERpcmVjdG9yeSkge1xuICAgICAgICAgICAgZGlyZWN0b3J5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIEFwcCBQZWZvcm1hbmNlIFRvb2xraXQgaXMgbG9jYXRlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeS5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSArICcvJylcbiAgICAgICAgICAgIDogZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogZGlyZWN0b3J5ID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGFsdGVybmF0aXZlIGlzIGEgRENBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKHJlc29sdmUoam9pbihkaXJlY3RvcnksICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKTtcbiAgICAgICAgaWYgKCFpc0RpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIGFzayBpZiB3ZSBuZWVkIHRvIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBjb25zdCBtdXN0Q2xvbmVBUFQgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGRpcmVjdG9yeSBlaXRoZXIgZG9lc24ndCBleGlzdCwgb3IgaXQgZG9lc24ndCBjb250YWluIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0LiBEbyB5b3Ugd2FudCB0byBjbG9uZSBEQ0FQVCBmcm9tIHNvdXJjZT9gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBtdXN0IGNsb25lIGl0IGZyb20gR2l0aHViLCB3ZSBzaG91bGQgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICAgICAgICAgIGlmIChtdXN0Q2xvbmVBUFQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCBkaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RpbmcpXG4gICAgICAgIGlmIChtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkuLi5cbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBpcyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBEQ0FQVCAobWFzdGVyIGJyYW5jaCknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIC4uLmJ1dCBhbHNvLCBObyBpcyBub3QgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gbWFzdGVyIHRvIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgY29uZmlybSB0aGF0IHRoZSBjaG9zZW4gZGlyZWN0b3J5IGhhcyBhIERDQVBUIGluc3RhbGxhdGlvbiB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhcHAtc3BlY2lmaWMgYWN0aW9ucyBpbiBvcmRlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgcmVzdWx0IHRvIHRoZSBwcm92aWRlZCBkaXJlY3RvcnlcbiAgICAgICAgcmVzdWx0ID0gZGlyZWN0b3J5O1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHdlIHdpbGwgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICB9XG4gICAgZWxzZSBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIC8vIElmIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RzIHdlIGNhbiB1c2UgaXRcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gZW5zdXJlIGEgZnJlc2ggbm9uLXBlcnNpc3RlbnQgY2hlY2tvdXRcbiAgICAgICAgcmVzdWx0ID0gIWV4aXN0c1N5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHRcbiAgICAgICAgICAgIDogam9pbihob21lZGlyKCksICcuZGNkeCcsICdkY2FwdCcpO1xuICAgICAgICAvLyBJbmZvcm0gdGhlIHVzZXIgb2YgdGhlIGNob3NlbiBkaXJlY3RvcnlcbiAgICAgICAgY29uc29sZS5sb2coJyAgSW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke3Jlc3VsdH1gKTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgcm1TeW5jKHJlc3VsdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAvLyBSZXRyaWV2ZSBEQ0FQVCBmcm9tIGdpdGh1YlxuICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCByZXN1bHQpO1xuICAgICAgICBjb25zb2xlLmxvZygn4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIERDQVBUIGZyb20gc291cmNlIChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSBhcHAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgZXhpc3RzXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCB3ZSBjYW5ub3QgY29udGludWVcbiAgICAgICAgaWYgKCFpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJyAgVXNpbmcgRENBUFQgZnJvbSBjdXJyZW50IGRpcmVjdG9yeSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICB9XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IG9jY3VyLCBiZWNhdXNlIGVpdGhlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgRENBUFRcbiAgICAvLyBvciB3ZSBoYXZlIGNsb25lZCBpdCBpbnRvIGEgKG5ldykgZGlyZWN0b3J5LiBUaGlzIGlzIG1lcmVseSBhIGNoZWNrIGZvciBpZiB0aGUgbGF0dGVyIGZhaWxlZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgfVxuICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGluIGEgdmFsaWQgRENBUFQgZGlyZWN0b3J5XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSk7XG4gICAgY29uc3QgaGFzU25hcHNob3RKU09OID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpKTtcbiAgICBjb25zdCBoYXNUZXJyYWZvcm1WYXJpYWJsZXMgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICBpZiAoIWhhc0VudkZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2F3c19lbnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzU25hcHNob3RKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC1zbmFwc2hvdHMuanNvbicgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNUZXJyYWZvcm1WYXJpYWJsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LnRmdmFycycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVwb3J0ID0gKGJhc2VEaXIsIHR5cGUpID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVwb3J0IHN1bW1hcnkgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGJhc2VEaXIgYWxyZWFkeSBjb250YWlucyB0aGUgcmVwb3J0XG4gICAgY29uc3Qgc3VtbWFyeUZpbGVOYW1lID0gdHlwZSA9PT0gJ3BlcmZvcm1hbmNlJyA/ICdwZXJmb3JtYW5jZV9wcm9maWxlX3N1bW1hcnkubG9nJyA6ICdzY2FsZV9wcm9maWxlX3N1bW1hcnkubG9nJztcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBzdW1tYXJ5RmlsZU5hbWUpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciByZXBvcnQgZGlyZWN0b3J5XG4gICAgICAgIHJlYWRkaXJTeW5jKGJhc2VEaXIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGFyZSBkaXJlY3RvcnksIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xuICAgICAgICAgICAgaWYgKHJlc3VsdHNEaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoam9pbihiYXNlRGlyLCBpdGVtKSk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGEgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgc3VtbWFyeUZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSByZXBvcnQgZGlyZWN0b3J5LCBhbmQgaWYgbm90IHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIGlmIChyZXN1bHRzRGlyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVwb3J0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c0Rpcjtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydERpcmVjdG9yeSA9IGFzeW5jIChjd2QsIGZvcmNlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXN1bHRzJywgJ3JlcG9ydHMnKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXBvcnRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVwb3J0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVwb3J0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVwb3J0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlcG9ydCBjYW4gb25seSBiZSBnZW5lcmF0ZWQgaWYgYWxsIHByZXZpb3VzIHJlcG9ydHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlcG9ydHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlcG9ydHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBQcmVzc1RvQ29udGludWVQcm9tcHQgZnJvbSAnaW5xdWlyZXItcHJlc3MtdG8tY29udGludWUnO1xuaW5xdWlyZXIucmVnaXN0ZXJQcm9tcHQoJ3ByZXNzLXRvLWNvbnRpbnVlJywgUHJlc3NUb0NvbnRpbnVlUHJvbXB0KTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yVXNlcklucHV0ID0gYXN5bmMgKG1lc3NhZ2UsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICB0eXBlOiAncHJlc3MtdG8tY29udGludWUnLFxuICAgICAgICBhbnlLZXk6IHRydWUsXG4gICAgICAgIHByZXNzVG9Db250aW51ZU1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHdoZW46ICFmb3JjZVxuICAgIH0pO1xuICAgIHJldHVybiBrZXkgfHwgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnkgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGVtcHR5TGluZSwgUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHJlZ3Jlc3Npb25SZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSBhbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgLy8gdG8gdGhlIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGhvdXQgYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMSdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMidcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gYmFjayBpbnRvIFlBTUxcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ2lmeShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBwZXJmb3JtYW5jZV9wcm9maWxlLnltbCBmaWxlIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjpcblxuJHtvdXRwdXR9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke3ltbEZpbGVQYXRofVxuYCk7XG4gICAgICAgICAgICAvLyBHaXZlIHRoZSB1c2VyIGEgbW9tZW50IHRvIHByb2Nlc3MgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFkanVzdGVkIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHltbEZpbGVQYXRoLCBvdXRwdXQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZy4gQWJvcnQgYWJvcnQgYWJvcnQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlcG9ydCBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXBvcnRCYXNlRGlyID0gYXdhaXQgZ2V0UmVwb3J0RGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIGFjdHVhbCByZXBvcnRcbiAgICBhd2FpdCByZWdyZXNzaW9uUmVwb3J0KGN3ZCwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjEnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjInKSk7XG4gICAgLy8gR2V0IHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVwb3J0RGlyID0gZ2V0UmVwb3J0KHJlcG9ydEJhc2VEaXIsICdwZXJmb3JtYW5jZScpO1xuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXBvcnREaXIsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdwZXJmb3JtYW5jZV9wcm9maWxlJyksIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBzY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJlcG9ydCB9IGZyb20gJy4vZ2V0UmVwb3J0JztcbmltcG9ydCB7IGdldFJlcG9ydERpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVwb3J0RGlyZWN0b3J5JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMuaGVhZGVyKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3NjYWxlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IG91dHB1dCBkaXJlY3RvcmllcyB0byB0aGUgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnJ1bnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnMSBOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMydcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICcyIE5vZGVzJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW40J1xuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzQgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnZXhwZXJpbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjUnXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGUgc2NhbGVfcHJvZmlsZS55bWwgZmlsZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246XG5cbiR7b3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBzY2FsYWJpbGl0eSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGdlbmVyYXRpb24gY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlcG9ydEJhc2VEaXIgPSBhd2FpdCBnZXRSZXBvcnREaXJlY3RvcnkoY3dkLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgYWN0dWFsIHJlcG9ydFxuICAgIGF3YWl0IHNjYWxhYmlsaXR5UmVwb3J0KGN3ZCwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjMnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjQnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjUnKSk7XG4gICAgLy8gR2V0IHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVwb3J0RGlyID0gZ2V0UmVwb3J0KHJlcG9ydEJhc2VEaXIsICdzY2FsYWJpbGl0eScpO1xuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXBvcnREaXIsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdzY2FsZV9wcm9maWxlJyksIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufTtcbiIsImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0T3V0cHV0RGlyZWN0b3J5ID0gKGN3ZCwgdGltZXN0YW1wKSA9PiB7XG4gICAgLy8gQ3JlYXRlIHRoZSB0ZXN0IHJ1biBJRCAodXNlZCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSlcbiAgICBjb25zdCBydW5JZCA9IHRpbWVzdGFtcCB8fCBmb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0nKTtcbiAgICAvLyBFaXRoZXIgdXNlIHRoZSBwcm92aWRlZCBvdXRwdXQgZGlyZWN0b3J5LCBvciBkZWZhdWx0IHRvIHRoZSBob21lIGRpcmVjdG9yeVxuICAgIGNvbnN0IGJhc2VEaXIgPSBjd2QgfHwgam9pbihob21lZGlyKCksICcuZGNkeCcsICdhcHQnKTtcbiAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICByZXR1cm4gam9pbihiYXNlRGlyLCBydW5JZCk7XG59O1xuIiwiaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGNvbnN0IGdldFByb2R1Y3QgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIHNlbGVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY2hvb3NlIHRoZSBwcm9kdWN0IGZvciB3aGljaCB5b3Ugd2lzaCB0byBydW4gRENBUFRgLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdKaXJhJywgdmFsdWU6ICdqaXJhJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQ29uZmx1ZW5jZScsIHZhbHVlOiAnY29uZmx1ZW5jZScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JhbWJvbycsIHZhbHVlOiAnYmFtYm9vJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQml0YnVja2V0JywgdmFsdWU6ICdiaXRidWNrZXQnIH1cbiAgICAgICAgXVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHBhc3N3b3JkIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFXU0NyZWRlbnRpYWxzID0gYXN5bmMgKHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgLy8gVHJ5IGdldHRpbmcgdGhlIEFXUyBjcmVkZW50aWFscyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgQVdTX0FDQ0VTU19LRVlfSUQsIEFXU19TRUNSRVRfQUNDRVNTX0tFWSB9ID0gcHJvY2Vzcy5lbnY7XG4gICAgLy8gSWYgdGhleSBleGlzdHMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCByZXR1cm4gdGhlbSBpbW1lZGlhdGVseVxuICAgIGlmIChBV1NfQUNDRVNTX0tFWV9JRCAmJiBBV1NfU0VDUkVUX0FDQ0VTU19LRVkpIHtcbiAgICAgICAgcmV0dXJuIFtBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBmb3IgdGhlbVxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gU2hvdyBhIG1lc3NhZ2UgYXNraW5nIG5pY2VseVxuICAgICAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yQVdTQ3JlZGVudGlhbHMocHJvZHVjdCkpO1xuICAgICAgICBjb25zdCBhd3NfYWNjZXNzX2tleV9pZCA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgQWNjZXNzIEtleSBJRGAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF3c19zZWNyZXRfYWNjZXNzX2tleSA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgU2VjcmV0IEFjY2VzcyBLZXlgLFxuICAgICAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGggPiAwXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIGFuZCB0aGUgY3JlZGVudGlhbHMgaGF2ZSBub3QgYmVlbiBmb3VuZCwgd2Ugc2hvdWxkIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVdTIGNyZWRlbnRpYWxzIGNvdWxkIG5vdCBiZSBmb3VuZC4gUGxlYXNlIHByb3ZpZGUgdGhlICdBV1NfQUNDRVNTX0tFWV9JRCcgYW5kICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknIGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xufTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEVudmlyb25tZW50TmFtZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yRW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBFbnZpcm9ubWVudCBuYW1lYCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJleHBvcnQgY29uc3QgdGltZWJvbWIgPSB7XG4gICAgJ2ppcmEnOiAnQUFBQ0JBME9EQW9QZU5wOWtsMXYyakFVaHUveks0NjBPeVFIU0x1VklrVWFUYndOVkJLVWhFbmJ1Z3NURHVBMnNTUGJnYkZmUHhPQzFpKzR5RVhPNSt2blBSK3lHaUdTVy9DdW9YYzd2Qm9NdlQ0RU5BT3Y1L1djdFVJVUcxbFZxTng3bnFQUVNKZmNjQ2w4R21VMG1TWGpsRHBSWFM1UXhhdTVScVY5MG5jQ0tRekxUY1JLOUV1OTQ0SXAvY1EvTTFNd3JUa1RiaTVMWjFhcmZNTTBoc3lnNy9YNkE5THZFODl6MmozWnZzSm1RQkJQcHpRSnhxUDdVNHIrcWJqYU4zMnpHKy9iYVIyZE1sNmMzNWVpMnFJYWgvNGR2YUhrT3Z6cGtVL3g1SVo4dmJvZE9JOWNNYmRTY2xubnhqMzhFQzFYWnNjVXVuWXkzNkp2VkkzT3hHWm1iWlhkendJVTVsVkpXaTkwcm5qVlFHb2k3MEI4NzNHTmhQT1FPNTFPRkdma1M1eVFXUktIOHlBYnh4R1pwOVFtL0VDaHBiR0V4UjdNQnFHZEFsVGtjb2tLN01NZU1UZndhMk5NOVREc2R0ZlNmUUduV3h3N0NCNDdmcnNRU2hEU3dKSnJvL2lpTm1nbmN3MUdRbDVySTB0cnRldFk0c0tnWUNKL1k0cVZGU1IwbE5HUTNQMDRhRHhyVEt2V09qTVhUMEx1eENVMzN0eGFTaVBmZnVSanIzZnNPL21DNm9nL1Ztc211R1lOMElqOTNURlljVlh1blFhYURiNCt3SmJGZDd2ZzBPSTVJZjUzTkVOdG9LMkFsVlF3R1NjalNGdDVscmpkV3ltdThXRUlnU3d0cHB5ekFzTGd4Ums4UDVoRzlQTUEzYktpUHNwZHNVTGpKUndYN3VrZjUvTlg3VEF0QWhVQWhRU0h6OURneWNPWDd3Y3dFUk1KYjNUTEdiNENGR2tCL3hVV1NSSzNCWkxyUEY5Um42Wm1yVXFKWDAyb2MnLFxuICAgICdjb25mbHVlbmNlJzogJ0FBQUN6ZzBPREFvUGVOcDlWTzl2MmpBUS9aNi93dEsrSVlXR3NFS0hGR21RbUphdS9HZ0ltOWlZSmhNT1lwcllrZTFBNGErZlNjaEdLdHFQUHZ2ZXZYdjN6cC82Z3FMSExFYjJIYktzVHZOenA5bEM5OE1BMlpiZE5LWWdkaUFHbnRQRFEyejY4OEhjZEgvYU03UDVvMmtaVHpRRUppRTRwREFpQ1RnQm5nYUQwYjBSQ3I1ZjFTOXVIZmNVV1hTUUJ6dUllUXJDQ0RsYjEwbW82QTRjSlRMUVNWbElsekZVZ2dwSThpY2tNYkFWRWJJK3lwSWxpUEc2UjVJbDV6NGtYRUYzQTB4SnAxR3l3YThwRlFlUEtIQW1EZHQ2K0E5Y0pWUUVLNXlXbWhNVjhIR1pMUldrd3JGOFBaTWdwR1BmR2g3SVVOQlVVYzZjQUtSQ2NWRVlyYmxBYVp4dEtFT3JzcWo4Vi9VUzg1enhYZCtmVUd3RDcwaWNrUnd5ZjdBUkFDemlxVVlvKzhJcm10L2pVWUQ5aVQrWVltTklLRlBBQ0F1dnlISWFRRVVTSFlnejBHOHJvcmdDOHJwNXF2YUVaVnAzcHQwdThzdmUzVGlUQ3NTSXIwQTZsbEdyMVZ3ZmR3UHNtYjI1UGpqYlZ3cTJFY1pjbTZuUzZES1grSTNpVDF5UC9DeTQyVEJlNEZBSzBXaFpWdHU2YXpZYlplWmxCMFUyd3JwbmtRb3FxNDBVeXN0NjdScUI5elU4azY0b2xZZXFLbkdtTkN6V2lzZU9Vb0t3aExMb0sxRXhrWklTVmc5NWNyM1pOL1lxZHVlU1lXNjQ5L21kcmZKQVpPUU0zYjNiOTZEUnVoVmszMjYxa2tGdmV4d2U0MVVRdEpOMTJ1NUd6NkdjUFQ3UG43MUg3MHQ2OUNQY2J4L2E5cmNqM3JEdXdsazR4cHJLQ0E1Vk4rb0pqc2FCMlIvNzVzUWZlek0zR0l4SDVteUtUNlBOL1FFcnREd2dGUUU2RTlWRENMVVp0TjhGMzBLbzBLOUlxWFRSdWJuWjhIcEZsWnR6QXlZVUdiL3J5T09JY1lWV1ZDcEJsNWtDalV3bFVoeUYybVk4MFdhb1h4ZHpFaE9XZTJZc05vUlJXV3hNdDZ4WC9oSDZQNXV4RjhiM3JMSklsejFMcFFXOTVwUVB2cWZMcTBrbXdvaEllTHMybDlQTXpmUTQ4THZ2V1RiZk1ZMUFYRGc5S0pETENWMkM5SFVNSCtDYUpmT2Z1ZGkvdjBrSUdWc3dMQUlVRU1ROVg3N2dxR0JkZkgwSEl6QmFWOE5hZFBVQ0ZCbitSaVVBNEQrSXFWUXBUVG91TFZZNjZhQ0dYMDIxMjEnLFxuICAgICdiaXRidWNrZXQnOiAnQUFBQm1nME9EQW9QZU5wOVVsMXYwekFVZmMrdnNNUmJKYWRKdGpHcFVpUzJKSlJPTk9sYUI0U0FCOWU5VzB4VHU3SnZDdjMzZUltRE9vUjR2ZWZlNC9QaE41OWhSNWJja1BpV1JOZXpLSjVGQ1prdkdVbWlKQTR5clpBTExQa0JVckhYb3RFbnU1ZUJSVzZiOEtNVW9DeXc4eEg2QlZaczJLS2NlM1RKcFVKUVhBa29maDJsT2VjY0lWMWRmUmhKQzdmUlhySnV3SnpBTFBMMC9xRitwSTlYR2FQeit1R0dzcHZia2RSeDhBd2NyMG5SZE9DbmxYbm1TbHFPVXF2MERsdHVyZVRLZzZ2T2lJWmI2SjlQb3ZpYVJtOXBISHMwTTlDZi9SdjFEdi9TUDVsTXlvclI5OVdhcnRaVlhtZHNVWlcwM2hRT1NIdENGK24yVExBQjRobElvWVRlZ1NGSG8zK0FRUEsxUVR4K20wMm56enJrbytKUTZNTzBIUzRvREJmZlE1SnJvalNTbmJSbzVMWkRjTXpTRXRSRWRCYjFBWXdOUnpzWGZmMEpnakN3TGpHLzRtQjVnaUUrSnpoYkYzZXN5T245bHhmMUYyMTQ1YTZPV3UyVi9xbUMvMmRWZG9jdG1PcXB0azVQR2lkK1hKeDQydzNOUFBIV1F1RDlmWEpiTDhQa3RmTGhVMkF2K04ycllNWTZ1VUVGcG5jWS9BWUNnZkZBTUN3Q0ZIemtCbGtHSC92UmRUZWVCU2ZVTXpVRGI0VzJBaFF5TTg5M1dQZzJROG9RQVlSZEJTeUtlVlVkb2c9PVgwMmpyJyxcbiAgICAnYmFtYm9vJzogJ0FBQUIzdzBPREFvUGVOcDlVbHRyMnpBWWZmZXZFT3d0b01SMTBxWUxHSmJZV3NubzdHQTdnOTBlWlBscm90V1dqQ1Nuelg3OUZGOElZV2tmRFBKM09lZHd6dmNoMnpkb1dTdmt6cEY3djVqZExyd3BDa2lhSWMvMVBPZVJNeEFhc21NTkVhM0F6MnhuSFQwNGdRSnF1QlFoTmVCNzd2UUd1elBzM2prNXJYSXB4NVFaZmdEZnFBYUdVdFJVT2FqNGFkWCtQa3BHeStVT2hORSt2bkdHNWxhRGFnczlMM210dVRvT0pGNVBramE1Wm9yWEp3RVhIRytwSlFkYU52Uy9jWXRMQXlzQlZGZnUxOWVodnhYUFFyNElKd1YxQUdVTEt6SW5lQmIrOFBCZC9HV09INllmNzUxTm85aWVhdWpsZVlNSEtZbDgrK0ZiMTNWR28xRVVaL2h6bk9CTkVvZmJJRnZIRWQ2bXhEYjgxa1FvVUg1RVpnK29wMGRFTUZtQVFyV1NmNEFaOUhOdlRQMXJNWm5zckxHbXBGcHpLc1pNVnBPeTI4RFFiZndlbzFBaUlRMHF1RGFLNTQwQmk4dzFNaEt4Umh0WldYdkhUZ2huK3pMUUJ2VTQ2RWxhMXJMWmNZRUtPRUFwYXp2dmZLWGNlaVNvWUcva2NUWGhUVWxGRytYVmJnS1ZOSEErZ0Y3Qk44dDNVdVU1c2RwUndYVVhHbm1sVlYwQ0NtUlZVM0c4RXZmNU1LVXc5dnFJRlYzNnRYN21vTmpmbzdDUFR4ZmVuWklKRXJMTVNJaFgzMDlwdkRkOFNVZ0szc21LTXBKc2tuVktCdHIyNnQ0RCtnZDNBQzVxTUN3Q0ZIT2FUV2ZGdkxDTEpQZnQzcWt0Vm8zRmFmbVpBaFJvamI5SUF4ajhLRXFQRFF5MHN0b3MzOTRTUVE9PVgwMm1xJ1xufTtcbmV4cG9ydCBjb25zdCBhcHAzaG91ciA9ICdBQUFCQ0EwT0RBb1BlTnBkajAxUHdrQVVSZmZ6S3laeFoxSXlVekFSa2xsUTI0Z1JhUU10R25hUDhWRW10alBOZkZUNTl5SlZGeXpmdWJrbjc5NlV4MEJ6NlNtYlVNNW5iRHpqOTdSSVN4b3pIcE1VbmJTcTg4cG9VYUx6dEZFU3RVTjZNSloyVGFpVnB1L1lZMk02dEk2c1FydEhteDhxZDc0RVorVEJJdnlVVS9Bb1lzN2ppRTBqemtuV1F4TXVpZkEySUJsVWJuUTdBdWxWandOOUFhVTlhdEFTczY5TzJkTkZVNHdYSkxjMWFPVUd3OXczNEp3Q1RUWm9lN1JQcVVnZXAyWDBWbTBuMGZOdXQ0Z1N4bC9KY25qOW5GYjZRNXRQL1VldTNMKzBQSFc0Z2haRm1tMnpaVjVrNi85NUNiUjdZOWJZR28vekdyVjNJcjRqUmJEeUNBNnZ0MzRETzhwM1NEQXNBaFFuSmpMRDVrOUZyM3VhSXprWEtmODNvNXZEZFFJVWU0WGVxdU5DQzNEKzlodDlaWWhOWkZLbW5oYz1YMDJkaCc7XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0SG9zdExpY2Vuc2UgPSAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVib21iW3Byb2R1Y3RdO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yTGljZW5zZSk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYExpY2Vuc2VgLFxuICAgICAgICBkZWZhdWx0OiB0aW1lYm9tYltwcm9kdWN0XSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVwbGFjZUxpbmVzSW5GaWxlID0gKHBhdGgsIHJlcGxhY2VyKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gbGluZXMubWFwKHJlcGxhY2VyKTtcbiAgICB3cml0ZUZpbGVTeW5jKHBhdGgsIHJlc3VsdC5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUxpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiA9IChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0LCBsaWNlbnNlLCBub2RlcyA9IDEpID0+IHtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJyksIChsaW5lKSA9PiB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ2Vudmlyb25tZW50X25hbWUgPScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYGVudmlyb25tZW50X25hbWUgPSBcIiR7ZW52aXJvbm1lbnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgncHJvZHVjdHMgPSAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBwcm9kdWN0cyA9IFtcIiR7cHJvZHVjdH1cIl1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgJHtwcm9kdWN0fV9saWNlbnNlID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Byb2R1Y3R9X2xpY2Vuc2UgPSBcIiR7bGljZW5zZX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAke3Byb2R1Y3R9X3JlcGxpY2FfY291bnQgPWApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fcmVwbGljYV9jb3VudCA9ICR7bm9kZXN9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IGApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IFtcIi1EdXBtLnBsdWdpbi51cGxvYWQuZW5hYmxlZD10cnVlXCIsXCItRHBhc3N3b3JkLmNvbmZpcm1hdGlvbi5kaXNhYmxlZD10cnVlXCJdYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcudGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgPSAoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KSA9PiB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpLCBgXG4jIGF3c19lbnZzIGZpbGUgc2hvdWxkIGNvbnRhaW4gQVdTIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGF1dGhvcml6YXRpb24gKHdpdGhvdXQgcXVvdGVzKVxuQVdTX0FDQ0VTU19LRVlfSUQ9JHthd3NfYWNjZXNzX2tleV9pZH1cbkFXU19TRUNSRVRfQUNDRVNTX0tFWT0ke2F3c19zZWNyZXRfYWNjZXNzX2tleX1cbmAudHJpbSgpLCAndXRmLTgnKTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXdzQ3JlZGVudGlhbHNQZXJzaXN0ZWQpO1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRDbHVzdGVyVVJMID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCkgPT4ge1xuICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIEt1YmVybmV0ZXMgdXRpbHMgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIG91dHB1dHMuanNvbiBmaWxlIHRoYXQgd2FzIGNyZWF0ZWQgZHVyaW5nIHByb3Zpc2lvbmluZ1xuICAgIGNvbnN0IGhhc091dHB1dHNKU09OID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSk7XG4gICAgaWYgKCFoYXNPdXRwdXRzSlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnb3V0cHV0cy5qc29uJyBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGdlbmVyYXRlZCBhZnRlciBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50LmApO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgY3JlYXRpb24gb3V0cHV0IGRhdGFcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBwcm9kdWN0IGxvYWRiYWxhbmNlciBVUkwgZnJvbSB0aGUgb3V0cHV0IGRhdGFcbiAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmxzID0gb3V0cHV0cz8ucHJvZHVjdF91cmxzPy52YWx1ZTtcbiAgICBpZiAobG9hZGJhbGFuY2VyVXJscykge1xuICAgICAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmwgPSBsb2FkYmFsYW5jZXJVcmxzW3Byb2R1Y3RdO1xuICAgICAgICBpZiAobG9hZGJhbGFuY2VyVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGJhbGFuY2VyVXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgaXQgeWV0LCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSAke3Byb2R1Y3R9IGxvYWQgYmFsYW5jZXIgVVJMLCBhcmUgeW91IHN1cmUgdGhlIHByb2R1Y3Qgd2FzIGNvcnJlY3RseSBwcm92aXNpb25lZD9gKTtcbn07XG4iLCJpbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldEVudmlyb25tZW50TmFtZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lJztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vaGVscGVycy9nZXRIb3N0TGljZW5zZSc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucywgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgcHJvdmlzaW9uaW5nIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgYXdhaXQgZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgLy8gQXNrIGZvciB0aGUgbGljZW5zZVxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIExldCdzIGRvIHRoaXNcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcucmVhZHkpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHByb3Zpc2lvbmcgdGhlIEFXUyBlbnZpcm9ubWVudC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrXG4gICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKGRpcmVjdG9yeSwgZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgbGljZW5zZSk7XG4gICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgIGF3YWl0IGluc3RhbGwoZGlyZWN0b3J5KTtcbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgVVJMIGZyb20gdGhlIG91dHB1dHMuanNvblxuICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRDbHVzdGVyVVJMKGRpcmVjdG9yeSwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBSZXR1cm4gYWxsIHRoZSBxdWVzdGlvbnMgd2UgYXNrZWQgdGhlIHVzZXIgZm9yIHVzZSBpbiBvdGhlciBzdGVwc1xuICAgIHJldHVybiB7XG4gICAgICAgIGN3ZDogZGlyZWN0b3J5LFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgbGljZW5zZVxuICAgIH07XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCB1cGxvYWRUb1VQTSA9IGFzeW5jIChiYXNlVXJsLCBwYXRoLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/b3NfYXV0aFR5cGU9YmFzaWNgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSB0b2tlbicsIGVycik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlLmhlYWRlcnNbJ3VwbS10b2tlbiddO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGNyZWF0ZVJlYWRTdHJlYW0ocGF0aCkpO1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgICAgIH0gfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJykpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNJywgZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4gZnJvbSBoZWFkZXJzOicsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmhlYWRlcnMsIG51bGwsIDIpKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkID0gYXN5bmMgKGFwcEtleSwgYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ1dhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZCcpO1xuICAgIGxldCBpc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlICghaXNFbmFibGVkICYmIGNvdW50IDwgMTIwKSB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZC4uLiAke2NvdW50fXNgKTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5YCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKCgpID0+ICh7IGRhdGE6IHsgZW5hYmxlZDogZmFsc2UgfSB9KSk7XG4gICAgICAgIGlzRW5hYmxlZCA9IGRhdGE/LmVuYWJsZWQ7XG4gICAgICAgIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBpc0VuYWJsZWQ7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTGljZW5zZSA9IGFzeW5jIChhcHBLZXksIGxpY2Vuc2UsIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+ICh7IGRhdGE6IHt9IH0pKTtcbiAgICBjb25zdCB7IHJhd0xpY2Vuc2UgfSA9IGRhdGE7XG4gICAgaWYgKCFyYXdMaWNlbnNlIHx8IHJhd0xpY2Vuc2UgIT09IGxpY2Vuc2UpIHtcbiAgICAgICAgYXdhaXQgYXhpb3MucHV0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleS9saWNlbnNlYCwgYHsgXCJyYXdMaWNlbnNlXCI6IFwiJHtsaWNlbnNlfVwiIH1gLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJykpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgbGljZW5zZSB0byBVUE0nLCBlcnIpKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGFwcDNob3VyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5jb25zdCBwcm9ncmVzc0JhciA9IG5ldyBTaW5nbGVCYXIoe1xuICAgIGZvcm1hdDogJyAgW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7cmVtYWluaW5nfW0nLFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmNvbnN0IHJvdW5kID0gKHZhbHVlLCBzdGVwKSA9PiB7XG4gICAgc3RlcCB8fCAoc3RlcCA9IDEuMCk7XG4gICAgY29uc3QgaW52ID0gMS4wIC8gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGludikgLyBpbnY7XG59O1xuY29uc3QgZG93bmxvYWQgPSBhc3luYyAoYWRkb25LZXkpID0+IHtcbiAgICBjb25zdCB0bXBEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ3RtcCcpO1xuICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgYWRkb25LZXkpO1xuICAgIG1rZGlyU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9tYXJrZXRwbGFjZS5hdGxhc3NpYW4uY29tL2Rvd25sb2FkL3BsdWdpbnMvJHthZGRvbktleX1gLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhLnBpcGUoY3JlYXRlV3JpdGVTdHJlYW0odG1wRmlsZSkpKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICByZXR1cm4gdG1wRmlsZTtcbn07XG5leHBvcnQgY29uc3QgaW5zdGFsbEFwcCA9IGFzeW5jIChiYXNlVXJsLCBhcHBLZXksIGxpY2Vuc2UgPSBhcHAzaG91ciwgZm9yY2UpID0+IHtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZG93bmxvYWQgaXQgZnJvbSBNUEFDXG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSBuZWVkIGFuIGFwcGtleS4gSWYgdGhpcyBpcyBub3QgcHJvdmlkZWQsIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIGlmICghYXBwS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYXBwIGludG8gY2x1c3RlciwgYGFwcEtleWAgd2FzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FwcEtleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSWApO1xuICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDMwMCwgMCwgeyByZW1haW5pbmc6ICc1bScgfSk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhcHBLZXkpO1xuICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgIGF3YWl0IHVwbG9hZFRvVVBNKGJhc2VVcmwsIGZpbGUsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhcHBLZXksIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxpY2Vuc2UgKHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlKVxuICAgICAgICBhd2FpdCByZWdpc3RlckxpY2Vuc2UoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7YXBwS2V5fSlgKTtcbiAgICAgICAgLy8gSWYgd2UncmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgbGV0J3MgYmUgbmljZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGV5IGhhdmUgb3B0aW9uc1xuICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEl0IGlzIG5vdyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgSmlyYSBjbHVzdGVyLlxuICBXZSBjYW4gaW5zdGFsbCBpdCBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2Ugb3IgeW91IGNhbiBpbnN0YWxsIGl0IG1hbnVhbGx5LlxuYCk7XG4gICAgICAgIC8vIEFzayB0aGVtIGlmIHRoZXkgcHJlZmVyIGF1dG9tYXRpb24gb3IgdGVkaW91cyBtYW51YWwgdGFza3NcbiAgICAgICAgY29uc3QgbWV0aG9kID0gYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBIb3cgZG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgYXBwP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiAnbXBhYycsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFya2V0cGxhY2UnLCB2YWx1ZTogJ21wYWMnIH0sXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFudWFsJywgdmFsdWU6ICdtYW51YWwnIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZXkgY2hvc2UgYXV0b21hdGlvbiwgbGV0J3MgYXV0b21hdGUhXG4gICAgICAgIGlmIChtZXRob2QgPT09ICdtcGFjJykge1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgYXBwIGtleVxuICAgICAgICAgICAgY29uc3QgYWRkb25LZXkgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSBrZXkgb2YgdGhlIGFwcCB0byBiZSBpbnN0YWxsZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBsaWNlbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBhcmUgc3RhcnRpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgzMDAsIDAsIHsgcmVtYWluaW5nOiAnNW0nIH0pO1xuICAgICAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhZGRvbktleSk7XG4gICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRUb1VQTShiYXNlVXJsLCBmaWxlLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhZGRvbktleSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHByb3ZpZGVkIGxpY2Vuc2VcbiAgICAgICAgICAgIGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhZGRvbktleSwgYXBwTGljZW5zZSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pYCk7XG4gICAgICAgICAgICAvLyBUaGV5IGNob3NlIHZpb2xlbmNlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSdWIgaXQgaW4gdGhlaXIgZmFjZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBZb3UgY2FuIG5vdyBpbnN0YWxsIHRoZSBhcHAgbWFudWFsbHkgaW50byB0aGUgY2x1c3Rlci5cbiAgUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGFnZSAobG9naW4gd2l0aCAnYWRtaW4nLydhZG1pbicpOlxuICAgIFxuICAke2Jhc2VVcmx9L3BsdWdpbnMvc2VydmxldC91cG0/c291cmNlPXNpZGVfbmF2X21hbmFnZV9hZGRvbnNcbmApO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGVtIGdyb3ZlbFxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWRNYW51YWxseSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgYXBwIG1hbnVhbGx5YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGFpbid0IGluc3RhbGxlZCwgd2UgYWluJ3QgZG9pbmcgbm90aGluJy4gU28gd2UgYmV0dGVyIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkTWFudWFsbHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCB0byBydW4gdGhlIHNlY29uZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuZXhwb3J0IGNvbnN0IGdldFJlaW5kZXhQcm9ncmVzcyA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgY29uc3QgY3VycmVudFRhc2sgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApID8gcmVzcG9uc2UuZGF0YSA6IHt9O1xuICAgIGNvbnN0IHsgcHJvZ3Jlc3NVcmwsIGN1cnJlbnRQcm9ncmVzcywgc3VjY2VzcywgZmluaXNoVGltZSB9ID0gY3VycmVudFRhc2s7XG4gICAgY29uc3QgaXNGaW5pc2hlZCA9IGN1cnJlbnRQcm9ncmVzcyA9PT0gMTAwIHx8IHN1Y2Nlc3MgfHwgZmluaXNoVGltZSAhPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtwcm9ncmVzc1VybCwgc3VjY2VzcywgaXNGaW5pc2hlZF07XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IGZraWxsIGZyb20gJ2ZraWxsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBwdXBwZXRlZXIgZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IGdldFJlaW5kZXhQcm9ncmVzcyB9IGZyb20gJy4vZ2V0UmVpbmRleFByb2dyZXNzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIEx1Y2VuZSByZS1pbmRleCBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtyZW1haW5pbmd9bScsXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuZXhwb3J0IGNvbnN0IHJlaW5kZXggPSBhc3luYyAoYmFzZVVybCwgb3V0cHV0RGlyLCBmb3JjZSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IHNjcmVlbnNob3QgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKSkge1xuICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyByZWluZGV4IHJlc3VsdHMnKTtcbiAgICAgICAgICAgIHJtU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBc2sgbmljZWx5IGlmIHdlIGNhbiBzdGFydFxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoYFByZXNzIGFueSBrZXkgdG8gc3RhcnQgdGhlIEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QuLi5cbiAgKG9yICdzJyB0byBza2lwIGlmIHRoZSB0ZXN0IGlzIGFscmVhZHkgcnVubmluZylcbmAsIGZvcmNlKTtcbiAgICAvLyBDaGVjayBpZiB0aGV5IGFncmVlZCB0byBzdGFydGluZyB0aGUgcmVpbmRleFxuICAgIGlmICh2YWx1ZSAhPT0gJ3MnKSB7XG4gICAgICAgIC8vIFRoZXkgZGlkISBTbyBsZXQncyBzdGFydCBpdCB1c2luZyB0aGUgSmlyYSBSRVNUIEFQSVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4P3R5cGU9Rk9SRUdST1VORGAsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgZ290IGEgcHJvcGVyIHJlc3BvbnNlXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZS5zdGF0dXMgIT09IDIwMikge1xuICAgICAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgICAgICAvLyBObyByZWluZGV4IGlzIG5vIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBMdWNlbnNlIEluZGV4IFRpbWluZyB0ZXN0LCBjb3VsZCBub3QgcGVyZm9ybSByZWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU3RhcnQgdGhlIGNsb2NrIVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzcyBiYXIgdG8gY291bnQgZm9yIDYwIG1pbnV0ZXNcbiAgICBwcm9ncmVzc0Jhci5zdGFydCgzNjAwLCAwLCB7IHJlbWFpbmluZzogNjAgfSk7XG4gICAgLy8gUGxhY2Vob2xkZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWluZGV4IGlzIGZpbmlzaGVkXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gdHJ5IHRvIGdldCBhbiB1cGRhdGUgZnJvbSBKaXJhXG4gICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgIC8vIEdldCBhbiB1cGRhdGUgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIGNvbnN0IFtwcm9ncmVzc1VybCwgc3VjY2VzcywgZmluaXNoZWRdID0gYXdhaXQgZ2V0UmVpbmRleFByb2dyZXNzKGJhc2VVcmwpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVpbmRleCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIHdpdGhpbiB0aGUgNjAgbWludXRlIHdpbmRvd1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPCBwcm9ncmVzc0Jhci5nZXRUb3RhbCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlLCBzbyBsZXQncyBqdXN0IGluY3JlbWVudCB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoNjAsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nOiA2MCAtIE1hdGguZmxvb3IoKCgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUpIC8gMTAwMCkgLyA2MCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgMSBtaW51dGUgdW50aWwgd2UgcmV0cnlcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMSAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgaW4gdGhlIDYwIG1pbnV0ZSB3aW5kb3csIG1hbnVhbCBhY3Rpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG9wZXJhdGluZyBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB0aGV5IG5lZWQgdG8gZG8gc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGlzIHRha2luZyBhIGxvbmcgdGltZSB0byBmaW5pc2guIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTFxuICAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybCB8fCAnL3NlY3VyZS9hZG1pbi9qaXJhL0luZGV4UHJvZ3Jlc3MuanNwYSd9XG5cbiAgYW5kIG1hbnVhbGx5IGNvbmZpcm0gdGhhdCB0aGUgcmUtaW5kZXggaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGUgdXNlciB0byBjb25maXJtIHRoZSByZWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGF3YWl0IGNvbmZpcm0oeyBtZXNzYWdlOiAnSGFzIHRoZSByZWluZGV4IGNvbXBsZXRlZCBzdWNjZXNmdWxseT8nIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2UgaGF2ZSBubyBjaG9pY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZS1pbmRleCBoYXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gNjAgbWludXRlcywgdGVzdCBoYXMgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgY29tcGxldGVseSB3cm9uZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGZpbmlzaGVkIHVuc3VjY2VzZnVsbHkuIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTCBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuYCk7XG4gICAgICAgICAgICAvLyBOb3cgdGhyb3cgYSBoaXNzeSBmaXQgYW55d2F5XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0x1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb29wIHZhcmlhYmxlXG4gICAgICAgIGlzRmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsYXRlc3QgdXBkYXRlIG9uIHRoZSByZWluZGV4IHByb2dyZXNzXG4gICAgY29uc3QgW3Byb2dyZXNzVXJsXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgVVJMXG4gICAgaWYgKCFwcm9ncmVzc1VybCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvZ3Jlc3MgVVJMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gUmV0cnkgY291bnRlclxuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNjcmVlbnNob3Qgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgbGV0IHNjcmVlbnNob3RDcmVhdGVkID0gZmFsc2U7XG4gICAgLy8gTG9vcCB1bnRpbCB3ZSd2ZSBtYWRlIGEgc2NyZWVuIHNob3Qgb3IgdHJpZWQgaXQgNSB0aW1lcyAoaW5jbC4gb25lIHRpbWUgbWFudWFsbHkpXG4gICAgd2hpbGUgKCFzY3JlZW5zaG90Q3JlYXRlZCAmJiByZXRyeUNvdW50IDwgNSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJldHJ5IGNvdW50IGlzIDQsIHRoaXMgbWVhbnMgdGhpcyBpcyBvdXIgbGFzdCByb2Rlb1xuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBtYW51YWwsIHdoaWNoIHdlIGNhbid0IGRvIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIG91ciBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSBhIHNjcmVlbiBzaG90IG9mIHRoZSBMdWNlbmUgUmVpbmRleCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFdlJ3ZlIHRyaWVkIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2NyZWVuc2hvdCwgYnV0IHRoZSBwcm9jZXNzIHNlZW1zIHRvIGJlIHN0dWNrXG5cbiAgV2Ugd2lsbCBub3cgb3BlbiBhIGJyb3dzZXIgd2luZG93IGZvciB5b3UgdG8gZm9sbG93IHRoZSBhdXRvbWF0ZWQgc3RlcHMgYW5kIGludGVydmVuZVxuICB3aGVyZSBwb3NzaWJsZSAoZm9yIGluc3RhbmNlLCBieSBwcmVzc2luZyBhIGJ1dHRvbiBvciByZWxvYWRpbmcgYSBzY3JlZW4pXG5gKTtcbiAgICAgICAgICAgICAgICAvLyBOb3cgYXNrIHRoZW0gbmljZWx5IGlmIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gb3BlbiB0aGUgYnJvd3NlciB3aW5kb3cuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBicm93c2VyIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHsgaGVhZGxlc3M6ICghZm9yY2UgJiYgcmV0cnlDb3VudCA8IDQpIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgYnJvd3Nlci5uZXdQYWdlKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5zZXRWaWV3cG9ydCh7IHdpZHRoOiAxMDgwLCBoZWlnaHQ6IDEwMjQgfSk7XG4gICAgICAgICAgICAgICAgLy8gT3BlbiB0aGUgcmVpbmRleCBwcm9ncmVzcyBwYWdlXG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5nb3RvKGAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybH1gKTtcbiAgICAgICAgICAgICAgICAvLyBMb2cgaW5cbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXVzZXJuYW1lJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgLy8gV2Vic3Vkb1xuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tYXV0aGVudGljYXRlUGFzc3dvcmQnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tc3VibWl0JykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAvLyBYU1JGIHRva2VuIGV4cGlyYXRpb24gc25hZnVcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNhdGxfdG9rZW5fcmV0cnlfYnV0dG9uJykuY2xpY2soKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgb24gdGhlIHJlaW5kZXggcGFnZSBhbmQgdGhhdCBpdCBpcyBsb2FkZWRcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLndhaXRGb3JTZWxlY3RvcignI2Fja25vd2xlZGdlX3N1Ym1pdCcpO1xuICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNjcmVlbiBzaG90XG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogam9pbihvdXRwdXREaXIsICdsdWNlbmUtcmVpbmRleC5wbmcnKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgY2FwdHVyZWQgdGhlIHNjcmVlbiBzaG90IGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgc2NyZWVuc2hvdENyZWF0ZWQgPSBleGlzdHNTeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGJyb3dzZXIgd2luZG93XG4gICAgICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIC8vIE5vIEkgbWVhbiwgcmVhbGx5IGNsb3NlIGl0XG4gICAgICAgICAgICAgICAgYXdhaXQgZmtpbGwoJ0Nocm9tZScpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZraWxsKCdjaHJvbWUnKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnQ2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnY2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHNjcmVlbnNob3QsIHRocm93IGEgaGlzc3kgZml0IVxuICAgIGlmICghc2NyZWVuc2hvdENyZWF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FwdHVyZSB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBzaG93IGEgaGFwcHkgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKGBcbiAg4pyUIEx1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZm9yZWdyb3VuZCBpbmRleGluZyBvZiBKaXJhIGhhcyBjb21wbGV0ZWRgKTtcbn07XG4iLCJpbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4vaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcmVpbmRleCB9IGZyb20gJy4vcmVpbmRleCc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBydW5MdWNlbmVUaW1pbmdUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmhlYWRlcihvcHRpb25zLnByb2R1Y3QsIHN0YWdlKSk7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcmVpbmRleGApO1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocnVuT3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSAob3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCAmJiBvcHRpb25zLmF3c19zZWNyZXRfYWNjZXNzX2tleSlcbiAgICAgICAgPyBbb3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCwgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXldXG4gICAgICAgIDogYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHByb3Zpc2lvbmVkIGNsdXN0ZXIgYXZhaWxhYmxlXG4gICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgcHJvdmlzaW9uIGl0IGFzIHBhcnQgb2YgdGhlIHRlc3QgcnVuXG4gICAgaWYgKCFvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3IgcGVyZm9ybWFuY2UgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICAgICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmxpY2Vuc2UsIDEpO1xuICAgICAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsIHx8IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgYXdhaXQgaW5zdGFsbEFwcChiYXNlVXJsLCBvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5hcHBMaWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRlc3RcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFRlc3QpO1xuICAgIC8vIE9rLCB3ZSdyZSByZWFkeSB0byBydW4gdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdFxuICAgIGF3YWl0IHJlaW5kZXgoYmFzZVVybCwgcnVuT3V0cHV0RGlyLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0RHVyYXRpb24gPSAoZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuICc0NW0nO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgSG93IGxvbmcgc2hvdWxkIHRoZSB0ZXN0IHJ1bj9gLFxuICAgICAgICBkZWZhdWx0OiAnNDVtJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVhZExpbmVzSW5GaWxlID0gKHBhdGgsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgbGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlYWRMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzID0gKGJhc2VEaXIpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgIGxldCByZXN1bHRzRGlyID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJykpID8gYmFzZURpciA6IG51bGw7XG4gICAgaWYgKCFyZXN1bHRzRGlyKSB7XG4gICAgICAgIC8vIExldCdzIGdvIGZpbmQgb3VyIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSB0ZXN0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHRlc3QgcmVzdWx0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSB7XG4gICAgICAgICdwYXRoJzogcmVzdWx0c0RpcixcbiAgICAgICAgJ1N1bW1hcnkgcnVuIHN0YXR1cyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnRmluaXNoZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICdDb21wbGlhbnQnOiB1bmRlZmluZWQsXG4gICAgICAgICdTdWNjZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJzogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIHJlc3VsdCBzdW1tYXJ5IGFuZCBnZXQgdGhvc2UgZGFtbiB0ZXN0IHJlc3VsdHNcbiAgICByZWFkTGluZXNJbkZpbGUoam9pbihyZXN1bHRzRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpLCAobGluZSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBsaW5lLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1toZWFkZXJdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlc3VsdHNEaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsIHByb2R1Y3QpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSByZWFkZGlyU3luYyhwYXRoKS5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIG1ha2Ugc3VyZSB0byBhc2sgbmljZWx5IGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXJlIGFyZSBzdGlsbCBwcmV2aW91cyByZXN1bHRzIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZXJlIGFyZSBzdGlsbCByZXN1bHRzIGZyb20gcHJldmlvdXMgdGVzdCBydW5zIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTpcbiAgJHtwYXRofVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBjb25maXJtYXRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSXMgaXQgT0sgaWYgd2UgcmVtb3ZlIGFsbCBwcmV2aW91cyByZXN1bHRzPycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZW0sIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGVzdCBjYW4gb25seSBiZSBleGVjdXRlZCBpZiBhbGwgcHJldmlvdXMgcmVzdWx0cyBoYXZlIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICAgICAgICAgICAgcm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIFJldHVybiB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICByZXR1cm4gcGF0aDtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlcGxhY2VMaW5lc0luRmlsZSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgd2l0aEFwcFNwZWNpZmljQWN0aW9ucywgZm9yY2UpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0VVJJID0gbmV3IFVSTChiYXNlVXJsKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHByb2R1Y3RVUkkucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cHMnKSA/ICdodHRwcycgOiAnaHR0cCc7XG4gICAgY29uc3QgcG9ydCA9IHByb3RvY29sID09PSAnaHR0cCcgPyAnODAnIDogJzQ0Myc7XG4gICAgY29uc29sZS5sb2coYFxuICBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBpbiB0aGUgJHtwcm9kdWN0fS55bWwgZmlsZTpcblxuICBhcHBsaWNhdGlvbl9ob3N0bmFtZSA9ICR7cHJvZHVjdFVSSS5ob3N0fVxuICBhcHBsaWNhdGlvbl9wcm90b2NvbCA9ICR7cHJvdG9jb2x9XG4gIGFwcGxpY2F0aW9uX3BvcnQgPSAke3BvcnR9XG4gIGFwcGxpY2F0aW9uX3Bvc3RmaXggPSAke3Byb2R1Y3RVUkkucGF0aG5hbWV9XG4gIHRlc3RfZHVyYXRpb24gPSAke2R1cmF0aW9ufVxuICBzdGFuZGFsb25lX2V4dGVuc2lvbiA9ICR7d2l0aEFwcFNwZWNpZmljQWN0aW9ucyA/ICcxJyA6ICcwJ31cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7am9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKX1cbmApO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgZm9yY2UpO1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKGN3ZCwgJ2FwcCcsIGAke3Byb2R1Y3R9LnltbGApLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCcgICAgYXBwbGljYXRpb25faG9zdG5hbWU6JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOiAke3Byb2R1Y3RVUkkuaG9zdH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX3Byb3RvY29sOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDogJHtwcm90b2NvbH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIGFwcGxpY2F0aW9uX3BvcnQ6YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX3BvcnQ6ICR7cG9ydH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHN0YW5kYWxvbmVfZXh0ZW5zaW9uOmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjogJHt3aXRoQXBwU3BlY2lmaWNBY3Rpb25zID8gJzEnIDogJzAnfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAgICAgdGVzdF9kdXJhdGlvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgdGVzdF9kdXJhdGlvbjogJHtkdXJhdGlvbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcbuKclCBDb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJHtwcm9kdWN0fS55bWxgKTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZW1wdHlMaW5lIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgaW5zdGFsbCwgcnVuVGVzdCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRDbHVzdGVyVVJMIH0gZnJvbSAnLi9nZXRDbHVzdGVyVVJMJztcbmltcG9ydCB7IGdldER1cmF0aW9uIH0gZnJvbSAnLi9nZXREdXJhdGlvbic7XG5pbXBvcnQgeyBnZXRSZXN1bHRzIH0gZnJvbSAnLi9nZXRSZXN1bHRzJztcbmltcG9ydCB7IGdldFJlc3VsdHNEaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlc3VsdHNEaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBydW5QZXJmb3JtYW5jZVRlc3QgPSBhc3luYyAoc3RhZ2UsIG9wdGlvbnMsIG1lc3NhZ2VzKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFQgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKHN0YWdlKX1gKTtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBydW5cbiAgICBpZiAoZXhpc3RzU3luYyhydW5PdXRwdXREaXIpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMsIGNoZWNrIGlmIHRoZXkgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGdldFJlc3VsdHMocnVuT3V0cHV0RGlyKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gPT09ICdPSycpIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gb3B0aW9ucy5mb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHN1Y2Nlc3NmdWwgdGVzdCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gKG9wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQgJiYgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXkpXG4gICAgICAgID8gW29wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQsIG9wdGlvbnMuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XVxuICAgICAgICA6IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwcm92aXNpb25lZCBjbHVzdGVyIGF2YWlsYWJsZVxuICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIHByb3Zpc2lvbiBpdCBhcyBwYXJ0IG9mIHRoZSB0ZXN0IHJ1blxuICAgIGlmICghb3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZXMucmVhZHlGb3JQcm92aXNpb25pbmcpO1xuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBwcmVwYXJlIHRoZSBBV1MgZW52aXJvbm1lbnQgZm9yIHBlcmZvcm1hbmNlIGJlbmNobWFyayB0ZXN0aW5nLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAvLyBXcml0ZSBUZXJyYWZvcm0gdmFyaWFibGVzIHRvIGRpc2sgKG9uZS1ub2RlIGNsdXN0ZXIpXG4gICAgICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCAxKTtcbiAgICAgICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgICAgICBhd2FpdCBpbnN0YWxsKGN3ZCk7XG4gICAgfVxuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFRlc3QpO1xuICAgIC8vIEdldCB0aGUgbG9hZCBiYWxhbmNlciBVUkwgZm9yIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybCB8fCBhd2FpdCBnZXRDbHVzdGVyVVJMKGN3ZCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBBbGxvdyB1c2VycyB0byBzZXQgYSBkaWZmZXJlbnQgdGVzdCBkdXJhdGlvbiAoZm9yIHZhbGlkYXRpb24gcHVycG9zZXMpXG4gICAgY29uc3QgZHVyYXRpb24gPSBhd2FpdCBnZXREdXJhdGlvbihvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSB0ZXN0IGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgIGF3YWl0IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMucHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlc3VsdHNCYXNlRGlyID0gYXdhaXQgZ2V0UmVzdWx0c0RpcmVjdG9yeShjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBkYW1uIHRlc3RcbiAgICBhd2FpdCBydW5UZXN0KGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKHJlc3VsdHNCYXNlRGlyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVzdCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKHJlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddICE9PSAnT0snKSB7XG4gICAgICAgIC8vIElmIG5vdCwgbGV0IHRoZSBwZW9wbGUga25vdyBhbmQgdGVybWluYXRlXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmZhaWx1cmUoc3RhZ2UsIGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zb2xlLmxvZyhgICBDb3B5aW5nIHRlc3QgcmVzdWx0cyB0byAke3J1bk91dHB1dERpcn1gKTtcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldE5vZGVOdW1iZXJGb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gMjtcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuIDQ7XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsLCBydW5UZXN0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgZ2V0RHVyYXRpb24gfSBmcm9tICcuL2dldER1cmF0aW9uJztcbmltcG9ydCB7IGdldE5vZGVOdW1iZXJGb3JTdGFnZSB9IGZyb20gJy4vZ2V0Tm9kZU51bWJlckZvclN0YWdlJztcbmltcG9ydCB7IGdldFJlc3VsdHMgfSBmcm9tICcuL2dldFJlc3VsdHMnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0c0RpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVzdWx0c0RpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vZ2V0UnVuRm9yU3RhZ2UnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4vaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcnVuU2NhbGFiaWxpdHlUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIEdldCB0aGUgY29ycmVjdCBhbW91bnQgb2Ygbm9kZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhZ2VcbiAgICBjb25zdCBub2RlcyA9IGdldE5vZGVOdW1iZXJGb3JTdGFnZShzdGFnZSk7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBzY2FsYWJpbGl0eSAke3N0YWdlfSBjbHVzdGVyIHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMucmVhZHlGb3JQcm92aXNpb25pbmcpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3Igc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgbm9kZXMpO1xuICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICBhd2FpdCBpbnN0YWxsKGN3ZCk7XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN0YXJ0VGVzdCk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgICBhd2FpdCBpbnN0YWxsQXBwKGJhc2VVcmwsIG9wdGlvbnMuYXBwS2V5LCBvcHRpb25zLmFwcExpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNldCBhIGRpZmZlcmVudCB0ZXN0IGR1cmF0aW9uIChmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcylcbiAgICBjb25zdCBkdXJhdGlvbiA9IGF3YWl0IGdldER1cmF0aW9uKG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIHRlc3QgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgYXdhaXQgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXN1bHRzQmFzZURpciA9IGF3YWl0IGdldFJlc3VsdHNEaXJlY3RvcnkoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgZGFtbiB0ZXN0XG4gICAgYXdhaXQgcnVuVGVzdChjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0gZ2V0UmVzdWx0cyhyZXN1bHRzQmFzZURpcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGlmIChyZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSAhPT0gJ09LJykge1xuICAgICAgICAvLyBJZiBub3QsIGxldCB0aGUgcGVvcGxlIGtub3cgYW5kIHRlcm1pbmF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5mYWlsdXJlKHN0YWdlLCBjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zb2xlLmxvZyhgICBDb3B5aW5nIHRlc3QgcmVzdWx0cyB0byAke3J1bk91dHB1dERpcn1gKTtcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiaW1wb3J0IHsgZW1wdHlMaW5lLCBUZWFyZG93biB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHRlcm1pbmF0ZSB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgdGVhcmRvd25DbHVzdGVyID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IG5pY2UgbGl0dGxlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFRlYXJkb3duLmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIGlmIHRoZXkgYXJlIHJlYWR5IHRvIHNheSBnb29kYnllIHRvIHRoZWlyIGNsdXN0ZXJcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFRlcm1pbmF0ZSBpdCFcbiAgICBhd2FpdCB0ZXJtaW5hdGUoZGlyZWN0b3J5LCBvcHRpb25zLmVudmlyb25tZW50KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgdG8gcXVpdCB0aGUgcHJvZ3JhbVxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGV4aXQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB2ZXJzaW9ucyBmcm9tICcuLi8uLi9hc3NldHMvdmVyc2lvbnMuanNvbic7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzID0gei5lbnVtKFtcbiAgICAncG9zdGdyZXNxbCcsXG4gICAgJ215c3FsJyxcbiAgICAnbXNzcWwnXG5dKTtcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zID0gei5lbnVtKFtcbiAgICAnRGV2ZWxvcGVyJyxcbiAgICAnRXhwcmVzcycsXG4gICAgJ1N0YW5kYXJkJyxcbiAgICAnRW50ZXJwcmlzZScsXG4gICAgJ0VudGVycHJpc2VDb3JlJ1xuXSk7XG5leHBvcnQgY29uc3QgRGF0YWJhc2VPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSksXG4gICAgZGF0YWJhc2U6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICB2ZXJib3NlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKClcbn0pO1xuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCg1NDMyKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpLmRlZmF1bHQoJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNeVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDMzMDYpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm15c3FsLmpkYmMuRHJpdmVyJykuZGVmYXVsdCgnY29tLm15c3FsLmpkYmMuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE1TU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZWRpdGlvbjogU3VwcG9ydGVkTVNTUUxFZGl0aW9ucy5kZWZhdWx0KCdEZXZlbG9wZXInKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgxNDMzKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnc2EnKS5kZWZhdWx0KCdzYScpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ0RhdGFDZW50ZXJEWCEnKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJykuZGVmYXVsdCgnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKVxufSk7XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyB9IGZyb20gJy4vRGF0YWJhc2UnO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyA9IHouZW51bShbXG4gICAgJ2ppcmEnLFxuICAgICdjb25mbHVlbmNlJyxcbiAgICAnYml0YnVja2V0JyxcbiAgICAnYmFtYm9vJ1xuXSk7XG5leHBvcnQgY29uc3QgQXBwbGljYXRpb25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZGF0YWJhc2U6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5kZWZhdWx0KCdwb3N0Z3Jlc3FsJyksXG4gICAgZGF0YWJhc2VUYWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpLmRlZmF1bHQoJzgwJyksXG4gICAgY29udGV4dFBhdGg6IHouc3RyaW5nKCksXG4gICAgeG1zOiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgeG14OiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgd2F0Y2g6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGV4dDogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBpbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHouc3RyaW5nKCksXG4gICAgYWN0aXZhdGVQcm9maWxlczogei5zdHJpbmcoKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRlYnVnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgY29udGV4dFBhdGg6IHRydWUsXG4gICAgZXh0OiB0cnVlLFxuICAgIGluc3RhbGw6IHRydWUsXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB0cnVlLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHRydWUsXG4gICAgY3dkOiB0cnVlXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi9BcHBsaWNhdGlvbic7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2VUZXN0VHlwZXMgPSB6LmVudW0oW1xuICAgICdiYXNlbGluZScsXG4gICAgJ3JlZ3Jlc3Npb24nXG5dKTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RUeXBlcyA9IHouZW51bShbXG4gICAgJ29uZS1ub2RlJyxcbiAgICAndHdvLW5vZGUnLFxuICAgICdmb3VyLW5vZGUnXG5dKTtcbmV4cG9ydCBjb25zdCBUZXN0UmVzdWx0cyA9IHouZW51bShbXG4gICAgJ3BhdGgnLFxuICAgICdTdW1tYXJ5IHJ1biBzdGF0dXMnLFxuICAgICdBcHBsaWNhdGlvbiBub2RlcyBjb3VudCcsXG4gICAgJ0ZpbmlzaGVkJyxcbiAgICAnQ29tcGxpYW50JyxcbiAgICAnU3VjY2VzcycsXG4gICAgJ0hhcyBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbl0pO1xuZXhwb3J0IGNvbnN0IFJlcG9ydFR5cGVzID0gei5lbnVtKFtcbiAgICAncGVyZm9ybWFuY2UnLFxuICAgICdzY2FsYWJpbGl0eSdcbl0pO1xuZXhwb3J0IGNvbnN0IEFQVFJlcG9ydEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogUmVwb3J0VHlwZXMsXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUVGVzdE1lc3NhZ2VzID0gei5vYmplY3Qoe1xuICAgIGhlYWRlcjogei5mdW5jdGlvbigpLmFyZ3MoU3VwcG9ydGVkQXBwbGljYXRpb25zLCBQZXJmb3JtYW5jZVRlc3RUeXBlcy5vcihTY2FsYWJpbGl0eVRlc3RUeXBlcykpLnJldHVybnMoei5zdHJpbmcoKSksXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IHouc3RyaW5nKCksXG4gICAgc3RhcnRUZXN0OiB6LnN0cmluZygpLFxuICAgIHN1Y2Nlc3M6IHouc3RyaW5nKCksXG4gICAgZmFpbHVyZTogei5mdW5jdGlvbigpLmFyZ3MoUGVyZm9ybWFuY2VUZXN0VHlwZXMub3IoU2NhbGFiaWxpdHlUZXN0VHlwZXMpLCB6LnN0cmluZygpLCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIHouc3RyaW5nKCksIHouc3RyaW5nKCksIHoucmVjb3JkKFRlc3RSZXN1bHRzLCB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpKSlcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFByb3Zpc2lvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBlbnZpcm9ubWVudDogdHJ1ZSxcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgb3V0cHV0RGlyOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBiYXNlVXJsOiB6LnN0cmluZygpLFxuICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiB6LnN0cmluZygpLFxuICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYmFzZVVybDogdHJ1ZSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bkFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogei5zdHJpbmcoKSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVEFyZ3MgPSB6LmludGVyc2VjdGlvbihBUFRQcm92aXNpb25PcHRpb25zLCBBUFRQZXJmb3JtYW5jZVRlc3RBcmdzLCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzKTtcbiIsImltcG9ydCB7IFBlcmZvcm1hbmNlVGVzdFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvRENBUFQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4vaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0JztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4vaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4vaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuTHVjZW5lVGltaW5nVGVzdCc7XG5pbXBvcnQgeyBydW5QZXJmb3JtYW5jZVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBMdWNlbmVUaW1pbmdUZXN0LCBSdW4xLCBSdW4yIH0gZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2UgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IG91dHB1dERpciA9IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApO1xuICAgIC8vIFByb3Zpc2lvbiB0aGUgY2x1c3RlclxuICAgIGNvbnN0IHsgY3dkLCBlbnZpcm9ubWVudCwgYmFzZVVybCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSwgbGljZW5zZSB9ID0gYXdhaXQgcHJvdmlzaW9uQ2x1c3Rlcih7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgdHJ1ZSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSB0ZXN0IChydW4gMSlcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLmJhc2VsaW5lLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFJ1bjEpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgbHVjZW5lIHRpbWluZyB0ZXN0IChwYXJ0IG9mIHJ1biAyKVxuICAgIGF3YWl0IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgTHVjZW5lVGltaW5nVGVzdCk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QgKHJ1biAyKVxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbiwge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBSdW4yKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0XG4gICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCh7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuL2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuL2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyB9IGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKTtcbiAgICAvLyBQcm92aXNpb24gdGhlIGNsdXN0ZXJcbiAgICBjb25zdCB7IGN3ZCwgZW52aXJvbm1lbnQsIGxpY2Vuc2UgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIGZhbHNlKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ29uZS1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIHR3by1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ3R3by1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHNjYWxhYmlsaXR5IHJlcG9ydFxuICAgIGF3YWl0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQoe1xuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBhc3luY0V4aXRIb29rLCBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5leHBvcnQgY29uc3QgQWN0aW9uSGFuZGxlciA9IGFzeW5jIChwcm9ncmFtLCB7IGFjdGlvbiwgZXJyb3JIYW5kbGVyIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBvcHMgPSBvcHRpb25zIHx8IHByb2dyYW0ub3B0cygpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBhc3luY0V4aXRIb29rKGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGVycm9ySGFuZGxlcihvcHMpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSByZWplY3RpbmcgdGhlIHByb21pc2UgdG8gYXZvaWQgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIFwiQ2FsbGluZyBwcm9jZXNzLmV4aXRcIiBsb2cgbWVzc2FnZSBmcm9tIGV4aXQtaG9va1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyO1xuICAgICAgICAgICAgICAgIHJlamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgd2FpdDogNjAgKiAxICogMTAwMFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uKG9wcykuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLmlzc3Vlcy5mb3JFYWNoKGlzc3VlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBVbmFibGUgdG8gcGFyc2Ugb3B0aW9uICR7aXNzdWUucGF0aC5qb2luKCcsJyl9OiAke2lzc3VlLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncmFjZWZ1bEV4aXQoMSk7XG4gICAgICAgIH0pO1xuICAgIH0pLmNhdGNoKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gYXNzdW1lIGEgY2xlYW4gZXhpdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgQ29tbWFuZCBhcyBDb21tYW5kZXIsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dldFByb2R1Y3QnO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuTHVjZW5lVGltaW5nVGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1bkx1Y2VuZVRpbWluZ1Rlc3QnO1xuaW1wb3J0IHsgcnVuUGVyZm9ybWFuY2VUZXN0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0JztcbmltcG9ydCB7IHJ1blNjYWxhYmlsaXR5VGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdCc7XG5pbXBvcnQgeyB0ZWFyZG93bkNsdXN0ZXIgfSBmcm9tICcuLi9hcHQvaGVscGVycy90ZWFyZG93bkNsdXN0ZXInO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBnZW5lcmljLCBpbml0LCBMdWNlbmVUaW1pbmdUZXN0LCBSdW4xLCBSdW4yLCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyB9IGZyb20gJy4uL2FwdC9tZXNzYWdlcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZSB9IGZyb20gJy4uL2FwdC9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eSB9IGZyb20gJy4uL2FwdC9zY2FsYWJpbGl0eSc7XG5pbXBvcnQgeyBBY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vaGVscGVycy9BY3Rpb25IYW5kbGVyJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuLi90eXBlcy9BcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZVRlc3RUeXBlcywgUmVwb3J0VHlwZXMgfSBmcm9tICcuLi90eXBlcy9EQ0FQVCc7XG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmRlcigpO1xuY29uc3QgRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGNvbnNvbGUgYW5kIHNob3cgYSB3ZWxjb21lIG1lc3NhZ2VcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xceDFCYycpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZW5lcmljLmhlYWRlcik7XG4gICAgICAgIC8vIEdldCB0aGUgcHJvZHVjdCBmcm9tIHRoZSBhcmdzIG9yIGFzayBmb3IgaXQgbmljZWx5XG4gICAgICAgIGNvbnN0IHByb2R1Y3QgPSBvcHRpb25zLnByb2R1Y3QgfHwgYXdhaXQgZ2V0UHJvZHVjdCgpO1xuICAgICAgICAvLyBTaG93IHRoZSBpbml0IG1lc3NhZ2VcbiAgICAgICAgY29uc29sZS5sb2coaW5pdC5oZWFkZXIocHJvZHVjdCkpO1xuICAgICAgICAvLyBBc2sgZm9yIHRoZSB1c2VyIHRvIGNvbmZpcm0gdGhleSBhcmUgcmVhZHlcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gc3RhcnQgd2l0aCB0aGUgZmlyc3Qgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmdcbiAgICAgICAgYXdhaXQgUGVyZm9ybWFuY2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBzY2FsYWJpbGl0eSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFNjYWxhYmlsaXR5KHtcbiAgICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJlcG9ydENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3BlcmZvcm1hbmNlJykge1xuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUGVyZm9ybWFuY2VUZXN0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBTdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZ1xuICAgICAgICBhd2FpdCBQZXJmb3JtYW5jZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjFDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMuYmFzZWxpbmUsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XVxuICAgICAgICB9LCBSdW4xKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuMkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5yZWdyZXNzaW9uLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF1cbiAgICAgICAgfSwgUnVuMik7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJlaW5kZXhDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XVxuICAgICAgICB9LCBMdWNlbmVUaW1pbmdUZXN0KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgU2NhbGFiaWxpdHlUZXN0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBTdGFydCB0aGUgc2NhbGFiaWxpdHkgdGVzdGluZ1xuICAgICAgICBhd2FpdCBTY2FsYWJpbGl0eSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjNDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnb25lLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuNENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCd0d28tbm9kZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW41Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBQcm92aXNpb25Db21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFRlYXJkb3duQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbnByb2dyYW1cbiAgICAubmFtZSgnZGNkeCBhcHQnKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IodHJ1ZSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2RlZmF1bHQnLCB7IGlzRGVmYXVsdDogdHJ1ZSwgaGlkZGVuOiB0cnVlIH0pXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBEZWZhdWx0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3BlcmZvcm1hbmNlJylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUGVyZm9ybWFuY2VUZXN0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3NjYWxhYmlsaXR5JylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgc2NhbGFiaWxpdHkgdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFNjYWxhYmlsaXR5VGVzdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdyZWluZGV4JylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUmVpbmRleENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdyZXBvcnQnKVxuICAgIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgYSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyByZXBvcnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10eXBlIDx0eXBlPicsICdUaGUgdHlwZSBvZiByZXBvcnQgdG8gZ2VuZXJhdGUnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoUmVwb3J0VHlwZXMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSZXBvcnRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMScpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgUGVyZm9ybWFuY2UgYmFzZWxpbmUgdGVzdCAocnVuIDEpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjFDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMicpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IChydW4gMiknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuMkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4zJylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBTY2FsYWJpbGl0eSB0ZXN0IG9uIGEgb25lLW5vZGUgREMgY2x1c3RlciAocnVuIDMpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjNDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuNCcpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgU2NhbGFiaWxpdHkgdGVzdCBvbiBhIHR3by1ub2RlIERDIGNsdXN0ZXIgKHJ1biA0KScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW40Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjUnKVxuICAgIC5kZXNjcmlwdGlvbignU3RhcnQgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIFNjYWxhYmlsaXR5IHRlc3Qgb24gYSBmb3VyLW5vZGUgREMgY2x1c3RlciAocnVuIDUpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjVDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ1Byb3Zpc2lvbiB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgY2x1c3RlciBvbiBBV1MnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFByb3Zpc2lvbkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCd0ZWFyZG93bicpXG4gICAgLmRlc2NyaXB0aW9uKCdUZXJtaW5hdGUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGNsdXN0ZXIgb24gQVdTJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBUZWFyZG93bkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndikuY2F0Y2goKCkgPT4gZ3JhY2VmdWxFeGl0KDEpKTtcbnByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgUmVjZWl2ZWQgdGVybSBzaWduYWwsIHRyeWluZyB0byBzdG9wIGdyYWNlZnVsbHkg8J+SqmApO1xuICAgIGdyYWNlZnVsRXhpdCgpO1xufSk7XG4iXSwibmFtZXMiOlsiY3dkIiwicHdkIiwicHJvZ3Jlc3NCYXIiLCJDb21tYW5k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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCTSxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDL0MsSUFBSSxZQUFZO0FBQ2hCLElBQUksT0FBTztBQUNYLElBQUksT0FBTztBQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLElBQUksV0FBVztBQUNmLElBQUksU0FBUztBQUNiLElBQUksVUFBVTtBQUNkLElBQUksWUFBWTtBQUNoQixJQUFJLGdCQUFnQjtBQUNwQixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxJQUFJLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEYsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQztBQUM4QixlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ3hELElBQUksSUFBSSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUMxSixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDekgsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDaEcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQ3hHLENBQUMsRUFBRTtBQUN5QixlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ25ELElBQUksSUFBSSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNoSixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDcEgsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDaEcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQ3hHLENBQUMsRUFBRTtBQUN5QixlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ25ELElBQUksSUFBSSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNoSixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDcEgsSUFBSSxPQUFPLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN4RCxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNoRyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNwRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssOENBQThDLENBQUMsQ0FBQyxPQUFPLENBQUMsOENBQThDLENBQUM7QUFDdEosQ0FBQzs7QUMzQ00sTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVDLElBQUksTUFBTTtBQUNWLElBQUksWUFBWTtBQUNoQixJQUFJLFdBQVc7QUFDZixJQUFJLFFBQVE7QUFDWixDQUFDLENBQUMsQ0FBQztBQUMrQixDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLElBQUksSUFBSSxFQUFFLHFCQUFxQjtBQUMvQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNyQyxJQUFJLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQzVELElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQzdDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDakYsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNyQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3hCLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDL0IsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ2hDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3BDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxXQUFXLEVBQUUsSUFBSTtBQUNyQixJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsSUFBSSxPQUFPLEVBQUUsSUFBSTtBQUNqQixJQUFJLGVBQWUsRUFBRSxJQUFJO0FBQ3pCLElBQUksZ0JBQWdCLEVBQUUsSUFBSTtBQUMxQixJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsQ0FBQzs7QUMvQk0sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNDLElBQUksVUFBVTtBQUNkLElBQUksWUFBWTtBQUNoQixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzQyxJQUFJLFVBQVU7QUFDZCxJQUFJLFVBQVU7QUFDZCxJQUFJLFdBQVc7QUFDZixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEMsSUFBSSxNQUFNO0FBQ1YsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx5QkFBeUI7QUFDN0IsSUFBSSxVQUFVO0FBQ2QsSUFBSSxXQUFXO0FBQ2YsSUFBSSxTQUFTO0FBQ2IsSUFBSSwwQkFBMEI7QUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDSSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xDLElBQUksYUFBYTtBQUNqQixJQUFJLGFBQWE7QUFDakIsQ0FBQyxDQUFDLENBQUM7QUFDMEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0QyxJQUFJLElBQUksRUFBRSxXQUFXO0FBQ3JCLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNYLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsQ0FBQyxFQUFFO0FBQzRCLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkgsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3BDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3TCxDQUFDLEVBQUU7QUFDSSxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDNUMsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3RCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxXQUFXLEVBQUUsSUFBSTtBQUNyQixJQUFJLE1BQU0sRUFBRSxJQUFJO0FBQ2hCLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxJQUFJLE9BQU8sRUFBRSxxQkFBcUI7QUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzFCLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLFNBQVMsRUFBRSxJQUFJO0FBQ25CLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ3NDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbEQsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkIsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ2pDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNyQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNYLElBQUksT0FBTyxFQUFFLElBQUk7QUFDakIsSUFBSSxpQkFBaUIsRUFBRSxJQUFJO0FBQzNCLElBQUkscUJBQXFCLEVBQUUsSUFBSTtBQUMvQixJQUFJLE1BQU0sRUFBRSxJQUFJO0FBQ2hCLElBQUksVUFBVSxFQUFFLElBQUk7QUFDcEIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsRUFBRTtBQUN3QyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BELElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLEVBQUU7QUFDSSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0MsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxTQUFTLEVBQUUsSUFBSTtBQUNuQixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ3NDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbEQsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkIsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzFCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLEVBQUU7QUFDd0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNwRCxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLEtBQUssRUFBRSxJQUFJO0FBQ2YsQ0FBQyxFQUFFO0FBQzRCLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLEVBQUU7QUFDK0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMzQyxJQUFJLE9BQU8sRUFBRSxxQkFBcUI7QUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNqQyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLGlCQUFpQixFQUFFLElBQUk7QUFDM0IsSUFBSSxxQkFBcUIsRUFBRSxJQUFJO0FBQy9CLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLEVBQUU7QUFDb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0I7O0FDM0lsRyxNQUFNLFdBQVcsR0FBRyxPQUFPLE9BQU8sS0FBSztBQUM5QztBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0U7QUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BILFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQ3hCLFFBQVEsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQ3hDLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRjtBQUNBLElBQUksTUFBTSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQ25FLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsR0FBRztBQUNYLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxPQUFPO0FBQ2YsUUFBUSxpQkFBaUI7QUFDekIsUUFBUSxxQkFBcUI7QUFDN0IsUUFBUSxPQUFPO0FBQ2YsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2I7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxNQUFNLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7QUFDdEUsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHO0FBQ1gsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsV0FBVztBQUNuQixRQUFRLE9BQU87QUFDZixRQUFRLGlCQUFpQjtBQUN6QixRQUFRLHFCQUFxQjtBQUM3QixRQUFRLE9BQU87QUFDZixRQUFRLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUM5QixRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUM1QixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN6QjtBQUNBLElBQUksTUFBTSxnQkFBZ0IsQ0FBQywrQ0FBK0MsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxJQUFJLE1BQU0sa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtBQUNyRSxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLEdBQUc7QUFDWCxRQUFRLFNBQVM7QUFDakIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsT0FBTztBQUNmLFFBQVEsaUJBQWlCO0FBQ3pCLFFBQVEscUJBQXFCO0FBQzdCLFFBQVEsT0FBTztBQUNmLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRjtBQUNBLElBQUksTUFBTSx5QkFBeUIsQ0FBQztBQUNwQyxRQUFRLEdBQUc7QUFDWCxRQUFRLFNBQVM7QUFDakIsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDOztBQ2xFTSxNQUFNLFdBQVcsR0FBRyxPQUFPLE9BQU8sS0FBSztBQUM5QztBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0U7QUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDeEIsUUFBUSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDeEMsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtBQUN6QyxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLEdBQUc7QUFDWCxRQUFRLFNBQVM7QUFDakIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsT0FBTztBQUNmLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3RDLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRjtBQUNBLElBQUksTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7QUFDekMsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHO0FBQ1gsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsV0FBVztBQUNuQixRQUFRLE9BQU87QUFDZixRQUFRLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUM5QixRQUFRLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUN0QyxRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUM1QixLQUFLLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksTUFBTSxnQkFBZ0IsQ0FBQywrQ0FBK0MsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxJQUFJLE1BQU0sa0JBQWtCLENBQUMsV0FBVyxFQUFFO0FBQzFDLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsR0FBRztBQUNYLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxPQUFPO0FBQ2YsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDdEMsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDaEM7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BDLFFBQVEsR0FBRztBQUNYLFFBQVEsU0FBUztBQUNqQixRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUM1QixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7O0FDOURNLE1BQU0sYUFBYSxHQUFHLE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sS0FBSztBQUNuRixJQUFJLE1BQU0sR0FBRyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUMsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sS0FBSztBQUNyQyxRQUFRLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLGFBQWEsQ0FBQyxPQUFPLElBQUksS0FBSztBQUN0QyxZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtBQUNoQyxvQkFBb0IsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUQsaUJBQWlCO0FBQ2pCLGdCQUFnQixJQUFJLFlBQVksRUFBRTtBQUNsQyxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxpQkFBaUI7QUFDakIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxPQUFPLEdBQUcsRUFBRTtBQUN4QixnQkFBZ0IsTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUN6RSxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLGFBQWE7QUFDYixTQUFTLEVBQUU7QUFDWCxZQUFZLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDL0IsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJO0FBQ2pDLFlBQVksSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMzQyxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJO0FBQzVDLG9CQUFvQixZQUFZLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxHQUFHLFlBQVksS0FBSyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN0RSxnQkFBZ0IsWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJO0FBQ3hCLFFBQVEsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQzlCLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQztBQUNBO0FBQ0EsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQzs7QUMzQkQsTUFBTSxPQUFPLEdBQUcsSUFBSUMsT0FBUyxFQUFFLENBQUM7QUFDaEMsTUFBTSxjQUFjLEdBQUcsT0FBTztBQUM5QixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQjtBQUNBLFFBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQztBQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMxQztBQUNBLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQyw2Q0FBNkMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0YsUUFBUSxTQUFTLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDMUIsWUFBWSxPQUFPLEVBQUUsT0FBTztBQUM1QixZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztBQUN4QyxZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUNsQyxZQUFZLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUMxQyxZQUFZLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztBQUN4QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQztBQUNYO0FBQ0EsUUFBUSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRjtBQUNBLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDMUIsWUFBWSxPQUFPO0FBQ25CLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQzVDLFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzFDLFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9GO0FBQ0EsUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUM5QixZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sYUFBYSxHQUFHLE9BQU87QUFDN0IsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0FBQzVDLFlBQVksTUFBTSx5QkFBeUIsQ0FBQztBQUM1QyxnQkFBZ0IsR0FBRyxPQUFPO0FBQzFCLGdCQUFnQixTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ25GLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDNUMsZ0JBQWdCLEdBQUcsT0FBTztBQUMxQixnQkFBZ0IsU0FBUyxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNuRixhQUFhLENBQUMsQ0FBQztBQUNmLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE9BQU87QUFDdEMsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0I7QUFDQSxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQzFCLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQzVDLFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzFDLFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9GO0FBQ0EsUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUM5QixZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sV0FBVyxHQUFHLE9BQU87QUFDM0IsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxNQUFNLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDdkUsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPO0FBQzNCLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQ3pFLFlBQVksR0FBRyxPQUFPO0FBQ3RCLFlBQVksU0FBUyxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMvRSxZQUFZLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTztBQUM5QixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQixRQUFRLE1BQU0sbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtBQUMxRSxZQUFZLEdBQUcsT0FBTztBQUN0QixZQUFZLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDL0UsWUFBWSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDOUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPO0FBQ3RDLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CO0FBQ0EsUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUMxQixZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztBQUN4QyxZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUNsQyxZQUFZLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUMxQyxZQUFZLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztBQUN4QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQztBQUNYO0FBQ0EsUUFBUSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRjtBQUNBLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDOUIsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDaEMsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPO0FBQzNCLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7QUFDN0MsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3BDLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sV0FBVyxHQUFHLE9BQU87QUFDM0IsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtBQUM3QyxZQUFZLEdBQUcsT0FBTztBQUN0QixZQUFZLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDL0UsWUFBWSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDOUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTztBQUMzQixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQixRQUFRLE1BQU0sa0JBQWtCLENBQUMsV0FBVyxFQUFFO0FBQzlDLFlBQVksR0FBRyxPQUFPO0FBQ3RCLFlBQVksU0FBUyxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMvRSxZQUFZLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLGdCQUFnQixHQUFHLE9BQU87QUFDaEMsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQy9CLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQzVDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLGVBQWUsR0FBRyxPQUFPO0FBQy9CLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDOUIsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDaEMsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPO0FBQ1AsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3JCLEtBQUssa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzFELEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN2SCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDbEcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUseUZBQXlGLENBQUMsQ0FBQztBQUN0SixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxpRkFBaUYsQ0FBQyxDQUFDO0FBQzVJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUMzQixLQUFLLFdBQVcsQ0FBQyx5RUFBeUUsQ0FBQztBQUMzRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLHlGQUF5RixDQUFDLENBQUM7QUFDdEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEYsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUMzQixLQUFLLFdBQVcsQ0FBQyw4REFBOEQsQ0FBQztBQUNoRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLHlGQUF5RixDQUFDLENBQUM7QUFDdEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEYsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUN2QixLQUFLLFdBQVcsQ0FBQyxzRUFBc0UsQ0FBQztBQUN4RixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLHlGQUF5RixDQUFDLENBQUM7QUFDdEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzFFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEIsS0FBSyxXQUFXLENBQUMsdURBQXVELENBQUM7QUFDekUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLGdDQUFnQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUseUZBQXlGLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoTCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxpRkFBaUYsQ0FBQyxDQUFDO0FBQzVJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkssS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekUsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNwQixLQUFLLFdBQVcsQ0FBQyxpRkFBaUYsQ0FBQztBQUNuRyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLGlGQUFpRixDQUFDLENBQUM7QUFDNUksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RSxPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BCLEtBQUssV0FBVyxDQUFDLG1GQUFtRixDQUFDO0FBQ3JHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqSixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDbEcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDcEIsS0FBSyxXQUFXLENBQUMsaUdBQWlHLENBQUM7QUFDbkgsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaURBQWlELENBQUMsQ0FBQztBQUNsRyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxpRkFBaUYsQ0FBQyxDQUFDO0FBQzVJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdkUsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNwQixLQUFLLFdBQVcsQ0FBQyxpR0FBaUcsQ0FBQztBQUNuSCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLGlGQUFpRixDQUFDLENBQUM7QUFDNUksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RSxPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BCLEtBQUssV0FBVyxDQUFDLGtHQUFrRyxDQUFDO0FBQ3BILEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqSixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDbEcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDekIsS0FBSyxXQUFXLENBQUMsa0VBQWtFLENBQUM7QUFDcEYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDeEIsS0FBSyxXQUFXLENBQUMsa0VBQWtFLENBQUM7QUFDcEYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMzRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNO0FBQzNCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtEQUFrRCxDQUFDLENBQUMsQ0FBQztBQUN0RSxJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLENBQUMsQ0FBQyJ9
11392
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2NhcGl0YWxpemUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSdW5Gb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2RjYXB0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Q2x1c3RlclVSTC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2luc3RhbGxBcHAuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZWluZGV4UHJvZ3Jlc3MuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZWluZGV4LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuTHVjZW5lVGltaW5nVGVzdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldER1cmF0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZWFkTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZXN1bHRzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVzdWx0c0RpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldE5vZGVOdW1iZXJGb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3RlYXJkb3duQ2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RhdGFiYXNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvQXBwbGljYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9EQ0FQVC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9wZXJmb3JtYW5jZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9zY2FsYWJpbGl0eS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvQWN0aW9uSGFuZGxlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2NvbW1hbmRzL2FwdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY2FwaXRhbGl6ZSA9ICh2YWx1ZSkgPT4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiIsImV4cG9ydCBjb25zdCBnZXRSdW5Gb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnYmFzZWxpbmUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAncmVncmVzc2lvbic6IHJldHVybiAyO1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAzO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiA0O1xuICAgICAgICBjYXNlICdmb3VyLW5vZGUnOiByZXR1cm4gNTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJy4uL2hlbHBlcnMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vaGVscGVycy9nZXRSdW5Gb3JTdGFnZSc7XG5jb25zdCB0b051bWJlciA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gJ3RoaXJkJztcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gJ2ZvdXJ0aCc7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiAnZmlmdGgnO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgZW1wdHlMaW5lID0gKCkgPT4gY29uc29sZS5sb2coJ+KAiycpO1xuZXhwb3J0IGNvbnN0IGdlbmVyaWMgPSB7XG4gICAgaGVhZGVyOiBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9fX18gICAgICBfICAgICAgICAgIF9fX19fICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBcXFxcIF9fX3wgfF8gX19fICAgfCAgICAgfF9fXyBfX198IHxfIF9fXyBfX18gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgfCAuJ3wgIF98IC4nfCAgfCAgIC0tfCAtX3wgICB8ICBffCAtX3wgIF98ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX18vfF9fLHxffCB8X18sfCAgfF9fX19ffF9fX3xffF98X3wgfF9fX3xffCAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIF9fX19fICAgICAgICAgICAgX19fX18gICAgICAgICBfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX18gICAgICAgICBfIF8gICBfIF8gICBcbiAgfCAgXyAgfF9fXyBfX18gICB8ICBfICB8X19fIF9fX3wgIF98X19fIF9fXyBfX19fXyBfX18gX19fIF9fXyBfX18gICB8XyAgIF98X19fIF9fX3wgfCB8X3xffCB8XyBcbiAgfCAgICAgfCAuIHwgLiB8ICB8ICAgX198IC1ffCAgX3wgIF98IC4gfCAgX3wgICAgIHwgLid8ICAgfCAgX3wgLV98ICAgIHwgfCB8IC4gfCAuIHwgfCAnX3wgfCAgX3xcbiAgfF9ffF9ffCAgX3wgIF98ICB8X198ICB8X19ffF98IHxffCB8X19ffF98IHxffF98X3xfXyx8X3xffF9fX3xfX198ICAgIHxffCB8X19ffF9fX3xffF8sX3xffF98ICBcbiAgICAgICAgfF98IHxffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICBXZWxjb21lIHRvIHRoZSBhdXRvbWF0ZWQgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgKERDQVBUKS5cbiAgVGhpcyB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIGFsbCB0aGUgc3RlcHMgdG8gcHJvZHVjZSB0aGUgcmVxdWlyZWQgcGVyZm9ybWFuY2UgdGVzdGluZyByZXN1bHRzXG4gIGZvciB5b3VyIChhbm51YWwpIERhdGEgQ2VudGVyIGFwcHJvdmFsLlxuYFxufTtcbmV4cG9ydCBjb25zdCBpbml0ID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgV2Ugd2lsbCBub3cgZm9sbG93IGFsbCB0aGUgc3RlcHMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgVXNlciBHdWlkZSBGb3IgJHtjYXBpdGFsaXplKHByb2R1Y3QpfS5cbiAgUGxlYXNlIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gcHJpb3IgdG8gc3RhcnRpbmcgdGhlIHRlc3QgcnVuOlxuXG4gIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtJHtwcm9kdWN0fS9cblxuICBPbmNlIHlvdSBzdGFydCB0aGUgdGVzdCBydW4gd2Ugd2lsbCBwcm92aXNpb24gdGhlIGVudmlyb25tZW50IG9uIEFXUy4gXG4gIElNUE9SVEFOVDogVGhpcyBjYW4gaW5jdXIgY29zdHMuXG4gIFxuICBZb3UgY2FuIHN0b3AgdGhpcyBwcm9jZXNzIGF0IGFueSB0aW1lIGJ5IGV4aXRpbmcgdGhpcyBwcm9ncmFtLiBCZSBzdXJlIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gcmVzZXQgXG4gIHRoZSBBV1MgZW52aXJvbm1lbnQgYW5kIHByZXZlbnQgdW5leHBlY3RlZCBjb3N0cy5cblxuICAkIGRjZHggYXB0IHRlYXJkb3duXG5cbiAgWW91IGNhbiBhbHNvIHJlc3VtZS9yZXN0YXJ0IGV2ZXJ5IHBhcnQgb2YgdGhlIHRlc3QgcnVuIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOlxuXG4gICQgZGNkeCBhcHQgaW5pdCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHByb3Zpc2lvbiAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4yIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMyAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjQgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW41IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG5cbiAgV2Ugd2lsbCBjb250aW51ZSB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4ke3Byb2R1Y3QgPT09ICdqaXJhJyA/IGBcbiAgMS4gIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgMy4gIEx1Y2VuZSBJbmRleCB0aW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICA0LiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICA1LiAgU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBvbmUtbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biAzKVxuICA2LiAgU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA3LiAgU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBmb3VyLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNSlcbiAgOC4gIEdlbmVyYXRlIHJlcG9ydHNcbiAgOS4gIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDEwLiBTZWN1cml0eSBTY2FubmVyIGZvciBEYXRhIENlbnRlciBhcHBzXG5gIDogYFxuICAxLiBQcm92aXNpb24gdGhlIGVudmlyb25tZW50XG4gIDIuIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgMy4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICA0LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDUuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gdHdvLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNClcbiAgNi4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBmb3VyLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNSlcbiAgNy4gR2VuZXJhdGUgcmVwb3J0c1xuICA4LiBUZWFyZG93biBvZiBlbnZpcm9ubWVudFxuICA5LiBTZWN1cml0eSBTY2FubmVyIGZvciBEYXRhIENlbnRlciBhcHBzXG5gfWAsXG59O1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbmluZyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gXG4gIHwgIF8gIHwgX18gIHwgICAgIHwgIHwgIHwgICAgIHwgICBfX3wgICAgIHwgICAgIHwgICB8IHwgICAgIHwgICB8IHwgICBfX3xcbiAgfCAgIF9ffCAgICAtfCAgfCAgfCAgfCAgfC0gICAtfF9fICAgfC0gICAtfCAgfCAgfCB8IHwgfC0gICAtfCB8IHwgfCAgfCAgfFxuICB8X198ICB8X198X198X19fX198XFxcXF9fXy98X19fX198X19fX198X19fX198X19fX198X3xfX198X19fX198X3xfX198X19fX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uXG5cbiAgSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOlxuXG4gIDEuIFRoZSBsb2NhdGlvbiBvZiB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgb24geW91ciBkaXNrXG4gIDIuIEFXUyBjcmVkZW50aWFsc1xuICAzLiBQcm9kdWN0IGxpY2Vuc2VcbmAsXG4gICAgYXNrRm9yQVdTQ3JlZGVudGlhbHM6IChwcm9kdWN0KSA9PiBgXG4gIEluIG9yZGVyIHRvIHByb3Zpc2lvbiB0aGUgJHtjYXBpdGFsaXplKHByb2R1Y3QpfSBjbHVzdGVyLCB3ZSBuZWVkIEFkbWluaXN0cmF0b3IgY3JlZGVudGlhbHMgZm9yIEFXUy5cbiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBEQ0FQVCBkb2N1bWVudGF0aW9uIHRvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIHRoZSBBV1MgYWNjZXNzIGtleXM6XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9LyNzZXR1cC0ke3Byb2R1Y3R9LWRhdGEtY2VudGVyLWRldmVsb3BtZW50LWVudmlyb25tZW50LW9uLWs4cy1cbmAsXG4gICAgYXNrRm9yRW52aXJvbm1lbnQ6IGBcbiAgV2hlbiBwcm92aXNpb25pbmcgdGhlIGNsdXN0ZXIsIHdlIG5lZWQgYSB1bmlxdWUgZW52aXJvbm1lbnQgbmFtZS5cbiAgVGhpcyB3aWxsIGFsbG93IHlvdSB0byBjcmVhdGUgbXVsdGlwbGUgY2x1c3RlcnMgKGkuZS4gZm9yIGRpZmZlcmVudCBob3N0IHByb2R1Y3RzKSBhbmQgdG8gaWRlbnRpZnkgd2hpY2ggY2x1c3RlciB0byB1c2UgZHVyaW5nIHRlc3RpbmcgJiB0ZWFyZG93bi5cbmAsXG4gICAgYXNrRm9yTGljZW5zZTogYFxuICBUaGUgaG9zdCBwcm9kdWN0IHJlcXVpcmVzIGEgdmFsaWQgbGljZW5zZS5cblxuICBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgNzJoIGRldmVsb3BlciBsaWNlbnNlIHByb3ZpZGVkIGJ5IEF0bGFzc2lhbi4gSWYgeW91IG5lZWQgYSBtb3JlIGV4dGVuc2l2ZSBsaWNlbnNlLFxuICB5b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIHJlYWR5OiBgXG4gIFdlIGhhdmUgbm93IGdhdGhlcmVkIGFsbCB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHJvdmlzaW9uIHRoZSBjbHVzdGVyLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuICBcbiAgV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAgUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBhd3NDcmVkZW50aWFsc1BlcnNpc3RlZDogJ+KclCBBV1MgY3JlZGVudGlhbHMgd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgIHRlcnJhZm9ybUNvbmZpZ3VyYXRpb25QZXJzaXN0ZWQ6IGDinJQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzYFxufTtcbmV4cG9ydCBjb25zdCBSdW4xID0ge1xuICAgIGhlYWRlcjogKCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gICBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfF8gIHwgIFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICAgX3wgfF8gXG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX19fX3xcblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIFRoaXMgd2lsbCBwcm9kdWNlIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSByZXN1bHRzLlxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgYmFzZWxpbmUgdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG5XZSB3aWxsIG5vdyBzdGFydCB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0XG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBSdW4yID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8ICBffFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICBUaGlzIHdpbGwgYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydC5cbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICBJbiBhZGRpdGlvbiwgYSBMdWNlbmUgSW5kZXggVGltaW5nIFRlc3QgaXMgYWxzbyBwYXJ0IG9mIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RzLmAgOiAnJ31cbiAgVGhlIHNlY29uZCBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAyLiBCZW5jaG1hcmsgdGhlIHJlLWluZGV4IHRpbWUgd2l0aCB5b3VyIGFwcCBpbnN0YWxsZWRcbiAgMy4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmAgOiBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIFBlcmZvcm1hbmNlIHJlc3VsdHMgZ2VuZXJhdGlvbiB3aXRoIHRoZSBhcHAgaW5zdGFsbGVkXG5gfVxuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKHN0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gYFxuICDinJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMiAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IEx1Y2VuZVRpbWluZ1Rlc3QgPSB7XG4gICAgaGVhZGVyOiAoX3Byb2R1Y3QsIHN0YWdlKSA9PiBgXG4gIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8ICB8ICB8ICB8ICB8ICAgICB8ICAgX198ICAgfCB8ICAgX198XG4gIHwgIHxfX3wgIHwgIHwgICAtLXwgICBfX3wgfCB8IHwgICBfX3xcbiAgfF9fX19ffF9fX19ffF9fX19ffF9fX19ffF98X19ffF9fX19ffFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfF8gICBffCAgICAgfCAgICAgfCAgICAgfCAgIHwgfCAgIF9ffFxuICAgIHwgfCB8LSAgIC18IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gICAgfF98IHxfX19fX3xffF98X3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgICAgICAgXG4gICAgICB8XyAgIF98ICAgX198ICAgX198XyAgIF98ICAgICAgICBcbiAgICAgICAgfCB8IHwgICBfX3xfXyAgIHwgfCB8ICAgICAgICAgIFxuICAgICAgICB8X3wgfF9fX19ffF9fX19ffCB8X3wgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWRcbiAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBQZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IChydW4gMilcblxuICBBZnRlciB0aGUgcmUtaW5kZXggaXMgY29tcGxldGVkIGEgc2NyZWVuc2hvdCBpcyBjcmVhdGVkIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJlcXVpcmVkIHRlc3QgcmVzdWx0c1xuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgV2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHRoZSBMdWNlbmUgSW5kZXggdGltaW5nIHRlc3RcbiAgT25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgYSBicm93c2VyIHdpbmRvdyBpcyBvcGVuZWQgdG8gY2FwdHVyZSB0aGUgdGVzdCByZXN1bHRzLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluaWcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuYCxcbiAgICBmYWlsdXJlOiAoX3N0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50KSA9PiBgXG4gIOKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcmVpbmRleCAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYFxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFJlYWR5IHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG7inJQgRmluaXNoZWQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fIF9fIFxuICB8ICAgX198ICAgICB8ICBfICB8ICB8ICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8XyAgIF98ICB8ICB8XG4gIHxfXyAgIHwgICAtLXwgICAgIHwgIHxfX3wgICAgIHwgX18gLXwtICAgLXwgIHxfX3wtICAgLXwgfCB8IHxfICAgX3xcbiAgfF9fX19ffF9fX19ffF9ffF9ffF9fX19ffF9ffF9ffF9fX19ffF9fX19ffF9fX19ffF9fX19ffCB8X3wgICB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8X198X198X19fX198X198ICB8X19fX198X198X198IHxffCAgICAgICAgICAgICAgICAgICAgXG5gXG59O1xuZXhwb3J0IGNvbnN0IFRlYXJkb3duID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fICBfX19fXyBfIF8gXyBfX19fXyBcbiAgfF8gICBffCAgIF9ffCAgXyAgfCBfXyAgfCAgICBcXFxcfCAgICAgfCB8IHwgfCAgIHwgfFxuICAgIHwgfCB8ICAgX198ICAgICB8ICAgIC18ICB8ICB8ICB8ICB8IHwgfCB8IHwgfCB8XG4gICAgfF98IHxfX19fX3xfX3xfX3xfX3xfX3xfX19fL3xfX19fX3xfX19fX3xffF9fX3xcblxuICBXZSB3aWxsIG5vdyB0ZXJtaW5hdGUgdGhlIGNsdXN0ZXIgdXNlZCBpbiB0aGUgRGF0YSBDZW50ZXIgQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgdGVzdGluZy5cbmBcbn07XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBpbnN0YWxsID0gYXN5bmMgKGN3ZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBcbiAgU3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuICBVc2luZyBEQ0FQVCBjb25maWd1cmF0aW9uIGZyb20gJHtjd2R9XG5gKTtcbiAgICBjb25zdCBiYXNlRGlyID0gam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKTtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpLCAnIyB0ZXJyYWZvcm0gb3V0cHV0JywgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJ2F3c19lbnZzJyxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2RjYXB0LnRmdmFyczovZGF0YS1jZW50ZXItdGVycmFmb3JtL2NvbmYudGZ2YXJzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2RjYXB0LXNuYXBzaG90cy5qc29uOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGNhcHQtc25hcHNob3RzLmpzb25gLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vbG9nczovZGF0YS1jZW50ZXItdGVycmFmb3JtL2xvZ3NgLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vb3V0cHV0cy5qc29uOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vb3V0cHV0cy5qc29uYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW5sYWJzL3RlcnJhZm9ybTpsYXRlc3QnLFxuICAgICAgICAgICAgJy4vaW5zdGFsbC5zaCcsICctYycsICdjb25mLnRmdmFycydcbiAgICAgICAgXSwgeyBjd2Q6IGJhc2VEaXIsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgRmluaXNoZWQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuICBDbHVzdGVyIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluICR7YmFzZURpcn0vb3V0cHV0cy5qc29uXG5gKTtcbn07XG5leHBvcnQgY29uc3QgcnVuVGVzdCA9IGFzeW5jIChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0KSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJy4vYXBwL3V0aWwvazhzL2F3c19lbnZzJyxcbiAgICAgICAgICAgICctZScsIGBSRUdJT049dXMtZWFzdC0yYCxcbiAgICAgICAgICAgICctZScsIGBFTlZJUk9OTUVOVF9OQU1FPSR7ZW52aXJvbm1lbnR9YCxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9L2FwcC91dGlsL2s4cy9ienRfb25fcG9kLnNoOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vYnp0X29uX3BvZC5zaGAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06bGF0ZXN0JyxcbiAgICAgICAgICAgICdiYXNoJywgJ2J6dF9vbl9wb2Quc2gnLCBgJHtwcm9kdWN0fS55bWxgXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ3Jlc3Npb25SZXBvcnQgPSBhc3luYyAoY3dkLCBydW4xRGlyLCBydW4yRGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjFEaXJ9Oi9yZXN1bHRzL3J1bjFgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuMkRpcn06L3Jlc3VsdHMvcnVuMmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiBSZXBvcnRgKTtcbn07XG5leHBvcnQgY29uc3Qgc2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAoY3dkLCBydW4zRGlyLCBydW40RGlyLCBydW41RGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjNEaXJ9Oi9yZXN1bHRzL3J1bjNgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuNERpcn06L3Jlc3VsdHMvcnVuNGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW41RGlyfTovcmVzdWx0cy9ydW41YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ2Nzdl9jaGFydF9nZW5lcmF0b3IucHknLCAnc2NhbGVfcHJvZmlsZS55bWwnXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBTY2FsYWJpbGl0eSBCZW5jaG1hcmsgUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHRlcm1pbmF0ZSA9IGFzeW5jIChjd2QsIGVudmlyb25tZW50KSA9PiB7XG4gICAgY29uc3QgYmFzZURpciA9IHJlc29sdmUoam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICdhd3NfZW52cycsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGF0YS1jZW50ZXItdGVycmFmb3JtJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L3Rlcm1pbmF0ZV9jbHVzdGVyLnB5Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vdGVybWluYXRlX2NsdXN0ZXIucHlgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbi9kY2FwdCcsXG4gICAgICAgICAgICAndGVybWluYXRlX2NsdXN0ZXIucHknLCAnLS1jbHVzdGVyX25hbWUnLCBgYXRsYXMtJHtlbnZpcm9ubWVudH0tY2x1c3RlcmAsICctLWF3c19yZWdpb24nLCAndXMtZWFzdC0yJ1xuICAgICAgICBdLCB7IGN3ZDogam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKSwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgdGVybWluYXRpbmcgdGhlIERDIGNsdXN0ZXIgb24gQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uYCk7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIGFzIHB3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHNpbXBsZUdpdCBmcm9tICdzaW1wbGUtZ2l0JztcbmltcG9ydCB7IGVtcHR5TGluZSB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBnZXRBcHREaWN0b3J5ID0gYXN5bmMgKGN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBmb3JjZSkgPT4ge1xuICAgIC8vIFRyYW5zbGF0ZSBjb21tb24gcmVsYXRpdmUgcGF0aHMgdG8gYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgcmVzdWx0ID0gY3dkLnN0YXJ0c1dpdGgoJ34vJylcbiAgICAgICAgPyBjd2QucmVwbGFjZSgnfi8nLCBob21lZGlyKCkpXG4gICAgICAgIDogY3dkLnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgID8gY3dkLnJlcGxhY2UoJy4vJywgcHdkKCkgKyAnLycpXG4gICAgICAgICAgICA6IGN3ZCA9PT0gJy4nXG4gICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgIDogY3dkO1xuICAgIC8vIElmIHdlIGFyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIHF1ZXN0aW9ucyBmaXJzdFxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBBUFQgZGlyZWN0b3J5LCB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4uLlxuICAgICAgICBsZXQgdXNlQ3VycmVudERpcmVjdG9yeSA9IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlO1xuICAgICAgICAvLyAuLi51bmxlc3MgdG9sZCBvdGhlcndpc2VcbiAgICAgICAgaWYgKGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBXZSd2ZSBmb3VuZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnk6XG4gICR7cmVzdWx0fVxuYCk7XG4gICAgICAgICAgICB1c2VDdXJyZW50RGlyZWN0b3J5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYERvIHlvdSB3aXNoIHRvIHVzZSB0aGlzIGRpcmVjdG9yeT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFzayBmb3IgdGhlIGFsdGVybmF0aXZlXG4gICAgICAgIGxldCBkaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICAgIGlmICghdXNlQ3VycmVudERpcmVjdG9yeSkge1xuICAgICAgICAgICAgZGlyZWN0b3J5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIEFwcCBQZWZvcm1hbmNlIFRvb2xraXQgaXMgbG9jYXRlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeS5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSArICcvJylcbiAgICAgICAgICAgIDogZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogZGlyZWN0b3J5ID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGFsdGVybmF0aXZlIGlzIGEgRENBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKHJlc29sdmUoam9pbihkaXJlY3RvcnksICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKTtcbiAgICAgICAgaWYgKCFpc0RpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIGFzayBpZiB3ZSBuZWVkIHRvIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBjb25zdCBtdXN0Q2xvbmVBUFQgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGRpcmVjdG9yeSBlaXRoZXIgZG9lc24ndCBleGlzdCwgb3IgaXQgZG9lc24ndCBjb250YWluIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0LiBEbyB5b3Ugd2FudCB0byBjbG9uZSBEQ0FQVCBmcm9tIHNvdXJjZT9gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBtdXN0IGNsb25lIGl0IGZyb20gR2l0aHViLCB3ZSBzaG91bGQgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICAgICAgICAgIGlmIChtdXN0Q2xvbmVBUFQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCBkaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RpbmcpXG4gICAgICAgIGlmIChtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkuLi5cbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBpcyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBEQ0FQVCAobWFzdGVyIGJyYW5jaCknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIC4uLmJ1dCBhbHNvLCBObyBpcyBub3QgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gbWFzdGVyIHRvIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgY29uZmlybSB0aGF0IHRoZSBjaG9zZW4gZGlyZWN0b3J5IGhhcyBhIERDQVBUIGluc3RhbGxhdGlvbiB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhcHAtc3BlY2lmaWMgYWN0aW9ucyBpbiBvcmRlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgcmVzdWx0IHRvIHRoZSBwcm92aWRlZCBkaXJlY3RvcnlcbiAgICAgICAgcmVzdWx0ID0gZGlyZWN0b3J5O1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHdlIHdpbGwgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICB9XG4gICAgZWxzZSBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIC8vIElmIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RzIHdlIGNhbiB1c2UgaXRcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gZW5zdXJlIGEgZnJlc2ggbm9uLXBlcnNpc3RlbnQgY2hlY2tvdXRcbiAgICAgICAgcmVzdWx0ID0gIWV4aXN0c1N5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHRcbiAgICAgICAgICAgIDogam9pbihob21lZGlyKCksICcuZGNkeCcsICdkY2FwdCcpO1xuICAgICAgICAvLyBJbmZvcm0gdGhlIHVzZXIgb2YgdGhlIGNob3NlbiBkaXJlY3RvcnlcbiAgICAgICAgY29uc29sZS5sb2coJyAgSW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke3Jlc3VsdH1gKTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgcm1TeW5jKHJlc3VsdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAvLyBSZXRyaWV2ZSBEQ0FQVCBmcm9tIGdpdGh1YlxuICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCByZXN1bHQpO1xuICAgICAgICBjb25zb2xlLmxvZygn4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIERDQVBUIGZyb20gc291cmNlIChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSBhcHAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgZXhpc3RzXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCB3ZSBjYW5ub3QgY29udGludWVcbiAgICAgICAgaWYgKCFpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJyAgVXNpbmcgRENBUFQgZnJvbSBjdXJyZW50IGRpcmVjdG9yeSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICB9XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IG9jY3VyLCBiZWNhdXNlIGVpdGhlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgRENBUFRcbiAgICAvLyBvciB3ZSBoYXZlIGNsb25lZCBpdCBpbnRvIGEgKG5ldykgZGlyZWN0b3J5LiBUaGlzIGlzIG1lcmVseSBhIGNoZWNrIGZvciBpZiB0aGUgbGF0dGVyIGZhaWxlZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgfVxuICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGluIGEgdmFsaWQgRENBUFQgZGlyZWN0b3J5XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSk7XG4gICAgY29uc3QgaGFzU25hcHNob3RKU09OID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpKTtcbiAgICBjb25zdCBoYXNUZXJyYWZvcm1WYXJpYWJsZXMgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICBpZiAoIWhhc0VudkZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2F3c19lbnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzU25hcHNob3RKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC1zbmFwc2hvdHMuanNvbicgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNUZXJyYWZvcm1WYXJpYWJsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LnRmdmFycycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVwb3J0ID0gKGJhc2VEaXIsIHR5cGUpID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVwb3J0IHN1bW1hcnkgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGJhc2VEaXIgYWxyZWFkeSBjb250YWlucyB0aGUgcmVwb3J0XG4gICAgY29uc3Qgc3VtbWFyeUZpbGVOYW1lID0gdHlwZSA9PT0gJ3BlcmZvcm1hbmNlJyA/ICdwZXJmb3JtYW5jZV9wcm9maWxlX3N1bW1hcnkubG9nJyA6ICdzY2FsZV9wcm9maWxlX3N1bW1hcnkubG9nJztcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBzdW1tYXJ5RmlsZU5hbWUpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciByZXBvcnQgZGlyZWN0b3J5XG4gICAgICAgIHJlYWRkaXJTeW5jKGJhc2VEaXIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGFyZSBkaXJlY3RvcnksIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xuICAgICAgICAgICAgaWYgKHJlc3VsdHNEaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoam9pbihiYXNlRGlyLCBpdGVtKSk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGEgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgc3VtbWFyeUZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSByZXBvcnQgZGlyZWN0b3J5LCBhbmQgaWYgbm90IHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIGlmIChyZXN1bHRzRGlyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVwb3J0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c0Rpcjtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydERpcmVjdG9yeSA9IGFzeW5jIChjd2QsIGZvcmNlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXN1bHRzJywgJ3JlcG9ydHMnKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXBvcnRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVwb3J0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVwb3J0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVwb3J0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlcG9ydCBjYW4gb25seSBiZSBnZW5lcmF0ZWQgaWYgYWxsIHByZXZpb3VzIHJlcG9ydHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlcG9ydHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlcG9ydHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBQcmVzc1RvQ29udGludWVQcm9tcHQgZnJvbSAnaW5xdWlyZXItcHJlc3MtdG8tY29udGludWUnO1xuaW5xdWlyZXIucmVnaXN0ZXJQcm9tcHQoJ3ByZXNzLXRvLWNvbnRpbnVlJywgUHJlc3NUb0NvbnRpbnVlUHJvbXB0KTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yVXNlcklucHV0ID0gYXN5bmMgKG1lc3NhZ2UsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICB0eXBlOiAncHJlc3MtdG8tY29udGludWUnLFxuICAgICAgICBhbnlLZXk6IHRydWUsXG4gICAgICAgIHByZXNzVG9Db250aW51ZU1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHdoZW46ICFmb3JjZVxuICAgIH0pO1xuICAgIHJldHVybiBrZXkgfHwgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnkgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGVtcHR5TGluZSwgUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHJlZ3Jlc3Npb25SZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSBhbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgLy8gdG8gdGhlIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGhvdXQgYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMSdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMidcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gYmFjayBpbnRvIFlBTUxcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ2lmeShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBwZXJmb3JtYW5jZV9wcm9maWxlLnltbCBmaWxlIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjpcblxuJHtvdXRwdXR9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke3ltbEZpbGVQYXRofVxuYCk7XG4gICAgICAgICAgICAvLyBHaXZlIHRoZSB1c2VyIGEgbW9tZW50IHRvIHByb2Nlc3MgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFkanVzdGVkIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHltbEZpbGVQYXRoLCBvdXRwdXQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZy4gQWJvcnQgYWJvcnQgYWJvcnQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlcG9ydCBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXBvcnRCYXNlRGlyID0gYXdhaXQgZ2V0UmVwb3J0RGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIGFjdHVhbCByZXBvcnRcbiAgICBhd2FpdCByZWdyZXNzaW9uUmVwb3J0KGN3ZCwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjEnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjInKSk7XG4gICAgLy8gR2V0IHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVwb3J0RGlyID0gZ2V0UmVwb3J0KHJlcG9ydEJhc2VEaXIsICdwZXJmb3JtYW5jZScpO1xuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXBvcnREaXIsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdwZXJmb3JtYW5jZV9wcm9maWxlJyksIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBzY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJlcG9ydCB9IGZyb20gJy4vZ2V0UmVwb3J0JztcbmltcG9ydCB7IGdldFJlcG9ydERpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVwb3J0RGlyZWN0b3J5JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMuaGVhZGVyKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3NjYWxlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IG91dHB1dCBkaXJlY3RvcmllcyB0byB0aGUgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnJ1bnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnMSBOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMydcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICcyIE5vZGVzJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW40J1xuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzQgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnZXhwZXJpbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjUnXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGUgc2NhbGVfcHJvZmlsZS55bWwgZmlsZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246XG5cbiR7b3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBzY2FsYWJpbGl0eSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGdlbmVyYXRpb24gY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlcG9ydEJhc2VEaXIgPSBhd2FpdCBnZXRSZXBvcnREaXJlY3RvcnkoY3dkLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgYWN0dWFsIHJlcG9ydFxuICAgIGF3YWl0IHNjYWxhYmlsaXR5UmVwb3J0KGN3ZCwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjMnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjQnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjUnKSk7XG4gICAgLy8gR2V0IHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVwb3J0RGlyID0gZ2V0UmVwb3J0KHJlcG9ydEJhc2VEaXIsICdzY2FsYWJpbGl0eScpO1xuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXBvcnREaXIsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdzY2FsZV9wcm9maWxlJyksIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufTtcbiIsImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0T3V0cHV0RGlyZWN0b3J5ID0gKGN3ZCwgdGltZXN0YW1wKSA9PiB7XG4gICAgLy8gQ3JlYXRlIHRoZSB0ZXN0IHJ1biBJRCAodXNlZCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSlcbiAgICBjb25zdCBydW5JZCA9IHRpbWVzdGFtcCB8fCBmb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0nKTtcbiAgICAvLyBFaXRoZXIgdXNlIHRoZSBwcm92aWRlZCBvdXRwdXQgZGlyZWN0b3J5LCBvciBkZWZhdWx0IHRvIHRoZSBob21lIGRpcmVjdG9yeVxuICAgIGNvbnN0IGJhc2VEaXIgPSBjd2QgfHwgam9pbihob21lZGlyKCksICcuZGNkeCcsICdhcHQnKTtcbiAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICByZXR1cm4gam9pbihiYXNlRGlyLCBydW5JZCk7XG59O1xuIiwiaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGNvbnN0IGdldFByb2R1Y3QgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIHNlbGVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY2hvb3NlIHRoZSBwcm9kdWN0IGZvciB3aGljaCB5b3Ugd2lzaCB0byBydW4gRENBUFRgLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdKaXJhJywgdmFsdWU6ICdqaXJhJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQ29uZmx1ZW5jZScsIHZhbHVlOiAnY29uZmx1ZW5jZScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JhbWJvbycsIHZhbHVlOiAnYmFtYm9vJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQml0YnVja2V0JywgdmFsdWU6ICdiaXRidWNrZXQnIH1cbiAgICAgICAgXVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHBhc3N3b3JkIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFXU0NyZWRlbnRpYWxzID0gYXN5bmMgKHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgLy8gVHJ5IGdldHRpbmcgdGhlIEFXUyBjcmVkZW50aWFscyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgQVdTX0FDQ0VTU19LRVlfSUQsIEFXU19TRUNSRVRfQUNDRVNTX0tFWSB9ID0gcHJvY2Vzcy5lbnY7XG4gICAgLy8gSWYgdGhleSBleGlzdHMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCByZXR1cm4gdGhlbSBpbW1lZGlhdGVseVxuICAgIGlmIChBV1NfQUNDRVNTX0tFWV9JRCAmJiBBV1NfU0VDUkVUX0FDQ0VTU19LRVkpIHtcbiAgICAgICAgcmV0dXJuIFtBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBmb3IgdGhlbVxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gU2hvdyBhIG1lc3NhZ2UgYXNraW5nIG5pY2VseVxuICAgICAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yQVdTQ3JlZGVudGlhbHMocHJvZHVjdCkpO1xuICAgICAgICBjb25zdCBhd3NfYWNjZXNzX2tleV9pZCA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgQWNjZXNzIEtleSBJRGAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF3c19zZWNyZXRfYWNjZXNzX2tleSA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgU2VjcmV0IEFjY2VzcyBLZXlgLFxuICAgICAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGggPiAwXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIGFuZCB0aGUgY3JlZGVudGlhbHMgaGF2ZSBub3QgYmVlbiBmb3VuZCwgd2Ugc2hvdWxkIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVdTIGNyZWRlbnRpYWxzIGNvdWxkIG5vdCBiZSBmb3VuZC4gUGxlYXNlIHByb3ZpZGUgdGhlICdBV1NfQUNDRVNTX0tFWV9JRCcgYW5kICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknIGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xufTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEVudmlyb25tZW50TmFtZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yRW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBFbnZpcm9ubWVudCBuYW1lYCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJleHBvcnQgY29uc3QgdGltZWJvbWIgPSB7XG4gICAgJ2ppcmEnOiAnQUFBQ0JBME9EQW9QZU5wOWtsMXYyakFVaHUveks0NjBPeVFIU0x1VklrVWFUYndOVkJLVWhFbmJ1Z3NURHVBMnNTUGJnYkZmUHhPQzFpKzR5RVhPNSt2blBSK3lHaUdTVy9DdW9YYzd2Qm9NdlQ0RU5BT3Y1L1djdFVJVUcxbFZxTng3bnFQUVNKZmNjQ2w4R21VMG1TWGpsRHBSWFM1UXhhdTVScVY5MG5jQ0tRekxUY1JLOUV1OTQ0SXAvY1EvTTFNd3JUa1RiaTVMWjFhcmZNTTBoc3lnNy9YNkE5THZFODl6MmozWnZzSm1RQkJQcHpRSnhxUDdVNHIrcWJqYU4zMnpHKy9iYVIyZE1sNmMzNWVpMnFJYWgvNGR2YUhrT3Z6cGtVL3g1SVo4dmJvZE9JOWNNYmRTY2xubnhqMzhFQzFYWnNjVXVuWXkzNkp2VkkzT3hHWm1iWlhkendJVTVsVkpXaTkwcm5qVlFHb2k3MEI4NzNHTmhQT1FPNTFPRkdma1M1eVFXUktIOHlBYnh4R1pwOVFtL0VDaHBiR0V4UjdNQnFHZEFsVGtjb2tLN01NZU1UZndhMk5NOVREc2R0ZlNmUUduV3h3N0NCNDdmcnNRU2hEU3dKSnJvL2lpTm1nbmN3MUdRbDVySTB0cnRldFk0c0tnWUNKL1k0cVZGU1IwbE5HUTNQMDRhRHhyVEt2V09qTVhUMEx1eENVMzN0eGFTaVBmZnVSanIzZnNPL21DNm9nL1Ztc211R1lOMElqOTNURlljVlh1blFhYURiNCt3SmJGZDd2ZzBPSTVJZjUzTkVOdG9LMkFsVlF3R1NjalNGdDVscmpkV3ltdThXRUlnU3d0cHB5ekFzTGd4Ums4UDVoRzlQTUEzYktpUHNwZHNVTGpKUndYN3VrZjUvTlg3VEF0QWhVQWhRU0h6OURneWNPWDd3Y3dFUk1KYjNUTEdiNENGR2tCL3hVV1NSSzNCWkxyUEY5Um42Wm1yVXFKWDAyb2MnLFxuICAgICdjb25mbHVlbmNlJzogJ0FBQUN6ZzBPREFvUGVOcDlWTzl2MmpBUS9aNi93dEsrSVlXR3NFS0hGR21RbUphdS9HZ0ltOWlZSmhNT1lwcllrZTFBNGErZlNjaEdLdHFQUHZ2ZXZYdjN6cC82Z3FMSExFYjJIYktzVHZOenA5bEM5OE1BMlpiZE5LWWdkaUFHbnRQRFEyejY4OEhjZEgvYU03UDVvMmtaVHpRRUppRTRwREFpQ1RnQm5nYUQwYjBSQ3I1ZjFTOXVIZmNVV1hTUUJ6dUllUXJDQ0RsYjEwbW82QTRjSlRMUVNWbElsekZVZ2dwSThpY2tNYkFWRWJJK3lwSWxpUEc2UjVJbDV6NGtYRUYzQTB4SnAxR3l3YThwRlFlUEtIQW1EZHQ2K0E5Y0pWUUVLNXlXbWhNVjhIR1pMUldrd3JGOFBaTWdwR1BmR2g3SVVOQlVVYzZjQUtSQ2NWRVlyYmxBYVp4dEtFT3JzcWo4Vi9VUzg1enhYZCtmVUd3RDcwaWNrUnd5ZjdBUkFDemlxVVlvKzhJcm10L2pVWUQ5aVQrWVltTklLRlBBQ0F1dnlISWFRRVVTSFlnejBHOHJvcmdDOHJwNXF2YUVaVnAzcHQwdThzdmUzVGlUQ3NTSXIwQTZsbEdyMVZ3ZmR3UHNtYjI1UGpqYlZ3cTJFY1pjbTZuUzZES1grSTNpVDF5UC9DeTQyVEJlNEZBSzBXaFpWdHU2YXpZYlplWmxCMFUyd3JwbmtRb3FxNDBVeXN0NjdScUI5elU4azY0b2xZZXFLbkdtTkN6V2lzZU9Vb0t3aExMb0sxRXhrWklTVmc5NWNyM1pOL1lxZHVlU1lXNjQ5L21kcmZKQVpPUU0zYjNiOTZEUnVoVmszMjYxa2tGdmV4d2U0MVVRdEpOMTJ1NUd6NkdjUFQ3UG43MUg3MHQ2OUNQY2J4L2E5cmNqM3JEdXdsazR4cHJLQ0E1Vk4rb0pqc2FCMlIvNzVzUWZlek0zR0l4SDVteUtUNlBOL1FFcnREd2dGUUU2RTlWRENMVVp0TjhGMzBLbzBLOUlxWFRSdWJuWjhIcEZsWnR6QXlZVUdiL3J5T09JY1lWV1ZDcEJsNWtDalV3bFVoeUYybVk4MFdhb1h4ZHpFaE9XZTJZc05vUlJXV3hNdDZ4WC9oSDZQNXV4RjhiM3JMSklsejFMcFFXOTVwUVB2cWZMcTBrbXdvaEllTHMybDlQTXpmUTQ4THZ2V1RiZk1ZMUFYRGc5S0pETENWMkM5SFVNSCtDYUpmT2Z1ZGkvdjBrSUdWc3dMQUlVRU1ROVg3N2dxR0JkZkgwSEl6QmFWOE5hZFBVQ0ZCbitSaVVBNEQrSXFWUXBUVG91TFZZNjZhQ0dYMDIxMjEnLFxuICAgICdiaXRidWNrZXQnOiAnQUFBQm1nME9EQW9QZU5wOVVsMXYwekFVZmMrdnNNUmJKYWRKdGpHcFVpUzJKSlJPTk9sYUI0U0FCOWU5VzB4VHU3SnZDdjMzZUltRE9vUjR2ZWZlNC9QaE41OWhSNWJja1BpV1JOZXpLSjVGQ1prdkdVbWlKQTR5clpBTExQa0JVckhYb3RFbnU1ZUJSVzZiOEtNVW9DeXc4eEg2QlZaczJLS2NlM1RKcFVKUVhBa29maDJsT2VjY0lWMWRmUmhKQzdmUlhySnV3SnpBTFBMMC9xRitwSTlYR2FQeit1R0dzcHZia2RSeDhBd2NyMG5SZE9DbmxYbm1TbHFPVXF2MERsdHVyZVRLZzZ2T2lJWmI2SjlQb3ZpYVJtOXBISHMwTTlDZi9SdjFEdi9TUDVsTXlvclI5OVdhcnRaVlhtZHNVWlcwM2hRT1NIdENGK24yVExBQjRobElvWVRlZ1NGSG8zK0FRUEsxUVR4K20wMm56enJrbytKUTZNTzBIUzRvREJmZlE1SnJvalNTbmJSbzVMWkRjTXpTRXRSRWRCYjFBWXdOUnpzWGZmMEpnakN3TGpHLzRtQjVnaUUrSnpoYkYzZXN5T245bHhmMUYyMTQ1YTZPV3UyVi9xbUMvMmRWZG9jdG1PcXB0azVQR2lkK1hKeDQydzNOUFBIV1F1RDlmWEpiTDhQa3RmTGhVMkF2K04ycllNWTZ1VUVGcG5jWS9BWUNnZkZBTUN3Q0ZIemtCbGtHSC92UmRUZWVCU2ZVTXpVRGI0VzJBaFF5TTg5M1dQZzJROG9RQVlSZEJTeUtlVlVkb2c9PVgwMmpyJyxcbiAgICAnYmFtYm9vJzogJ0FBQUIzdzBPREFvUGVOcDlVbHRyMnpBWWZmZXZFT3d0b01SMTBxWUxHSmJZV3NubzdHQTdnOTBlWlBscm90V1dqQ1Nuelg3OUZGOElZV2tmRFBKM09lZHd6dmNoMnpkb1dTdmt6cEY3djVqZExyd3BDa2lhSWMvMVBPZVJNeEFhc21NTkVhM0F6MnhuSFQwNGdRSnF1QlFoTmVCNzd2UUd1elBzM2prNXJYSXB4NVFaZmdEZnFBYUdVdFJVT2FqNGFkWCtQa3BHeStVT2hORSt2bkdHNWxhRGFnczlMM210dVRvT0pGNVBramE1Wm9yWEp3RVhIRytwSlFkYU52Uy9jWXRMQXlzQlZGZnUxOWVodnhYUFFyNElKd1YxQUdVTEt6SW5lQmIrOFBCZC9HV09INllmNzUxTm85aWVhdWpsZVlNSEtZbDgrK0ZiMTNWR28xRVVaL2h6bk9CTkVvZmJJRnZIRWQ2bXhEYjgxa1FvVUg1RVpnK29wMGRFTUZtQVFyV1NmNEFaOUhOdlRQMXJNWm5zckxHbXBGcHpLc1pNVnBPeTI4RFFiZndlbzFBaUlRMHF1RGFLNTQwQmk4dzFNaEt4Umh0WldYdkhUZ2huK3pMUUJ2VTQ2RWxhMXJMWmNZRUtPRUFwYXp2dmZLWGNlaVNvWUcva2NUWGhUVWxGRytYVmJnS1ZOSEErZ0Y3Qk44dDNVdVU1c2RwUndYVVhHbm1sVlYwQ0NtUlZVM0c4RXZmNU1LVXc5dnFJRlYzNnRYN21vTmpmbzdDUFR4ZmVuWklKRXJMTVNJaFgzMDlwdkRkOFNVZ0szc21LTXBKc2tuVktCdHIyNnQ0RCtnZDNBQzVxTUN3Q0ZIT2FUV2ZGdkxDTEpQZnQzcWt0Vm8zRmFmbVpBaFJvamI5SUF4ajhLRXFQRFF5MHN0b3MzOTRTUVE9PVgwMm1xJ1xufTtcbmV4cG9ydCBjb25zdCBhcHAzaG91ciA9ICdBQUFCQ0EwT0RBb1BlTnBkajAxUHdrQVVSZmZ6S3laeFoxSXlVekFSa2xsUTI0Z1JhUU10R25hUDhWRW10alBOZkZUNTl5SlZGeXpmdWJrbjc5NlV4MEJ6NlNtYlVNNW5iRHpqOTdSSVN4b3pIcE1VbmJTcTg4cG9VYUx6dEZFU3RVTjZNSloyVGFpVnB1L1lZMk02dEk2c1FydEhteDhxZDc0RVorVEJJdnlVVS9Bb1lzN2ppRTBqemtuV1F4TXVpZkEySUJsVWJuUTdBdWxWandOOUFhVTlhdEFTczY5TzJkTkZVNHdYSkxjMWFPVUd3OXczNEp3Q1RUWm9lN1JQcVVnZXAyWDBWbTBuMGZOdXQ0Z1N4bC9KY25qOW5GYjZRNXRQL1VldTNMKzBQSFc0Z2haRm1tMnpaVjVrNi85NUNiUjdZOWJZR28vekdyVjNJcjRqUmJEeUNBNnZ0MzRETzhwM1NEQXNBaFFuSmpMRDVrOUZyM3VhSXprWEtmODNvNXZEZFFJVWU0WGVxdU5DQzNEKzlodDlaWWhOWkZLbW5oYz1YMDJkaCc7XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0SG9zdExpY2Vuc2UgPSAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVib21iW3Byb2R1Y3RdO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yTGljZW5zZSk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYExpY2Vuc2VgLFxuICAgICAgICBkZWZhdWx0OiB0aW1lYm9tYltwcm9kdWN0XSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVwbGFjZUxpbmVzSW5GaWxlID0gKHBhdGgsIHJlcGxhY2VyKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gbGluZXMubWFwKHJlcGxhY2VyKTtcbiAgICB3cml0ZUZpbGVTeW5jKHBhdGgsIHJlc3VsdC5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUxpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiA9IChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0LCBsaWNlbnNlLCBub2RlcyA9IDEpID0+IHtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJyksIChsaW5lKSA9PiB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ2Vudmlyb25tZW50X25hbWUgPScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYGVudmlyb25tZW50X25hbWUgPSBcIiR7ZW52aXJvbm1lbnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgncHJvZHVjdHMgPSAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBwcm9kdWN0cyA9IFtcIiR7cHJvZHVjdH1cIl1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgJHtwcm9kdWN0fV9saWNlbnNlID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Byb2R1Y3R9X2xpY2Vuc2UgPSBcIiR7bGljZW5zZX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAke3Byb2R1Y3R9X3JlcGxpY2FfY291bnQgPWApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fcmVwbGljYV9jb3VudCA9ICR7bm9kZXN9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IGApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IFtcIi1EdXBtLnBsdWdpbi51cGxvYWQuZW5hYmxlZD10cnVlXCIsXCItRHBhc3N3b3JkLmNvbmZpcm1hdGlvbi5kaXNhYmxlZD10cnVlXCJdYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcudGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgPSAoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KSA9PiB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpLCBgXG4jIGF3c19lbnZzIGZpbGUgc2hvdWxkIGNvbnRhaW4gQVdTIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGF1dGhvcml6YXRpb24gKHdpdGhvdXQgcXVvdGVzKVxuQVdTX0FDQ0VTU19LRVlfSUQ9JHthd3NfYWNjZXNzX2tleV9pZH1cbkFXU19TRUNSRVRfQUNDRVNTX0tFWT0ke2F3c19zZWNyZXRfYWNjZXNzX2tleX1cbmAudHJpbSgpLCAndXRmLTgnKTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXdzQ3JlZGVudGlhbHNQZXJzaXN0ZWQpO1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRDbHVzdGVyVVJMID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCkgPT4ge1xuICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIEt1YmVybmV0ZXMgdXRpbHMgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIG91dHB1dHMuanNvbiBmaWxlIHRoYXQgd2FzIGNyZWF0ZWQgZHVyaW5nIHByb3Zpc2lvbmluZ1xuICAgIGNvbnN0IGhhc091dHB1dHNKU09OID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSk7XG4gICAgaWYgKCFoYXNPdXRwdXRzSlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnb3V0cHV0cy5qc29uJyBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGdlbmVyYXRlZCBhZnRlciBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50LmApO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgY3JlYXRpb24gb3V0cHV0IGRhdGFcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBwcm9kdWN0IGxvYWRiYWxhbmNlciBVUkwgZnJvbSB0aGUgb3V0cHV0IGRhdGFcbiAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmxzID0gb3V0cHV0cz8ucHJvZHVjdF91cmxzPy52YWx1ZTtcbiAgICBpZiAobG9hZGJhbGFuY2VyVXJscykge1xuICAgICAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmwgPSBsb2FkYmFsYW5jZXJVcmxzW3Byb2R1Y3RdO1xuICAgICAgICBpZiAobG9hZGJhbGFuY2VyVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGJhbGFuY2VyVXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgaXQgeWV0LCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSAke3Byb2R1Y3R9IGxvYWQgYmFsYW5jZXIgVVJMLCBhcmUgeW91IHN1cmUgdGhlIHByb2R1Y3Qgd2FzIGNvcnJlY3RseSBwcm92aXNpb25lZD9gKTtcbn07XG4iLCJpbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldEVudmlyb25tZW50TmFtZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lJztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vaGVscGVycy9nZXRIb3N0TGljZW5zZSc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucywgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgcHJvdmlzaW9uaW5nIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgYXdhaXQgZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgLy8gQXNrIGZvciB0aGUgbGljZW5zZVxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIExldCdzIGRvIHRoaXNcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcucmVhZHkpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHByb3Zpc2lvbmcgdGhlIEFXUyBlbnZpcm9ubWVudC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrXG4gICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKGRpcmVjdG9yeSwgZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgbGljZW5zZSk7XG4gICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgIGF3YWl0IGluc3RhbGwoZGlyZWN0b3J5KTtcbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgVVJMIGZyb20gdGhlIG91dHB1dHMuanNvblxuICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRDbHVzdGVyVVJMKGRpcmVjdG9yeSwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBSZXR1cm4gYWxsIHRoZSBxdWVzdGlvbnMgd2UgYXNrZWQgdGhlIHVzZXIgZm9yIHVzZSBpbiBvdGhlciBzdGVwc1xuICAgIHJldHVybiB7XG4gICAgICAgIGN3ZDogZGlyZWN0b3J5LFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgbGljZW5zZVxuICAgIH07XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCB1cGxvYWRUb1VQTSA9IGFzeW5jIChiYXNlVXJsLCBwYXRoLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/b3NfYXV0aFR5cGU9YmFzaWNgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSB0b2tlbicsIGVycik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlLmhlYWRlcnNbJ3VwbS10b2tlbiddO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGNyZWF0ZVJlYWRTdHJlYW0ocGF0aCkpO1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgICAgIH0gfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJykpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNJywgZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4gZnJvbSBoZWFkZXJzOicsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmhlYWRlcnMsIG51bGwsIDIpKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkID0gYXN5bmMgKGFwcEtleSwgYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ1dhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZCcpO1xuICAgIGxldCBpc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlICghaXNFbmFibGVkICYmIGNvdW50IDwgMTIwKSB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZC4uLiAke2NvdW50fXNgKTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5YCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKCgpID0+ICh7IGRhdGE6IHsgZW5hYmxlZDogZmFsc2UgfSB9KSk7XG4gICAgICAgIGlzRW5hYmxlZCA9IGRhdGE/LmVuYWJsZWQ7XG4gICAgICAgIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBpc0VuYWJsZWQ7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTGljZW5zZSA9IGFzeW5jIChhcHBLZXksIGxpY2Vuc2UsIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+ICh7IGRhdGE6IHt9IH0pKTtcbiAgICBjb25zdCB7IHJhd0xpY2Vuc2UgfSA9IGRhdGE7XG4gICAgaWYgKCFyYXdMaWNlbnNlIHx8IHJhd0xpY2Vuc2UgIT09IGxpY2Vuc2UpIHtcbiAgICAgICAgYXdhaXQgYXhpb3MucHV0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleS9saWNlbnNlYCwgYHsgXCJyYXdMaWNlbnNlXCI6IFwiJHtsaWNlbnNlfVwiIH1gLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJykpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgbGljZW5zZSB0byBVUE0nLCBlcnIpKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGFwcDNob3VyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5jb25zdCBwcm9ncmVzc0JhciA9IG5ldyBTaW5nbGVCYXIoe1xuICAgIGZvcm1hdDogJyAgW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7cmVtYWluaW5nfW0nLFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmNvbnN0IHJvdW5kID0gKHZhbHVlLCBzdGVwKSA9PiB7XG4gICAgc3RlcCB8fCAoc3RlcCA9IDEuMCk7XG4gICAgY29uc3QgaW52ID0gMS4wIC8gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGludikgLyBpbnY7XG59O1xuY29uc3QgZG93bmxvYWQgPSBhc3luYyAoYWRkb25LZXkpID0+IHtcbiAgICBjb25zdCB0bXBEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ3RtcCcpO1xuICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgYWRkb25LZXkpO1xuICAgIG1rZGlyU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9tYXJrZXRwbGFjZS5hdGxhc3NpYW4uY29tL2Rvd25sb2FkL3BsdWdpbnMvJHthZGRvbktleX1gLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhLnBpcGUoY3JlYXRlV3JpdGVTdHJlYW0odG1wRmlsZSkpKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICByZXR1cm4gdG1wRmlsZTtcbn07XG5leHBvcnQgY29uc3QgaW5zdGFsbEFwcCA9IGFzeW5jIChiYXNlVXJsLCBhcHBLZXksIGxpY2Vuc2UgPSBhcHAzaG91ciwgZm9yY2UpID0+IHtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZG93bmxvYWQgaXQgZnJvbSBNUEFDXG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSBuZWVkIGFuIGFwcGtleS4gSWYgdGhpcyBpcyBub3QgcHJvdmlkZWQsIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIGlmICghYXBwS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYXBwIGludG8gY2x1c3RlciwgYGFwcEtleWAgd2FzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FwcEtleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSWApO1xuICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDMwMCwgMCwgeyByZW1haW5pbmc6ICc1bScgfSk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhcHBLZXkpO1xuICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgIGF3YWl0IHVwbG9hZFRvVVBNKGJhc2VVcmwsIGZpbGUsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhcHBLZXksIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxpY2Vuc2UgKHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlKVxuICAgICAgICBhd2FpdCByZWdpc3RlckxpY2Vuc2UoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7YXBwS2V5fSlgKTtcbiAgICAgICAgLy8gSWYgd2UncmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgbGV0J3MgYmUgbmljZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGV5IGhhdmUgb3B0aW9uc1xuICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEl0IGlzIG5vdyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgSmlyYSBjbHVzdGVyLlxuICBXZSBjYW4gaW5zdGFsbCBpdCBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2Ugb3IgeW91IGNhbiBpbnN0YWxsIGl0IG1hbnVhbGx5LlxuYCk7XG4gICAgICAgIC8vIEFzayB0aGVtIGlmIHRoZXkgcHJlZmVyIGF1dG9tYXRpb24gb3IgdGVkaW91cyBtYW51YWwgdGFza3NcbiAgICAgICAgY29uc3QgbWV0aG9kID0gYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBIb3cgZG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgYXBwP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiAnbXBhYycsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFya2V0cGxhY2UnLCB2YWx1ZTogJ21wYWMnIH0sXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFudWFsJywgdmFsdWU6ICdtYW51YWwnIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZXkgY2hvc2UgYXV0b21hdGlvbiwgbGV0J3MgYXV0b21hdGUhXG4gICAgICAgIGlmIChtZXRob2QgPT09ICdtcGFjJykge1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgYXBwIGtleVxuICAgICAgICAgICAgY29uc3QgYWRkb25LZXkgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSBrZXkgb2YgdGhlIGFwcCB0byBiZSBpbnN0YWxsZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBsaWNlbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBhcmUgc3RhcnRpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgzMDAsIDAsIHsgcmVtYWluaW5nOiAnNW0nIH0pO1xuICAgICAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhZGRvbktleSk7XG4gICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRUb1VQTShiYXNlVXJsLCBmaWxlLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhZGRvbktleSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHByb3ZpZGVkIGxpY2Vuc2VcbiAgICAgICAgICAgIGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhZGRvbktleSwgYXBwTGljZW5zZSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pYCk7XG4gICAgICAgICAgICAvLyBUaGV5IGNob3NlIHZpb2xlbmNlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSdWIgaXQgaW4gdGhlaXIgZmFjZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBZb3UgY2FuIG5vdyBpbnN0YWxsIHRoZSBhcHAgbWFudWFsbHkgaW50byB0aGUgY2x1c3Rlci5cbiAgUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGFnZSAobG9naW4gd2l0aCAnYWRtaW4nLydhZG1pbicpOlxuICAgIFxuICAke2Jhc2VVcmx9L3BsdWdpbnMvc2VydmxldC91cG0/c291cmNlPXNpZGVfbmF2X21hbmFnZV9hZGRvbnNcbmApO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGVtIGdyb3ZlbFxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWRNYW51YWxseSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgYXBwIG1hbnVhbGx5YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGFpbid0IGluc3RhbGxlZCwgd2UgYWluJ3QgZG9pbmcgbm90aGluJy4gU28gd2UgYmV0dGVyIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkTWFudWFsbHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCB0byBydW4gdGhlIHNlY29uZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuZXhwb3J0IGNvbnN0IGdldFJlaW5kZXhQcm9ncmVzcyA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgY29uc3QgY3VycmVudFRhc2sgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApID8gcmVzcG9uc2UuZGF0YSA6IHt9O1xuICAgIGNvbnN0IHsgcHJvZ3Jlc3NVcmwsIGN1cnJlbnRQcm9ncmVzcywgc3VjY2VzcywgZmluaXNoVGltZSB9ID0gY3VycmVudFRhc2s7XG4gICAgY29uc3QgaXNGaW5pc2hlZCA9IGN1cnJlbnRQcm9ncmVzcyA9PT0gMTAwIHx8IHN1Y2Nlc3MgfHwgZmluaXNoVGltZSAhPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtwcm9ncmVzc1VybCwgc3VjY2VzcywgaXNGaW5pc2hlZF07XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IGZraWxsIGZyb20gJ2ZraWxsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBwdXBwZXRlZXIgZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IGdldFJlaW5kZXhQcm9ncmVzcyB9IGZyb20gJy4vZ2V0UmVpbmRleFByb2dyZXNzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIEx1Y2VuZSByZS1pbmRleCBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtyZW1haW5pbmd9bScsXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuZXhwb3J0IGNvbnN0IHJlaW5kZXggPSBhc3luYyAoYmFzZVVybCwgb3V0cHV0RGlyLCBmb3JjZSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IHNjcmVlbnNob3QgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKSkge1xuICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyByZWluZGV4IHJlc3VsdHMnKTtcbiAgICAgICAgICAgIHJtU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBc2sgbmljZWx5IGlmIHdlIGNhbiBzdGFydFxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoYFByZXNzIGFueSBrZXkgdG8gc3RhcnQgdGhlIEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QuLi5cbiAgKG9yICdzJyB0byBza2lwIGlmIHRoZSB0ZXN0IGlzIGFscmVhZHkgcnVubmluZylcbmAsIGZvcmNlKTtcbiAgICAvLyBDaGVjayBpZiB0aGV5IGFncmVlZCB0byBzdGFydGluZyB0aGUgcmVpbmRleFxuICAgIGlmICh2YWx1ZSAhPT0gJ3MnKSB7XG4gICAgICAgIC8vIFRoZXkgZGlkISBTbyBsZXQncyBzdGFydCBpdCB1c2luZyB0aGUgSmlyYSBSRVNUIEFQSVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4P3R5cGU9Rk9SRUdST1VORGAsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgZ290IGEgcHJvcGVyIHJlc3BvbnNlXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZS5zdGF0dXMgIT09IDIwMikge1xuICAgICAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgICAgICAvLyBObyByZWluZGV4IGlzIG5vIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBMdWNlbnNlIEluZGV4IFRpbWluZyB0ZXN0LCBjb3VsZCBub3QgcGVyZm9ybSByZWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU3RhcnQgdGhlIGNsb2NrIVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzcyBiYXIgdG8gY291bnQgZm9yIDYwIG1pbnV0ZXNcbiAgICBwcm9ncmVzc0Jhci5zdGFydCgzNjAwLCAwLCB7IHJlbWFpbmluZzogNjAgfSk7XG4gICAgLy8gUGxhY2Vob2xkZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWluZGV4IGlzIGZpbmlzaGVkXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gdHJ5IHRvIGdldCBhbiB1cGRhdGUgZnJvbSBKaXJhXG4gICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgIC8vIEdldCBhbiB1cGRhdGUgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIGNvbnN0IFtwcm9ncmVzc1VybCwgc3VjY2VzcywgZmluaXNoZWRdID0gYXdhaXQgZ2V0UmVpbmRleFByb2dyZXNzKGJhc2VVcmwpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVpbmRleCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIHdpdGhpbiB0aGUgNjAgbWludXRlIHdpbmRvd1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPCBwcm9ncmVzc0Jhci5nZXRUb3RhbCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlLCBzbyBsZXQncyBqdXN0IGluY3JlbWVudCB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoNjAsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nOiA2MCAtIE1hdGguZmxvb3IoKCgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUpIC8gMTAwMCkgLyA2MCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgMSBtaW51dGUgdW50aWwgd2UgcmV0cnlcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMSAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgaW4gdGhlIDYwIG1pbnV0ZSB3aW5kb3csIG1hbnVhbCBhY3Rpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG9wZXJhdGluZyBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB0aGV5IG5lZWQgdG8gZG8gc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGlzIHRha2luZyBhIGxvbmcgdGltZSB0byBmaW5pc2guIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTFxuICAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybCB8fCAnL3NlY3VyZS9hZG1pbi9qaXJhL0luZGV4UHJvZ3Jlc3MuanNwYSd9XG5cbiAgYW5kIG1hbnVhbGx5IGNvbmZpcm0gdGhhdCB0aGUgcmUtaW5kZXggaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGUgdXNlciB0byBjb25maXJtIHRoZSByZWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGF3YWl0IGNvbmZpcm0oeyBtZXNzYWdlOiAnSGFzIHRoZSByZWluZGV4IGNvbXBsZXRlZCBzdWNjZXNmdWxseT8nIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2UgaGF2ZSBubyBjaG9pY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZS1pbmRleCBoYXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gNjAgbWludXRlcywgdGVzdCBoYXMgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgY29tcGxldGVseSB3cm9uZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGZpbmlzaGVkIHVuc3VjY2VzZnVsbHkuIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTCBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuYCk7XG4gICAgICAgICAgICAvLyBOb3cgdGhyb3cgYSBoaXNzeSBmaXQgYW55d2F5XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0x1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb29wIHZhcmlhYmxlXG4gICAgICAgIGlzRmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsYXRlc3QgdXBkYXRlIG9uIHRoZSByZWluZGV4IHByb2dyZXNzXG4gICAgY29uc3QgW3Byb2dyZXNzVXJsXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgVVJMXG4gICAgaWYgKCFwcm9ncmVzc1VybCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvZ3Jlc3MgVVJMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gUmV0cnkgY291bnRlclxuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNjcmVlbnNob3Qgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgbGV0IHNjcmVlbnNob3RDcmVhdGVkID0gZmFsc2U7XG4gICAgLy8gTG9vcCB1bnRpbCB3ZSd2ZSBtYWRlIGEgc2NyZWVuIHNob3Qgb3IgdHJpZWQgaXQgNSB0aW1lcyAoaW5jbC4gb25lIHRpbWUgbWFudWFsbHkpXG4gICAgd2hpbGUgKCFzY3JlZW5zaG90Q3JlYXRlZCAmJiByZXRyeUNvdW50IDwgNSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJldHJ5IGNvdW50IGlzIDQsIHRoaXMgbWVhbnMgdGhpcyBpcyBvdXIgbGFzdCByb2Rlb1xuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBtYW51YWwsIHdoaWNoIHdlIGNhbid0IGRvIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIG91ciBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSBhIHNjcmVlbiBzaG90IG9mIHRoZSBMdWNlbmUgUmVpbmRleCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFdlJ3ZlIHRyaWVkIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2NyZWVuc2hvdCwgYnV0IHRoZSBwcm9jZXNzIHNlZW1zIHRvIGJlIHN0dWNrXG5cbiAgV2Ugd2lsbCBub3cgb3BlbiBhIGJyb3dzZXIgd2luZG93IGZvciB5b3UgdG8gZm9sbG93IHRoZSBhdXRvbWF0ZWQgc3RlcHMgYW5kIGludGVydmVuZVxuICB3aGVyZSBwb3NzaWJsZSAoZm9yIGluc3RhbmNlLCBieSBwcmVzc2luZyBhIGJ1dHRvbiBvciByZWxvYWRpbmcgYSBzY3JlZW4pXG5gKTtcbiAgICAgICAgICAgICAgICAvLyBOb3cgYXNrIHRoZW0gbmljZWx5IGlmIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gb3BlbiB0aGUgYnJvd3NlciB3aW5kb3cuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBicm93c2VyIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHsgaGVhZGxlc3M6ICghZm9yY2UgJiYgcmV0cnlDb3VudCA8IDQpIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgYnJvd3Nlci5uZXdQYWdlKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5zZXRWaWV3cG9ydCh7IHdpZHRoOiAxMDgwLCBoZWlnaHQ6IDEwMjQgfSk7XG4gICAgICAgICAgICAgICAgLy8gT3BlbiB0aGUgcmVpbmRleCBwcm9ncmVzcyBwYWdlXG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5nb3RvKGAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybH1gKTtcbiAgICAgICAgICAgICAgICAvLyBMb2cgaW5cbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXVzZXJuYW1lJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgLy8gV2Vic3Vkb1xuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tYXV0aGVudGljYXRlUGFzc3dvcmQnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tc3VibWl0JykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAvLyBYU1JGIHRva2VuIGV4cGlyYXRpb24gc25hZnVcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNhdGxfdG9rZW5fcmV0cnlfYnV0dG9uJykuY2xpY2soKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgb24gdGhlIHJlaW5kZXggcGFnZSBhbmQgdGhhdCBpdCBpcyBsb2FkZWRcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLndhaXRGb3JTZWxlY3RvcignI2Fja25vd2xlZGdlX3N1Ym1pdCcpO1xuICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNjcmVlbiBzaG90XG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogam9pbihvdXRwdXREaXIsICdsdWNlbmUtcmVpbmRleC5wbmcnKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgY2FwdHVyZWQgdGhlIHNjcmVlbiBzaG90IGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgc2NyZWVuc2hvdENyZWF0ZWQgPSBleGlzdHNTeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGJyb3dzZXIgd2luZG93XG4gICAgICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIC8vIE5vIEkgbWVhbiwgcmVhbGx5IGNsb3NlIGl0XG4gICAgICAgICAgICAgICAgYXdhaXQgZmtpbGwoJ0Nocm9tZScpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZraWxsKCdjaHJvbWUnKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnQ2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnY2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHNjcmVlbnNob3QsIHRocm93IGEgaGlzc3kgZml0IVxuICAgIGlmICghc2NyZWVuc2hvdENyZWF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FwdHVyZSB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBzaG93IGEgaGFwcHkgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKGBcbiAg4pyUIEx1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZm9yZWdyb3VuZCBpbmRleGluZyBvZiBKaXJhIGhhcyBjb21wbGV0ZWRgKTtcbn07XG4iLCJpbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4vaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcmVpbmRleCB9IGZyb20gJy4vcmVpbmRleCc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBydW5MdWNlbmVUaW1pbmdUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmhlYWRlcihvcHRpb25zLnByb2R1Y3QsIHN0YWdlKSk7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcmVpbmRleGApO1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocnVuT3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSAob3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCAmJiBvcHRpb25zLmF3c19zZWNyZXRfYWNjZXNzX2tleSlcbiAgICAgICAgPyBbb3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCwgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXldXG4gICAgICAgIDogYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHByb3Zpc2lvbmVkIGNsdXN0ZXIgYXZhaWxhYmxlXG4gICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgcHJvdmlzaW9uIGl0IGFzIHBhcnQgb2YgdGhlIHRlc3QgcnVuXG4gICAgaWYgKCFvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3IgcGVyZm9ybWFuY2UgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICAgICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmxpY2Vuc2UsIDEpO1xuICAgICAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsIHx8IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgYXdhaXQgaW5zdGFsbEFwcChiYXNlVXJsLCBvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5hcHBMaWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRlc3RcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFRlc3QpO1xuICAgIC8vIE9rLCB3ZSdyZSByZWFkeSB0byBydW4gdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdFxuICAgIGF3YWl0IHJlaW5kZXgoYmFzZVVybCwgcnVuT3V0cHV0RGlyLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0RHVyYXRpb24gPSAoZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuICc0NW0nO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgSG93IGxvbmcgc2hvdWxkIHRoZSB0ZXN0IHJ1bj9gLFxuICAgICAgICBkZWZhdWx0OiAnNDVtJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVhZExpbmVzSW5GaWxlID0gKHBhdGgsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgbGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlYWRMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzID0gKGJhc2VEaXIpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgIGxldCByZXN1bHRzRGlyID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJykpID8gYmFzZURpciA6IG51bGw7XG4gICAgaWYgKCFyZXN1bHRzRGlyKSB7XG4gICAgICAgIC8vIExldCdzIGdvIGZpbmQgb3VyIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSB0ZXN0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHRlc3QgcmVzdWx0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSB7XG4gICAgICAgICdwYXRoJzogcmVzdWx0c0RpcixcbiAgICAgICAgJ1N1bW1hcnkgcnVuIHN0YXR1cyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnRmluaXNoZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICdDb21wbGlhbnQnOiB1bmRlZmluZWQsXG4gICAgICAgICdTdWNjZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJzogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIHJlc3VsdCBzdW1tYXJ5IGFuZCBnZXQgdGhvc2UgZGFtbiB0ZXN0IHJlc3VsdHNcbiAgICByZWFkTGluZXNJbkZpbGUoam9pbihyZXN1bHRzRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpLCAobGluZSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBsaW5lLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1toZWFkZXJdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlc3VsdHNEaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsIHByb2R1Y3QpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSByZWFkZGlyU3luYyhwYXRoKS5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIG1ha2Ugc3VyZSB0byBhc2sgbmljZWx5IGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXJlIGFyZSBzdGlsbCBwcmV2aW91cyByZXN1bHRzIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZXJlIGFyZSBzdGlsbCByZXN1bHRzIGZyb20gcHJldmlvdXMgdGVzdCBydW5zIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTpcbiAgJHtwYXRofVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBjb25maXJtYXRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSXMgaXQgT0sgaWYgd2UgcmVtb3ZlIGFsbCBwcmV2aW91cyByZXN1bHRzPycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZW0sIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGVzdCBjYW4gb25seSBiZSBleGVjdXRlZCBpZiBhbGwgcHJldmlvdXMgcmVzdWx0cyBoYXZlIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICAgICAgICAgICAgcm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIFJldHVybiB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICByZXR1cm4gcGF0aDtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlcGxhY2VMaW5lc0luRmlsZSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgd2l0aEFwcFNwZWNpZmljQWN0aW9ucywgZm9yY2UpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0VVJJID0gbmV3IFVSTChiYXNlVXJsKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHByb2R1Y3RVUkkucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cHMnKSA/ICdodHRwcycgOiAnaHR0cCc7XG4gICAgY29uc3QgcG9ydCA9IHByb3RvY29sID09PSAnaHR0cCcgPyAnODAnIDogJzQ0Myc7XG4gICAgY29uc29sZS5sb2coYFxuICBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBpbiB0aGUgJHtwcm9kdWN0fS55bWwgZmlsZTpcblxuICBhcHBsaWNhdGlvbl9ob3N0bmFtZSA9ICR7cHJvZHVjdFVSSS5ob3N0fVxuICBhcHBsaWNhdGlvbl9wcm90b2NvbCA9ICR7cHJvdG9jb2x9XG4gIGFwcGxpY2F0aW9uX3BvcnQgPSAke3BvcnR9XG4gIGFwcGxpY2F0aW9uX3Bvc3RmaXggPSAke3Byb2R1Y3RVUkkucGF0aG5hbWV9XG4gIHRlc3RfZHVyYXRpb24gPSAke2R1cmF0aW9ufVxuICBzdGFuZGFsb25lX2V4dGVuc2lvbiA9ICR7d2l0aEFwcFNwZWNpZmljQWN0aW9ucyA/ICcxJyA6ICcwJ31cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7am9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKX1cbmApO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgZm9yY2UpO1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKGN3ZCwgJ2FwcCcsIGAke3Byb2R1Y3R9LnltbGApLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCcgICAgYXBwbGljYXRpb25faG9zdG5hbWU6JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOiAke3Byb2R1Y3RVUkkuaG9zdH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX3Byb3RvY29sOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDogJHtwcm90b2NvbH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIGFwcGxpY2F0aW9uX3BvcnQ6YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX3BvcnQ6ICR7cG9ydH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHN0YW5kYWxvbmVfZXh0ZW5zaW9uOmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjogJHt3aXRoQXBwU3BlY2lmaWNBY3Rpb25zID8gJzEnIDogJzAnfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAgICAgdGVzdF9kdXJhdGlvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgdGVzdF9kdXJhdGlvbjogJHtkdXJhdGlvbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcbuKclCBDb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJHtwcm9kdWN0fS55bWxgKTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZW1wdHlMaW5lIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgaW5zdGFsbCwgcnVuVGVzdCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRDbHVzdGVyVVJMIH0gZnJvbSAnLi9nZXRDbHVzdGVyVVJMJztcbmltcG9ydCB7IGdldER1cmF0aW9uIH0gZnJvbSAnLi9nZXREdXJhdGlvbic7XG5pbXBvcnQgeyBnZXRSZXN1bHRzIH0gZnJvbSAnLi9nZXRSZXN1bHRzJztcbmltcG9ydCB7IGdldFJlc3VsdHNEaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlc3VsdHNEaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBydW5QZXJmb3JtYW5jZVRlc3QgPSBhc3luYyAoc3RhZ2UsIG9wdGlvbnMsIG1lc3NhZ2VzKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFQgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKHN0YWdlKX1gKTtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBydW5cbiAgICBpZiAoZXhpc3RzU3luYyhydW5PdXRwdXREaXIpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMsIGNoZWNrIGlmIHRoZXkgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGdldFJlc3VsdHMocnVuT3V0cHV0RGlyKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gPT09ICdPSycpIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gb3B0aW9ucy5mb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHN1Y2Nlc3NmdWwgdGVzdCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gKG9wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQgJiYgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXkpXG4gICAgICAgID8gW29wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQsIG9wdGlvbnMuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XVxuICAgICAgICA6IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwcm92aXNpb25lZCBjbHVzdGVyIGF2YWlsYWJsZVxuICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIHByb3Zpc2lvbiBpdCBhcyBwYXJ0IG9mIHRoZSB0ZXN0IHJ1blxuICAgIGlmICghb3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZXMucmVhZHlGb3JQcm92aXNpb25pbmcpO1xuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBwcmVwYXJlIHRoZSBBV1MgZW52aXJvbm1lbnQgZm9yIHBlcmZvcm1hbmNlIGJlbmNobWFyayB0ZXN0aW5nLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAvLyBXcml0ZSBUZXJyYWZvcm0gdmFyaWFibGVzIHRvIGRpc2sgKG9uZS1ub2RlIGNsdXN0ZXIpXG4gICAgICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCAxKTtcbiAgICAgICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgICAgICBhd2FpdCBpbnN0YWxsKGN3ZCk7XG4gICAgfVxuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFRlc3QpO1xuICAgIC8vIEdldCB0aGUgbG9hZCBiYWxhbmNlciBVUkwgZm9yIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybCB8fCBhd2FpdCBnZXRDbHVzdGVyVVJMKGN3ZCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBBbGxvdyB1c2VycyB0byBzZXQgYSBkaWZmZXJlbnQgdGVzdCBkdXJhdGlvbiAoZm9yIHZhbGlkYXRpb24gcHVycG9zZXMpXG4gICAgY29uc3QgZHVyYXRpb24gPSBhd2FpdCBnZXREdXJhdGlvbihvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSB0ZXN0IGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgIGF3YWl0IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMucHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlc3VsdHNCYXNlRGlyID0gYXdhaXQgZ2V0UmVzdWx0c0RpcmVjdG9yeShjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBkYW1uIHRlc3RcbiAgICBhd2FpdCBydW5UZXN0KGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKHJlc3VsdHNCYXNlRGlyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVzdCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKHJlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddICE9PSAnT0snKSB7XG4gICAgICAgIC8vIElmIG5vdCwgbGV0IHRoZSBwZW9wbGUga25vdyBhbmQgdGVybWluYXRlXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmZhaWx1cmUoc3RhZ2UsIGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zb2xlLmxvZyhgICBDb3B5aW5nIHRlc3QgcmVzdWx0cyB0byAke3J1bk91dHB1dERpcn1gKTtcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldE5vZGVOdW1iZXJGb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gMjtcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuIDQ7XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsLCBydW5UZXN0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgZ2V0RHVyYXRpb24gfSBmcm9tICcuL2dldER1cmF0aW9uJztcbmltcG9ydCB7IGdldE5vZGVOdW1iZXJGb3JTdGFnZSB9IGZyb20gJy4vZ2V0Tm9kZU51bWJlckZvclN0YWdlJztcbmltcG9ydCB7IGdldFJlc3VsdHMgfSBmcm9tICcuL2dldFJlc3VsdHMnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0c0RpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVzdWx0c0RpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vZ2V0UnVuRm9yU3RhZ2UnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4vaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcnVuU2NhbGFiaWxpdHlUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIEdldCB0aGUgY29ycmVjdCBhbW91bnQgb2Ygbm9kZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhZ2VcbiAgICBjb25zdCBub2RlcyA9IGdldE5vZGVOdW1iZXJGb3JTdGFnZShzdGFnZSk7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBzY2FsYWJpbGl0eSAke3N0YWdlfSBjbHVzdGVyIHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMucmVhZHlGb3JQcm92aXNpb25pbmcpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3Igc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgbm9kZXMpO1xuICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICBhd2FpdCBpbnN0YWxsKGN3ZCk7XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN0YXJ0VGVzdCk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgICBhd2FpdCBpbnN0YWxsQXBwKGJhc2VVcmwsIG9wdGlvbnMuYXBwS2V5LCBvcHRpb25zLmFwcExpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNldCBhIGRpZmZlcmVudCB0ZXN0IGR1cmF0aW9uIChmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcylcbiAgICBjb25zdCBkdXJhdGlvbiA9IGF3YWl0IGdldER1cmF0aW9uKG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIHRlc3QgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgYXdhaXQgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXN1bHRzQmFzZURpciA9IGF3YWl0IGdldFJlc3VsdHNEaXJlY3RvcnkoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgZGFtbiB0ZXN0XG4gICAgYXdhaXQgcnVuVGVzdChjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0gZ2V0UmVzdWx0cyhyZXN1bHRzQmFzZURpcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGlmIChyZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSAhPT0gJ09LJykge1xuICAgICAgICAvLyBJZiBub3QsIGxldCB0aGUgcGVvcGxlIGtub3cgYW5kIHRlcm1pbmF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5mYWlsdXJlKHN0YWdlLCBjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zb2xlLmxvZyhgICBDb3B5aW5nIHRlc3QgcmVzdWx0cyB0byAke3J1bk91dHB1dERpcn1gKTtcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiaW1wb3J0IHsgZW1wdHlMaW5lLCBUZWFyZG93biB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHRlcm1pbmF0ZSB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgdGVhcmRvd25DbHVzdGVyID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IG5pY2UgbGl0dGxlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFRlYXJkb3duLmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIGlmIHRoZXkgYXJlIHJlYWR5IHRvIHNheSBnb29kYnllIHRvIHRoZWlyIGNsdXN0ZXJcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFRlcm1pbmF0ZSBpdCFcbiAgICBhd2FpdCB0ZXJtaW5hdGUoZGlyZWN0b3J5LCBvcHRpb25zLmVudmlyb25tZW50KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgdG8gcXVpdCB0aGUgcHJvZ3JhbVxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGV4aXQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB2ZXJzaW9ucyBmcm9tICcuLi8uLi9hc3NldHMvdmVyc2lvbnMuanNvbic7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzID0gei5lbnVtKFtcbiAgICAncG9zdGdyZXNxbCcsXG4gICAgJ215c3FsJyxcbiAgICAnbXNzcWwnXG5dKTtcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zID0gei5lbnVtKFtcbiAgICAnRGV2ZWxvcGVyJyxcbiAgICAnRXhwcmVzcycsXG4gICAgJ1N0YW5kYXJkJyxcbiAgICAnRW50ZXJwcmlzZScsXG4gICAgJ0VudGVycHJpc2VDb3JlJ1xuXSk7XG5leHBvcnQgY29uc3QgRGF0YWJhc2VPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSksXG4gICAgZGF0YWJhc2U6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICB2ZXJib3NlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKClcbn0pO1xuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCg1NDMyKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpLmRlZmF1bHQoJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNeVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDMzMDYpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm15c3FsLmpkYmMuRHJpdmVyJykuZGVmYXVsdCgnY29tLm15c3FsLmpkYmMuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE1TU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZWRpdGlvbjogU3VwcG9ydGVkTVNTUUxFZGl0aW9ucy5kZWZhdWx0KCdEZXZlbG9wZXInKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgxNDMzKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnc2EnKS5kZWZhdWx0KCdzYScpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ0RhdGFDZW50ZXJEWCEnKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJykuZGVmYXVsdCgnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKVxufSk7XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyB9IGZyb20gJy4vRGF0YWJhc2UnO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyA9IHouZW51bShbXG4gICAgJ2ppcmEnLFxuICAgICdjb25mbHVlbmNlJyxcbiAgICAnYml0YnVja2V0JyxcbiAgICAnYmFtYm9vJ1xuXSk7XG5leHBvcnQgY29uc3QgQXBwbGljYXRpb25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZGF0YWJhc2U6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5kZWZhdWx0KCdwb3N0Z3Jlc3FsJyksXG4gICAgZGF0YWJhc2VUYWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpLmRlZmF1bHQoJzgwJyksXG4gICAgY29udGV4dFBhdGg6IHouc3RyaW5nKCksXG4gICAgeG1zOiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgeG14OiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgd2F0Y2g6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGV4dDogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBpbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHouc3RyaW5nKCksXG4gICAgYWN0aXZhdGVQcm9maWxlczogei5zdHJpbmcoKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRlYnVnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgY29udGV4dFBhdGg6IHRydWUsXG4gICAgZXh0OiB0cnVlLFxuICAgIGluc3RhbGw6IHRydWUsXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB0cnVlLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHRydWUsXG4gICAgY3dkOiB0cnVlXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi9BcHBsaWNhdGlvbic7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2VUZXN0VHlwZXMgPSB6LmVudW0oW1xuICAgICdiYXNlbGluZScsXG4gICAgJ3JlZ3Jlc3Npb24nXG5dKTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RUeXBlcyA9IHouZW51bShbXG4gICAgJ29uZS1ub2RlJyxcbiAgICAndHdvLW5vZGUnLFxuICAgICdmb3VyLW5vZGUnXG5dKTtcbmV4cG9ydCBjb25zdCBUZXN0UmVzdWx0cyA9IHouZW51bShbXG4gICAgJ3BhdGgnLFxuICAgICdTdW1tYXJ5IHJ1biBzdGF0dXMnLFxuICAgICdBcHBsaWNhdGlvbiBub2RlcyBjb3VudCcsXG4gICAgJ0ZpbmlzaGVkJyxcbiAgICAnQ29tcGxpYW50JyxcbiAgICAnU3VjY2VzcycsXG4gICAgJ0hhcyBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbl0pO1xuZXhwb3J0IGNvbnN0IFJlcG9ydFR5cGVzID0gei5lbnVtKFtcbiAgICAncGVyZm9ybWFuY2UnLFxuICAgICdzY2FsYWJpbGl0eSdcbl0pO1xuZXhwb3J0IGNvbnN0IEFQVFJlcG9ydEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogUmVwb3J0VHlwZXMsXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUVGVzdE1lc3NhZ2VzID0gei5vYmplY3Qoe1xuICAgIGhlYWRlcjogei5mdW5jdGlvbigpLmFyZ3MoU3VwcG9ydGVkQXBwbGljYXRpb25zLCBQZXJmb3JtYW5jZVRlc3RUeXBlcy5vcihTY2FsYWJpbGl0eVRlc3RUeXBlcykpLnJldHVybnMoei5zdHJpbmcoKSksXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IHouc3RyaW5nKCksXG4gICAgc3RhcnRUZXN0OiB6LnN0cmluZygpLFxuICAgIHN1Y2Nlc3M6IHouc3RyaW5nKCksXG4gICAgZmFpbHVyZTogei5mdW5jdGlvbigpLmFyZ3MoUGVyZm9ybWFuY2VUZXN0VHlwZXMub3IoU2NhbGFiaWxpdHlUZXN0VHlwZXMpLCB6LnN0cmluZygpLCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIHouc3RyaW5nKCksIHouc3RyaW5nKCksIHoucmVjb3JkKFRlc3RSZXN1bHRzLCB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpKSlcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFByb3Zpc2lvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBlbnZpcm9ubWVudDogdHJ1ZSxcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgb3V0cHV0RGlyOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBiYXNlVXJsOiB6LnN0cmluZygpLFxuICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiB6LnN0cmluZygpLFxuICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYmFzZVVybDogdHJ1ZSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bkFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogei5zdHJpbmcoKSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVEFyZ3MgPSB6LmludGVyc2VjdGlvbihBUFRQcm92aXNpb25PcHRpb25zLCBBUFRQZXJmb3JtYW5jZVRlc3RBcmdzLCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzKTtcbiIsImltcG9ydCB7IFBlcmZvcm1hbmNlVGVzdFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvRENBUFQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4vaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0JztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4vaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4vaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuTHVjZW5lVGltaW5nVGVzdCc7XG5pbXBvcnQgeyBydW5QZXJmb3JtYW5jZVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBMdWNlbmVUaW1pbmdUZXN0LCBSdW4xLCBSdW4yIH0gZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2UgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IG91dHB1dERpciA9IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApO1xuICAgIC8vIFByb3Zpc2lvbiB0aGUgY2x1c3RlclxuICAgIGNvbnN0IHsgY3dkLCBlbnZpcm9ubWVudCwgYmFzZVVybCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSwgbGljZW5zZSB9ID0gYXdhaXQgcHJvdmlzaW9uQ2x1c3Rlcih7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgdHJ1ZSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSB0ZXN0IChydW4gMSlcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLmJhc2VsaW5lLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFJ1bjEpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgbHVjZW5lIHRpbWluZyB0ZXN0IChwYXJ0IG9mIHJ1biAyKVxuICAgIGF3YWl0IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgTHVjZW5lVGltaW5nVGVzdCk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QgKHJ1biAyKVxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbiwge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBSdW4yKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0XG4gICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCh7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuL2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuL2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyB9IGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKTtcbiAgICAvLyBQcm92aXNpb24gdGhlIGNsdXN0ZXJcbiAgICBjb25zdCB7IGN3ZCwgZW52aXJvbm1lbnQsIGxpY2Vuc2UgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIGZhbHNlKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ29uZS1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIHR3by1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ3R3by1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHNjYWxhYmlsaXR5IHJlcG9ydFxuICAgIGF3YWl0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQoe1xuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBhc3luY0V4aXRIb29rLCBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5leHBvcnQgY29uc3QgQWN0aW9uSGFuZGxlciA9IGFzeW5jIChwcm9ncmFtLCB7IGFjdGlvbiwgZXJyb3JIYW5kbGVyIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBvcHMgPSBvcHRpb25zIHx8IHByb2dyYW0ub3B0cygpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBhc3luY0V4aXRIb29rKGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGVycm9ySGFuZGxlcihvcHMpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSByZWplY3RpbmcgdGhlIHByb21pc2UgdG8gYXZvaWQgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIFwiQ2FsbGluZyBwcm9jZXNzLmV4aXRcIiBsb2cgbWVzc2FnZSBmcm9tIGV4aXQtaG9va1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyO1xuICAgICAgICAgICAgICAgIHJlamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgd2FpdDogNjAgKiAxICogMTAwMFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uKG9wcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBncmFjZWZ1bEV4aXQoMCk7XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5pc3N1ZXMuZm9yRWFjaChpc3N1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgVW5hYmxlIHRvIHBhcnNlIG9wdGlvbiAke2lzc3VlLnBhdGguam9pbignLCcpfTogJHtpc3N1ZS5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVyci50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDEpO1xuICAgICAgICB9KTtcbiAgICB9KS5jYXRjaChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLFxuICAgICAgICAgICAgLy8gd2UgY2FuIGFzc3VtZSBhIGNsZWFuIGV4aXRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFByb2R1Y3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZXRQcm9kdWN0JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuLi9hcHQvaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5MdWNlbmVUaW1pbmdUZXN0JztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdCc7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5TY2FsYWJpbGl0eVRlc3QnO1xuaW1wb3J0IHsgdGVhcmRvd25DbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9hcHQvaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IGVtcHR5TGluZSwgZ2VuZXJpYywgaW5pdCwgTHVjZW5lVGltaW5nVGVzdCwgUnVuMSwgUnVuMiwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMgfSBmcm9tICcuLi9hcHQvbWVzc2FnZXMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2UgfSBmcm9tICcuLi9hcHQvcGVyZm9ybWFuY2UnO1xuaW1wb3J0IHsgU2NhbGFiaWxpdHkgfSBmcm9tICcuLi9hcHQvc2NhbGFiaWxpdHknO1xuaW1wb3J0IHsgQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL2hlbHBlcnMvQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgeyB0aW1lYm9tYiB9IGZyb20gJy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMvQXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VUZXN0VHlwZXMsIFJlcG9ydFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvRENBUFQnO1xuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kZXIoKTtcbmNvbnN0IERlZmF1bHRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHRoZSBjb25zb2xlIGFuZCBzaG93IGEgd2VsY29tZSBtZXNzYWdlXG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXHgxQmMnKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2VuZXJpYy5oZWFkZXIpO1xuICAgICAgICAvLyBHZXQgdGhlIHByb2R1Y3QgZnJvbSB0aGUgYXJncyBvciBhc2sgZm9yIGl0IG5pY2VseVxuICAgICAgICBjb25zdCBwcm9kdWN0ID0gb3B0aW9ucy5wcm9kdWN0IHx8IGF3YWl0IGdldFByb2R1Y3QoKTtcbiAgICAgICAgLy8gU2hvdyB0aGUgaW5pdCBtZXNzYWdlXG4gICAgICAgIGNvbnNvbGUubG9nKGluaXQuaGVhZGVyKHByb2R1Y3QpKTtcbiAgICAgICAgLy8gQXNrIGZvciB0aGUgdXNlciB0byBjb25maXJtIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFBlcmZvcm1hbmNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IHByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBTdGFydCB0aGUgc2NhbGFiaWxpdHkgdGVzdGluZ1xuICAgICAgICBhd2FpdCBTY2FsYWJpbGl0eSh7XG4gICAgICAgICAgICBwcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSZXBvcnRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUgPT09ICdwZXJmb3JtYW5jZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0KHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFBlcmZvcm1hbmNlVGVzdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmdcbiAgICAgICAgYXdhaXQgUGVyZm9ybWFuY2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW4xQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLmJhc2VsaW5lLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF1cbiAgICAgICAgfSwgUnVuMSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjJDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbiwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiB0aW1lYm9tYltvcHRpb25zLnByb2R1Y3RdXG4gICAgICAgIH0sIFJ1bjIpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSZWluZGV4Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5MdWNlbmVUaW1pbmdUZXN0KFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5yZWdyZXNzaW9uLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF1cbiAgICAgICAgfSwgTHVjZW5lVGltaW5nVGVzdCk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFNjYWxhYmlsaXR5VGVzdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW4zQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ29uZS1ub2RlJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiB0aW1lYm9tYltvcHRpb25zLnByb2R1Y3RdLFxuICAgICAgICB9LCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgndHdvLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuNUNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdmb3VyLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0sIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUHJvdmlzaW9uQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBwcm92aXNpb25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0sIHRydWUpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBUZWFyZG93bkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggYXB0JylcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKHRydWUpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdkZWZhdWx0JywgeyBpc0RlZmF1bHQ6IHRydWUsIGhpZGRlbjogdHJ1ZSB9KVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgRGVmYXVsdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwZXJmb3JtYW5jZScpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFBlcmZvcm1hbmNlVGVzdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdzY2FsYWJpbGl0eScpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IHNjYWxhYmlsaXR5IHRlc3QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBTY2FsYWJpbGl0eVRlc3RDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncmVpbmRleCcpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJlaW5kZXhDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncmVwb3J0JylcbiAgICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIGEgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgcmVwb3J0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHlwZSA8dHlwZT4nLCAnVGhlIHR5cGUgb2YgcmVwb3J0IHRvIGdlbmVyYXRlJykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFJlcG9ydFR5cGVzLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUmVwb3J0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjEnKVxuICAgIC5kZXNjcmlwdGlvbignU3RhcnQgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIFBlcmZvcm1hbmNlIGJhc2VsaW5lIHRlc3QgKHJ1biAxKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW4xQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjInKVxuICAgIC5kZXNjcmlwdGlvbignU3RhcnQgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCAocnVuIDIpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjJDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMycpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgU2NhbGFiaWxpdHkgdGVzdCBvbiBhIG9uZS1ub2RlIERDIGNsdXN0ZXIgKHJ1biAzKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW4zQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjQnKVxuICAgIC5kZXNjcmlwdGlvbignU3RhcnQgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIFNjYWxhYmlsaXR5IHRlc3Qgb24gYSB0d28tbm9kZSBEQyBjbHVzdGVyIChydW4gNCknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuNENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW41JylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBTY2FsYWJpbGl0eSB0ZXN0IG9uIGEgZm91ci1ub2RlIERDIGNsdXN0ZXIgKHJ1biA1KScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW41Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdQcm92aXNpb24gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGNsdXN0ZXIgb24gQVdTJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBQcm92aXNpb25Db21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgndGVhcmRvd24nKVxuICAgIC5kZXNjcmlwdGlvbignVGVybWluYXRlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgVGVhcmRvd25Db21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpLmNhdGNoKCgpID0+IGdyYWNlZnVsRXhpdCgxKSk7XG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFJlY2VpdmVkIHRlcm0gc2lnbmFsLCB0cnlpbmcgdG8gc3RvcCBncmFjZWZ1bGx5IPCfkqpgKTtcbiAgICBncmFjZWZ1bEV4aXQo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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQk0sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWTtBQUNoQixJQUFJLE9BQU87QUFDWCxJQUFJLE9BQU87QUFDWCxDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sc0JBQXNCLEdB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